react-bootstrap-table-ng 4.18.0-beta1 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +1 -1
  2. package/dist/react-bootstrap-table-ng.css +144 -0
  3. package/dist/react-bootstrap-table-ng.js +3 -0
  4. package/dist/react-bootstrap-table-ng.js.LICENSE.txt +5 -0
  5. package/dist/react-bootstrap-table-ng.min.css +1 -0
  6. package/dist/react-bootstrap-table-ng.min.js +3 -0
  7. package/dist/react-bootstrap-table-ng.min.js.LICENSE.txt +5 -0
  8. package/lib/index.d.ts +631 -0
  9. package/lib/index.js +41 -0
  10. package/lib/index.js.map +1 -0
  11. package/lib/src/body.d.ts +25 -0
  12. package/lib/src/body.js +175 -0
  13. package/lib/src/body.js.map +1 -0
  14. package/lib/src/bootstrap-table.d.ts +67 -0
  15. package/lib/src/bootstrap-table.js +185 -0
  16. package/lib/src/bootstrap-table.js.map +1 -0
  17. package/lib/src/caption.d.ts +7 -0
  18. package/lib/src/caption.js +28 -0
  19. package/lib/src/caption.js.map +1 -0
  20. package/lib/src/cell-event-delegater.d.ts +7 -0
  21. package/lib/src/cell-event-delegater.js +71 -0
  22. package/lib/src/cell-event-delegater.js.map +1 -0
  23. package/lib/src/cell.d.ts +29 -0
  24. package/lib/src/cell.js +146 -0
  25. package/lib/src/cell.js.map +1 -0
  26. package/lib/src/const.d.ts +17 -0
  27. package/lib/src/const.js +23 -0
  28. package/lib/src/const.js.map +1 -0
  29. package/lib/src/contexts/bootstrap.d.ts +6 -0
  30. package/lib/src/contexts/bootstrap.js +16 -0
  31. package/lib/src/contexts/bootstrap.js.map +1 -0
  32. package/lib/src/contexts/column-context.d.ts +20 -0
  33. package/lib/src/contexts/column-context.js +42 -0
  34. package/lib/src/contexts/column-context.js.map +1 -0
  35. package/lib/src/contexts/data-context.d.ts +35 -0
  36. package/lib/src/contexts/data-context.js +116 -0
  37. package/lib/src/contexts/data-context.js.map +1 -0
  38. package/lib/src/contexts/index.d.ts +84 -0
  39. package/lib/src/contexts/index.js +313 -0
  40. package/lib/src/contexts/index.js.map +1 -0
  41. package/lib/src/contexts/row-expand-context.d.ts +49 -0
  42. package/lib/src/contexts/row-expand-context.js +217 -0
  43. package/lib/src/contexts/row-expand-context.js.map +1 -0
  44. package/lib/src/contexts/selection-context.d.ts +60 -0
  45. package/lib/src/contexts/selection-context.js +199 -0
  46. package/lib/src/contexts/selection-context.js.map +1 -0
  47. package/lib/src/contexts/sort-context.d.ts +78 -0
  48. package/lib/src/contexts/sort-context.js +192 -0
  49. package/lib/src/contexts/sort-context.js.map +1 -0
  50. package/lib/src/filters-cell.d.ts +19 -0
  51. package/lib/src/filters-cell.js +47 -0
  52. package/lib/src/filters-cell.js.map +1 -0
  53. package/lib/src/filters.d.ts +14 -0
  54. package/lib/src/filters.js +57 -0
  55. package/lib/src/filters.js.map +1 -0
  56. package/lib/src/footer-cell.d.ts +18 -0
  57. package/lib/src/footer-cell.js +122 -0
  58. package/lib/src/footer-cell.js.map +1 -0
  59. package/lib/src/footer.d.ts +12 -0
  60. package/lib/src/footer.js +45 -0
  61. package/lib/src/footer.js.map +1 -0
  62. package/lib/src/header-cell.d.ts +66 -0
  63. package/lib/src/header-cell.js +184 -0
  64. package/lib/src/header-cell.js.map +1 -0
  65. package/lib/src/header.d.ts +18 -0
  66. package/lib/src/header.js +94 -0
  67. package/lib/src/header.js.map +1 -0
  68. package/lib/src/props-resolver/column-resolver.d.ts +52 -0
  69. package/lib/src/props-resolver/column-resolver.js +53 -0
  70. package/lib/src/props-resolver/column-resolver.js.map +1 -0
  71. package/lib/src/props-resolver/index.d.ts +58 -0
  72. package/lib/src/props-resolver/index.js +64 -0
  73. package/lib/src/props-resolver/index.js.map +1 -0
  74. package/lib/src/props-resolver/remote-resolver.d.ts +60 -0
  75. package/lib/src/props-resolver/remote-resolver.js +136 -0
  76. package/lib/src/props-resolver/remote-resolver.js.map +1 -0
  77. package/lib/src/row/aggregate-row.d.ts +34 -0
  78. package/lib/src/row/aggregate-row.js +186 -0
  79. package/lib/src/row/aggregate-row.js.map +1 -0
  80. package/lib/src/row/event-delegater.d.ts +9 -0
  81. package/lib/src/row/event-delegater.js +116 -0
  82. package/lib/src/row/event-delegater.js.map +1 -0
  83. package/lib/src/row/row-pure-content.d.ts +12 -0
  84. package/lib/src/row/row-pure-content.js +174 -0
  85. package/lib/src/row/row-pure-content.js.map +1 -0
  86. package/lib/src/row/row-section.d.ts +7 -0
  87. package/lib/src/row/row-section.js +23 -0
  88. package/lib/src/row/row-section.js.map +1 -0
  89. package/lib/src/row/row-template.d.ts +16 -0
  90. package/lib/src/row/row-template.js +57 -0
  91. package/lib/src/row/row-template.js.map +1 -0
  92. package/lib/src/row/should-updater.d.ts +36 -0
  93. package/lib/src/row/should-updater.js +76 -0
  94. package/lib/src/row/should-updater.js.map +1 -0
  95. package/lib/src/row/simple-row.d.ts +31 -0
  96. package/lib/src/row/simple-row.js +119 -0
  97. package/lib/src/row/simple-row.js.map +1 -0
  98. package/lib/src/row-expand/expand-cell.d.ts +20 -0
  99. package/lib/src/row-expand/expand-cell.js +110 -0
  100. package/lib/src/row-expand/expand-cell.js.map +1 -0
  101. package/lib/src/row-expand/expand-header-cell-consumer.d.ts +8 -0
  102. package/lib/src/row-expand/expand-header-cell-consumer.js +27 -0
  103. package/lib/src/row-expand/expand-header-cell-consumer.js.map +1 -0
  104. package/lib/src/row-expand/expand-header-cell.d.ts +13 -0
  105. package/lib/src/row-expand/expand-header-cell.js +99 -0
  106. package/lib/src/row-expand/expand-header-cell.js.map +1 -0
  107. package/lib/src/row-expand/expand-row.d.ts +14 -0
  108. package/lib/src/row-expand/expand-row.js +81 -0
  109. package/lib/src/row-expand/expand-row.js.map +1 -0
  110. package/lib/src/row-expand/row-consumer.d.ts +4 -0
  111. package/lib/src/row-expand/row-consumer.js +59 -0
  112. package/lib/src/row-expand/row-consumer.js.map +1 -0
  113. package/lib/src/row-selection/row-consumer.d.ts +2 -0
  114. package/lib/src/row-selection/row-consumer.js +62 -0
  115. package/lib/src/row-selection/row-consumer.js.map +1 -0
  116. package/lib/src/row-selection/selection-cell.d.ts +31 -0
  117. package/lib/src/row-selection/selection-cell.js +148 -0
  118. package/lib/src/row-selection/selection-cell.js.map +1 -0
  119. package/lib/src/row-selection/selection-header-cell-consumer.d.ts +6 -0
  120. package/lib/src/row-selection/selection-header-cell-consumer.js +27 -0
  121. package/lib/src/row-selection/selection-header-cell-consumer.js.map +1 -0
  122. package/lib/src/row-selection/selection-header-cell.d.ts +26 -0
  123. package/lib/src/row-selection/selection-header-cell.js +163 -0
  124. package/lib/src/row-selection/selection-header-cell.js.map +1 -0
  125. package/lib/src/sort/caret.d.ts +6 -0
  126. package/lib/src/sort/caret.js +33 -0
  127. package/lib/src/sort/caret.js.map +1 -0
  128. package/lib/src/sort/symbol.d.ts +3 -0
  129. package/lib/src/sort/symbol.js +31 -0
  130. package/lib/src/sort/symbol.js.map +1 -0
  131. package/lib/src/store/expand.d.ts +3 -0
  132. package/lib/src/store/expand.js +53 -0
  133. package/lib/src/store/expand.js.map +1 -0
  134. package/lib/src/store/mutate.d.ts +1 -0
  135. package/lib/src/store/mutate.js +18 -0
  136. package/lib/src/store/mutate.js.map +1 -0
  137. package/lib/src/store/operators.d.ts +19 -0
  138. package/lib/src/store/operators.js +59 -0
  139. package/lib/src/store/operators.js.map +1 -0
  140. package/lib/src/store/rows.d.ts +2 -0
  141. package/lib/src/store/rows.js +22 -0
  142. package/lib/src/store/rows.js.map +1 -0
  143. package/lib/src/store/selection.d.ts +7 -0
  144. package/lib/src/store/selection.js +78 -0
  145. package/lib/src/store/selection.js.map +1 -0
  146. package/lib/src/store/sort.d.ts +2 -0
  147. package/lib/src/store/sort.js +71 -0
  148. package/lib/src/store/sort.js.map +1 -0
  149. package/lib/src/store/type.d.ts +1 -0
  150. package/lib/src/store/type.js +23 -0
  151. package/lib/src/store/type.js.map +1 -0
  152. package/lib/src/types.d.ts +542 -0
  153. package/lib/src/types.js +5 -0
  154. package/lib/src/types.js.map +1 -0
  155. package/lib/src/utils.d.ts +18 -0
  156. package/lib/src/utils.js +100 -0
  157. package/lib/src/utils.js.map +1 -0
  158. package/package.json +2 -2
@@ -0,0 +1,3 @@
1
+ /*! For license information please see react-bootstrap-table-ng.js.LICENSE.txt */
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNg=t(require("react"),require("react-dom")):e.ReactBootstrapTableNg=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={105(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6310);class s extends i.default.Component{constructor(e){super(e),this.nodeRef=i.default.createRef()}render(){const{children:e,expanded:t=!1,onClosed:n,className:r="",...s}=this.props;return i.default.createElement("tr",null,i.default.createElement("td",{className:(0,o.default)("reset-expansion-style",r),...s},i.default.createElement(a.CSSTransition,{appear:!0,in:t,timeout:400,classNames:"row-expand-slide",onExited:n,nodeRef:this.nodeRef},i.default.createElement("div",{ref:this.nodeRef},i.default.createElement("div",{className:"row-expansion-style"},e)))))}}t.default=s},184(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=n(3761);t.default=({order:e})=>{const t=(0,o.default)("react-bootstrap-table-sort-order",{dropup:e===a.SORT_ASC});return i.default.createElement(s.BootstrapContext.Consumer,null,({bootstrap4:n})=>n?i.default.createElement("span",{className:`caret-4-${e}`,"data-testid":"sort-caret"}):i.default.createElement("span",{className:t,"data-testid":"sort-caret"},i.default.createElement("span",{className:"caret"})))}},285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=({content:e=null,colSpan:t=1})=>o.default.createElement("tr",null,o.default.createElement("td",{"data-toggle":"collapse",colSpan:t,className:"react-bs-table-no-data"},e))},286(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(3955));t.default=e=>{const{index:t,column:n,currFilters:r,onExternalFilter:a=()=>{},onFilter:s=()=>{}}=e,{filter:l}=n;let u;const c={},d={};if(c.style=d,n.headerAlign&&(d.textAlign=i.default.isFunction(n.headerAlign)?n.headerAlign(n,t):n.headerAlign),n.filterRenderer){const e=a(n,l?.props.type||"");u=n.filterRenderer(e,n)}else l&&(u=o.default.createElement(l.Filter,{...l.props,filterState:r[n.dataField],onFilter:s,column:n}));return o.default.createElement("th",c,u)}},338(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return class extends e{shouldUpdateByCellEditing(e){return!(!this.props.clickToEdit&&!this.props.dbclickToEdit)&&(e.editingRowIdx===e.rowIndex||this.props.editingRowIdx===e.rowIndex&&null===e.editingRowIdx||this.props.editingRowIdx===e.rowIndex)}shouldUpdatedBySelfProps(e){return this.props.className!==e.className||!o.default.isEqual(this.props.style,e.style)||!o.default.isEqual(this.props.attrs,e.attrs)}shouldUpdateByColumnsForSimpleCheck(e){if(this.props.columns.length!==e.columns.length)return!0;for(let t=0;t<this.props.columns.length;t+=1)if(!o.default.isEqual(this.props.columns[t],e.columns[t]))return!0;return!1}shouldUpdatedByNormalProps(e){return this.props.rowIndex!==e.rowIndex||this.props.editable!==e.editable||!o.default.isEqual(this.props.row,e.row)||this.props.columns.length!==e.columns.length}shouldUpdateChild(e){return this.shouldUpdateByCellEditing(e)||this.shouldUpdatedByNormalProps(e)}shouldRowContentUpdate(e){return this.shouldUpdateChild(e)||this.shouldUpdateByColumnsForSimpleCheck(e)}}};const o=r(n(3955))},355(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRowByRowId=t.matchRow=void 0;const o=r(n(3955));t.matchRow=(e,t)=>n=>o.default.get(n,e)===t;t.getRowByRowId=(e,n,r)=>e.find((0,t.matchRow)(n,r))},629(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(885)),d=s(n(1439)),f=s(n(3955)),p=n(7351),h=s(n(3196)),m=s(n(338));class v extends((0,m.default)((0,p.RowEventDelegater)(l.Component))){constructor(e){super(e),this.clickNum=0,this.shouldUpdateRowContent=!1,this.createClickEventHandler=this.createClickEventHandler.bind(this)}shouldComponentUpdate(e){return this.props.selected!==e.selected||this.props.expanded!==e.expanded||this.props.expandable!==e.expandable||this.props.selectable!==e.selectable||this.props.selectRow.hideSelectColumn!==e.selectRow.hideSelectColumn||this.shouldUpdatedBySelfProps(e)?(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!0):(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),this.shouldUpdateRowContent)}isRenderFunctionColumnInLeft(e=u.INDICATOR_POSITION_LEFT){return e===u.INDICATOR_POSITION_LEFT}render(){const{row:e,columns:t,keyField:n,rowIndex:r,style:o,className:i,attrs:a,selectRow:s,expandRow:u,expanded:p,expandable:m,selected:v,selectable:g,visibleColumnSize:E,tabIndexCell:_,...y}=this.props,b=f.default.get(e,n),{hideSelectColumn:x,selectColumnPosition:C,clickToSelect:O}=s,{showExpandColumn:w,expandColumnPosition:S}=u??{},R=this.delegate({...a});(O||u&&u.renderer)&&(R.onClick=this.createClickEventHandler(R.onClick));let P=r*E+1;const j=[l.default.createElement(h.default,{key:"row",row:e,columns:t,keyField:n,rowIndex:r,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:_?P:-1,...y})];if(!x){const e=l.default.createElement(d.default,{...s,key:"selection-cell",rowKey:b,rowIndex:r,selected:v,disabled:!g,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(C)?j.unshift(e):j.push(e)}if(w){const e=l.default.createElement(c.default,{...u,key:"expand-cell",rowKey:b,rowIndex:r,expanded:p,expandable:m,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(S)?j.unshift(e):j.push(e)}return l.default.createElement("tr",{style:o,className:i,...R},j)}}t.default=v},885(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(){super(...arguments),this.handleClick=e=>{const{rowKey:t,expanded:n,onRowExpand:r,rowIndex:o}=this.props;e.stopPropagation(),r(t,!n,o,e)}}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.expanded!==e.expanded||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex}render(){const{expanded:e,expandable:t,expandColumnRenderer:n,tabIndex:r,rowKey:o}=this.props,i={};return void 0!==r&&-1!==r&&(i.tabIndex=r),s.default.createElement("td",{className:"expand-cell",onClick:this.handleClick,"data-testid":"expand-cell",...i},n?n({expandable:t,expanded:e,rowKey:o}):t?e?"(-)":"(+)":"")}}t.default=l},1031(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=r(n(6032)),l=r(n(1632)),u=r(n(9435)),c=r(n(7701)),d=r(n(5191)),f=r(n(4652)),p=r(n(3955));class h extends((0,f.default)(i.default.Component)){constructor(e){super(e),this.getData=()=>this.visibleRows(),this.validateProps()}componentDidUpdate(e){e.onDataSizeChange&&!e.pagination&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}render(){const{loading:e,overlay:t}=this.props;if(t){const n=t(e);return i.default.createElement(n,null,this.renderTable())}return this.renderTable()}renderTable(){const{columns:e,keyField:t,tabIndexCell:n,id:r,classes:f,bootstrap4:h=!1,striped:m=!1,hover:v=!1,bordered:g=!0,condensed:E=!1,noDataIndication:_=null,caption:y,rowStyle:b,rowClasses:x,wrapperClasses:C,rowEvents:O,selectRow:w={mode:a.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:S={renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:R={mode:null,nonEditableRows:[]},filterPosition:P=a.FILTERS_POSITION_INLINE}=this.props,j=(0,o.default)("react-bootstrap-table",C),N=(0,o.default)("table",{"table-striped":m,"table-hover":v,"table-bordered":g,[h?"table-sm":"table-condensed"]:E},f),D=e.some(e=>e.filter||e.filterRenderer),T=p.default.filter(e,e=>p.default.has(e,"footer")).length>0,I=y&&i.default.createElement(l.default,{bootstrap4:h},y);return i.default.createElement("div",{className:j},i.default.createElement("table",{id:r,className:N},I,i.default.createElement(d.default,{columns:e,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:P}),D&&P!==a.FILTERS_POSITION_INLINE&&i.default.createElement(u.default,{columns:e,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),i.default.createElement(s.default,{className:this.props.bodyClasses,data:this.getData(),keyField:t,tabIndexCell:n,columns:e,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:_,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:x,rowEvents:O}),T&&i.default.createElement(c.default,{data:this.getData(),columns:e,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}t.default=h},1400(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561);t.default=e=>{const{renderContent:t,selectRow:n,expandRow:r,cellEl:a,...s}=e,l=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,u=t()||[];return n&&!0!==n.hideSelectColumn&&(l(n.selectColumnPosition)?u.unshift(o.default.createElement(a,{key:"selection"})):u.push(o.default.createElement(a,{key:"selection"}))),r&&r.showExpandColumn&&(l(r.expandColumnPosition)?u.unshift(o.default.createElement(a,{key:"expansion"})):u.push(o.default.createElement(a,{key:"expansion"}))),o.default.createElement("tr",{...s},u)}},1439(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);class f extends l.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.selected!==e.selected||this.props.disabled!==e.disabled||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex||this.props.selectColumnStyle!==e.selectColumnStyle}handleClick(e){const{mode:t,rowKey:n,selected:r,onRowSelect:o,disabled:i,rowIndex:a=-1}=this.props;if(e.stopPropagation(),i)return;o(n,t===u.ROW_SELECT_SINGLE||!r,a,e)}render(){const{rowKey:e,mode:t,selected:n,disabled:r,tabIndex:o=-1,rowIndex:i,selectionRenderer:a,selectColumnStyle:s}=this.props,u={};return-1!==o&&(u.tabIndex=o),u.style=c.default.isFunction(s)?s({checked:n,disabled:r,rowindex:i,rowkey:e}):s,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:o})=>l.default.createElement("td",{className:"selection-cell",onClick:this.handleClick,"data-testid":"selection-cell",...u},a?a({mode:t,checked:n,disabled:r??!1,rowindex:i,rowkey:e}):l.default.createElement("input",{type:t,checked:n,disabled:r??!1,className:o?"selection-input-4":"",onChange:()=>{}})))}}t.default=f},1590(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getExpandedRows=t.expandableKeys=t.isAnyExpands=void 0;const o=r(n(3955)),i=n(355);t.isAnyExpands=(e,t,n=[])=>{for(let r=0;r<e.length;r+=1){const i=o.default.get(e[r],t);if(void 0!==n.find(e=>e===i))return!0}return!1};t.expandableKeys=(e,t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.getExpandedRows=(e,t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n))},1630(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(6645)),c=s(n(3955)),d=l.default.createContext({expanded:[],isClosing:[],onClosed:()=>{},isAnyExpands:!1,onRowExpand:()=>{},onAllRowExpand:()=>{}});class f extends l.Component{constructor(){super(...arguments),this.state={expanded:this.props.expandRow.expanded||[],isClosing:this.props.expandRow.isClosing||[]},this.onClosed=e=>{this.setState({isClosing:this.state.isClosing.filter(t=>t!==e)})},this.handleRowExpand=(e,t,n,r)=>{const{data:o,keyField:i,expandRow:{onExpand:a,onlyOneExpanding:s,nonExpandable:l}}=this.props;if(l&&c.default.contains(l,e))return;let d=[...this.state.expanded],f=[...this.state.isClosing];if(t?s?(f=f.concat(d),d=[e]):d.push(e):(f.push(e),d=d.filter(t=>t!==e)),a){a(u.default.getRowByRowId(o,i,e),t,n,r)}this.setState(()=>({expanded:d,isClosing:f}))},this.handleAllRowExpand=(e,t)=>{const{data:n,keyField:r,expandRow:{onExpandAll:o,nonExpandable:i}}=this.props,{expanded:a}=this.state;let s;s=t?a.concat(u.default.expandableKeys(n,r,i)):a.filter(e=>void 0===n.find(t=>c.default.get(t,r)===e)),o&&o(t,u.default.getExpandedRows(n,r,s),e),this.setState(()=>({expanded:s}))}}static getDerivedStateFromProps(e,t){const{expandRow:n}=e;if(n){const{nonExpandable:e=[]}=n;let r=[...n.expanded||t.expanded];r=r.filter(t=>!c.default.contains(e,t));const o=t.expanded.reduce((e,t)=>(c.default.contains(r,t)||e.push(t),e),[]);return{expanded:r,isClosing:o}}return t}render(){const{data:e,keyField:t}=this.props;return l.default.createElement(d.Provider,{value:{...this.props.expandRow,nonExpandable:this.props.expandRow.nonExpandable,expanded:this.state.expanded,isClosing:this.state.isClosing,onClosed:this.onClosed,isAnyExpands:u.default.isAnyExpands(e,t,this.state.expanded),onRowExpand:this.handleRowExpand,onAllRowExpand:this.handleAllRowExpand}},this.props.children)}}t.default=()=>({Provider:f,Consumer:d.Consumer})},1632(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=e=>{if(!e.children)return null;return e.bootstrap4?o.default.createElement("caption",{style:{captionSide:"top"}},e.children):o.default.createElement("caption",null,e.children)}},1859(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CellEventDelegater=void 0;const o=r(n(3955)),i=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.CellEventDelegater=e=>class extends e{constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this)}createDefaultEventHandler(e){return t=>{const{column:n,columnIndex:r,index:o}=this.props;e(t,n,void 0!==r?r:o)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{o.default.includes(i,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},1965(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(3761);t.default=()=>o.default.createElement(i.BootstrapContext.Consumer,null,({bootstrap4:e})=>e?o.default.createElement("span",{className:"order-4"}):o.default.createElement("span",{className:"order"},o.default.createElement("span",{className:"dropdown"},o.default.createElement("span",{className:"caret"})),o.default.createElement("span",{className:"dropup"},o.default.createElement("span",{className:"caret"}))))},2190(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;const r=n(6561);t.typeConvert=(e,t)=>e===r.TYPE_STRING?String(t):e===r.TYPE_NUMBER?Number(t):e===r.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===r.TYPE_DATE?new Date(t):t},3196(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(8232)),c=s(n(3955));class d extends l.Component{shouldComponentUpdate(e){return void 0===e.shouldUpdate||e.shouldUpdate}render(){const{row:e,keyField:t,columns:n,rowIndex:r,isEditable:o,editingRowIdx:i,editingColIdx:a,atstart:s,clickToEdit:d,dbclickToEdit:f,EditingCellComponent:p,tabIndexStart:h}=this.props;let m=h;return n?.map((n,v)=>{const{dataField:g}=n,E=c.default.get(e,g);if(r===i&&v===a&&p)return l.default.createElement(p,{key:`${E}-${v}-editing`,row:e,rowIndex:r,column:n,columnIndex:v});let _,y={},b={};if("function"==typeof n.attrs?b={...n.attrs(E,e,r,v)}:"object"==typeof n.attrs&&null!==n.attrs&&(b={...n.attrs}),n.events){const t={...n.events};Object.keys(t).forEach(n=>{const o=t[n];t[n]=(...t)=>o(...t,e,r)}),b={...b,...t}}const x=c.default.isFunction(n.classes)?n.classes(E,e,r,v):n.classes;n.style&&(y=c.default.isFunction(n.style)?n.style(E,e,r,v):n.style,y={...y}),n.title&&(_=c.default.isFunction(n.title)?n.title(E,e,r,v):E,b.title=_),n.align&&(y.textAlign=c.default.isFunction(n.align)?n.align(E,e,r,v):n.align),x&&(b.className=x),c.default.isEmptyObject(y)||(b.style=y);let C=!c.default.isDefined(n.editable)||n.editable;return n.dataField!==t&&o||(C=!1),c.default.isFunction(n.editable)&&(C=n.editable(E,e,r,v)),"number"==typeof h&&-1!==h&&(b.tabIndex=m,m+=1),l.default.createElement(u.default,{key:`${E}-${v}`,row:e,editable:C.toString(),rowindex:r??0,columnindex:v,column:n,atstart:s,clicktoedit:d?d.toString():"false",dbclicktoedit:f?f.toString():"false",...b})})}}t.default=d},3285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i={columns:[],toggles:void 0},a=o.default.createContext(i),s=({columns:e,toggles:t,children:n})=>{let r;return r=t?e.filter(e=>t[e.dataField]):e.filter(e=>!e.hidden),o.default.createElement(a.Provider,{value:{columns:r}},n)};t.default=()=>({Provider:s,Consumer:a.Consumer})},3502(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(7351),c=s(n(3196)),d=s(n(338));class f extends((0,d.default)((0,u.RowEventDelegater)(l.Component))){constructor(){super(...arguments),this.shouldUpdateRowContent=!1}shouldComponentUpdate(e){return this.shouldUpdateRowContent=!1,this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!!this.shouldUpdateRowContent||this.shouldUpdatedBySelfProps(e)}render(){const{editable:e=!0,className:t,style:n={},attrs:r={},visibleColumnSize:o,tabIndexCell:i,...a}=this.props,s=this.delegate(r),u=this.props.rowIndex*o+1;return l.default.createElement("tr",{style:n,className:t,...s},l.default.createElement(c.default,{shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:i?u:-1,...a}))}}t.default=f},3519(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(3955)),c=l.default.createContext({data:[],getData:()=>[]});class d extends l.Component{constructor(e){super(e),this.getData=(e,t,n,r)=>r?r.data:n?n.data:t?t.data:e&&e.data.length<this.props.data.length&&!u.default.isEmpty(Object.keys(e.currFilters))?e.data:this.props.data,this.state={data:e.data}}render(){return l.default.createElement(c.Provider,{value:{data:this.state.data,getData:this.getData}},this.props.children)}}t.default=()=>({Provider:d,Consumer:c.Consumer})},3689(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=t=>i.default.createElement(l.Consumer,null,n=>((t,n)=>{const r=t.value,a=s.default.contains(n.selected,r),l=!n.nonSelectable||!s.default.contains(n.nonSelectable,r),u=s.default.contains(n.nonSelectable,r);let{style:c,className:d}=t;if(a){const e=s.default.isFunction(n.style)?n.style(t.row,t.rowIndex):n.style,r=s.default.isFunction(n.classes)?n.classes(t.row,t.rowIndex):n.classes;c={...c,...e},d=(0,o.default)(d,r)||void 0,n.bgColor&&(c=c||{},c.backgroundColor=s.default.isFunction(n.bgColor)?n.bgColor(t.row,t.rowIndex):n.bgColor)}if(u){const e=s.default.isFunction(n.nonSelectableStyle)?n.nonSelectableStyle(t.row,t.rowIndex):n.nonSelectableStyle,r=s.default.isFunction(n.nonSelectableClasses)?n.nonSelectableClasses(t.row,t.rowIndex):n.nonSelectableClasses;c={...c,...e},d=(0,o.default)(d,r)||void 0}return i.default.createElement(e,{...t,style:c,className:d,selectRow:n,selected:a,selectable:l})})(t,n));return t.displayName="WithSelectionRowConsumer",t};const o=r(n(6942)),i=r(n(5442)),a=n(8145),s=r(n(3955)),l=(0,a.createSelectionContext)()},3742(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.nextOrder=t.sort=void 0;const o=n(6561),i=r(n(3955));function a(e,t){let n;return n="string"==typeof t?t.localeCompare(e):e>t?-1:e<t?1:0,n}t.sort=(e,t,{dataField:n,sortFunc:r,sortValue:s})=>{const l=[...e];return l.sort((e,l)=>{let u,c=i.default.get(e,n),d=i.default.get(l,n);return s?(c=s(c,e),d=s(d,l)):(c=i.default.isDefined(c)?c:"",d=i.default.isDefined(d)?d:""),u=r?r(c,d,t,n,e,l):t===o.SORT_DESC?a(c,d):a(d,c),u}),l};t.nextOrder=(e,{sortOrder:t,sortColumn:n},r=o.SORT_DESC)=>n&&e.dataField===n.dataField?t===o.SORT_DESC?o.SORT_ASC:o.SORT_DESC:r},3761(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BootstrapContext=void 0;const o=r(n(5442));t.BootstrapContext=o.default.createContext({bootstrap4:!0})},3955(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(4523));function i(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}t.default=Object.assign(o.default,{get:function(e,t){const n=e[t];if(null!=n)return n;const r=i(t);let o;try{o=r.reduce((e,t)=>e[t],e)}catch(e){}return o},set:function(e,t,n,r=!1){const o=i(t);let a=0;o.reduce((e,t)=>{if(a+=1,void 0===e[t]){if(!r)throw new Error(`${e}.${t} is undefined`);return e[t]={},e[t]}return a===o.length?(e[t]=n,n):e[t]},e)},isDefined:function(e){return null!=e},isEmptyObject:function(e){if(!o.default.isObject(e))return!1;const t=Object.prototype.hasOwnProperty,n=Object.keys(e);for(let r=0;r<n.length;r+=1)if(t.call(e,n[r]))return!1;return!0},sleep:function(e,t){return setTimeout(()=>e(),t)},debounce:function(e,t,n){let r;return()=>{const o=n&&!r;clearTimeout(r),r=setTimeout(()=>{r=null,n||e.apply(this,arguments)},t||0),o&&e.apply(this,arguments)}},contains:function(e,t){return o.default.includes?o.default.includes(e,t):e.indexOf(t)>-1}})},3997(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}handleCheckBoxClick(e){const{isAnyExpands:t,onAllRowExpand:n}=this.props;n(e,!t)}render(){const{isAnyExpands:e,expandHeaderColumnRenderer:t}=this.props,n={onClick:this.handleCheckBoxClick};return s.default.createElement("th",{className:"expand-cell-header","data-row-selection":!0,...n},t?t({isAnyExpands:e??!1}):e?"(-)":"(+)")}}t.default=l},4130(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedRows=t.unSelectableKeys=t.selectableKeys=t.getSelectionSummary=void 0;const o=r(n(3955)),i=n(355);t.getSelectionSummary=(e=[],t,n=[])=>{let r=e.length>0,i=!0;const a=e.map(e=>o.default.get(e,t));for(let e=0;e<a.length;e+=1){const t=a[e];void 0===n.find(e=>e===t)?r=!1:i=!1}return{allRowsSelected:r,allRowsNotSelected:i}};t.selectableKeys=(e=[],t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.unSelectableKeys=(e,t=[])=>0===t?.length?[]:e.filter(e=>o.default.contains(t,e));t.getSelectedRows=(e=[],t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n)).filter(e=>!!e)},4523(e,t,n){"use strict";n.r(t),n.d(t,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Wn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var r={};n.r(r),n.d(r,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Hn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var o="1.13.7",i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g||Function("return this")()||{},a=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,c=a.slice,d=s.toString,f=s.hasOwnProperty,p="undefined"!=typeof ArrayBuffer,h="undefined"!=typeof DataView,m=Array.isArray,v=Object.keys,g=Object.create,E=p&&ArrayBuffer.isView,_=isNaN,y=isFinite,b=!{toString:null}.propertyIsEnumerable("toString"),x=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],C=Math.pow(2,53)-1;function O(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),o=0;o<n;o++)r[o]=arguments[o+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(o=0;o<t;o++)i[o]=arguments[o];return i[t]=r,e.apply(this,i)}}function w(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function S(e){return null===e}function R(e){return void 0===e}function P(e){return!0===e||!1===e||"[object Boolean]"===d.call(e)}function j(e){return!(!e||1!==e.nodeType)}function N(e){var t="[object "+e+"]";return function(e){return d.call(e)===t}}const D=N("String"),T=N("Number"),I=N("Date"),M=N("RegExp"),F=N("Error"),k=N("Symbol"),A=N("ArrayBuffer");var L=N("Function"),B=i.document&&i.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof B&&(L=function(e){return"function"==typeof e||!1});const U=L,H=N("Object");var K=h&&(!/\[native code\]/.test(String(DataView))||H(new DataView(new ArrayBuffer(8)))),W="undefined"!=typeof Map&&H(new Map),z=N("DataView");const V=K?function(e){return null!=e&&U(e.getInt8)&&A(e.buffer)}:z,q=m||N("Array");function $(e,t){return null!=e&&f.call(e,t)}var X=N("Arguments");!function(){X(arguments)||(X=function(e){return $(e,"callee")})}();const G=X;function Y(e){return!k(e)&&y(e)&&!isNaN(parseFloat(e))}function J(e){return T(e)&&_(e)}function Q(e){return function(){return e}}function Z(e){return function(t){var n=e(t);return"number"==typeof n&&n>=0&&n<=C}}function ee(e){return function(t){return null==t?void 0:t[e]}}const te=ee("byteLength"),ne=Z(te);var re=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const oe=p?function(e){return E?E(e)&&!V(e):ne(e)&&re.test(d.call(e))}:Q(!1),ie=ee("length");function ae(e,t){t=function(e){for(var t={},n=e.length,r=0;r<n;++r)t[e[r]]=!0;return{contains:function(e){return!0===t[e]},push:function(n){return t[n]=!0,e.push(n)}}}(t);var n=x.length,r=e.constructor,o=U(r)&&r.prototype||s,i="constructor";for($(e,i)&&!t.contains(i)&&t.push(i);n--;)(i=x[n])in e&&e[i]!==o[i]&&!t.contains(i)&&t.push(i)}function se(e){if(!w(e))return[];if(v)return v(e);var t=[];for(var n in e)$(e,n)&&t.push(n);return b&&ae(e,t),t}function le(e){if(null==e)return!0;var t=ie(e);return"number"==typeof t&&(q(e)||D(e)||G(e))?0===t:0===ie(se(e))}function ue(e,t){var n=se(t),r=n.length;if(null==e)return!r;for(var o=Object(e),i=0;i<r;i++){var a=n[i];if(t[a]!==o[a]||!(a in o))return!1}return!0}function ce(e){return e instanceof ce?e:this instanceof ce?void(this._wrapped=e):new ce(e)}function de(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,te(e))}ce.VERSION=o,ce.prototype.value=function(){return this._wrapped},ce.prototype.valueOf=ce.prototype.toJSON=ce.prototype.value,ce.prototype.toString=function(){return String(this._wrapped)};var fe="[object DataView]";function pe(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var o=typeof e;return("function"===o||"object"===o||"object"==typeof t)&&he(e,t,n,r)}function he(e,t,n,r){e instanceof ce&&(e=e._wrapped),t instanceof ce&&(t=t._wrapped);var o=d.call(e);if(o!==d.call(t))return!1;if(K&&"[object Object]"==o&&V(e)){if(!V(t))return!1;o=fe}switch(o){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0===+e?1/+e==1/t:+e===+t;case"[object Date]":case"[object Boolean]":return+e===+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t);case"[object ArrayBuffer]":case fe:return he(de(e),de(t),n,r)}var i="[object Array]"===o;if(!i&&oe(e)){if(te(e)!==te(t))return!1;if(e.buffer===t.buffer&&e.byteOffset===t.byteOffset)return!0;i=!0}if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,s=t.constructor;if(a!==s&&!(U(a)&&a instanceof a&&U(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!pe(e[u],t[u],n,r))return!1}else{var c,f=se(e);if(u=f.length,se(t).length!==u)return!1;for(;u--;)if(!$(t,c=f[u])||!pe(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0}function me(e,t){return pe(e,t)}function ve(e){if(!w(e))return[];var t=[];for(var n in e)t.push(n);return b&&ae(e,t),t}function ge(e){var t=ie(e);return function(n){if(null==n)return!1;var r=ve(n);if(ie(r))return!1;for(var o=0;o<t;o++)if(!U(n[e[o]]))return!1;return e!==xe||!U(n[Ee])}}var Ee="forEach",_e=["clear","delete"],ye=["get","has","set"],be=_e.concat(Ee,ye),xe=_e.concat(ye),Ce=["add"].concat(_e,Ee,"has");const Oe=W?ge(be):N("Map"),we=W?ge(xe):N("WeakMap"),Se=W?ge(Ce):N("Set"),Re=N("WeakSet");function Pe(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=e[t[o]];return r}function je(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=[t[o],e[t[o]]];return r}function Ne(e){for(var t={},n=se(e),r=0,o=n.length;r<o;r++)t[e[n[r]]]=n[r];return t}function De(e){var t=[];for(var n in e)U(e[n])&&t.push(n);return t.sort()}function Te(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var o=1;o<r;o++)for(var i=arguments[o],a=e(i),s=a.length,l=0;l<s;l++){var u=a[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}}const Ie=Te(ve),Me=Te(se),Fe=Te(ve,!0);function ke(e){if(!w(e))return{};if(g)return g(e);var t=function(){};t.prototype=e;var n=new t;return t.prototype=null,n}function Ae(e,t){var n=ke(e);return t&&Me(n,t),n}function Le(e){return w(e)?q(e)?e.slice():Ie({},e):e}function Be(e,t){return t(e),e}function Ue(e){return q(e)?e:[e]}function He(e){return ce.toPath(e)}function Ke(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0}function We(e,t,n){var r=Ke(e,He(t));return R(r)?n:r}function ze(e,t){for(var n=(t=He(t)).length,r=0;r<n;r++){var o=t[r];if(!$(e,o))return!1;e=e[o]}return!!n}function Ve(e){return e}function qe(e){return e=Me({},e),function(t){return ue(t,e)}}function $e(e){return e=He(e),function(t){return Ke(t,e)}}function Xe(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,i){return e.call(t,n,r,o,i)}}return function(){return e.apply(t,arguments)}}function Ge(e,t,n){return null==e?Ve:U(e)?Xe(e,t,n):w(e)&&!q(e)?qe(e):$e(e)}function Ye(e,t){return Ge(e,t,1/0)}function Je(e,t,n){return ce.iteratee!==Ye?ce.iteratee(e,t):Ge(e,t,n)}function Qe(e,t,n){t=Je(t,n);for(var r=se(e),o=r.length,i={},a=0;a<o;a++){var s=r[a];i[s]=t(e[s],s,e)}return i}function Ze(){}function et(e){return null==e?Ze:function(t){return We(e,t)}}function tt(e,t,n){var r=Array(Math.max(0,e));t=Xe(t,n,1);for(var o=0;o<e;o++)r[o]=t(o);return r}function nt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}ce.toPath=Ue,ce.iteratee=Ye;const rt=Date.now||function(){return(new Date).getTime()};function ot(e){var t=function(t){return e[t]},n="(?:"+se(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}}const it={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},at=ot(it),st=ot(Ne(it)),lt=ce.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ut=/(.)^/,ct={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},dt=/\\|'|\r|\n|\u2028|\u2029/g;function ft(e){return"\\"+ct[e]}var pt=/^\s*(\w|\$)+\s*$/;function ht(e,t,n){!t&&n&&(t=n),t=Fe({},t,ce.templateSettings);var r=RegExp([(t.escape||ut).source,(t.interpolate||ut).source,(t.evaluate||ut).source].join("|")+"|$","g"),o=0,i="__p+='";e.replace(r,function(t,n,r,a,s){return i+=e.slice(o,s).replace(dt,ft),o=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n";var a,s=t.variable;if(s){if(!pt.test(s))throw new Error("variable is not a bare identifier: "+s)}else i="with(obj||{}){\n"+i+"}\n",s="obj";i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{a=new Function(s,"_",i)}catch(e){throw e.source=i,e}var l=function(e){return a.call(this,e,ce)};return l.source="function("+s+"){\n"+i+"}",l}function mt(e,t,n){var r=(t=He(t)).length;if(!r)return U(n)?n.call(e):n;for(var o=0;o<r;o++){var i=null==e?void 0:e[t[o]];void 0===i&&(i=n,o=r),e=U(i)?i.call(e):i}return e}var vt=0;function gt(e){var t=++vt+"";return e?e+t:t}function Et(e){var t=ce(e);return t._chain=!0,t}function _t(e,t,n,r,o){if(!(r instanceof t))return e.apply(n,o);var i=ke(e.prototype),a=e.apply(i,o);return w(a)?a:i}var yt=O(function(e,t){var n=yt.placeholder,r=function(){for(var o=0,i=t.length,a=Array(i),s=0;s<i;s++)a[s]=t[s]===n?arguments[o++]:t[s];for(;o<arguments.length;)a.push(arguments[o++]);return _t(e,r,this,this,a)};return r});yt.placeholder=ce;const bt=yt,xt=O(function(e,t,n){if(!U(e))throw new TypeError("Bind must be called on a function");var r=O(function(o){return _t(e,r,t,this,n.concat(o))});return r}),Ct=Z(ie);function Ot(e,t,n,r){if(r=r||[],t||0===t){if(t<=0)return r.concat(e)}else t=1/0;for(var o=r.length,i=0,a=ie(e);i<a;i++){var s=e[i];if(Ct(s)&&(q(s)||G(s)))if(t>1)Ot(s,t-1,n,r),o=r.length;else for(var l=0,u=s.length;l<u;)r[o++]=s[l++];else n||(r[o++]=s)}return r}const wt=O(function(e,t){var n=(t=Ot(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=xt(e[r],e)}return e});function St(e,t){var n=function(r){var o=n.cache,i=""+(t?t.apply(this,arguments):r);return $(o,i)||(o[i]=e.apply(this,arguments)),o[i]};return n.cache={},n}const Rt=O(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),Pt=bt(Rt,ce,1);function jt(e,t,n){var r,o,i,a,s=0;n||(n={});var l=function(){s=!1===n.leading?0:rt(),r=null,a=e.apply(o,i),r||(o=i=null)},u=function(){var u=rt();s||!1!==n.leading||(s=u);var c=t-(u-s);return o=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,a=e.apply(o,i),r||(o=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),a};return u.cancel=function(){clearTimeout(r),s=0,r=o=i=null},u}function Nt(e,t,n){var r,o,i,a,s,l=function(){var u=rt()-o;t>u?r=setTimeout(l,t-u):(r=null,n||(a=e.apply(s,i)),r||(i=s=null))},u=O(function(u){return s=this,i=u,o=rt(),r||(r=setTimeout(l,t),n&&(a=e.apply(s,i))),a});return u.cancel=function(){clearTimeout(r),r=i=s=null},u}function Dt(e,t){return bt(t,e)}function Tt(e){return function(){return!e.apply(this,arguments)}}function It(){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}}function Mt(e,t){return function(){if(--e<1)return t.apply(this,arguments)}}function Ft(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}const kt=bt(Ft,2);function At(e,t,n){t=Je(t,n);for(var r,o=se(e),i=0,a=o.length;i<a;i++)if(t(e[r=o[i]],r,e))return r}function Lt(e){return function(t,n,r){n=Je(n,r);for(var o=ie(t),i=e>0?0:o-1;i>=0&&i<o;i+=e)if(n(t[i],i,t))return i;return-1}}const Bt=Lt(1),Ut=Lt(-1);function Ht(e,t,n,r){for(var o=(n=Je(n,r,1))(t),i=0,a=ie(e);i<a;){var s=Math.floor((i+a)/2);n(e[s])<o?i=s+1:a=s}return i}function Kt(e,t,n){return function(r,o,i){var a=0,s=ie(r);if("number"==typeof i)e>0?a=i>=0?i:Math.max(i+s,a):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,o)]===o?i:-1;if(o!=o)return(i=t(c.call(r,a,s),J))>=0?i+a:-1;for(i=e>0?a:s-1;i>=0&&i<s;i+=e)if(r[i]===o)return i;return-1}}const Wt=Kt(1,Bt,Ht),zt=Kt(-1,Ut);function Vt(e,t,n){var r=(Ct(e)?Bt:At)(e,t,n);if(void 0!==r&&-1!==r)return e[r]}function qt(e,t){return Vt(e,qe(t))}function $t(e,t,n){var r,o;if(t=Xe(t,n),Ct(e))for(r=0,o=e.length;r<o;r++)t(e[r],r,e);else{var i=se(e);for(r=0,o=i.length;r<o;r++)t(e[i[r]],i[r],e)}return e}function Xt(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=Array(o),a=0;a<o;a++){var s=r?r[a]:a;i[a]=t(e[s],s,e)}return i}function Gt(e){return function(t,n,r,o){var i=arguments.length>=3;return function(t,n,r,o){var i=!Ct(t)&&se(t),a=(i||t).length,s=e>0?0:a-1;for(o||(r=t[i?i[s]:s],s+=e);s>=0&&s<a;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,Xe(n,o,4),r,i)}}const Yt=Gt(1),Jt=Gt(-1);function Qt(e,t,n){var r=[];return t=Je(t,n),$t(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r}function Zt(e,t,n){return Qt(e,Tt(Je(t)),n)}function en(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(!t(e[a],a,e))return!1}return!0}function tn(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(t(e[a],a,e))return!0}return!1}function nn(e,t,n,r){return Ct(e)||(e=Pe(e)),("number"!=typeof n||r)&&(n=0),Wt(e,t,n)>=0}const rn=O(function(e,t,n){var r,o;return U(t)?o=t:(t=He(t),r=t.slice(0,-1),t=t[t.length-1]),Xt(e,function(e){var i=o;if(!i){if(r&&r.length&&(e=Ke(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})});function on(e,t){return Xt(e,$e(t))}function an(e,t){return Qt(e,qe(t))}function sn(e,t,n){var r,o,i=-1/0,a=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))>a||o===-1/0&&i===-1/0)&&(i=e,a=o)});return i}function ln(e,t,n){var r,o,i=1/0,a=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))<a||o===1/0&&i===1/0)&&(i=e,a=o)});return i}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(e){return e?q(e)?c.call(e):D(e)?e.match(un):Ct(e)?Xt(e,Ve):Pe(e):[]}function dn(e,t,n){if(null==t||n)return Ct(e)||(e=Pe(e)),e[nt(e.length-1)];var r=cn(e),o=ie(r);t=Math.max(Math.min(t,o),0);for(var i=o-1,a=0;a<t;a++){var s=nt(a,i),l=r[a];r[a]=r[s],r[s]=l}return r.slice(0,t)}function fn(e){return dn(e,1/0)}function pn(e,t,n){var r=0;return t=Je(t,n),on(Xt(e,function(e,n,o){return{value:e,index:r++,criteria:t(e,n,o)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")}function hn(e,t){return function(n,r,o){var i=t?[[],[]]:{};return r=Je(r,o),$t(n,function(t,o){var a=r(t,o,n);e(i,t,a)}),i}}const mn=hn(function(e,t,n){$(e,n)?e[n].push(t):e[n]=[t]}),vn=hn(function(e,t,n){e[n]=t}),gn=hn(function(e,t,n){$(e,n)?e[n]++:e[n]=1}),En=hn(function(e,t,n){e[n?0:1].push(t)},!0);function _n(e){return null==e?0:Ct(e)?e.length:se(e).length}function yn(e,t,n){return t in n}const bn=O(function(e,t){var n={},r=t[0];if(null==e)return n;U(r)?(t.length>1&&(r=Xe(r,t[1])),t=ve(e)):(r=yn,t=Ot(t,!1,!1),e=Object(e));for(var o=0,i=t.length;o<i;o++){var a=t[o],s=e[a];r(s,a,e)&&(n[a]=s)}return n}),xn=O(function(e,t){var n,r=t[0];return U(r)?(r=Tt(r),t.length>1&&(n=t[1])):(t=Xt(Ot(t,!1,!1),String),r=function(e,n){return!nn(t,n)}),bn(e,r,n)});function Cn(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function On(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Cn(e,e.length-t)}function wn(e,t,n){return c.call(e,null==t||n?1:t)}function Sn(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[e.length-1]:wn(e,Math.max(0,e.length-t))}function Rn(e){return Qt(e,Boolean)}function Pn(e,t){return Ot(e,t,!1)}const jn=O(function(e,t){return t=Ot(t,!0,!0),Qt(e,function(e){return!nn(t,e)})}),Nn=O(function(e,t){return jn(e,t)});function Dn(e,t,n,r){P(t)||(r=n,n=t,t=!1),null!=n&&(n=Je(n,r));for(var o=[],i=[],a=0,s=ie(e);a<s;a++){var l=e[a],u=n?n(l,a,e):l;t&&!n?(a&&i===u||o.push(l),i=u):n?nn(i,u)||(i.push(u),o.push(l)):nn(o,l)||o.push(l)}return o}const Tn=O(function(e){return Dn(Ot(e,!0,!0))});function In(e){for(var t=[],n=arguments.length,r=0,o=ie(e);r<o;r++){var i=e[r];if(!nn(t,i)){var a;for(a=1;a<n&&nn(arguments[a],i);a++);a===n&&t.push(i)}}return t}function Mn(e){for(var t=e&&sn(e,ie).length||0,n=Array(t),r=0;r<t;r++)n[r]=on(e,r);return n}const Fn=O(Mn);function kn(e,t){for(var n={},r=0,o=ie(e);r<o;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n}function An(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),o=Array(r),i=0;i<r;i++,e+=n)o[i]=e;return o}function Ln(e,t){if(null==t||t<1)return[];for(var n=[],r=0,o=e.length;r<o;)n.push(c.call(e,r,r+=t));return n}function Bn(e,t){return e._chain?ce(t).chain():t}function Un(e){return $t(De(e),function(t){var n=ce[t]=e[t];ce.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),Bn(this,n.apply(ce,e))}}),ce}$t(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=a[e];ce.prototype[e]=function(){var n=this._wrapped;return null!=n&&(t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0]),Bn(this,n)}}),$t(["concat","join","slice"],function(e){var t=a[e];ce.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Bn(this,e)}});const Hn=ce;var Kn=Un(r);Kn._=Kn;const Wn=Kn},4607(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442)),l=n(6561);t.default=(e,t,n)=>{const r={data:[],sortOrder:void 0,onSort:()=>{},sortField:null},o=s.default.createContext(r);class i extends s.Component{constructor(r){super(r),this.state={sortOrder:l.SORT_ASC,sortColumn:{dataField:"id",text:"ID",onSort:()=>{},sortFunc:()=>{}}},this.handleSort=r=>{const o=e.nextOrder(r,this.state,this.props.defaultSortDirection);r.onSort&&r.onSort(r.dataField,o),t()&&n(r.dataField,o),this.setState(()=>({sortOrder:o,sortColumn:r}))};const{defaultSorted:o,defaultSortDirection:i,sort:a}=r;let s,u;o&&o.length>0?(s=o[0].order||i,u=this.initSort(o[0].dataField,s)):a&&a.dataField&&a.order&&(s=a.order,u=this.initSort(a.dataField,s)),this.state={sortOrder:s,sortColumn:u}}componentDidMount(){const{sortOrder:e,sortColumn:r}=this.state;t()&&e&&r&&n(r.dataField,e)}static getDerivedStateFromProps(e,t){const{sort:n,columns:r}=e;return n&&n.dataField&&n.order?{sortOrder:n.order,sortColumn:r.find(e=>e.dataField===n.dataField)}:null}initSort(e,t){const{columns:n}=this.props,r=n.filter(t=>t.dataField===e);let o;return r.length>0&&(o=r[0],o.onSort&&o.onSort(e,t)),o}render(){const{sort:n}=this.props,{sortOrder:r,sortColumn:i}=this.state;let{data:a}=this.props;if(!t()&&i){const t=i.sortFunc?i.sortFunc:n&&n.sortFunc;a=e.sort(a,r,{...i,sortFunc:t})}return s.default.createElement(o.Provider,{value:{data:a,sortOrder:r,onSort:this.handleSort,sortField:i?i.dataField:null}},this.props.children)}}return{Provider:i,Consumer:o.Consumer}}},4652(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(3955)),i=r(n(9603));t.default=e=>class extends((0,i.default)(e)){validateProps(){const{keyField:e}=this.props;if(!e)throw new Error("Please specify a field as key via keyField");if(this.visibleColumnSize(!1)<=0)throw new Error("No visible columns detected")}isEmpty(){return 0===this.props.data.length}visibleRows(){const{data:e,hiddenRows:t,keyField:n}=this.props;return t&&0!==t.length?e.filter(e=>{const r=o.default.get(e,n);return!o.default.contains(t,r)}):e}}},5191(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(8610)),s=r(n(3997)),l=r(n(6572)),u=r(n(7572)),c=r(n(6510));t.default=e=>{const{className:t,columns:n,onSort:r,onFilter:d,sortField:f,sortOrder:p,selectRow:h,expandRow:m,currFilters:v,onExternalFilter:g,filterPosition:E,globalSortCaret:_,wrapperClasses:y}=e;let b=()=>null,x=()=>null;m?.showExpandColumn&&(x=(0,l.default)(s.default)),h&&(b=(0,c.default)(u.default));const C=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,O=n.map((e,t)=>{const n=e.dataField===f,i=e.dataField===f;return o.default.createElement(a.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:p,globalSortCaret:_,isLastSorting:i,onFilter:d,currFilters:v,onExternalFilter:g,filterPosition:E})});return h&&!h.hideSelectColumn&&(C(h.selectColumnPosition)?O.unshift(o.default.createElement(b,{key:"selection"})):O.push(o.default.createElement(b,{key:"selection"}))),m?.showExpandColumn&&(C(m.expandColumnPosition)?O.unshift(o.default.createElement(x,{key:"expansion"})):O.push(o.default.createElement(x,{key:"expansion"}))),o.default.createElement("thead",{className:y},o.default.createElement("tr",{className:t},O))}},5442(t){"use strict";t.exports=e},6003(e){"use strict";e.exports=t},6023(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=r(n(1630)),s=r(n(3955)),l=r(n(105)),u=(0,a.default)();t.default=e=>t=>i.default.createElement(u.Consumer,null,n=>((t,n)=>{if(!n)return[];let r="",a="";const u=t.value,c=s.default.contains(n.expanded,u),d=s.default.contains(n.isClosing,u),f=!n.nonExpandable||!s.default.contains(n.nonExpandable,u);return c&&(r=s.default.isFunction(n.parentClassName)?n.parentClassName(c,t.row,t.rowIndex):n.parentClassName||"",a=s.default.isFunction(n.className)?n.className(c,t.row,t.rowIndex):n.className||""),[i.default.createElement(e,{...t,key:u,expanded:c,expandable:f,expandRow:{...n},className:(0,o.default)(t.className,r)}),c||d?i.default.createElement(l.default,{key:`${u}-expanding`,colSpan:t.visibleColumnSize,expanded:c,onClosed:()=>n.onClosed(u),className:a},n.renderer(t.row,t.rowIndex)):null]})(t,n))},6032(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(6023)),d=s(n(3689)),f=s(n(629)),p=s(n(285)),h=s(n(3502)),m=s(n(3955));class v extends l.Component{constructor(e){super(e);const{keyField:t,cellEdit:n,selectRow:r,expandRow:o}=e;n?.createContext&&(this.EditingCell=n.createEditingCell(m.default,n.options.onStartEdit));let i=h.default;const a=r?.mode!==u.ROW_SELECT_DISABLED,s=!!o.renderer;s&&(i=(0,c.default)(f.default)),a&&(i=(0,d.default)(s?i:f.default)),n?.createContext&&(i=n.withRowLevelCellEdit(i,a,t,m.default)),this.RowComponent=i}render(){const{columns:e,data:t,tabIndexCell:n,keyField:r,isEmpty:o,noDataIndication:i,visibleColumnSize:a,cellEdit:s,selectRow:c,rowStyle:d,rowClasses:f,rowEvents:h,expandRow:v,className:g}=this.props;let E;if(o){const e=m.default.isFunction(i)?i():i;if(!e)return null;E=l.default.createElement(p.default,{content:e,colSpan:a})}else{const o=c?.mode!==u.ROW_SELECT_DISABLED,i=!!v.renderer,p={};s?.createContext&&(p.EditingCellComponent=this.EditingCell),(o||i)&&(p.expandRow=v,p.selectRow=c),E=t.map((t,o)=>{if(t){const i=m.default.get(t,r),u={key:i,row:t,tabIndexCell:n,columns:e,keyField:r,cellEdit:s,value:i,rowIndex:o,visibleColumnSize:a,attrs:h||{},...p};return u.style=m.default.isFunction(d)?d(t,o):d,u.className=m.default.isFunction(f)?f(t,o):f,l.default.createElement(this.RowComponent,{...u})}return null})}return l.default.createElement("tbody",{className:g},E)}}t.default=v},6310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function o(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function s(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>w,ReplaceTransition:()=>I,SwitchTransition:()=>K,Transition:()=>x,TransitionGroup:()=>D,config:()=>f});var l=n(5442),u=n.n(l),c=n(6003),d=n.n(c);const f={disabled:!1},p=u().createContext(null);var h=function(e){return e.scrollTop},m="unmounted",v="exited",g="entering",E="entered",_="exiting",y=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=v,r.appearStatus=g):o=E:o=t.unmountOnExit||t.mountOnEnter?m:v,r.state={status:o},r.nextCallback=null,r}a(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===m?{status:v}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==E&&(t=g):n!==g&&n!==E||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===v&&this.setState({status:m})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;!e&&!n||f.disabled?this.safeSetState({status:E},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:g},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:E},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!f.disabled?(this.props.onExit(r),this.safeSetState({status:_},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:v},function(){e.props.onExited(r)})})})):this.safeSetState({status:v},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===m)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,o(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function b(){}y.contextType=p,y.propTypes={},y.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},y.UNMOUNTED=m,y.EXITED=v,y.ENTERING=g,y.ENTERED=E,y.EXITING=_;const x=y;var C=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=s(n.className,r):n.setAttribute("class",s(n.className&&n.className.baseVal||"",r)));var n,r})},O=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}a(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&C(e,r),o&&C(e,o),i&&C(e,i)},n.render=function(){var e=this.props,t=(e.classNames,o(e,["classNames"]));return u().createElement(x,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);O.defaultProps={classNames:""},O.propTypes={};const w=O;function S(e,t){var n=Object.create(null);return e&&l.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)}),n}function R(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=S(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];s[o[l][r]]=n(u)}s[l]=n(l)}for(r=0;r<i.length;r++)s[i[r]]=n(i[r]);return s}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,l.isValidElement)(a)){var s=i in t,u=i in r,c=t[i],d=(0,l.isValidElement)(c)&&!c.props.in;!u||s&&!d?u||!s||d?u&&s&&(0,l.isValidElement)(c)&&(o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:c.props.in,exit:R(a,"exit",e),enter:R(a,"enter",e)})):o[i]=(0,l.cloneElement)(a,{in:!1}):o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:R(a,"exit",e),enter:R(a,"enter",e)})}}),o}var j=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},N=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,S(n.children,function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:R(e,"appear",n),enter:R(e,"enter",n),exit:R(e,"exit",n)})})):P(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=S(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=o(e,["component","childFactory"]),i=this.state.contextValue,a=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(p.Provider,{value:i},a):u().createElement(p.Provider,{value:i},u().createElement(t,r,a))},t}(u().Component);N.propTypes={},N.defaultProps={component:"div",childFactory:function(e){return e}};const D=N;var T=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}a(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,i=u().Children.toArray(o)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var a=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](a)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=o(e,["children","in"]),i=u().Children.toArray(t),a=i[0],s=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(D,r,n?u().cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(s,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);T.propTypes={};const I=T;var M,F;var k="out-in",A="in-out",L=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},B=((M={})[k]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){n(g,null)})})},M[A]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:L(r,"onEntered",function(){n(g)})})]},M),U=((F={})[k]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:L(t,"onEntered",function(){n(E,u().cloneElement(t,{in:!0}))})})},F[A]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){r(E,u().cloneElement(n,{in:!0}))})}),u().cloneElement(n,{in:!0})]},F),H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:E,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===A?{status:g}:!t.current||(n=t.current,r=e.children,n===r||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,i=o.status,a=o.current,s={children:n,current:a,changeState:this.changeState,status:i};switch(i){case g:e=U[r](s);break;case _:e=B[r](s);break;case E:e=a}return u().createElement(p.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);H.propTypes={},H.defaultProps={mode:k};const K=H},6510(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,n(8145).createSelectionContext)();t.default=e=>t=>o.default.createElement(i.Consumer,null,n=>o.default.createElement(e,{...t,...n}))},6561(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TYPE_DATE=t.TYPE_BOOLEAN=t.TYPE_NUMBER=t.TYPE_STRING=t.INDICATOR_POSITION_RIGHT=t.INDICATOR_POSITION_LEFT=t.SORT_DESC=t.SORT_ASC=t.FILTERS_POSITION_BOTTOM=t.FILTERS_POSITION_TOP=t.FILTERS_POSITION_INLINE=t.CHECKBOX_STATUS_UNCHECKED=t.CHECKBOX_STATUS_CHECKED=t.CHECKBOX_STATUS_INDETERMINATE=t.ROW_SELECT_DISABLED=t.ROW_SELECT_MULTIPLE=t.ROW_SELECT_SINGLE=void 0,t.ROW_SELECT_SINGLE="radio",t.ROW_SELECT_MULTIPLE="checkbox",t.ROW_SELECT_DISABLED="ROW_SELECT_DISABLED",t.CHECKBOX_STATUS_INDETERMINATE="indeterminate",t.CHECKBOX_STATUS_CHECKED="checked",t.CHECKBOX_STATUS_UNCHECKED="unchecked",t.FILTERS_POSITION_INLINE="inline",t.FILTERS_POSITION_TOP="top",t.FILTERS_POSITION_BOTTOM="bottom",t.SORT_ASC="asc",t.SORT_DESC="desc",t.INDICATOR_POSITION_LEFT="left",t.INDICATOR_POSITION_RIGHT="right",t.TYPE_STRING="string",t.TYPE_NUMBER="number",t.TYPE_BOOLEAN="bool",t.TYPE_DATE="date"},6572(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,r(n(1630)).default)();t.default=e=>()=>o.default.createElement(i.Consumer,null,t=>o.default.createElement(e,{...t}))},6645(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(1590)),l=a(n(8476)),u=a(n(355)),c=a(n(4130)),d=a(n(3742)),f=a(n(2190));t.default={...u,...c,...s,...l,...d,...f}},6942(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},7007(e){"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(n,r){function o(n){e.removeListener(t,i),r(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):h(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function h(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function o(i){r.once&&e.removeEventListener(t,o),n(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=h(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},7351(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RowEventDelegater=void 0;const o=n(6561),i=r(n(3955)),a=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.RowEventDelegater=e=>class extends e{constructor(...e){super(...e),this.clickNum=0,this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this),this.createClickEventHandler=this.createClickEventHandler.bind(this)}createClickEventHandler(e){return t=>{const{row:n,selected:r,keyField:a,selectable:s,expandable:l,rowIndex:u,expanded:c,expandRow:d,selectRow:f,DELAY_FOR_DBCLICK:p}=this.props,h=()=>{e&&e(t,n,u);const p=i.default.get(n,a);d&&l&&!d.expandByColumnOnly&&(f.mode!==o.ROW_SELECT_DISABLED&&f.clickToExpand||f.mode===o.ROW_SELECT_DISABLED)&&d.onRowExpand(p,!c,u,t),f.clickToSelect&&s&&f.onRowSelect(p,!r,u,t)};p?(this.clickNum+=1,i.default.debounce(()=>{1===this.clickNum&&h(),this.clickNum=0},p)()):h()}}createDefaultEventHandler(e){return t=>{const{row:n,rowIndex:r}=this.props;e(t,n,r)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{i.default.includes(a,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},7572(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);t.CheckBox=({className:e,checked:t,indeterminate:n})=>l.default.createElement("input",{type:"checkbox",checked:t,className:e,ref:e=>{e&&(e.indeterminate=n)},onChange:()=>{}});class f extends l.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}shouldComponentUpdate(e){const{mode:t,checkedStatus:n}=this.props;return t!==u.ROW_SELECT_SINGLE&&e.checkedStatus!==n}handleCheckBoxClick(e){const{onAllRowsSelect:t,checkedStatus:n}=this.props;t(e,n===u.CHECKBOX_STATUS_CHECKED||n===u.CHECKBOX_STATUS_INDETERMINATE)}render(){const{mode:e,checkedStatus:n,selectionHeaderRenderer:r,hideSelectAll:o,headerColumnStyle:i}=this.props;if(o)return l.default.createElement("th",{"data-row-selection":!0});const a=n===u.CHECKBOX_STATUS_CHECKED,s=n===u.CHECKBOX_STATUS_INDETERMINATE,f={};let p;return(r||e===u.ROW_SELECT_MULTIPLE)&&(f.onClick=this.handleCheckBoxClick),f.style=c.default.isFunction(i)?i(n):i,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:n})=>(r?p=r({mode:e,checked:a,indeterminate:s}):e===u.ROW_SELECT_MULTIPLE&&(p=l.default.createElement(t.CheckBox,{...this.props,checked:a,className:n?"selection-input-4":"",indeterminate:s})),l.default.createElement("th",{className:"selection-cell-header","data-row-selection":!0,...f},p)))}}t.default=f},7701(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(7920)),a=r(n(1400)),s=r(n(3955));t.default=e=>{const{data:t=[],className:n,columns:r=[],selectRow:l,expandRow:u}=e;return o.default.createElement("tfoot",null,o.default.createElement(a.default,{renderContent:function(){return r.map((e,n)=>{if(void 0===e.footer||null===e.footer)return!1;const r=s.default.pluck(t,e.dataField);return o.default.createElement(i.default,{index:n,key:e.dataField,column:e,columnData:r})})},selectRow:l,expandRow:u,className:n,cellEl:"th"}))}},7723(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(n(1031)),s=i(n(9421));t.default=(0,s.default)(a.default),o(n(6561),t)},7920(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(1859),d=s(n(3955));class f extends((0,c.CellEventDelegater)(u.Component)){render(){const{index:e,column:t,columnData:n}=this.props,{footer:r,footerTitle:o,footerAlign:i,footerFormatter:a,footerEvents:s,footerClasses:c,footerStyle:f,footerAttrs:p}=t,h=this.delegate(s),m={...d.default.isFunction(p)?p(t,e):p,...h};let v="";d.default.isString(r)?v=r:d.default.isFunction(r)&&(v=r(n||[],t,e||0));let g={};const E=d.default.isFunction(c)?c(t,e||0):c;f&&(g=d.default.isFunction(f)?f(t,e||0):f,g=g?{...g}:g),o&&(m.title=d.default.isFunction(o)?o(t,e||0):v),i&&(g.textAlign=d.default.isFunction(i)?i(t,e||0):i),E&&(m.className=(0,l.default)(m.className,E)),d.default.isEmptyObject(g)||(m.style=g);const _=a?a(t,e||0,{text:v}):v;return u.default.createElement("th",m,_)}}t.default=f},8145(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionContext=void 0;const l=a(n(5442)),u=s(n(3955)),c=n(6561),d=s(n(6645)),f=n(4130),p=l.default.createContext({});class h extends l.Component{constructor(e){super(e),this.handleRowSelect=(e,t,n,r)=>{const{data:o,keyField:i,selectRow:{mode:a,onSelect:s}}=this.props;let l=[...this.selected],u=!0;if(s){u=s(d.default.getRowByRowId(o,i,e),t,n,r)}!0!==u&&void 0!==u||(a===c.ROW_SELECT_SINGLE?l=[e]:t?l.push(e):l=l.filter(t=>t!==e)),this.selected=l,this.isHandleRowSelect=!0,this.forceUpdate()},this.handleAllRowsSelect=(e,t)=>{const{data:n,keyField:r,selectRow:{onSelectAll:o,nonSelectable:i}}=this.props,{selected:a}=this;let s,l;s=t?a.filter(e=>void 0===n.find(t=>u.default.get(t,r)===e)):a.concat(d.default.selectableKeys(n,r,i)),o&&(l=o(!t,d.default.getSelectedRows(n,r,t?a:s),e),Array.isArray(l)&&(s=l)),this.selected=s,this.isHandleRowSelect=!0,this.forceUpdate()},this.selected=e.selectRow.selected||[],this.isHandleRowSelect=!1}getSelected(){return this.selected}componentDidUpdate(e){this.isHandleRowSelect?this.isHandleRowSelect=!1:e.selectRow&&e.selectRow.selected&&!u.default.isEqual(e.selectRow.selected,this.selected)&&(this.selected=e.selectRow.selected,this.forceUpdate())}render(){const{allRowsSelected:e,allRowsNotSelected:t}=(0,f.getSelectionSummary)(this.props.data,this.props.keyField,this.selected);let n;return n=e?c.CHECKBOX_STATUS_CHECKED:t?c.CHECKBOX_STATUS_UNCHECKED:c.CHECKBOX_STATUS_INDETERMINATE,l.default.createElement(p.Provider,{value:{...this.props.selectRow,selected:this.selected,onRowSelect:this.handleRowSelect,onAllRowsSelect:this.handleAllRowsSelect,allRowsSelected:e,allRowsNotSelected:t,checkedStatus:n}},this.props.children)}}t.createSelectionContext=()=>({Provider:h,Consumer:p.Consumer})},8232(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(1859),c=s(n(3955));class d extends((0,u.CellEventDelegater)(l.Component)){constructor(e){super(e),this.createHandleEditingCell=this.createHandleEditingCell.bind(this)}shouldComponentUpdate(e){let t=!1;return t=e.column.isDummyField?!c.default.isEqual(this.props.row,e.row):c.default.get(this.props.row,this.props.column.dataField)!==c.default.get(e.row,e.column.dataField),!!t||(t=!((!e.column.formatter||c.default.isEqual(this.props.row,e.row))&&this.props.column.hidden===e.column.hidden&&this.props.column.isDummyField===e.column.isDummyField&&this.props.rowindex===e.rowindex&&this.props.columnindex===e.columnindex&&this.props.className===e.className&&this.props.title===e.title&&this.props.editable===e.editable&&this.props.clicktoedit===e.clicktoedit&&this.props.dbclicktoedit===e.dbclicktoedit&&c.default.isEqual(this.props.style,e.style)&&c.default.isEqual(this.props.column.formatExtraData,e.column.formatExtraData)&&c.default.isEqual(this.props.column.events,e.column.events)&&c.default.isEqual(this.props.column.attrs,e.column.attrs)&&this.props.tabIndex===e.tabIndex),t)}createHandleEditingCell(e){return t=>{const{atstart:n,rowindex:r,columnindex:o,clicktoedit:i,dbclicktoedit:a}=this.props;(i||a)&&c.default.isFunction(e)&&e(t),n&&n(r,o)}}render(){const{row:e,column:t,atstart:n,rowindex:r,columnindex:o,editable:i,clicktoedit:a,dbclicktoedit:s,...u}=this.props,{dataField:d,formatter:f,formatExtraData:p}=t,h=this.delegate({...u});let m=t.isDummyField?null:c.default.get(e,d);return f&&(m=t.formatter(m,e,r,p)),"true"===a&&"true"===i?h.onClick=this.createHandleEditingCell(h.onClick):"true"===s&&"true"===i&&(h.onDoubleClick=this.createHandleEditingCell(h.onDoubleClick)),l.default.createElement("td",{...h},"boolean"==typeof m?`${m}`:m)}}t.default=d},8476(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;const o=r(n(3955)),i=n(355);t.editCell=(e,t,n,r,a)=>{const s=(0,i.getRowByRowId)(e,t,n);s&&o.default.set(s,r,a)}},8610(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(6561),d=n(1859),f=s(n(184)),p=s(n(1965)),h=s(n(3955));class m extends((0,d.CellEventDelegater)(u.Component)){render(){const{column:e,index:t,onSort:n,sorting:r,sortOrder:o,isLastSorting:i,onFilter:a,currFilters:s,filterPosition:d,onExternalFilter:m,globalSortCaret:v}=this.props,{text:g,sort:E,sortCaret:_,filter:y,filterRenderer:b,headerTitle:x,headerAlign:C,headerFormatter:O,headerEvents:w,headerClasses:S,headerStyle:R,headerAttrs:P,headerSortingClasses:j,headerSortingStyle:N}=e,D=_||v,T=this.delegate(w),I=h.default.isFunction(P)?P(e,t):P||{},M={...I,...T,tabIndex:h.default.isDefined(I.tabIndex)?I.tabIndex:0};let F,k,A={},L=h.default.isFunction(S)?S(e,t):S;if(R&&(A=h.default.isFunction(R)?R(e,t):R,A=A?{...A}:A),x&&(M.title=h.default.isFunction(x)?x(e,t):g),C&&(A.textAlign=h.default.isFunction(C)?C(e,t):C),E){const a=M.onClick,s=M.onKeyDown;M["aria-label"]=r?`${g} sort ${o}`:`${g} sortable`,M.onKeyUp=t=>{"Enter"===t.key&&(n?.(e),h.default.isFunction(s)&&s(t))},M.onClick=t=>{n?.(e),h.default.isFunction(a)&&a(t)},M.className=(0,l.default)(M.className,"sortable"),r?(F=D?D(o||c.SORT_DESC,e):u.default.createElement(f.default,{order:o}),L=(0,l.default)(L,h.default.isFunction(j)?j(e,o,i,t):j),A={...A,...h.default.isFunction(N)?N(e,o,i,t):N}):F=D?D(void 0,e):u.default.createElement(p.default,null)}if(L&&(M.className=(0,l.default)(M.className,L)),h.default.isEmptyObject(A)||(M.style=A),d===c.FILTERS_POSITION_INLINE)if(b){const t=m?.(e,y?.props.type||"");k=b(t,e)}else y&&(k=u.default.createElement(y.Filter,{...y.props,filterState:s?.[e.dataField],onFilter:a,column:e}));const B=O?O(e,t,{sortElement:F,filterElement:k}):g;return O?u.default.createElement("th",M,B):u.default.createElement("th",M,B,F,k)}}t.default=m},9421(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=r(n(5442)),a=r(n(9459)),s=r(n(6645)),l=r(n(3955)),u=n(3761),c=r(n(3285)),d=r(n(3519)),f=r(n(1630)),p=n(8145),h=r(n(4607));t.default=e=>class extends((0,a.default)(e)){constructor(e){if(super(e),this.DataContext=(0,d.default)(),e.registerExposedAPI){const t=new o.default;t.on("get.table.data",e=>e.result=this.table.getData()),t.on("get.selected.rows",e=>e.result=this.selectionContext.getSelected()),t.on("get.filtered.rows",e=>{this.searchContext?e.result=this.searchContext.getSearched():this.filterContext?e.result=this.filterContext.getFiltered():e.result=this.table.getData()}),e.registerExposedAPI(t)}e.columns.filter(e=>e.sort).length>0&&(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(e=>e.hidden).length>0)&&(this.ColumnContext=(0,c.default)()),e.selectRow&&(this.SelectionContext=(0,p.createSelectionContext)()),e.expandRow&&(this.RowExpandContext=(0,f.default)()),e.cellEdit&&e.cellEdit.createContext&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange)),e.filter&&(this.FilterContext=e.filter.createContext(l.default,this.isRemoteFiltering,this.handleRemoteFilterChange)),e.pagination&&(this.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(this.SearchContext=e.search.searchContext(l.default,this.isRemoteSearch,this.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(l.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(this.remoteEmitter)}componentDidUpdate(e){e.columns.filter(e=>e.sort).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}renderBase(){return(t,n,r,o,a,s)=>i.default.createElement(e,{ref:e=>this.table=e,...this.props,...o,...n,...r,...a,...s,data:t.getData(n,r,o,a)})}renderWithColumnContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.ColumnContext.Provider,{...t,toggles:this.props.columnToggle?this.props.columnToggle.toggles:null},i.default.createElement(this.ColumnContext.Consumer,null,t=>e(n,r,o,a,s,t)))}renderWithSelectionContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.SelectionContext.Provider,{...t,ref:e=>this.selectionContext=e,selectRow:this.props.selectRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithRowExpandContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.RowExpandContext.Provider,{...t,ref:e=>{this.rowExpandContext=e},expandRow:this.props.expandRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithPaginationContext(e){return(t,n,r,o)=>i.default.createElement(this.PaginationContext.Provider,{ref:e=>this.paginationContext=e,pagination:this.props.pagination,data:t.getData(n,r,o),bootstrap4:this.props.bootstrap4,isRemotePagination:this.isRemotePagination,remoteEmitter:this.remoteEmitter,onDataSizeChange:this.props.onDataSizeChange,tableId:this.props.id},i.default.createElement(this.PaginationContext.Consumer,null,i=>e(t,n,r,o,i)))}renderWithSortContext(e,t){return(n,r,o)=>i.default.createElement(this.SortContext.Provider,{...t,ref:e=>this.sortContext=e,defaultSorted:this.props.defaultSorted,defaultSortDirection:this.props.defaultSortDirection,sort:this.props.sort,data:n.getData(r,o)},i.default.createElement(this.SortContext.Consumer,null,t=>e(n,r,o,t)))}renderWithSearchContext(e,t){return(n,r)=>i.default.createElement(this.SearchContext.Provider,{...t,ref:e=>this.searchContext=e,data:n.getData(r),searchText:this.props.search.searchText,dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.SearchContext.Consumer,null,t=>e(n,r,t)))}renderWithFilterContext(e,t){return n=>i.default.createElement(this.FilterContext.Provider,{...t,ref:e=>this.filterContext=e,data:n.getData(),filter:this.props.filter.options||{},dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.FilterContext.Consumer,null,t=>e(n,t)))}renderWithCellEditContext(e,t){return n=>i.default.createElement(this.CellEditContext.Provider,{...t,ref:e=>this.cellEditContext=e,selectRow:this.props.selectRow,cellEdit:this.props.cellEdit,data:n.getData()},e(n))}render(){const{keyField:e,columns:t,bootstrap4:n}=this.props,r={keyField:e,columns:t};let o=this.renderBase();return this.ColumnContext&&(o=this.renderWithColumnContext(o,r)),this.SelectionContext&&(o=this.renderWithSelectionContext(o,r)),this.RowExpandContext&&(o=this.renderWithRowExpandContext(o,r)),this.PaginationContext&&(o=this.renderWithPaginationContext(o)),this.SortContext&&(o=this.renderWithSortContext(o,r)),this.SearchContext&&(o=this.renderWithSearchContext(o,r)),this.FilterContext&&(o=this.renderWithFilterContext(o,r)),this.CellEditContext&&(o=this.renderWithCellEditContext(o,r)),i.default.createElement(u.BootstrapContext.Provider,{value:{bootstrap4:n}},i.default.createElement(this.DataContext.Provider,{...r,data:this.props.data},i.default.createElement(this.DataContext.Consumer,null,o)))}}},9435(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(286)),s=r(n(1400));t.default=e=>{const{columns:t,onFilter:n,currFilters:r,filterPosition:l=i.FILTERS_POSITION_TOP,onExternalFilter:u,className:c,selectRow:d,expandRow:f}=e;return o.default.createElement("tbody",{className:c,style:{display:l===i.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},o.default.createElement(s.default,{renderContent:function(){const e=[];let i=!1;return t.forEach((t,s)=>{e.push(o.default.createElement(a.default,{index:s,key:t.dataField,column:t,currFilters:r,onExternalFilter:u,onFilter:n})),(t.filterRenderer||t.filter)&&(i||(i=!0))}),e},selectRow:d,expandRow:f,cellEl:"td"}))}},9459(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=n(5442),a=r(n(3955));t.default=e=>class extends i.Component{constructor(e){super(e),this.getNewestState=(e={})=>{let t,n,r,o,i,a={};return this.sortContext&&(t=this.sortContext.state.sortOrder,n=this.sortContext.state.sortColumn?this.sortContext.state.sortColumn.dataField:null),this.filterContext&&(a=this.filterContext.currFilters),this.paginationContext&&(r=this.paginationContext.currPage,o=this.paginationContext.currSizePerPage),this.searchContext&&(i=this.props.search.searchText),{sortOrder:t,sortField:n,filters:a,page:r,sizePerPage:o,searchText:i,...e,data:this.props.data}},this.isRemoteSearch=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.search||this.isRemotePagination()},this.isRemotePagination=(e={})=>{const{remote:t}=this.props;return e.result=!0===t||a.default.isObject(t)&&t.pagination,e.result},this.isRemoteFiltering=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.filter||this.isRemotePagination()},this.isRemoteSort=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.sort||this.isRemotePagination()},this.isRemoteCellEdit=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.cellEdit},this.handleRemotePageChange=(e,t)=>{this.props.onTableChange("pagination",this.getNewestState({page:e,sizePerPage:t}))},this.handleRemoteFilterChange=e=>{const t={filters:e};if(this.isRemotePagination()){const e=this.props.pagination.options||{};t.page=a.default.isDefined(e.pageStartIndex)?e.pageStartIndex:1}this.props.onTableChange("filter",this.getNewestState(t))},this.handleRemoteSortChange=(e,t)=>{this.props.onTableChange("sort",this.getNewestState({sortField:e,sortOrder:t}))},this.handleRemoteCellChange=(e,t,n)=>{const r={rowId:e,dataField:t,newValue:n};this.props.onTableChange("cellEdit",this.getNewestState({cellEdit:r}))},this.handleRemoteSearchChange=e=>{this.props.onTableChange("search",this.getNewestState({searchText:e}))},this.remoteEmitter=new o.default,this.remoteEmitter.on("paginationChange",this.handleRemotePageChange),this.remoteEmitter.on("isRemotePagination",this.isRemotePagination)}}},9603(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(5442);t.default=e=>class extends r.Component{visibleColumnSize(e=!0){let t;if(this.props.columnToggle&&this.props.columnToggle.toggles){const e=this.props.columnToggle.toggles;t=Object.keys(e).filter(t=>e[t]).length}else t=this.props.columns.filter(e=>!e.hidden).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(7723)})());
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2Rpc3QvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBQzFCLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxRQUFTLGFBQWNKLEdBQ0wsaUJBQVpDLFFBQ2RBLFFBQStCLHNCQUFJRCxFQUFRRyxRQUFRLFNBQVVBLFFBQVEsY0FFckVKLEVBQTRCLHNCQUFJQyxFQUFRRCxFQUFZLE1BQUdBLEVBQWUsU0FDdkUsQ0FURCxDQVNHTyxLQUFNLENBQUNDLEVBQW1DQyxJLDBLQ1Q3QyxtQkFDQSxhQUNBLFVBVUEsTUFBTUMsVUFBa0IsVUFBTUMsVUFHNUIsV0FBQUMsQ0FBWUMsR0FDVkMsTUFBTUQsR0FDTkUsS0FBS0MsUUFBVSxVQUFNQyxXQUN2QixDQUVBLE1BQUFDLEdBQ0UsTUFBTSxTQUNKQyxFQUFRLFNBQ1JDLEdBQVcsRUFBSyxTQUNoQkMsRUFBUSxVQUNSQyxFQUFZLE1BQ1RDLEdBQ0RSLEtBQUtGLE1BRVQsT0FDRSxrQ0FDRSw4QkFBSVMsV0FBVyxhQUFHLHdCQUF5QkEsTUFBZ0JDLEdBQ3pELHdCQUFDLEVBQUFDLGNBQWEsQ0FDWkMsUUFBTSxFQUNOQyxHQUFJTixFQUNKTyxRQUFTLElBQ1RDLFdBQVcsbUJBQ1hDLFNBQVVSLEVBQ1ZMLFFBQVNELEtBQUtDLFNBRWQsK0JBQUtjLElBQUtmLEtBQUtDLFNBQ2IsK0JBQUtNLFVBQVUsdUJBQXVCSCxNQU1sRCxFQWlCRixVQUFlVCxDLCtKQ2hFZixtQkFDQSxhQUNBLFVBQ0EsVUEwQkEsVUFwQjRDLEVBQUdxQixZQUM3QyxNQUFNQyxHQUFhLGFBQUcsbUNBQW9DLENBQ3hEQyxPQUFRRixJQUFVLEVBQUFHLFdBR3BCLE9BQ0Usd0JBQUMsRUFBQUMsaUJBQWlCQyxTQUFR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QyxHQUFVQSxFQUFPZ2pDLFdBQzdCLElBQU9oakMsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREEyaUMsRUFBb0JsMUIsRUFBRXMxQixFQUFRLENBQUUzd0IsRUFBRzJ3QixJQUM1QkEsR0NMUkosRUFBb0JsMUIsRUFBSSxDQUFDMU4sRUFBU2tqQyxLQUNqQyxJQUFJLElBQUk1OEIsS0FBTzQ4QixFQUNYTixFQUFvQnJZLEVBQUUyWSxFQUFZNThCLEtBQVNzOEIsRUFBb0JyWSxFQUFFdnFCLEVBQVNzRyxJQUM1RW1JLE9BQU9xckIsZUFBZTk1QixFQUFTc0csRUFBSyxDQUFFeXpCLFlBQVksRUFBTS8wQixJQUFLaytCLEVBQVc1OEIsTUNKM0VzOEIsRUFBb0Izc0IsRUFBSSxXQUN2QixHQUEwQixpQkFBZmt0QixXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU90aUMsTUFBUSxJQUFJc1YsU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBT3hPLEdBQ1IsR0FBc0IsaUJBQVh5N0IsT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0F4QlIsRUFBb0JyWSxFQUFJLENBQUNwVyxFQUFLcUcsSUFBVS9MLE9BQU82RixVQUFVRCxlQUFlRSxLQUFLSixFQUFLcUcsR0NDbEZvb0IsRUFBb0IzWSxFQUFLanFCLElBQ0gsb0JBQVh3VyxRQUEwQkEsT0FBTzZzQixhQUMxQzUwQixPQUFPcXJCLGVBQWU5NUIsRUFBU3dXLE9BQU82c0IsWUFBYSxDQUFFdjJCLE1BQU8sV0FFN0QyQixPQUFPcXJCLGVBQWU5NUIsRUFBUyxhQUFjLENBQUU4TSxPQUFPLEtDRjdCODFCLEVBQW9CLEsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3NvcnQvY2FyZXQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy1zZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2ZpbHRlcnMtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvc2hvdWxkLXVwZGF0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9yb3dzLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L2FnZ3JlZ2F0ZS1yb3cudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9ib290c3RyYXAtdGFibGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy10ZW1wbGF0ZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL2V4cGFuZC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jYXB0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwtZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc29ydC9zeW1ib2wudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvdHlwZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctcHVyZS1jb250ZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2NvbHVtbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9zaW1wbGUtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zb3J0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvYm9vdHN0cmFwLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zZWxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2V0dXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc051bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1VuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQm9vbGVhbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190YWdUZXN0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0FycmF5QnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19oYXNPYmplY3RUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc3RyaW5nVGFnQnVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRhVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTmFOLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2hhbGxvd1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldEJ5dGVMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faXNCdWZmZXJMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldExlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc01hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b0J1ZmZlclZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VxdWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19tZXRob2RGaW5nZXJwcmludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNXZWFrTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1dlYWtTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYWlycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludmVydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2Z1bmN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZE93bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZGVlcEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX29wdGltaXplQ2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fYmFzZUl0ZXJhdGVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXBPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ub29wLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RpbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZG9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUVzY2FwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZXNjYXBlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NoYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2V4ZWN1dGVCb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kQWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd3JhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL25lZ2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9hZnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2JlZm9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29uY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maW5kS2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZExhc3RJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRlZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2xhc3RJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRXaGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2VhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlUmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZWplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BsdWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2FtcGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2h1ZmZsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19ncm91cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dyb3VwQnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbmRleEJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY291bnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NpemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fa2V5SW5PYmouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb21pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luaXRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maXJzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Jlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29tcGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kaWZmZXJlbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2l0aG91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuaXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jaHVuay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jaGFpblJlc3VsdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21peGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS1hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXgtZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NvcnQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2hlYWRlci50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvcm93LWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2JvZHkudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9vcGVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZm9vdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9mb290ZXItY2VsbC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvbXV0YXRlLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvaGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZmlsdGVycy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9jb2x1bW4tcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1wiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNjAwM19fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcblxuaW50ZXJmYWNlIEV4cGFuZFJvd1Byb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgb25DbG9zZWQ/OiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbFNwYW46IG51bWJlcjtcbn1cblxuY2xhc3MgRXhwYW5kUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEV4cGFuZFJvd1Byb3BzPiB7XG4gIG5vZGVSZWY6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5kUm93UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5ub2RlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBleHBhbmRlZCA9IGZhbHNlLFxuICAgICAgb25DbG9zZWQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3MoXCJyZXNldC1leHBhbnNpb24tc3R5bGVcIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PlxuICAgICAgICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICAgICAgICBhcHBlYXJcbiAgICAgICAgICAgIGluPXtleHBhbmRlZH1cbiAgICAgICAgICAgIHRpbWVvdXQ9ezQwMH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXM9XCJyb3ctZXhwYW5kLXNsaWRlXCJcbiAgICAgICAgICAgIG9uRXhpdGVkPXtvbkNsb3NlZH1cbiAgICAgICAgICAgIG5vZGVSZWY9e3RoaXMubm9kZVJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHJlZj17dGhpcy5ub2RlUmVmfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3ctZXhwYW5zaW9uLXN0eWxlXCI+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbi8vIEV4cGFuZFJvdy5wcm9wVHlwZXMgPSB7XG4vLyAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbi8vICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBvbkNsb3NlZDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vIH07XG5cbi8vIEV4cGFuZFJvdy5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNoaWxkcmVuOiBudWxsLFxuLy8gICBleHBhbmRlZDogZmFsc2UsXG4vLyAgIG9uQ2xvc2VkOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IEV4cGFuZFJvdztcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTb3J0Q2FyZXRQcm9wcyB7XG4gIG9yZGVyOiBzdHJpbmc7XG59XG5cbmNvbnN0IFNvcnRDYXJldDogUmVhY3QuRkM8U29ydENhcmV0UHJvcHM+ID0gKHsgb3JkZXIgfSkgPT4ge1xuICBjb25zdCBvcmRlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtc29ydC1vcmRlclwiLCB7XG4gICAgZHJvcHVwOiBvcmRlciA9PT0gU09SVF9BU0MsXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PlxuICAgICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGNhcmV0LTQtJHtvcmRlcn1gfSBkYXRhLXRlc3RpZD1cInNvcnQtY2FyZXRcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17b3JkZXJDbGFzc30gZGF0YS10ZXN0aWQ9XCJzb3J0LWNhcmV0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApXG4gICAgICB9XG4gICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydENhcmV0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDIH0gZnJvbSBcInJlYWN0XCI7XG5cbnR5cGUgUm93U2VjdGlvblByb3BzID0ge1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb2xTcGFuPzogbnVtYmVyO1xufTtcblxuY29uc3QgUm93U2VjdGlvbjogRkM8Um93U2VjdGlvblByb3BzPiA9ICh7IGNvbnRlbnQgPSBudWxsLCBjb2xTcGFuID0gMSB9KSA9PiAoXG4gIDx0cj5cbiAgICA8dGRcbiAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgY29sU3Bhbj17IGNvbFNwYW4gfVxuICAgICAgY2xhc3NOYW1lPVwicmVhY3QtYnMtdGFibGUtbm8tZGF0YVwiXG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC90ZD5cbiAgPC90cj5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJvd1NlY3Rpb247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgRmlsdGVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG59XG5cbmludGVyZmFjZSBGaWx0ZXJzQ2VsbFByb3BzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZmlsdGVyUmVuZGVyZXI/OiAoZmlsdGVySGFuZGxlcjogRnVuY3Rpb24sIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZmlsdGVyPzogRmlsdGVyUHJvcHM7XG4gICAgaGVhZGVyQWxpZ24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgfTtcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IEZ1bmN0aW9uO1xufVxuXG5jb25zdCBGaWx0ZXJzQ2VsbDogUmVhY3QuRkM8RmlsdGVyc0NlbGxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjdXJyRmlsdGVycywgb25FeHRlcm5hbEZpbHRlciA9ICgpID0+IHt9LCBvbkZpbHRlciA9ICgpID0+IHt9IH0gPSBwcm9wcztcbiAgY29uc3QgeyBmaWx0ZXIgfSA9IGNvbHVtbjtcblxuICBsZXQgZmlsdGVyRWxtOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnN0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge307XG4gIGNvbnN0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuXG4gIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICBpZiAoY29sdW1uLmhlYWRlckFsaWduKSB7XG4gICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uaGVhZGVyQWxpZ24pXG4gICAgICA/IGNvbHVtbi5oZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyQWxpZ247XG4gIH1cblxuICBpZiAoY29sdW1uLmZpbHRlclJlbmRlcmVyKSB7XG4gICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyPy5wcm9wcy50eXBlIHx8IFwiXCIpO1xuICAgIGZpbHRlckVsbSA9IGNvbHVtbi5maWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciEsIGNvbHVtbik7XG4gIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgZmlsdGVyRWxtID0gKFxuICAgICAgPGZpbHRlci5GaWx0ZXJcbiAgICAgICAgey4uLmZpbHRlci5wcm9wc31cbiAgICAgICAgZmlsdGVyU3RhdGU9e2N1cnJGaWx0ZXJzIVtjb2x1bW4uZGF0YUZpZWxkXX1cbiAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBmaWx0ZXJFbG0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyc0NlbGw7XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSb3dQcm9wcyB7XG4gIGNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBkYmNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGVkaXRpbmdSb3dJZHg/OiBudW1iZXIgfCBudWxsO1xuICBlZGl0aW5nQ29sSWR4PzogbnVtYmVyO1xuICBFZGl0aW5nQ2VsbENvbXBvbmVudD86IGFueTtcbiAgdGFiSW5kZXhTdGFydD86IG51bWJlcjtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbjtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBhdHRycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbHVtbnM/OiBhbnlbXTtcbiAgcm93PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VsZWN0Um93PzogYW55O1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIHZpc2libGVDb2x1bW5TaXplPzogbnVtYmVyO1xuICBrZXlGaWVsZD86IHN0cmluZztcbiAgdmFsdWU/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvd1Nob3VsZFVwZGF0ZXI8VCBleHRlbmRzIG5ldyguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbiAgRXh0ZW5kQmFzZTogVFxuKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIHNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmcobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgaWYgKCEodGhpcy5wcm9wcy5jbGlja1RvRWRpdCB8fCB0aGlzLnByb3BzLmRiY2xpY2tUb0VkaXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBuZXh0UHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICAgICh0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCAmJlxuICAgICAgICAgIG5leHRQcm9wcy5lZGl0aW5nUm93SWR4ID09PSBudWxsKSB8fFxuICAgICAgICB0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgIT09IG5leHRQcm9wcy5jbGFzc05hbWUgfHxcbiAgICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLnN0eWxlLCBuZXh0UHJvcHMuc3R5bGUpIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5hdHRycywgbmV4dFByb3BzLmF0dHJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHVzZSBmb3Igc2ltcGxlLXJvd1xuICAgIHNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucyEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKCFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW5zW2ldLCBuZXh0UHJvcHMuY29sdW1ucyFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggIT09IG5leHRQcm9wcy5jb2x1bW5zIS5sZW5ndGg7XG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlQ2hpbGQobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nKG5leHRQcm9wcykgfHxcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVDaGlsZChuZXh0UHJvcHMpIHx8XG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2sobmV4dFByb3BzKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUm93ID0gKGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IChyb3c6IGFueSkgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkgPT09IGlkO1xuXG5leHBvcnQgY29uc3QgZ2V0Um93QnlSb3dJZCA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IGRhdGEuZmluZChtYXRjaFJvdyhrZXlGaWVsZCwgaWQpKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgRXhwYW5kQ2VsbCBmcm9tIFwiLi4vcm93LWV4cGFuZC9leHBhbmQtY2VsbFwiO1xuaW1wb3J0IFNlbGVjdGlvbkNlbGwgZnJvbSBcIi4uL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGxcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFJvd0FnZ3JlZ2F0b3IgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pKSB7XG4gIGNsaWNrTnVtOiBudW1iZXIgPSAwO1xuICBzaG91bGRVcGRhdGVSb3dDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWQgIT09IG5leHRQcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGFibGUgIT09IG5leHRQcm9wcy5leHBhbmRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgIT09IG5leHRQcm9wcy5zZWxlY3RhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PVxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uIHx8XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpXG4gICAgKSB7XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcblxuICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQ7XG4gIH1cblxuICBpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHBvc2l0aW9uID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT09IElORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBhdHRycyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGV4cGFuZGVkLFxuICAgICAgZXhwYW5kYWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgIGNvbnN0IHsgaGlkZVNlbGVjdENvbHVtbiwgc2VsZWN0Q29sdW1uUG9zaXRpb24sIGNsaWNrVG9TZWxlY3QgfSA9IHNlbGVjdFJvdztcbiAgICBjb25zdCB7IHNob3dFeHBhbmRDb2x1bW4gPSB1bmRlZmluZWQsIGV4cGFuZENvbHVtblBvc2l0aW9uID0gdW5kZWZpbmVkIH0gPVxuICAgICAgZXhwYW5kUm93ID8/IHt9O1xuXG4gICAgY29uc3QgbmV3QXR0cnMgPSB0aGlzLmRlbGVnYXRlKHsgLi4uYXR0cnMgfSk7XG4gICAgaWYgKGNsaWNrVG9TZWxlY3QgfHwgKGV4cGFuZFJvdyAmJiAhIWV4cGFuZFJvdy5yZW5kZXJlcikpIHtcbiAgICAgIG5ld0F0dHJzLm9uQ2xpY2sgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKG5ld0F0dHJzLm9uQ2xpY2spO1xuICAgIH1cblxuICAgIGxldCB0YWJJbmRleFN0YXJ0ID0gcm93SW5kZXghICogdmlzaWJsZUNvbHVtblNpemUhICsgMTtcblxuICAgIGNvbnN0IGNoaWxkcmVucyA9IFtcbiAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICBrZXk9XCJyb3dcIlxuICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAga2V5RmllbGQ9e2tleUZpZWxkfVxuICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICB0YWJJbmRleFN0YXJ0PXt0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTF9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz4sXG4gICAgXTtcblxuICAgIGlmICghaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgY29uc3Qgc2VsZWN0Q2VsbCA9IChcbiAgICAgICAgPFNlbGVjdGlvbkNlbGxcbiAgICAgICAgICB7Li4uc2VsZWN0Um93fVxuICAgICAgICAgIGtleT1cInNlbGVjdGlvbi1jZWxsXCJcbiAgICAgICAgICByb3dLZXk9e2tleX1cbiAgICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0YWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChzZWxlY3RDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKHNlbGVjdENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICBjb25zdCBleHBhbmRDZWxsID0gKFxuICAgICAgICA8RXhwYW5kQ2VsbFxuICAgICAgICAgIHsuLi5leHBhbmRSb3d9XG4gICAgICAgICAga2V5PVwiZXhwYW5kLWNlbGxcIlxuICAgICAgICAgIHJvd0tleT17a2V5fVxuICAgICAgICAgIHJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChleHBhbmRDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKGV4cGFuZENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLm5ld0F0dHJzfT5cbiAgICAgICAge2NoaWxkcmVuc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3dBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgTW91c2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRXhwYW5kQ2VsbFByb3BzIHtcbiAgcm93S2V5OiBhbnk7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBvblJvd0V4cGFuZDogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGV4cGFuZGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgZTogTW91c2VFdmVudFxuICApID0+IHZvaWQ7XG4gIGV4cGFuZENvbHVtblJlbmRlcmVyPzogKHBhcmFtczoge1xuICAgIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgcm93S2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuZENlbGxQcm9wcz4ge1xuICBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IHJvd0tleSwgZXhwYW5kZWQsIG9uUm93RXhwYW5kLCByb3dJbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIG9uUm93RXhwYW5kKHJvd0tleSwgIWV4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gIH07XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogRXhwYW5kQ2VsbFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLnJvd0tleSAhPT0gbmV4dFByb3BzLnJvd0tleSB8fFxuICAgICAgdGhpcy5wcm9wcy50YWJJbmRleCAhPT0gbmV4dFByb3BzLnRhYkluZGV4O1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGV4cGFuZGVkLCBleHBhbmRhYmxlLCBleHBhbmRDb2x1bW5SZW5kZXJlciwgdGFiSW5kZXgsIHJvd0tleSB9ID1cbiAgICAgIHRoaXMucHJvcHM7XG4gICAgY29uc3QgYXR0cnM6IHsgdGFiSW5kZXg/OiBudW1iZXIgfSA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhYkluZGV4ICE9PSAtMSkgYXR0cnMudGFiSW5kZXggPSB0YWJJbmRleDtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgY2xhc3NOYW1lPVwiZXhwYW5kLWNlbGxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBkYXRhLXRlc3RpZD1cImV4cGFuZC1jZWxsXCIgey4uLmF0dHJzfT5cbiAgICAgICAge2V4cGFuZENvbHVtblJlbmRlcmVyXG4gICAgICAgICAgPyBleHBhbmRDb2x1bW5SZW5kZXJlcih7XG4gICAgICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICByb3dLZXlcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogZXhwYW5kYWJsZVxuICAgICAgICAgICAgPyBleHBhbmRlZFxuICAgICAgICAgICAgICA/IFwiKC0pXCJcbiAgICAgICAgICAgICAgOiBcIigrKVwiXG4gICAgICAgICAgICA6IFwiXCJ9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQge1xuICBCb290c3RyYXBUYWJsZVByb3BzLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbn0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBCb2R5IGZyb20gXCIuL2JvZHlcIjtcbmltcG9ydCBDYXB0aW9uIGZyb20gXCIuL2NhcHRpb25cIjtcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4vZm9vdGVyXCI7XG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2hlYWRlclwiO1xuaW1wb3J0IFByb3BzQmFzZVJlc29sdmVyIGZyb20gXCIuL3Byb3BzLXJlc29sdmVyXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIFByb3BzQmFzZVJlc29sdmVyKFxuICBSZWFjdC5Db21wb25lbnQ8Qm9vdHN0cmFwVGFibGVQcm9wcz5cbikge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSAmJiAhbmV4dFByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgbmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UoeyBkYXRhU2l6ZTogdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBFeHBvc2VkIEFQSXNcbiAgZ2V0RGF0YSA9ICgpID0+IHRoaXMudmlzaWJsZVJvd3MoKTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBsb2FkaW5nLCBvdmVybGF5IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvdmVybGF5KSB7XG4gICAgICBjb25zdCBMb2FkaW5nT3ZlcmxheSA9IG92ZXJsYXkobG9hZGluZyEpO1xuICAgICAgcmV0dXJuIDxMb2FkaW5nT3ZlcmxheT57dGhpcy5yZW5kZXJUYWJsZSgpfTwvTG9hZGluZ092ZXJsYXk+O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICB9XG5cbiAgcmVuZGVyVGFibGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgaWQsXG4gICAgICBjbGFzc2VzLFxuICAgICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgICAgc3RyaXBlZCA9IGZhbHNlLFxuICAgICAgaG92ZXIgPSBmYWxzZSxcbiAgICAgIGJvcmRlcmVkID0gdHJ1ZSxcbiAgICAgIGNvbmRlbnNlZCA9IGZhbHNlLFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbiA9IG51bGwsXG4gICAgICBjYXB0aW9uLFxuICAgICAgcm93U3R5bGUsXG4gICAgICByb3dDbGFzc2VzLFxuICAgICAgd3JhcHBlckNsYXNzZXMsXG4gICAgICByb3dFdmVudHMsXG4gICAgICBzZWxlY3RSb3cgPSB7XG4gICAgICAgIG1vZGU6IFJPV19TRUxFQ1RfRElTQUJMRUQsXG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgaGlkZVNlbGVjdENvbHVtbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBleHBhbmRSb3cgPSB7XG4gICAgICAgIHJlbmRlcmVyOiB1bmRlZmluZWQsXG4gICAgICAgIGV4cGFuZGVkOiBbXSxcbiAgICAgICAgbm9uRXhwYW5kYWJsZTogW10sXG4gICAgICB9LFxuICAgICAgY2VsbEVkaXQgPSB7XG4gICAgICAgIG1vZGU6IG51bGwsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogW10sXG4gICAgICB9LFxuICAgICAgZmlsdGVyUG9zaXRpb24gPSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHRhYmxlV3JhcHBlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGVcIiwgd3JhcHBlckNsYXNzZXMpO1xuXG4gICAgY29uc3QgdGFibGVDbGFzcyA9IGNzKFxuICAgICAgXCJ0YWJsZVwiLFxuICAgICAge1xuICAgICAgICBcInRhYmxlLXN0cmlwZWRcIjogc3RyaXBlZCxcbiAgICAgICAgXCJ0YWJsZS1ob3ZlclwiOiBob3ZlcixcbiAgICAgICAgXCJ0YWJsZS1ib3JkZXJlZFwiOiBib3JkZXJlZCxcbiAgICAgICAgW2Jvb3RzdHJhcDQgPyBcInRhYmxlLXNtXCIgOiBcInRhYmxlLWNvbmRlbnNlZFwiXTogY29uZGVuc2VkLFxuICAgICAgfSxcbiAgICAgIGNsYXNzZXNcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRmlsdGVycyA9IGNvbHVtbnMuc29tZShcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpbHRlciB8fCBjb2wuZmlsdGVyUmVuZGVyZXJcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRm9vdGVyID1cbiAgICAgIF8uZmlsdGVyKGNvbHVtbnMsIChjb2wpID0+IF8uaGFzKGNvbCwgXCJmb290ZXJcIikpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCB0YWJsZUNhcHRpb24gPSBjYXB0aW9uICYmIChcbiAgICAgIDxDYXB0aW9uIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9PntjYXB0aW9ufTwvQ2FwdGlvbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJsZVdyYXBwZXJDbGFzc30+XG4gICAgICAgIDx0YWJsZSBpZD17aWR9IGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgICAge3RhYmxlQ2FwdGlvbn1cbiAgICAgICAgICA8SGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmhlYWRlckNsYXNzZXN9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Nlcz17dGhpcy5wcm9wcy5oZWFkZXJXcmFwcGVyQ2xhc3Nlc31cbiAgICAgICAgICAgIHNvcnRGaWVsZD17dGhpcy5wcm9wcy5zb3J0RmllbGR9XG4gICAgICAgICAgICBzb3J0T3JkZXI9e3RoaXMucHJvcHMuc29ydE9yZGVyfVxuICAgICAgICAgICAgb25Tb3J0PXt0aGlzLnByb3BzLm9uU29ydH1cbiAgICAgICAgICAgIGdsb2JhbFNvcnRDYXJldD17dGhpcy5wcm9wcy5zb3J0ICYmIHRoaXMucHJvcHMuc29ydC5zb3J0Q2FyZXR9XG4gICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5wcm9wcy5vbkZpbHRlcn1cbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzPXt0aGlzLnByb3BzLmN1cnJGaWx0ZXJzfVxuICAgICAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17dGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIGZpbHRlclBvc2l0aW9uPXtmaWx0ZXJQb3NpdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtoYXNGaWx0ZXJzICYmIGZpbHRlclBvc2l0aW9uICE9PSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSAmJiAoXG4gICAgICAgICAgICA8RmlsdGVyc1xuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuZmlsdGVyc0NsYXNzZXN9XG4gICAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgIG9uRmlsdGVyPXt0aGlzLnByb3BzLm9uRmlsdGVyfVxuICAgICAgICAgICAgICBjdXJyRmlsdGVycz17dGhpcy5wcm9wcy5jdXJyRmlsdGVyc31cbiAgICAgICAgICAgICAgZmlsdGVyUG9zaXRpb249e3RoaXMucHJvcHMuZmlsdGVyUG9zaXRpb259XG4gICAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e3RoaXMucHJvcHMub25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxCb2R5XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuYm9keUNsYXNzZXN9XG4gICAgICAgICAgICBkYXRhPXt0aGlzLmdldERhdGEoKX1cbiAgICAgICAgICAgIGtleUZpZWxkPXtrZXlGaWVsZH1cbiAgICAgICAgICAgIHRhYkluZGV4Q2VsbD17dGFiSW5kZXhDZWxsfVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGlzRW1wdHk9e3RoaXMuaXNFbXB0eSgpfVxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblNpemU9e3RoaXMudmlzaWJsZUNvbHVtblNpemUoKX1cbiAgICAgICAgICAgIG5vRGF0YUluZGljYXRpb249e25vRGF0YUluZGljYXRpb259XG4gICAgICAgICAgICBjZWxsRWRpdD17Y2VsbEVkaXR9XG4gICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgcm93U3R5bGU9e3Jvd1N0eWxlfVxuICAgICAgICAgICAgcm93Q2xhc3Nlcz17cm93Q2xhc3Nlc31cbiAgICAgICAgICAgIHJvd0V2ZW50cz17cm93RXZlbnRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2hhc0Zvb3RlciAmJiAoXG4gICAgICAgICAgICA8Rm9vdGVyXG4gICAgICAgICAgICAgIGRhdGE9e3RoaXMuZ2V0RGF0YSgpfVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5mb290ZXJDbGFzc2VzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kUm93IHtcbiAgc2hvd0V4cGFuZENvbHVtbj86IGJvb2xlYW47XG4gIGV4cGFuZENvbHVtblBvc2l0aW9uPzogc3RyaW5nO1xuICBub25FeHBhbmRhYmxlPzogYW55W107XG59XG5cbmludGVyZmFjZSBSb3dUZW1wbGF0ZVByb3BzIHtcbiAgcmVuZGVyQ29udGVudDogKCkgPT4gYW55O1xuICBjZWxsRWw6IHN0cmluZztcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93O1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEZvciBhbnkgb3RoZXIgcHJvcHMgeW91IG1pZ2h0IGhhdmVcbn1cblxuY29uc3QgUm93VGVtcGxhdGU6IFJlYWN0LkZDPFJvd1RlbXBsYXRlUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmVuZGVyQ29udGVudCwgc2VsZWN0Um93LCBleHBhbmRSb3csIGNlbGxFbCwgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChcbiAgICBwb3NpdGlvbjogc3RyaW5nID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlRcbiAgKTogYm9vbGVhbiA9PiBwb3NpdGlvbiA9PT0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ7XG5cbiAgY29uc3QgY2hpbGRyZW5zID0gcmVuZGVyQ29udGVudCgpIHx8IFtdO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gIT09IHRydWUpIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RSb3cuc2VsZWN0Q29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRSb3cgJiYgZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRSb3cuZXhwYW5kQ29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiA8dHIgey4uLnJlc3R9PntjaGlsZHJlbnN9PC90cj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3dUZW1wbGF0ZTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJPV19TRUxFQ1RfU0lOR0xFIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTZWxlY3Rpb25DZWxsUHJvcHMge1xuICBtb2RlPzogc3RyaW5nO1xuICByb3dLZXk6IGFueTtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9uUm93U2VsZWN0PzogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBNb3VzZUV2ZW50XG4gICkgPT4gdm9pZDtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByb3dJbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICBzZWxlY3Rpb25SZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHJvd2luZGV4PzogbnVtYmVyO1xuICAgIHJvd2tleTogYW55O1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNlbGVjdENvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChhcmdzOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgcm93aW5kZXg/OiBudW1iZXI7XG4gICAgcm93a2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25DZWxsIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvbkNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25DZWxsUHJvcHMpIHtcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkICE9PSBuZXh0UHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT09IG5leHRQcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dLZXkgIT09IG5leHRQcm9wcy5yb3dLZXkgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RDb2x1bW5TdHlsZSAhPT0gbmV4dFByb3BzLnNlbGVjdENvbHVtblN0eWxlO1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IE1vdXNlRXZlbnQ8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZTogaW5wdXRUeXBlLFxuICAgICAgcm93S2V5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBvblJvd1NlbGVjdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgcm93SW5kZXggPSAtMSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0VHlwZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUgPyB0cnVlIDogIXNlbGVjdGVkO1xuXG4gICAgb25Sb3dTZWxlY3QhKHJvd0tleSwgY2hlY2tlZCwgcm93SW5kZXgsIGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd0tleSxcbiAgICAgIG1vZGU6IGlucHV0VHlwZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0YWJJbmRleCA9IC0xLFxuICAgICAgcm93SW5kZXgsXG4gICAgICBzZWxlY3Rpb25SZW5kZXJlcixcbiAgICAgIHNlbGVjdENvbHVtblN0eWxlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgYXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PiA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICBhdHRycy5zdHlsZSA9IChfLmlzRnVuY3Rpb24oc2VsZWN0Q29sdW1uU3R5bGUpXG4gICAgICA/IHNlbGVjdENvbHVtblN0eWxlKHtcbiAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByb3dpbmRleDogcm93SW5kZXgsXG4gICAgICAgIHJvd2tleTogcm93S2V5LFxuICAgICAgfSlcbiAgICAgIDogc2VsZWN0Q29sdW1uU3R5bGUpIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT4gKFxuICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbFwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGRhdGEtdGVzdGlkPVwic2VsZWN0aW9uLWNlbGxcIiB7Li4uYXR0cnMgYXMgYW55fT5cbiAgICAgICAgICAgIHtzZWxlY3Rpb25SZW5kZXJlciA/IChcbiAgICAgICAgICAgICAgc2VsZWN0aW9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0VHlwZSEsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJvd2luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICByb3drZXk6IHJvd0tleSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9e2lucHV0VHlwZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtib290c3RyYXA0ID8gXCJzZWxlY3Rpb24taW5wdXQtNFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4geyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApfVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGlzQW55RXhwYW5kcyA9IChcbiAgZGF0YTogYW55LFxuICBrZXlGaWVsZDogYW55LFxuICBleHBhbmRlZDogYW55W10gPSBbXVxuKSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHJvd0tleSA9IF8uZ2V0KGRhdGFbaV0sIGtleUZpZWxkKTtcbiAgICBpZiAodHlwZW9mIGV4cGFuZGVkLmZpbmQoeCA9PiB4ID09PSByb3dLZXkpICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGFibGVLZXlzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgc2tpcHM6IGFueVtdID0gW10pID0+IHtcbiAgaWYgKHNraXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93OiBhbnkpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIoKHJvdzogYW55KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdzogYW55KSA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRSb3dzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgZXhwYW5kZWQ6IGFueSkgPT5cbiAgZXhwYW5kZWQubWFwKChrOiBhbnkpID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIFJvd0V4cGFuZFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkYXRhOiBhbnlbXTtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZXhwYW5kUm93OiB7XG4gICAgZXhwYW5kZWQ/OiBhbnlbXTtcbiAgICBpc0Nsb3Npbmc/OiBhbnlbXTtcbiAgICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbkV4cGFuZEFsbD86IChleHBhbmRBbGw6IGJvb2xlYW4sIGV4cGFuZGVkUm93czogYW55W10sIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbjtcbiAgICBub25FeHBhbmRhYmxlPzogYW55W107XG4gICAgcmVuZGVyZXI/OiAoKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvd0V4cGFuZENvbnRleHRWYWx1ZSB7XG4gIGV4cGFuZGVkOiBhbnlbXTtcbiAgaXNDbG9zaW5nOiBhbnlbXTtcbiAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xuICBvbkNsb3NlZDogKGNsb3NlZFJvdzogYW55KSA9PiB2b2lkO1xuICBpc0FueUV4cGFuZHM6IGJvb2xlYW47XG4gIG9uUm93RXhwYW5kOiAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgZXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBvbkFsbFJvd0V4cGFuZDogKGU6IGFueSwgZXhwYW5kQWxsOiBib29sZWFuKSA9PiB2b2lkO1xuICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgb25FeHBhbmRBbGw/OiAoZXhwYW5kQWxsOiBib29sZWFuLCBleHBhbmRlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQ7XG4gIG9ubHlPbmVFeHBhbmRpbmc/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Um93RXhwYW5kQ29udGV4dCA9IHtcbiAgZXhwYW5kZWQ6IFtdLFxuICBpc0Nsb3Npbmc6IFtdLFxuICBvbkNsb3NlZDogKCkgPT4ge30sXG4gIGlzQW55RXhwYW5kczogZmFsc2UsXG4gIG9uUm93RXhwYW5kOiAoKSA9PiB7fSxcbiAgb25BbGxSb3dFeHBhbmQ6ICgpID0+IHt9LFxufTtcbmNvbnN0IFJvd0V4cGFuZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJvd0V4cGFuZENvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRSb3dFeHBhbmRDb250ZXh0XG4pO1xuXG5jbGFzcyBSb3dFeHBhbmRQcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxSb3dFeHBhbmRQcm92aWRlclByb3BzPiB7XG4gIHN0YXRlID0ge1xuICAgIGV4cGFuZGVkOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCBbXSxcbiAgICBpc0Nsb3Npbmc6IHRoaXMucHJvcHMuZXhwYW5kUm93LmlzQ2xvc2luZyB8fCBbXSxcbiAgfTtcblxuICBvbkNsb3NlZCA9IChjbG9zZWRSb3c6IGFueSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNDbG9zaW5nOiB0aGlzLnN0YXRlLmlzQ2xvc2luZy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gY2xvc2VkUm93KSxcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIG5leHRQcm9wczogUm93RXhwYW5kUHJvdmlkZXJQcm9wcyxcbiAgICBwcmV2U3RhdGU6IHsgZXhwYW5kZWQ6IGFueVtdOyBpc0Nsb3Npbmc6IGFueVtdIH1cbiAgKSB7XG4gICAgY29uc3QgeyBleHBhbmRSb3cgfSA9IG5leHRQcm9wcztcblxuICAgIGlmIChleHBhbmRSb3cpIHtcbiAgICAgIGNvbnN0IHsgbm9uRXhwYW5kYWJsZSA9IFtdIH0gPSBleHBhbmRSb3c7XG5cbiAgICAgIGxldCBuZXh0RXhwYW5kZWQgPSBbLi4uKGV4cGFuZFJvdy5leHBhbmRlZCB8fCBwcmV2U3RhdGUuZXhwYW5kZWQpXTtcbiAgICAgIG5leHRFeHBhbmRlZCA9IG5leHRFeHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChyb3dJZCkgPT4gIV8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93SWQpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSBwcmV2U3RhdGUuZXhwYW5kZWQucmVkdWNlKChhY2M6IGFueSwgY3VyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKG5leHRFeHBhbmRlZCwgY3VyKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGN1cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwYW5kZWQ6IG5leHRFeHBhbmRlZCxcbiAgICAgICAgaXNDbG9zaW5nLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dFeHBhbmQgPSAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgaXNFeHBhbmRlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBleHBhbmRSb3c6IHsgb25FeHBhbmQsIG9ubHlPbmVFeHBhbmRpbmcsIG5vbkV4cGFuZGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChub25FeHBhbmRhYmxlICYmIF8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93S2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjdXJyRXhwYW5kZWQgPSBbLi4udGhpcy5zdGF0ZS5leHBhbmRlZF07XG4gICAgbGV0IGN1cnJJc0Nsb3NpbmcgPSBbLi4udGhpcy5zdGF0ZS5pc0Nsb3NpbmddO1xuXG4gICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgIGlmIChvbmx5T25lRXhwYW5kaW5nKSB7XG4gICAgICAgIGN1cnJJc0Nsb3NpbmcgPSBjdXJySXNDbG9zaW5nLmNvbmNhdChjdXJyRXhwYW5kZWQpO1xuICAgICAgICBjdXJyRXhwYW5kZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBjdXJyRXhwYW5kZWQucHVzaChyb3dLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJySXNDbG9zaW5nLnB1c2gocm93S2V5KTtcbiAgICAgIGN1cnJFeHBhbmRlZCA9IGN1cnJFeHBhbmRlZC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgb25FeHBhbmQocm93LCBpc0V4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBleHBhbmRlZDogY3VyckV4cGFuZGVkLCBpc0Nsb3Npbmc6IGN1cnJJc0Nsb3NpbmcgfSkpO1xuICB9O1xuXG4gIGhhbmRsZUFsbFJvd0V4cGFuZCA9IChlOiBhbnksIGV4cGFuZEFsbDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGV4cGFuZFJvdzogeyBvbkV4cGFuZEFsbCwgbm9uRXhwYW5kYWJsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBleHBhbmRlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGxldCBjdXJyRXhwYW5kZWQ6IGFueVtdO1xuXG4gICAgaWYgKGV4cGFuZEFsbCkge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuY29uY2F0KFxuICAgICAgICBkYXRhT3BlcmF0b3IuZXhwYW5kYWJsZUtleXMoZGF0YSwga2V5RmllbGQsIG5vbkV4cGFuZGFibGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBleHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChzKSA9PiB0eXBlb2YgZGF0YS5maW5kKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvbkV4cGFuZEFsbCkge1xuICAgICAgb25FeHBhbmRBbGwoXG4gICAgICAgIGV4cGFuZEFsbCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldEV4cGFuZGVkUm93cyhkYXRhLCBrZXlGaWVsZCwgY3VyckV4cGFuZGVkKSxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQgfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGEsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5leHBhbmRSb3csXG4gICAgICAgICAgbm9uRXhwYW5kYWJsZTogdGhpcy5wcm9wcy5leHBhbmRSb3cubm9uRXhwYW5kYWJsZSxcbiAgICAgICAgICBleHBhbmRlZDogdGhpcy5zdGF0ZS5leHBhbmRlZCxcbiAgICAgICAgICBpc0Nsb3Npbmc6IHRoaXMuc3RhdGUuaXNDbG9zaW5nLFxuICAgICAgICAgIG9uQ2xvc2VkOiB0aGlzLm9uQ2xvc2VkLFxuICAgICAgICAgIGlzQW55RXhwYW5kczogZGF0YU9wZXJhdG9yLmlzQW55RXhwYW5kcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uUm93RXhwYW5kOiB0aGlzLmhhbmRsZVJvd0V4cGFuZCxcbiAgICAgICAgICBvbkFsbFJvd0V4cGFuZDogdGhpcy5oYW5kbGVBbGxSb3dFeHBhbmQsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFJvd0V4cGFuZFByb3ZpZGVyLFxuICBDb25zdW1lcjogUm93RXhwYW5kQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENhcHRpb25Qcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ2FwdGlvbjogRkM8Q2FwdGlvblByb3BzPiA9IChwcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXB0aW9uID0gcHJvcHMuYm9vdHN0cmFwNCA/IChcbiAgICA8Y2FwdGlvbiBzdHlsZT17IHsgY2FwdGlvblNpZGU6IFwidG9wXCIgfSB9Pntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICkgOiAoXG4gICAgPGNhcHRpb24+e3Byb3BzLmNoaWxkcmVufTwvY2FwdGlvbj5cbiAgKTtcblxuICByZXR1cm4gY2FwdGlvbjtcbn07XG5cbi8vIENhcHRpb24ucHJvcFR5cGVzID0ge1xuLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLm5vZGUsXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZ1xuLy8gICBdKSxcbi8vICAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2xcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENhcHRpb247XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBldmVudHM6IHN0cmluZ1tdID0gW1xuICBcIm9uQ2xpY2tcIixcbiAgXCJvbkRvdWJsZUNsaWNrXCIsXG4gIFwib25Nb3VzZUVudGVyXCIsXG4gIFwib25Nb3VzZUxlYXZlXCIsXG4gIFwib25Db250ZXh0TWVudVwiLFxuICBcIm9uQXV4Q2xpY2tcIlxuXTtcblxuaW50ZXJmYWNlIENlbGxFdmVudERlbGVnYXRlclByb3BzIHtcbiAgY29sdW1uOiBhbnk7XG4gIGNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQ2VsbEV2ZW50RGVsZWdhdGVyID0gPFxuICBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4+KEV4dGVuZEJhc2U6IFQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4ucHJvcHM6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5wcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPVxuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBhbnksIGNvbHVtbjogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbiwgY29sdW1uSW5kZXgsIGluZGV4IH06IENlbGxFdmVudERlbGVnYXRlclByb3BzID1cbiAgICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCBjb2x1bW4sIHR5cGVvZiBjb2x1bW5JbmRleCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbHVtbkluZGV4IDogaW5kZXgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZShhdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICBjb25zdCBuZXdBdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4uYXR0cnMgfTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGV2ZW50cywgYXR0cikpIHtcbiAgICAgICAgICBuZXdBdHRyc1thdHRyXSA9IHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihhdHRyc1thdHRyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJzO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9ib290c3RyYXBcIjtcblxuY29uc3QgU29ydFN5bWJvbDogRkMgPSAoKSA9PiAoXG4gIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgIHsoeyBib290c3RyYXA0IH0pID0+XG4gICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlci00XCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9yZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcHVwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApXG4gICAgfVxuICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0U3ltYm9sO1xuIiwiaW1wb3J0IHsgVFlQRV9CT09MRUFOLCBUWVBFX0RBVEUsIFRZUEVfTlVNQkVSLCBUWVBFX1NUUklORyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZUNvbnZlcnQgPSAodHlwZTogYW55LCB2YWx1ZTogYW55KSA9PiB7XG4gIGlmICh0eXBlID09PSBUWVBFX1NUUklORykge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEVfTlVNQkVSKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRV9CT09MRUFOKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFX0RBVEUpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBDZWxsIGZyb20gXCIuLi9jZWxsXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vc2hvdWxkLXVwZGF0ZXJcIjtcblxuaW50ZXJmYWNlIFJvd1B1cmVDb250ZW50UHJvcHMgZXh0ZW5kcyBSb3dQcm9wcyB7XG4gIGF0c3RhcnQ/OiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgc2hvdWxkVXBkYXRlPzogYm9vbGVhbjtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd1B1cmVDb250ZW50IGV4dGVuZHMgQ29tcG9uZW50PFJvd1B1cmVDb250ZW50UHJvcHM+IHtcbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogUm93UHVyZUNvbnRlbnRQcm9wcykge1xuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnNob3VsZFVwZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIG5leHRQcm9wcy5zaG91bGRVcGRhdGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgaXNFZGl0YWJsZSxcbiAgICAgIGVkaXRpbmdSb3dJZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4LFxuICAgICAgYXRzdGFydCxcbiAgICAgIGNsaWNrVG9FZGl0LFxuICAgICAgZGJjbGlja1RvRWRpdCxcbiAgICAgIEVkaXRpbmdDZWxsQ29tcG9uZW50LFxuICAgICAgdGFiSW5kZXhTdGFydCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCB0YWJJbmRleCA9IHRhYkluZGV4U3RhcnQ7XG5cbiAgICByZXR1cm4gY29sdW1ucz8ubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChcbiAgICAgICAgcm93SW5kZXggPT09IGVkaXRpbmdSb3dJZHggJiZcbiAgICAgICAgaW5kZXggPT09IGVkaXRpbmdDb2xJZHggJiZcbiAgICAgICAgRWRpdGluZ0NlbGxDb21wb25lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFZGl0aW5nQ2VsbENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fS1lZGl0aW5nYH1cbiAgICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICBjb2x1bW5JbmRleD17aW5kZXh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbmRlciBjZWxsXG4gICAgICBsZXQgY2VsbFRpdGxlO1xuICAgICAgbGV0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuICAgICAgbGV0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+ID0ge307XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5hdHRycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY29sdW1uLmF0dHJzKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KSB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uLmF0dHJzID09PSBcIm9iamVjdFwiICYmIGNvbHVtbi5hdHRycyAhPT0gbnVsbCkge1xuICAgICAgICBjZWxsQXR0cnMgPSB7IC4uLmNvbHVtbi5hdHRycyB9O1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChjb2x1bW4uZXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHsgLi4uY29sdW1uLmV2ZW50cyB9O1xuICAgICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbkZuID0gZXZlbnRzW2tleV07XG4gICAgICAgICAgZXZlbnRzW2tleV0gPSAoLi4ucmVzdDogYW55W10pID0+IG9yaWdpbkZuKC4uLnJlc3QsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2VsbEF0dHJzID0geyAuLi5jZWxsQXR0cnMsIC4uLmV2ZW50cyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihjb2x1bW4uY2xhc3NlcylcbiAgICAgICAgPyBjb2x1bW4uY2xhc3Nlcyhjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgOiBjb2x1bW4uY2xhc3NlcztcblxuICAgICAgaWYgKGNvbHVtbi5zdHlsZSkge1xuICAgICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnN0eWxlKVxuICAgICAgICAgID8gY29sdW1uLnN0eWxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29sdW1uLnN0eWxlO1xuICAgICAgICBjZWxsU3R5bGUgPSB7IC4uLmNlbGxTdHlsZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnRpdGxlKSB7XG4gICAgICAgIGNlbGxUaXRsZSA9IF8uaXNGdW5jdGlvbihjb2x1bW4udGl0bGUpXG4gICAgICAgICAgPyBjb2x1bW4udGl0bGUoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb250ZW50O1xuICAgICAgICBjZWxsQXR0cnMudGl0bGUgPSBjZWxsVGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uYWxpZ24pIHtcbiAgICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uYWxpZ24pXG4gICAgICAgICAgPyBjb2x1bW4uYWxpZ24oY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb2x1bW4uYWxpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNlbGxDbGFzc2VzO1xuICAgICAgaWYgKCFfLmlzRW1wdHlPYmplY3QoY2VsbFN0eWxlKSkgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuXG4gICAgICBsZXQgZWRpdGFibGVDZWxsID0gXy5pc0RlZmluZWQoY29sdW1uLmVkaXRhYmxlKSA/IGNvbHVtbi5lZGl0YWJsZSA6IHRydWU7XG4gICAgICBpZiAoY29sdW1uLmRhdGFGaWVsZCA9PT0ga2V5RmllbGQgfHwgIWlzRWRpdGFibGUpIGVkaXRhYmxlQ2VsbCA9IGZhbHNlO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdGFibGUpKSB7XG4gICAgICAgIGVkaXRhYmxlQ2VsbCA9IGNvbHVtbi5lZGl0YWJsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGFiSW5kZXhTdGFydCA9PT0gJ251bWJlcicgJiYgdGFiSW5kZXhTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgY2VsbEF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXghO1xuICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4ISArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsXG4gICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fWB9XG4gICAgICAgICAgcm93PXtyb3d9XG4gICAgICAgICAgZWRpdGFibGU9e2VkaXRhYmxlQ2VsbC50b1N0cmluZygpfVxuICAgICAgICAgIHJvd2luZGV4PXtyb3dJbmRleCA/PyAwfVxuICAgICAgICAgIGNvbHVtbmluZGV4PXtpbmRleH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBhdHN0YXJ0PXthdHN0YXJ0fVxuICAgICAgICAgIGNsaWNrdG9lZGl0PXtjbGlja1RvRWRpdCA/IGNsaWNrVG9FZGl0LnRvU3RyaW5nKCkgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgZGJjbGlja3RvZWRpdD17ZGJjbGlja1RvRWRpdCA/IGRiY2xpY2tUb0VkaXQudG9TdHJpbmcoKSA6IFwiZmFsc2VcIn1cbiAgICAgICAgICB7Li4uY2VsbEF0dHJzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQ29sdW1uUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueTtcbiAgY29sdW1uczogYW55W107XG4gIHRvZ2dsZXM/OiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIENvbHVtbkNvbnRleHRWYWx1ZSB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICB0b2dnbGVzPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH07XG59XG5cbmNvbnN0IGRlZmF1bHRDb2x1bW5Db250ZXh0ID0geyBjb2x1bW5zOiBbXSwgdG9nZ2xlczogdW5kZWZpbmVkIH07XG5jb25zdCBDb2x1bW5Db250ZXh0ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dDxDb2x1bW5Db250ZXh0VmFsdWU+KGRlZmF1bHRDb2x1bW5Db250ZXh0KTtcblxuY29uc3QgQ29sdW1uUHJvdmlkZXI6IFJlYWN0LkZDPENvbHVtblByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY29sdW1ucyxcbiAgdG9nZ2xlcyxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGxldCB0b2dnbGVDb2x1bW5zO1xuXG4gIGlmICh0b2dnbGVzKSB7XG4gICAgdG9nZ2xlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHRvZ2dsZXNbY29sdW1uLmRhdGFGaWVsZF0pO1xuICB9IGVsc2Uge1xuICAgIHRvZ2dsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmhpZGRlbik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Q29sdW1uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBjb2x1bW5zOiB0b2dnbGVDb2x1bW5zIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29sdW1uQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBDb2x1bW5Qcm92aWRlcixcbiAgQ29uc3VtZXI6IENvbHVtbkNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFNpbXBsZVJvdyBleHRlbmRzIHNob3VsZFVwZGF0ZXIoXG4gIFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pXG4pIHtcbiAgc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IGZhbHNlO1xuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG4gICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5zaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0YWJsZSA9IHRydWUsXG4gICAgICBjbGFzc05hbWUgPSB1bmRlZmluZWQsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgYXR0cnMgPSB7fSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHRyQXR0cnMgPSB0aGlzLmRlbGVnYXRlKGF0dHJzKTtcbiAgICBjb25zdCB0YWJJbmRleFN0YXJ0ID0gdGhpcy5wcm9wcy5yb3dJbmRleCEgKiB2aXNpYmxlQ29sdW1uU2l6ZSEgKyAxO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB7Li4udHJBdHRyc30+XG4gICAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICAgIHRhYkluZGV4U3RhcnQ9e3RhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQgOiAtMX1cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgLz5cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBkYXRhOiBhbnk7XG4gIGN1cnJGaWx0ZXJzOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZWFyY2hQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFNvcnRQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuLy9cbmludGVyZmFjZSBEYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgRGF0YVByb3ZpZGVyU3RhdGUge1xuICBkYXRhOiBhbnlbXTtcbn1cblxuaW50ZXJmYWNlIERhdGFDb250ZXh0VmFsdWUge1xuICBkYXRhOiBhbnlbXTtcbiAgZ2V0RGF0YTogKFxuICAgIGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMsXG4gICAgc2VhcmNoUHJvcHM/OiBTZWFyY2hQcm9wcyxcbiAgICBzb3J0UHJvcHM/OiBTb3J0UHJvcHMsXG4gICAgcGFnaW5hdGlvblByb3BzPzogUGFnaW5hdGlvblByb3BzXG4gICkgPT4gYW55W107XG59XG5cbmNvbnN0IGRlZmF1bHREYXRhQ29udGV4dCA9IHsgZGF0YTogW10sIGdldERhdGE6ICgpID0+IFtdIH07XG5jb25zdCBEYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8RGF0YUNvbnRleHRWYWx1ZT4oZGVmYXVsdERhdGFDb250ZXh0KTtcblxuY2xhc3MgRGF0YVByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGFQcm92aWRlclByb3BzLCBEYXRhUHJvdmlkZXJTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRGF0YVByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogcHJvcHMuZGF0YSB9O1xuICB9XG5cbiAgZ2V0RGF0YSA9IChcbiAgICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzLFxuICAgIHNlYXJjaFByb3BzPzogU2VhcmNoUHJvcHMsXG4gICAgc29ydFByb3BzPzogU29ydFByb3BzLFxuICAgIHBhZ2luYXRpb25Qcm9wcz86IFBhZ2luYXRpb25Qcm9wc1xuICApID0+IHtcbiAgICBpZiAocGFnaW5hdGlvblByb3BzKSB7XG4gICAgICByZXR1cm4gcGFnaW5hdGlvblByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChzb3J0UHJvcHMpIHtcbiAgICAgIHJldHVybiBzb3J0UHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFByb3BzKSB7XG4gICAgICByZXR1cm4gc2VhcmNoUHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlclByb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlclByb3BzLmRhdGEubGVuZ3RoIDwgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCAmJlxuICAgICAgICAhXy5pc0VtcHR5KE9iamVjdC5rZXlzKGZpbHRlclByb3BzLmN1cnJGaWx0ZXJzKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmlsdGVyUHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICBnZXREYXRhOiB0aGlzLmdldERhdGEsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBEYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aFJvd1NlbGVjdGlvbjxUIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+PihcbiAgQ29tcG9uZW50OiBUXG4pOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4ge1xuICBjb25zdCByZW5kZXJXaXRoU2VsZWN0aW9uID0gKHByb3BzOiBhbnksIHNlbGVjdFJvdzogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBfLmNvbnRhaW5zKHNlbGVjdFJvdy5zZWxlY3RlZCwga2V5KTtcbiAgICBjb25zdCBzZWxlY3RhYmxlID1cbiAgICAgICFzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSB8fCAhXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcbiAgICBjb25zdCBub3RTZWxlY3RhYmxlID0gXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcblxuICAgIGxldCB7IHN0eWxlLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5zdHlsZSlcbiAgICAgICAgPyBzZWxlY3RSb3cuc3R5bGUocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuc3R5bGU7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuY2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cuY2xhc3Nlcyhwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5jbGFzc2VzO1xuXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLnNlbGVjdGVkU3R5bGUsXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBzZWxlY3RlZENsYXNzZXMpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlbGVjdFJvdy5iZ0NvbG9yKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuYmdDb2xvcilcbiAgICAgICAgICA/IHNlbGVjdFJvdy5iZ0NvbG9yKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgICAgOiBzZWxlY3RSb3cuYmdDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm90U2VsZWN0YWJsZSkge1xuICAgICAgY29uc3Qgbm90U2VsZWN0YWJsZVN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVTdHlsZShwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGU7XG5cbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlQ2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXM7XG5cbiAgICAgIHN0eWxlID0ge1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4ubm90U2VsZWN0YWJsZVN0eWxlLFxuICAgICAgfTtcbiAgICAgIGNsYXNzTmFtZSA9IGNzKGNsYXNzTmFtZSwgbm90U2VsZWN0YWJsZUNsYXNzZXMpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWR9XG4gICAgICAgIHNlbGVjdGFibGU9e3NlbGVjdGFibGV9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4gPSAoXG4gICAgcHJvcHNcbiAgKSA9PiAoXG4gICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHNlbGVjdFJvdykgPT4gcmVuZGVyV2l0aFNlbGVjdGlvbihwcm9wcywgc2VsZWN0Um93KX1cbiAgICA8L1NlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbiAgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXJcIjtcbiAgcmV0dXJuIFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lcjtcbn1cbiIsIi8qIGVzbGludCBuby1uZXN0ZWQtdGVybmFyeTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiAwICovXG5pbXBvcnQgeyBTT1JUX0FTQywgU09SVF9ERVNDIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gY29tcGFyYXRvcihhOiBhbnksIGI6IGFueSkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIGIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXN1bHQgPSBiLmxvY2FsZUNvbXBhcmUoYSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gYSA+IGIgPyAtMSA6IGEgPCBiID8gMSA6IDA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHNvcnQgPSAoXG4gIGRhdGE6IGFueSxcbiAgc29ydE9yZGVyOiBhbnksXG4gIHsgZGF0YUZpZWxkLCBzb3J0RnVuYywgc29ydFZhbHVlIH06IGFueVxuKSA9PiB7XG4gIGNvbnN0IF9kYXRhID0gWy4uLmRhdGFdO1xuICBfZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgdmFsdWVBID0gXy5nZXQoYSwgZGF0YUZpZWxkKTtcbiAgICBsZXQgdmFsdWVCID0gXy5nZXQoYiwgZGF0YUZpZWxkKTtcbiAgICBpZiAoc29ydFZhbHVlKSB7XG4gICAgICB2YWx1ZUEgPSBzb3J0VmFsdWUodmFsdWVBLCBhKTtcbiAgICAgIHZhbHVlQiA9IHNvcnRWYWx1ZSh2YWx1ZUIsIGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUEgPSBfLmlzRGVmaW5lZCh2YWx1ZUEpID8gdmFsdWVBIDogXCJcIjtcbiAgICAgIHZhbHVlQiA9IF8uaXNEZWZpbmVkKHZhbHVlQikgPyB2YWx1ZUIgOiBcIlwiO1xuICAgIH1cblxuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmVzdWx0ID0gc29ydEZ1bmModmFsdWVBLCB2YWx1ZUIsIHNvcnRPcmRlciwgZGF0YUZpZWxkLCBhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNvcnRPcmRlciA9PT0gU09SVF9ERVNDKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVBLCB2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZUIsIHZhbHVlQSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4gX2RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbmV4dE9yZGVyID0gKFxuICBjdXJyZW50U29ydENvbHVtbjogYW55LFxuICB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9OiBhbnksXG4gIGRlZmF1bHRPcmRlciA9IFNPUlRfREVTQ1xuKSA9PiB7XG4gIGlmICghc29ydENvbHVtbiB8fCBjdXJyZW50U29ydENvbHVtbi5kYXRhRmllbGQgIT09IHNvcnRDb2x1bW4uZGF0YUZpZWxkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPcmRlcjtcbiAgfVxuICByZXR1cm4gc29ydE9yZGVyID09PSBTT1JUX0RFU0MgPyBTT1JUX0FTQyA6IFNPUlRfREVTQztcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBCb290c3RyYXBDb250ZXh0VmFsdWUge1xuICBib290c3RyYXA0OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Qm9vdHN0cmFwQ29udGV4dCA9IHsgYm9vdHN0cmFwNDogdHJ1ZSB9O1xuXG5leHBvcnQgY29uc3QgQm9vdHN0cmFwQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Qm9vdHN0cmFwQ29udGV4dFZhbHVlPihcbiAgZGVmYXVsdEJvb3RzdHJhcENvbnRleHRcbik7XG4iLCIvKiBlc2xpbnQgbm8tZW1wdHk6IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczogMCAqL1xuaW1wb3J0IF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcblxuZnVuY3Rpb24gc3BsaXROZXN0ZWQoc3RyOiBhbnkpIHtcbiAgcmV0dXJuIFtzdHJdLmpvaW4oXCIuXCIpLnJlcGxhY2UoL1xcWy9nLCBcIi5cIikucmVwbGFjZSgvXFxdL2csIFwiXCIpLnNwbGl0KFwiLlwiKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnMobGlzdDogYW55LCB2YWx1ZTogYW55KSB7XG4gIGlmIChfLmluY2x1ZGVzKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMobGlzdCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0KHRhcmdldDogYW55LCBmaWVsZDogYW55KSB7XG4gIGNvbnN0IGRpcmVjdEdldCA9IHRhcmdldFtmaWVsZF07XG4gIGlmIChkaXJlY3RHZXQgIT09IHVuZGVmaW5lZCAmJiBkaXJlY3RHZXQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZGlyZWN0R2V0O1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gc3BsaXROZXN0ZWQoZmllbGQpO1xuICBsZXQgcmVzdWx0O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKGN1cnIsIHBhdGgpID0+IGN1cnJbcGF0aF0sIHRhcmdldCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQ6IGFueSwgZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgc2FmZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGhBcnJheSA9IHNwbGl0TmVzdGVkKGZpZWxkKTtcbiAgbGV0IGxldmVsID0gMDtcbiAgcGF0aEFycmF5LnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGxldmVsICs9IDE7XG4gICAgaWYgKHR5cGVvZiBhW2JdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoIXNhZmUpIHRocm93IG5ldyBFcnJvcihgJHthfS4ke2J9IGlzIHVuZGVmaW5lZGApO1xuICAgICAgYVtiXSA9IHt9O1xuICAgICAgcmV0dXJuIGFbYl07XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID09PSBwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICBhW2JdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhW2JdO1xuICB9LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iajogYW55KSB7XG4gIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2xlZXAoZm46IGFueSwgbXM6IGFueSkge1xuICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiBmbigpLCBtcyk7XG59XG5cbmZ1bmN0aW9uIGRlYm91bmNlKHRoaXM6IGFueSwgZnVuYzogYW55LCB3YWl0OiBhbnksIGltbWVkaWF0ZTogYW55KSB7XG4gIGxldCB0aW1lb3V0OiBhbnk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgfHwgMCk7XG5cbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbihfLCB7XG4gIGdldCxcbiAgc2V0LFxuICBpc0RlZmluZWQsXG4gIGlzRW1wdHlPYmplY3QsXG4gIHNsZWVwLFxuICBkZWJvdW5jZSxcbiAgY29udGFpbnNcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgaXNBbnlFeHBhbmRzPzogYm9vbGVhbjtcbiAgb25BbGxSb3dFeHBhbmQ/OiAoXG4gICAgZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sXG4gICAgZXhwYW5kQWxsOiBib29sZWFuXG4gICkgPT4gdm9pZDtcbiAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI/OiAoYXJnczogeyBpc0FueUV4cGFuZHM6IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbnNpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHsgaXNBbnlFeHBhbmRzLCBvbkFsbFJvd0V4cGFuZCB9ID0gdGhpcy5wcm9wcztcbiAgICBvbkFsbFJvd0V4cGFuZCEoZSwgIWlzQW55RXhwYW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDaGVja0JveENsaWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRoIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsLWhlYWRlclwiIGRhdGEtcm93LXNlbGVjdGlvbiB7Li4uYXR0cnN9PlxuICAgICAgICB7ZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXJcbiAgICAgICAgICA/IGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKHsgaXNBbnlFeHBhbmRzOiBpc0FueUV4cGFuZHMgPz8gZmFsc2UgfSlcbiAgICAgICAgICA6IGlzQW55RXhwYW5kc1xuICAgICAgICAgID8gXCIoLSlcIlxuICAgICAgICAgIDogXCIoKylcIn1cbiAgICAgIDwvdGg+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRSb3dCeVJvd0lkIH0gZnJvbSBcIi4vcm93c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uU3VtbWFyeSA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVtdID0gW11cbikgPT4ge1xuICBsZXQgYWxsUm93c1NlbGVjdGVkID0gZGF0YS5sZW5ndGggPiAwO1xuICBsZXQgYWxsUm93c05vdFNlbGVjdGVkID0gdHJ1ZTtcblxuICBjb25zdCByb3dLZXlzID0gZGF0YS5tYXAoKGQpID0+IF8uZ2V0KGQsIGtleUZpZWxkKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93S2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGN1cnIgPSByb3dLZXlzW2ldO1xuICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQuZmluZCgoeCkgPT4geCA9PT0gY3VycikgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxSb3dzTm90U2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhbGxSb3dzU2VsZWN0ZWQsXG4gICAgYWxsUm93c05vdFNlbGVjdGVkLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGFibGVLZXlzID0gKFxuICBkYXRhOiBhbnlbXSA9IFtdLFxuICBrZXlGaWVsZDogYW55LFxuICBza2lwczogYW55W10gPSBbXVxuKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xuICB9XG4gIHJldHVybiBkYXRhXG4gICAgLmZpbHRlcigocm93KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuU2VsZWN0YWJsZUtleXMgPSAoc2VsZWN0ZWQ/OiBhbnksIHNraXBzOiBhbnlbXSA9IFtdKSA9PiB7XG4gIGlmIChza2lwcz8ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoKHg6IGFueSkgPT4gXy5jb250YWlucyhza2lwcywgeCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkUm93cyA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVxuKSA9PlxuICBzZWxlY3RlZFxuICAgIC5tYXAoKGs6IGFueSkgPT4gZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgaykpXG4gICAgLmZpbHRlcigoeDogYW55KSA9PiAhIXgpO1xuIiwiLy8gQ3VycmVudCB2ZXJzaW9uLlxuZXhwb3J0IHZhciBWRVJTSU9OID0gJzEuMTMuNyc7XG5cbi8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbmV4cG9ydCB2YXIgcm9vdCA9ICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZikgfHxcbiAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkgfHxcbiAgICAgICAgICB7fTtcblxuLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbmV4cG9ydCB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuZXhwb3J0IHZhciBTeW1ib2xQcm90byA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnID8gU3ltYm9sLnByb3RvdHlwZSA6IG51bGw7XG5cbi8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuZXhwb3J0IHZhciBwdXNoID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8vIE1vZGVybiBmZWF0dXJlIGRldGVjdGlvbi5cbmV4cG9ydCB2YXIgc3VwcG9ydHNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2Vcbi8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuZXhwb3J0IHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuLy8gQ3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlc2UgYnVpbHRpbiBmdW5jdGlvbnMgYmVjYXVzZSB3ZSBvdmVycmlkZSB0aGVtLlxuZXhwb3J0IHZhciBfaXNOYU4gPSBpc05hTixcbiAgICBfaXNGaW5pdGUgPSBpc0Zpbml0ZTtcblxuLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbmV4cG9ydCB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuZXhwb3J0IHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4vLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuXG5leHBvcnQgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4iLCIvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbi8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlXG4vLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4vLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4vLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzIFwicmVzdCBwYXJhbWV0ZXJcIi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RBcmd1bWVudHMoZnVuYywgc3RhcnRJbmRleCkge1xuICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gQXJyYXkoc3RhcnRJbmRleCArIDEpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iaik7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc051bGwob2JqKSB7XG4gIHJldHVybiBvYmogPT09IG51bGw7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG59XG4iLCJpbXBvcnQgeyB0b1N0cmluZyB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbn1cbiIsIi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xufVxuIiwiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSB0ZXN0ZXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gIH07XG59XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignTnVtYmVyJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignRGF0ZScpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1JlZ0V4cCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0Vycm9yJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3ltYm9sJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IHJvb3QgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbnZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4vLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgYHR5cGVvZmAgYnVncyBpbiBvbGRcbi8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuXG52YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbmlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdPYmplY3QnKTtcbiIsImltcG9ydCB7IHN1cHBvcnRzRGF0YVZpZXcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaGFzT2JqZWN0VGFnIGZyb20gJy4vX2hhc09iamVjdFRhZy5qcyc7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgYERhdGFWaWV3YCBoYXMgc3RyaW5nIHRhZyBgJ1tvYmplY3QgT2JqZWN0XSdgLlxuLy8gSW4gSUUgMTEsIHRoZSBtb3N0IGNvbW1vbiBhbW9uZyB0aGVtLCB0aGlzIHByb2JsZW0gYWxzbyBhcHBsaWVzIHRvXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbi8vIEFsc28sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBjYW4gb3ZlcnJpZGUgdGhlIG5hdGl2ZVxuLy8gYERhdGFWaWV3YCBvYmplY3QsIGluIGNhc2VzIGxpa2UgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGNvbnN0cnVjdG9yXG4vLyBzYWZlbHkgYW5kIHNob3VsZCBqdXN0IHJlbHkgb24gYWx0ZXJuYXRlIGBEYXRhVmlld2AgY2hlY2tzXG5leHBvcnQgdmFyIGhhc0RhdGFWaWV3QnVnID0gKFxuICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiAoIS9cXFtuYXRpdmUgY29kZVxcXS8udGVzdChTdHJpbmcoRGF0YVZpZXcpKSB8fCBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpKVxuICAgICksXG4gICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzQXJyYXlCdWZmZXIgZnJvbSAnLi9pc0FycmF5QnVmZmVyLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcblxudmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWNcbi8vIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGBEYXRhVmlld2AuXG4vLyBBbHNvLCBpbiBjYXNlcyB3aGVyZSB0aGUgbmF0aXZlIGBEYXRhVmlld2AgaXNcbi8vIG92ZXJyaWRkZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGFnIGl0c2VsZi5cbmZ1bmN0aW9uIGFsdGVybmF0ZUlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoaGFzRGF0YVZpZXdCdWcgPyBhbHRlcm5hdGVJc0RhdGFWaWV3IDogaXNEYXRhVmlldyk7XG4iLCJpbXBvcnQgeyBuYXRpdmVJc0FycmF5IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG4vLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIGBBcnJheS5pc0FycmF5YC5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpO1xuIiwiaW1wb3J0IHsgaGFzT3duUHJvcGVydHkgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG52YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4vLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4vLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuKGZ1bmN0aW9uKCkge1xuICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCB7IF9pc0Zpbml0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNGaW5pdGUob2JqKSB7XG4gIHJldHVybiAhaXNTeW1ib2wob2JqKSAmJiBfaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbn1cbiIsImltcG9ydCB7IF9pc05hTiB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcblxuLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNOYU4ob2JqKSB7XG4gIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgTUFYX0FSUkFZX0lOREVYIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9XG59XG4iLCIvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBvYnRhaW4gcHJvcGVydHkgYGtleWAgZnJvbSBgb2JqYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICB9O1xufVxuIiwiaW1wb3J0IHNoYWxsb3dQcm9wZXJ0eSBmcm9tICcuL19zaGFsbG93UHJvcGVydHkuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0XG4vLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG4iLCJpbXBvcnQgeyBzdXBwb3J0c0FycmF5QnVmZmVyLCBuYXRpdmVJc1ZpZXcsIHRvU3RyaW5nIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzRGF0YVZpZXcgZnJvbSAnLi9pc0RhdGFWaWV3LmpzJztcbmltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBpc0J1ZmZlckxpa2UgZnJvbSAnLi9faXNCdWZmZXJMaWtlLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xudmFyIHR5cGVkQXJyYXlQYXR0ZXJuID0gL1xcW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XFxdLztcbmZ1bmN0aW9uIGlzVHlwZWRBcnJheShvYmopIHtcbiAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gIHJldHVybiBuYXRpdmVJc1ZpZXcgPyAobmF0aXZlSXNWaWV3KG9iaikgJiYgIWlzRGF0YVZpZXcob2JqKSkgOlxuICAgICAgICAgICAgICAgIGlzQnVmZmVyTGlrZShvYmopICYmIHR5cGVkQXJyYXlQYXR0ZXJuLnRlc3QodG9TdHJpbmcuY2FsbChvYmopKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcbiIsImltcG9ydCBzaGFsbG93UHJvcGVydHkgZnJvbSAnLi9fc2hhbGxvd1Byb3BlcnR5LmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTtcbiIsImltcG9ydCB7IG5vbkVudW1lcmFibGVQcm9wcywgT2JqUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgc2ltcGxlIGxvb2t1cCBzdHJ1Y3R1cmUuXG4vLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG9cbi8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3Jcbi8vIGFycmF5cyBvZiBzdHJpbmdzLlxuZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykge1xuICB2YXIgaGFzaCA9IHt9O1xuICBmb3IgKHZhciBsID0ga2V5cy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgKytpKSBoYXNoW2tleXNbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgcHVzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICBoYXNoW2tleV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyLiBDaGVja3MgYGtleXNgIGZvciB0aGUgcHJlc2VuY2Ugb2Yga2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndFxuLy8gYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuIEV4dGVuZHMgYGtleXNgIGluIHBsYWNlIGlmXG4vLyBuZWVkZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICBrZXlzID0gZW11bGF0ZWRTZXQoa2V5cyk7XG4gIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICB2YXIgcHJvdG8gPSAoaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICBpZiAoaGFzKG9iaiwgcHJvcCkgJiYgIWtleXMuY29udGFpbnMocHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkge1xuICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHsgbmF0aXZlS2V5cywgaGFzRW51bUJ1ZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCBjb2xsZWN0Tm9uRW51bVByb3BzIGZyb20gJy4vX2NvbGxlY3ROb25FbnVtUHJvcHMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4vLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4vLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgLy8gYC5sZW5ndGhgLlxuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7XG4gIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyhvYmopXG4gICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gIHJldHVybiBnZXRMZW5ndGgoa2V5cyhvYmopKSA9PT0gMDtcbn1cbiIsImltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIGF0dHJzKSB7XG4gIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXQgY2FuXG4vLyBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIGFkZGVkXG4vLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gXyhvYmopIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG59XG5cbl8uVkVSU0lPTiA9IFZFUlNJT047XG5cbi8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG59O1xuXG4vLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveGllcyBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbi8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG5fLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbl8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBTdHJpbmcodGhpcy5fd3JhcHBlZCk7XG59O1xuIiwiaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLFxuLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGJ1ZmZlclNvdXJjZSkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgYnVmZmVyU291cmNlLmJ5dGVPZmZzZXQgfHwgMCxcbiAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSlcbiAgKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgeyB0b1N0cmluZywgU3ltYm9sUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgZ2V0Qnl0ZUxlbmd0aCBmcm9tICcuL19nZXRCeXRlTGVuZ3RoLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gIGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgaXNEYXRhVmlldyBmcm9tICcuL2lzRGF0YVZpZXcuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCB0b0J1ZmZlclZpZXcgZnJvbSAnLi9fdG9CdWZmZXJWaWV3LmpzJztcblxuLy8gV2UgdXNlIHRoaXMgc3RyaW5nIHR3aWNlLCBzbyBnaXZlIGl0IGEgbmFtZSBmb3IgbWluaWZpY2F0aW9uLlxudmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbn1cblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBJRSAxMCAtIEVkZ2UgMTMuXG4gIGlmIChoYXNEYXRhVmlld0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyhhKSkge1xuICAgIGlmICghaXNEYXRhVmlldyhiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3O1xuICB9XG4gIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgY2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAvLyBDb2VyY2UgdG8gdHlwZWQgYXJyYXkgc28gd2UgY2FuIGZhbGwgdGhyb3VnaC5cbiAgICAgIHJldHVybiBkZWVwRXEodG9CdWZmZXJWaWV3KGEpLCB0b0J1ZmZlclZpZXcoYiksIGFTdGFjaywgYlN0YWNrKTtcbiAgfVxuXG4gIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheShhKSkge1xuICAgICAgdmFyIGJ5dGVMZW5ndGggPSBnZXRCeXRlTGVuZ3RoKGEpO1xuICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgYXJlQXJyYXlzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWFyZUFycmF5cykge1xuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKGlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnB1c2goYSk7XG4gIGJTdGFjay5wdXNoKGIpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnBvcCgpO1xuICBiU3RhY2sucG9wKCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICByZXR1cm4gZXEoYSwgYik7XG59XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgeyBoYXNFbnVtQnVnIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNvbGxlY3ROb25FbnVtUHJvcHMgZnJvbSAnLi9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyc7XG5cbi8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gU2luY2UgdGhlIHJlZ3VsYXIgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHR5cGUgdGVzdHMgZG9uJ3Qgd29yayBmb3Jcbi8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZFxuLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4vLyBUaGUgZmluZ2VycHJpbnQgbWV0aG9kIGxpc3RzIGFyZSBkZWZpbmVkIGJlbG93LlxuZXhwb3J0IGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy5cbiAgICB2YXIga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0Z1bmN0aW9uKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdCBgV2Vha01hcGAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgLy8gaXQgZnJvbSBhIHJlZ3VsYXIgYE1hcGAuXG4gICAgcmV0dXJuIG1ldGhvZHMgIT09IHdlYWtNYXBNZXRob2RzIHx8ICFpc0Z1bmN0aW9uKG9ialtmb3JFYWNoTmFtZV0pO1xuICB9O1xufVxuXG4vLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4vLyBlYWNoIHN0cmluZyBpbiB0aGUgZmluZ2VycHJpbnRzIG9ubHkgb25jZS5cbnZhciBmb3JFYWNoTmFtZSA9ICdmb3JFYWNoJyxcbiAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgY29tbW9uSW5pdCA9IFsnY2xlYXInLCAnZGVsZXRlJ10sXG4gICAgbWFwVGFpbCA9IFsnZ2V0JywgaGFzTmFtZSwgJ3NldCddO1xuXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4vLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLlxuZXhwb3J0IHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgIHdlYWtNYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQobWFwVGFpbCksXG4gICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IGlzSUUxMSB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgeyBpZTExZmluZ2VycHJpbnQsIG1hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IHsgaXNJRTExIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcbmltcG9ydCB7IGllMTFmaW5nZXJwcmludCwgd2Vha01hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdXZWFrTWFwJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyBpc0lFMTEgfSBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IHsgaWUxMWZpbmdlcnByaW50LCBzZXRNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdXZWFrU2V0Jyk7XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNbaV0gPSBvYmpbX2tleXNbaV1dO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbi8vIFRoZSBvcHBvc2l0ZSBvZiBgXy5vYmplY3RgIHdpdGggb25lIGFyZ3VtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFpcnMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHBhaXJzW2ldID0gW19rZXlzW2ldLCBvYmpbX2tleXNbaV1dXTtcbiAgfVxuICByZXR1cm4gcGFpcnM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbnZlcnQob2JqKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcblxuLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikge1xuICB2YXIgbmFtZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBuYW1lcy5zb3J0KCk7XG59XG4iLCIvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTtcbiIsImltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluXG4vLyBvYmplY3QocykuXG4vLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuIiwiaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzLCB0cnVlKTtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB7IG5hdGl2ZUNyZWF0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ3JlYXRlIGEgbmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuZnVuY3Rpb24gY3RvcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCl7fTtcbn1cblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG90eXBlKSB7XG4gIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gIHZhciBDdG9yID0gY3RvcigpO1xuICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBleHRlbmRPd24gZnJvbSAnLi9leHRlbmRPd24uanMnO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4vLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gY3JlYXRlZCBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykge1xuICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICBpZiAocHJvcHMpIGV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4vZXh0ZW5kLmpzJztcblxuLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogZXh0ZW5kKHt9LCBvYmopO1xufVxuIiwiLy8gSW52b2tlcyBgaW50ZXJjZXB0b3JgIHdpdGggdGhlIGBvYmpgIGFuZCB0aGVuIHJldHVybnMgYG9iamAuXG4vLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbi8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFwKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgcmV0dXJuIG9iajtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LlxuLy8gTGlrZSBgXy5pdGVyYXRlZWAsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG59XG5fLnRvUGF0aCA9IHRvUGF0aDtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgJy4vdG9QYXRoLmpzJztcblxuLy8gSW50ZXJuYWwgd3JhcHBlciBmb3IgYF8udG9QYXRoYCB0byBlbmFibGUgbWluaWZpY2F0aW9uLlxuLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gXy50b1BhdGgocGF0aCk7XG59XG4iLCIvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBvYnRhaW4gYSBuZXN0ZWQgcHJvcGVydHkgaW4gYG9iamAgYWxvbmcgYHBhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgfVxuICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xufVxuIiwiaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuaW1wb3J0IGRlZXBHZXQgZnJvbSAnLi9fZGVlcEdldC5qcyc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZC5qcyc7XG5cbi8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIChkZWVwKSBwcm9wZXJ0eSBvbiBgcGF0aGAgZnJvbSBgb2JqZWN0YC5cbi8vIElmIGFueSBwcm9wZXJ0eSBpbiBgcGF0aGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIHZhbHVlIGlzXG4vLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4vLyBUaGUgYHBhdGhgIGlzIG5vcm1hbGl6ZWQgdGhyb3VnaCBgXy50b1BhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG4iLCJpbXBvcnQgX2hhcyBmcm9tICcuL19oYXMuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5IG9uXG4vLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgXG4vLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgaWYgKCFfaGFzKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIG9iaiA9IG9ialtrZXldO1xuICB9XG4gIHJldHVybiAhIWxlbmd0aDtcbn1cbiIsIi8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG4iLCJpbXBvcnQgZXh0ZW5kT3duIGZyb20gJy4vZXh0ZW5kT3duLmpzJztcbmltcG9ydCBpc01hdGNoIGZyb20gJy4vaXNNYXRjaC5qcyc7XG5cbi8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7XG4gIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBkZWVwR2V0IGZyb20gJy4vX2RlZXBHZXQuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICB9O1xufVxuIiwiLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbi8vIGZ1bmN0aW9ucy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH07XG4gICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuaW1wb3J0IG9wdGltaXplQ2IgZnJvbSAnLi9fb3B0aW1pemVDYi5qcyc7XG5cbi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbi8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYF8uaWRlbnRpdHlgLFxuLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkpIHJldHVybiBtYXRjaGVyKHZhbHVlKTtcbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemVcbi8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbi8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYGFyZ0NvdW50YCBhcmd1bWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbn1cbl8uaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXRlcmF0ZWUgZnJvbSAnLi9pdGVyYXRlZS5qcyc7XG5cbi8vIFRoZSBmdW5jdGlvbiB3ZSBjYWxsIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgYSBjYWxsYmFjay4gSXQgaW52b2tlc1xuLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICBpZiAoXy5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcE9iamVjdChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGgsXG4gICAgICByZXN1bHRzID0ge307XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzW2luZGV4XTtcbiAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub29wKCl7fVxuIiwiaW1wb3J0IG5vb3AgZnJvbSAnLi9ub29wLmpzJztcbmltcG9ydCBnZXQgZnJvbSAnLi9nZXQuanMnO1xuXG4vLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTtcbiAgfTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuXG4vLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gIHJldHVybiBhY2N1bTtcbn1cbiIsIi8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG4gIGlmIChtYXggPT0gbnVsbCkge1xuICAgIG1heCA9IG1pbjtcbiAgICBtaW4gPSAwO1xuICB9XG4gIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xufVxuIiwiLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuZXhwb3J0IGRlZmF1bHQgRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn07XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzXG4vLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgfTtcbiAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLlxuICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gIH07XG59XG4iLCIvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuZXhwb3J0IGRlZmF1bHQge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7J1xufTtcbiIsImltcG9ydCBjcmVhdGVFc2NhcGVyIGZyb20gJy4vX2NyZWF0ZUVzY2FwZXIuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgY3JlYXRlRXNjYXBlciBmcm9tICcuL19jcmVhdGVFc2NhcGVyLmpzJztcbmltcG9ydCB1bmVzY2FwZU1hcCBmcm9tICcuL191bmVzY2FwZU1hcC5qcyc7XG5cbi8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcbiIsImltcG9ydCBpbnZlcnQgZnJvbSAnLi9pbnZlcnQuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuXG5leHBvcnQgZGVmYXVsdCBpbnZlcnQoZXNjYXBlTWFwKTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuZXhwb3J0IGRlZmF1bHQgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICBlc2NhcGU6IC88JS0oW1xcc1xcU10rPyklPi9nXG59O1xuIiwiaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcblxuLy8gV2hlbiBjdXN0b21pemluZyBgXy50ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4vLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbnZhciBub01hdGNoID0gLyguKV4vO1xuXG4vLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuLy8gc3RyaW5nIGxpdGVyYWwuXG52YXIgZXNjYXBlcyA9IHtcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxcXCc6ICdcXFxcJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcbic6ICduJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIobWF0Y2gpIHtcbiAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xufVxuXG4vLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbi8vIGBfLnRlbXBsYXRlU2V0dGluZ3MudmFyaWFibGVgLCB3ZSB0ZXN0IGl0IGFnYWluc3QgdGhlIGZvbGxvd2luZyByZWd1bGFyXG4vLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbi8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3Jcbi8vIGRlc3RydWN0dXJpbmcgYXNzaWdubWVudC5cbnZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbi8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4vLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4vLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbi8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICBzZXR0aW5ncyA9IGRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgIGlmIChlc2NhcGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICB9XG5cbiAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTtcbiAgaWYgKGFyZ3VtZW50KSB7XG4gICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICBhcmd1bWVudCA9ICdvYmonO1xuICB9XG5cbiAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICB2YXIgcmVuZGVyO1xuICB0cnkge1xuICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICByZXR1cm4gdGVtcGxhdGU7XG59XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVuIG9mIGBvYmpgIGFsb25nIGBwYXRoYC4gSWYgYSBjaGlsZCBpcyBhIGZ1bmN0aW9uLCBpdFxuLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4vLyBjaGlsZCwgb3IgYGZhbGxiYWNrYCBpZiBhbnkgY2hpbGQgaXMgdW5kZWZpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdWx0KG9iaiwgcGF0aCwgZmFsbGJhY2spIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGZhbGxiYWNrKSA/IGZhbGxiYWNrLmNhbGwob2JqKSA6IGZhbGxiYWNrO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW3BhdGhbaV1dO1xuICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgIGkgPSBsZW5ndGg7IC8vIEVuc3VyZSB3ZSBkb24ndCBjb250aW51ZSBpdGVyYXRpbmcuXG4gICAgfVxuICAgIG9iaiA9IGlzRnVuY3Rpb24ocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbiIsIi8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4vLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxudmFyIGlkQ291bnRlciA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWxcbi8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbi8vIG5vcm1hbCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgcmV0dXJuIHNlbGY7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4vLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmVcbi8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG52YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgIH1cbiAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSBfO1xuZXhwb3J0IGRlZmF1bHQgcGFydGlhbDtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuXG4vLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbi8vIG9wdGlvbmFsbHkpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gIGlmICghaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICB9KTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbi8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3QuXG4vLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbi8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRMZW5ndGgpO1xuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5cbi8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gIGlmICghZGVwdGggJiYgZGVwdGggIT09IDApIHtcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHtcbiAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChpbnB1dCk7XG4gIH1cbiAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgZmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9iaW5kLmpzJztcblxuLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4vLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3Ncbi8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICB9XG4gIHJldHVybiBvYmo7XG59KTtcbiIsImltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxuLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgfTtcbiAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICByZXR1cm4gbWVtb2l6ZTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5cbi8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbi8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykge1xuICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgfSwgd2FpdCk7XG59KTtcbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi9kZWxheS5qcyc7XG5pbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbi8vIGNsZWFyZWQuXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGRlbGF5LCBfLCAxKTtcbiIsImltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2Vcbi8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3Ncbi8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gX25vdztcbiAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpO1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IF9ub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBwcmV2aW91cyA9IDA7XG4gICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBXaGVuIGEgc2VxdWVuY2Ugb2YgY2FsbHMgb2YgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGVuZHMsIHRoZSBhcmd1bWVudFxuLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgXG4vLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbi8vIHRyaWdnZXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7XG4gICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gcGFzc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuXG4gICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gX2FyZ3M7XG4gICAgcHJldmlvdXMgPSBub3coKTtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIGRlYm91bmNlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkO1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4vLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4vLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcChmdW5jLCB3cmFwcGVyKSB7XG4gIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xufVxuIiwiLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaSA9IHN0YXJ0O1xuICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlXG4vLyBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJlZm9yZSh0aW1lcywgZnVuYykge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgIHJldHVybiBtZW1vO1xuICB9O1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcbmltcG9ydCBiZWZvcmUgZnJvbSAnLi9iZWZvcmUuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbi8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGJlZm9yZSwgMik7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gIH1cbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiIsImltcG9ydCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4vLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gIH1cbiAgcmV0dXJuIGxvdztcbn1cbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzTmFOIGZyb20gJy4vaXNOYU4uanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgfVxuICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOKTtcbiAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICB9XG4gICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcbn1cbiIsImltcG9ydCBzb3J0ZWRJbmRleCBmcm9tICcuL3NvcnRlZEluZGV4LmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuaW1wb3J0IGNyZWF0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbi8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuIiwiaW1wb3J0IGZpbmRMYXN0SW5kZXggZnJvbSAnLi9maW5kTGFzdEluZGV4LmpzJztcbmltcG9ydCBjcmVhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBmaW5kS2V5IGZyb20gJy4vZmluZEtleS5qcyc7XG5cbi8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICB2YXIga2V5ID0ga2V5RmluZGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbn1cbiIsImltcG9ydCBmaW5kIGZyb20gJy4vZmluZC5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuXG4vLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kV2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4vLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4vLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBpLCBsZW5ndGg7XG4gIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaXRlcmF0ZWUob2JqW19rZXlzW2ldXSwgX2tleXNbaV0sIG9iaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpXG4gIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICBpbmRleCArPSBkaXI7XG4gICAgfVxuICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgcmV0dXJuIHJlZHVjZXIob2JqLCBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KSwgbWVtbywgaW5pdGlhbCk7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbi8vIG9yIGBmb2xkbGAuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSZWR1Y2UoMSk7XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVkdWNlKC0xKTtcbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29tZShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBpbmRleE9mIGZyb20gJy4vaW5kZXhPZi5qcyc7XG5cbi8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICByZXR1cm4gaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgZGVlcEdldCBmcm9tICcuL19kZWVwR2V0LmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICB2YXIgY29udGV4dFBhdGgsIGZ1bmM7XG4gIGlmIChpc0Z1bmN0aW9uKHBhdGgpKSB7XG4gICAgZnVuYyA9IHBhdGg7XG4gIH0gZWxzZSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIHBhdGggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZnVuYztcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkge1xuICAgICAgICBjb250ZXh0ID0gZGVlcEdldChjb250ZXh0LCBjb250ZXh0UGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgbWV0aG9kID0gY29udGV4dFtwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBsdWNrKG9iaiwga2V5KSB7XG4gIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTtcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcblxuLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seVxuLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbnZhciByZVN0clN5bWJvbCA9IC9bXlxcdWQ4MDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkZmZmXS9nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gIHJldHVybiB2YWx1ZXMob2JqKTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSAnLi90b0FycmF5LmpzJztcblxuLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbi8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4vLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkge1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICB9XG4gIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbmd0aCksIDApO1xuICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgdmFyIHJhbmQgPSByYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdO1xuICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gIH1cbiAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTtcbn1cbiIsImltcG9ydCBzYW1wbGUgZnJvbSAnLi9zYW1wbGUuanMnO1xuXG4vLyBTaHVmZmxlIGEgY29sbGVjdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IHBsdWNrIGZyb20gJy4vcGx1Y2suanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5cbi8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KVxuICAgIH07XG4gIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gIH0pLCAndmFsdWUnKTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHBhcnRpdGlvbiA/IFtbXSwgW11dIDoge307XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbi8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5cbi8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvclxuLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIHJlc3VsdFtrZXldID0gdmFsdWU7XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4vLyBjcml0ZXJpb24uXG5leHBvcnQgZGVmYXVsdCBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuXG4vLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHBhc3MgdGhlIGdpdmVuXG4vLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG59LCB0cnVlKTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaXplKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBrZXlzKG9iaikubGVuZ3RoO1xufVxuIiwiLy8gSW50ZXJuYWwgYF8ucGlja2AgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGBrZXlgIGlzIGFuIGVudW1lcmFibGVcbi8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBrZXlJbk9iaih2YWx1ZSwga2V5LCBvYmopIHtcbiAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcbmltcG9ydCBrZXlJbk9iaiBmcm9tICcuL19rZXlJbk9iai5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgaWYgKGlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICBrZXlzID0gYWxsS2V5cyhvYmopO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAga2V5cyA9IGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbWFwLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuaW1wb3J0IHBpY2sgZnJvbSAnLi9waWNrLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gIGlmIChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBjb250ZXh0ID0ga2V5c1sxXTtcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gbWFwKGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKSwgU3RyaW5nKTtcbiAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xufSk7XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG59XG4iLCJpbXBvcnQgaW5pdGlhbCBmcm9tICcuL2luaXRpYWwuanMnO1xuXG4vLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbi8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZVxuLy8gYGFycmF5YC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG59XG4iLCJpbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QuanMnO1xuXG4vLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4vLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcblxuLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbn1cbiIsImltcG9ydCBfZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIHVwIHRvIGBkZXB0aGAuXG4vLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7XG4gIHJldHVybiBfZmxhdHRlbihhcnJheSwgZGVwdGgsIGZhbHNlKTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4vLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICByZXN0ID0gZmxhdHRlbihyZXN0LCB0cnVlLCB0cnVlKTtcbiAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBkaWZmZXJlbmNlIGZyb20gJy4vZGlmZmVyZW5jZS5qcyc7XG5cbi8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgb3RoZXJBcnJheXMpIHtcbiAgcmV0dXJuIGRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTtcbn0pO1xuIiwiaW1wb3J0IGlzQm9vbGVhbiBmcm9tICcuL2lzQm9vbGVhbi5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuLy8gdGhlIGZhc3RlciBhbGdvcml0aG0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIHNlZW4gPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFjb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bmlxIGZyb20gJy4vdW5pcS5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4vLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiB1bmlxKGZsYXR0ZW4oYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG59KTtcbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuLy8gcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgIHZhciBqO1xuICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgfVxuICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tICcuL21heC5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgcGx1Y2sgZnJvbSAnLi9wbHVjay5qcyc7XG5cbi8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4vLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bnppcCBmcm9tICcuL3VuemlwLmpzJztcblxuLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKHVuemlwKTtcbiIsImltcG9ydCBnZXRMZW5ndGggIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbi8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBQYXNzaW5nIGJ5IHBhaXJzIGlzIHRoZSByZXZlcnNlIG9mIGBfLnBhaXJzYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4vLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgc3RhcnQgPSAwO1xuICB9XG4gIGlmICghc3RlcCkge1xuICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyXG4vLyBpdGVtcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoYWluUmVzdWx0KGluc3RhbmNlLCBvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgZnVuY3Rpb25zIGZyb20gJy4vZnVuY3Rpb25zLmpzJztcbmltcG9ydCB7IHB1c2ggfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgY2hhaW5SZXN1bHQgZnJvbSAnLi9fY2hhaW5SZXN1bHQuanMnO1xuXG4vLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaXhpbihvYmopIHtcbiAgZWFjaChmdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBfO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgeyBBcnJheVByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNoYWluUmVzdWx0IGZyb20gJy4vX2NoYWluUmVzdWx0LmpzJztcblxuLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JqWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgfTtcbn0pO1xuXG4vLyBBZGQgYWxsIGFjY2Vzc29yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICB9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IF87XG4iLCIvLyBEZWZhdWx0IEV4cG9ydFxuLy8gPT09PT09PT09PT09PT1cbi8vIEluIHRoaXMgbW9kdWxlLCB3ZSBtaXggb3VyIGJ1bmRsZWQgZXhwb3J0cyBpbnRvIHRoZSBgX2Agb2JqZWN0IGFuZCBleHBvcnRcbi8vIHRoZSByZXN1bHQuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHNldHRpbmcgYG1vZHVsZS5leHBvcnRzID0gX2AgaW4gQ29tbW9uSlMuXG4vLyBIZW5jZSwgdGhpcyBtb2R1bGUgaXMgYWxzbyB0aGUgZW50cnkgcG9pbnQgb2Ygb3VyIFVNRCBidW5kbGUgYW5kIHRoZSBwYWNrYWdlXG4vLyBlbnRyeSBwb2ludCBmb3IgQ29tbW9uSlMgYW5kIEFNRCB1c2Vycy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgKHRoZSBzb3VyY2Vcbi8vIG9mKSB0aGUgbW9kdWxlIHlvdSBhcmUgaW50ZXJmYWNpbmcgd2l0aCB3aGVuIHlvdSBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBgYGBqc1xuLy8gLy8gQ29tbW9uSlNcbi8vIHZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9cbi8vIC8vIEFNRFxuLy8gZGVmaW5lKFsndW5kZXJzY29yZSddLCBmdW5jdGlvbihfKSB7Li4ufSk7XG4vL1xuLy8gLy8gVU1EIGluIHRoZSBicm93c2VyXG4vLyAvLyBfIGlzIGF2YWlsYWJsZSBhcyBhIGdsb2JhbCB2YXJpYWJsZVxuLy8gYGBgXG5pbXBvcnQgKiBhcyBhbGxFeHBvcnRzIGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IHsgbWl4aW4gfSBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxudmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbi8vIExlZ2FjeSBOb2RlLmpzIEFQSS5cbl8uXyA9IF87XG4vLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgQVBJLlxuZXhwb3J0IGRlZmF1bHQgXztcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MsIFNPUlRfREVTQyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG50eXBlIERhdGFPcGVyYXRvciA9IHtcbiAgbmV4dE9yZGVyOiAoXG4gICAgY29sdW1uOiBhbnksXG4gICAgc3RhdGU6IHsgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZCB9LFxuICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBzdHJpbmdcbiAgKSA9PiBzdHJpbmc7XG4gIHNvcnQ6IChcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBvcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZFxuICApID0+IGFueVtdO1xufTtcblxudHlwZSBIYW5kbGVTb3J0Q2hhbmdlID0gKFxuICBkYXRhRmllbGQ6IHN0cmluZyxcbiAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWRcbikgPT4gdm9pZDtcblxuLy9cbmludGVyZmFjZSBTb3J0Q29udGV4dFZhbHVlIHtcbiAgZGF0YTogYW55W107XG4gIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvblNvcnQ6IChjb2x1bW46IGFueSkgPT4gdm9pZDtcbiAgc29ydEZpZWxkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgU29ydFByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogYW55W107XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRlZmF1bHRTb3J0ZWQ/OiBBcnJheTx7XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgb3JkZXI6IHR5cGVvZiBTT1JUX0FTQyB8IHR5cGVvZiBTT1JUX0RFU0M7XG4gIH0+O1xuICBzb3J0Pzoge1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xuICAgIHNvcnRGdW5jOiAoYTogYW55LCBiOiBhbnksIG9yZGVyOiBzdHJpbmcsIGRhdGFGaWVsZDogc3RyaW5nKSA9PiBudW1iZXI7XG4gIH07XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gIGRhdGFPcGVyYXRvcjogRGF0YU9wZXJhdG9yLFxuICBpc1JlbW90ZVNvcnQ6ICgpID0+IGJvb2xlYW4sXG4gIGhhbmRsZVNvcnRDaGFuZ2U6IEhhbmRsZVNvcnRDaGFuZ2VcbikgPT4ge1xuICBjb25zdCBkZWZhdWx0U29ydENvbnRleHQgPSB7XG4gICAgZGF0YTogW10sXG4gICAgc29ydE9yZGVyOiB1bmRlZmluZWQsXG4gICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgc29ydEZpZWxkOiBudWxsLFxuICB9O1xuICBjb25zdCBTb3J0Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8U29ydENvbnRleHRWYWx1ZT4oZGVmYXVsdFNvcnRDb250ZXh0KTtcblxuICBjbGFzcyBTb3J0UHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8U29ydFByb3ZpZGVyUHJvcHM+IHtcbiAgICBzdGF0ZToge1xuICAgICAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBzb3J0Q29sdW1uOlxuICAgICAgfCB7XG4gICAgICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIG9uU29ydDogRnVuY3Rpb247XG4gICAgICAgIHNvcnRGdW5jOiBGdW5jdGlvbjtcbiAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH0gPSB7XG4gICAgICAgIHNvcnRPcmRlcjogU09SVF9BU0MsXG4gICAgICAgIHNvcnRDb2x1bW46IHtcbiAgICAgICAgICBkYXRhRmllbGQ6IFwiaWRcIixcbiAgICAgICAgICB0ZXh0OiBcIklEXCIsXG4gICAgICAgICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgICAgICAgc29ydEZ1bmM6ICgpID0+IHsgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogU29ydFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnRlZCwgZGVmYXVsdFNvcnREaXJlY3Rpb24sIHNvcnQgfSA9IHByb3BzO1xuXG4gICAgICBsZXQgc29ydE9yZGVyOiBhbnk7XG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoZGVmYXVsdFNvcnRlZCAmJiBkZWZhdWx0U29ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydE9yZGVyID0gZGVmYXVsdFNvcnRlZFswXS5vcmRlciB8fCBkZWZhdWx0U29ydERpcmVjdGlvbjtcbiAgICAgICAgc29ydENvbHVtbiA9IHRoaXMuaW5pdFNvcnQoZGVmYXVsdFNvcnRlZFswXS5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHNvcnQgJiYgc29ydC5kYXRhRmllbGQgJiYgc29ydC5vcmRlcikge1xuICAgICAgICBzb3J0T3JkZXIgPSBzb3J0Lm9yZGVyO1xuICAgICAgICBzb3J0Q29sdW1uID0gdGhpcy5pbml0U29ydChzb3J0LmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpICYmIHNvcnRPcmRlciAmJiBzb3J0Q29sdW1uKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2Uoc29ydENvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIG5leHRQcm9wczogU29ydFByb3ZpZGVyUHJvcHMsXG4gICAgICBwcmV2U3RhdGU6IGFueVxuICAgICkge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2x1bW5zIH0gPSBuZXh0UHJvcHM7XG5cbiAgICAgIGlmIChzb3J0ICYmIHNvcnQuZGF0YUZpZWxkICYmIHNvcnQub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3J0T3JkZXI6IHNvcnQub3JkZXIsXG4gICAgICAgICAgc29ydENvbHVtbjogY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5kYXRhRmllbGQgPT09IHNvcnQuZGF0YUZpZWxkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTb3J0KHNvcnRGaWVsZDogc3RyaW5nLCBzb3J0T3JkZXI6IHN0cmluZykge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc29ydENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0RmllbGQpO1xuXG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoc29ydENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzb3J0Q29sdW1uID0gc29ydENvbHVtbnNbMF07XG4gICAgICAgIGlmIChzb3J0Q29sdW1uLm9uU29ydCkge1xuICAgICAgICAgIHNvcnRDb2x1bW4ub25Tb3J0KHNvcnRGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc29ydENvbHVtbjtcbiAgICB9XG5cbiAgICBoYW5kbGVTb3J0ID0gKGNvbHVtbjogeyBkYXRhRmllbGQ6IHN0cmluZzsgb25Tb3J0OiBGdW5jdGlvbiB9KSA9PiB7XG4gICAgICBjb25zdCBzb3J0T3JkZXIgPSBkYXRhT3BlcmF0b3IubmV4dE9yZGVyKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHRoaXMuc3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMuZGVmYXVsdFNvcnREaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4ub25Tb3J0KSB7XG4gICAgICAgIGNvbHVtbi5vblNvcnQoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2UoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0Q29sdW1uOiBjb2x1bW4sXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsgc29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoIWlzUmVtb3RlU29ydCgpICYmIHNvcnRDb2x1bW4pIHtcbiAgICAgICAgY29uc3Qgc29ydEZ1bmMgPSBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgPyBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgOiBzb3J0ICYmIHNvcnQuc29ydEZ1bmM7XG4gICAgICAgIGRhdGEgPSBkYXRhT3BlcmF0b3Iuc29ydChkYXRhLCBzb3J0T3JkZXIsIHsgLi4uc29ydENvbHVtbiwgc29ydEZ1bmMgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICAgICAgb25Tb3J0OiB0aGlzLmhhbmRsZVNvcnQsXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNvcnRDb2x1bW4gPyBzb3J0Q29sdW1uLmRhdGFGaWVsZCA6IG51bGwsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L1NvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBTb3J0UHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IFNvcnRDb250ZXh0LkNvbnN1bWVyLFxuICB9O1xufTtcbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IENvbHVtblJlc29sdmVyIGZyb20gXCIuL2NvbHVtbi1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBUYWJsZVJlc29sdmVyIGV4dGVuZHMgQ29sdW1uUmVzb2x2ZXIoRXh0ZW5kQmFzZSkge1xuICAgIHZhbGlkYXRlUHJvcHMoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFrZXlGaWVsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugc3BlY2lmeSBhIGZpZWxkIGFzIGtleSB2aWEga2V5RmllbGRcIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1uU2l6ZShmYWxzZSkgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2aXNpYmxlIGNvbHVtbnMgZGV0ZWN0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHZpc2libGVSb3dzKCkge1xuICAgICAgY29uc3QgeyBkYXRhLCBoaWRkZW5Sb3dzLCBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghaGlkZGVuUm93cyB8fCBoaWRkZW5Sb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoaGlkZGVuUm93cywga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IEhlYWRlckNlbGwgZnJvbSBcIi4vaGVhZGVyLWNlbGxcIjtcbmltcG9ydCBFeHBhbmRIZWFkZXJDZWxsIGZyb20gXCIuL3Jvdy1leHBhbmQvZXhwYW5kLWhlYWRlci1jZWxsXCI7XG5pbXBvcnQgd2l0aEhlYWRlckV4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lclwiO1xuaW1wb3J0IFNlbGVjdGlvbkhlYWRlckNlbGwgZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGxcIjtcbmltcG9ydCB3aXRoSGVhZGVyU2VsZWN0aW9uIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyXCI7XG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICBvblNvcnQ/OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIHNvcnRGaWVsZD86IHN0cmluZztcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBzZWxlY3RSb3c/OiBhbnk7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZ2xvYmFsU29ydENhcmV0PzogKG9yZGVyOiBzdHJpbmcsIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmc7XG4gIGV4cGFuZFJvdz86IGFueTtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sdW1ucyxcbiAgICBvblNvcnQsXG4gICAgb25GaWx0ZXIsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnRPcmRlcixcbiAgICBzZWxlY3RSb3csXG4gICAgZXhwYW5kUm93LFxuICAgIGN1cnJGaWx0ZXJzLFxuICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgZmlsdGVyUG9zaXRpb24sXG4gICAgZ2xvYmFsU29ydENhcmV0LFxuICAgIHdyYXBwZXJDbGFzc2VzLFxuICB9ID0gcHJvcHM7XG5cbiAgbGV0IFNlbGVjdGlvbkhlYWRlckNlbGxDb21wOiBSZWFjdC5GQyA9ICgpID0+IG51bGw7XG4gIGxldCBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcDogUmVhY3QuRkMgPSAoKSA9PiBudWxsO1xuXG4gIGlmIChleHBhbmRSb3c/LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCA9IHdpdGhIZWFkZXJFeHBhbnNpb24oRXhwYW5kSGVhZGVyQ2VsbCk7XG4gIH1cblxuICBpZiAoc2VsZWN0Um93KSB7XG4gICAgU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyU2VsZWN0aW9uKFNlbGVjdGlvbkhlYWRlckNlbGwpO1xuICB9XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChwb3NpdGlvbiA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUKSA9PlxuICAgIHBvc2l0aW9uID09PSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgY29uc3QgY3VyclNvcnQgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG4gICAgY29uc3QgaXNMYXN0U29ydGluZyA9IGNvbHVtbi5kYXRhRmllbGQgPT09IHNvcnRGaWVsZDtcblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ2VsbFxuICAgICAgICBpbmRleD17aX1cbiAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgb25Tb3J0PXtvblNvcnR9XG4gICAgICAgIHNvcnRpbmc9e2N1cnJTb3J0fVxuICAgICAgICBzb3J0T3JkZXI9e3NvcnRPcmRlcn1cbiAgICAgICAgZ2xvYmFsU29ydENhcmV0PXtnbG9iYWxTb3J0Q2FyZXR9XG4gICAgICAgIGlzTGFzdFNvcnRpbmc9e2lzTGFzdFNvcnRpbmd9XG4gICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgY3VyckZpbHRlcnM9e2N1cnJGaWx0ZXJzfVxuICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXtvbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICBmaWx0ZXJQb3NpdGlvbj17ZmlsdGVyUG9zaXRpb259XG4gICAgICAvPlxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgIXNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoc2VsZWN0Um93LnNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93Py5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoZXhwYW5kUm93LmV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0aGVhZCBjbGFzc05hbWU9e3dyYXBwZXJDbGFzc2VzfT5cbiAgICAgIDx0ciBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2NoaWxkcmVuc308L3RyPlxuICAgIDwvdGhlYWQ+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXzsiLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjcmVhdGVFeHBhbnNpb25Db250ZXh0IGZyb20gXCIuLi9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4uL3Jvdy9zaG91bGQtdXBkYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgRXhwYW5kUm93IGZyb20gXCIuL2V4cGFuZC1yb3dcIjtcblxuY29uc3QgRXhwYW5zaW9uQ29udGV4dCA9IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8Um93UHJvcHM+XG4pOiBSZWFjdC5GQzxSb3dQcm9wcz4gPT4ge1xuICBjb25zdCByZW5kZXJXaXRoRXhwYW5zaW9uID0gKFxuICAgIHByb3BzOiBSb3dQcm9wcyxcbiAgICBleHBhbmRSb3c6IGFueVxuICApOiBSZWFjdC5SZWFjdE5vZGVbXSA9PiB7XG4gICAgaWYgKCFleHBhbmRSb3cpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50Q2xhc3NOYW1lID0gXCJcIjtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcblxuICAgIGNvbnN0IGV4cGFuZGVkID0gXy5jb250YWlucyhleHBhbmRSb3cuZXhwYW5kZWQsIGtleSk7XG4gICAgY29uc3QgaXNDbG9zaW5nID0gXy5jb250YWlucyhleHBhbmRSb3cuaXNDbG9zaW5nLCBrZXkpO1xuICAgIGNvbnN0IGV4cGFuZGFibGUgPVxuICAgICAgIWV4cGFuZFJvdy5ub25FeHBhbmRhYmxlIHx8ICFfLmNvbnRhaW5zKGV4cGFuZFJvdy5ub25FeHBhbmRhYmxlLCBrZXkpO1xuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgcGFyZW50Q2xhc3NOYW1lID0gXy5pc0Z1bmN0aW9uKGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUpXG4gICAgICAgID8gZXhwYW5kUm93LnBhcmVudENsYXNzTmFtZShleHBhbmRlZCwgcHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lIHx8IFwiXCI7XG5cbiAgICAgIGNsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cuY2xhc3NOYW1lKVxuICAgICAgICA/IGV4cGFuZFJvdy5jbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogZXhwYW5kUm93LmNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgZXhwYW5kUm93PXt7IC4uLmV4cGFuZFJvdyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NzKHByb3BzLmNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKX1cbiAgICAgIC8+LFxuICAgICAgZXhwYW5kZWQgfHwgaXNDbG9zaW5nID8gKFxuICAgICAgICA8RXhwYW5kUm93XG4gICAgICAgICAga2V5PXtgJHtrZXl9LWV4cGFuZGluZ2B9XG4gICAgICAgICAgY29sU3Bhbj17cHJvcHMudmlzaWJsZUNvbHVtblNpemUhfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBvbkNsb3NlZD17KCkgPT4gZXhwYW5kUm93Lm9uQ2xvc2VkKGtleSl9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7ZXhwYW5kUm93LnJlbmRlcmVyKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpfVxuICAgICAgICA8L0V4cGFuZFJvdz5cbiAgICAgICkgOiBudWxsLFxuICAgIF07XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wcykgPT4gKFxuICAgIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhleHBhbmRSb3cpID0+IHJlbmRlcldpdGhFeHBhbnNpb24ocHJvcHMsIGV4cGFuZFJvdyl9XG4gICAgPC9FeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFeHBhbmRSb3dQcm9wcywgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUk9XX1NFTEVDVF9ESVNBQkxFRCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgd2l0aFJvd0V4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lclwiO1xuaW1wb3J0IHdpdGhSb3dTZWxlY3Rpb24gZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXJcIjtcbmltcG9ydCBSb3dBZ2dyZWdhdG9yIGZyb20gXCIuL3Jvdy9hZ2dyZWdhdGUtcm93XCI7XG5pbXBvcnQgUm93U2VjdGlvbiBmcm9tIFwiLi9yb3cvcm93LXNlY3Rpb25cIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vcm93L3Nob3VsZC11cGRhdGVyXCI7XG5pbXBvcnQgU2ltcGxlUm93IGZyb20gXCIuL3Jvdy9zaW1wbGUtcm93XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgQm9keVByb3BzIHtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBzZWxlY3RSb3c/OiBTZWxlY3RSb3dQcm9wczxhbnk+IHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdDogYW55O1xuICB0YWJJbmRleENlbGw/OiBib29sZWFuO1xuICBpc0VtcHR5PzogYm9vbGVhbjtcbiAgbm9EYXRhSW5kaWNhdGlvbj86XG4gIHwgKCgpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nKVxuICB8IEpTWC5FbGVtZW50XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlQ29sdW1uU2l6ZT86IG51bWJlcjtcbiAgcm93U3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgcm93Q2xhc3Nlcz86IHN0cmluZyB8ICgocm93OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gIHJvd0V2ZW50cz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICBleHBhbmRSb3c/OiBFeHBhbmRSb3dQcm9wczxhbnksIGFueT4gfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuY2xhc3MgQm9keSBleHRlbmRzIENvbXBvbmVudDxCb2R5UHJvcHM+IHtcbiAgRWRpdGluZ0NlbGw6IGFueTtcbiAgUm93Q29tcG9uZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJvZHlQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGtleUZpZWxkLCBjZWxsRWRpdCwgc2VsZWN0Um93LCBleHBhbmRSb3cgfSA9IHByb3BzO1xuXG4gICAgLy8gQ29uc3RydWN0IEVkaXRpbmcgQ2VsbCBDb21wb25lbnRcbiAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgIHRoaXMuRWRpdGluZ0NlbGwgPSBjZWxsRWRpdC5jcmVhdGVFZGl0aW5nQ2VsbChcbiAgICAgICAgXyxcbiAgICAgICAgY2VsbEVkaXQub3B0aW9ucy5vblN0YXJ0RWRpdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgUm93IENvbXBvbmVudFxuICAgIGxldCBSb3dDb21wb25lbnQ6IGFueSA9IFNpbXBsZVJvdztcblxuICAgIGNvbnN0IHNlbGVjdFJvd0VuYWJsZWQgPSBzZWxlY3RSb3c/Lm1vZGUgIT09IFJPV19TRUxFQ1RfRElTQUJMRUQ7XG4gICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93IS5yZW5kZXJlcjtcblxuICAgIGlmIChleHBhbmRSb3dFbmFibGVkKSB7XG4gICAgICBSb3dDb21wb25lbnQgPSB3aXRoUm93RXhwYW5zaW9uKFJvd0FnZ3JlZ2F0b3IpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkKSB7XG4gICAgICBSb3dDb21wb25lbnQgPSB3aXRoUm93U2VsZWN0aW9uKFxuICAgICAgICBleHBhbmRSb3dFbmFibGVkID8gUm93Q29tcG9uZW50IDogUm93QWdncmVnYXRvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IGNlbGxFZGl0LndpdGhSb3dMZXZlbENlbGxFZGl0KFxuICAgICAgICBSb3dDb21wb25lbnQsXG4gICAgICAgIHNlbGVjdFJvd0VuYWJsZWQsXG4gICAgICAgIGtleUZpZWxkLFxuICAgICAgICBfXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuUm93Q29tcG9uZW50ID0gUm93Q29tcG9uZW50O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBkYXRhLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAga2V5RmllbGQsXG4gICAgICBpc0VtcHR5LFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbixcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgY2VsbEVkaXQsXG4gICAgICBzZWxlY3RSb3csXG4gICAgICByb3dTdHlsZSxcbiAgICAgIHJvd0NsYXNzZXMsXG4gICAgICByb3dFdmVudHMsXG4gICAgICBleHBhbmRSb3csXG4gICAgICBjbGFzc05hbWUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgY29udGVudDogUmVhY3ROb2RlO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIGNvbnN0IGluZGljYXRpb24gPSBfLmlzRnVuY3Rpb24obm9EYXRhSW5kaWNhdGlvbilcbiAgICAgICAgPyBub0RhdGFJbmRpY2F0aW9uKClcbiAgICAgICAgOiBub0RhdGFJbmRpY2F0aW9uO1xuICAgICAgaWYgKCFpbmRpY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29udGVudCA9IDxSb3dTZWN0aW9uIGNvbnRlbnQ9e2luZGljYXRpb259IGNvbFNwYW49e3Zpc2libGVDb2x1bW5TaXplfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdz8ubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRDtcbiAgICAgIGNvbnN0IGV4cGFuZFJvd0VuYWJsZWQgPSAhIWV4cGFuZFJvdyEucmVuZGVyZXI7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxSb3dQcm9wczogUm93UHJvcHMgPSB7fTtcblxuICAgICAgaWYgKGNlbGxFZGl0Py5jcmVhdGVDb250ZXh0KSB7XG4gICAgICAgIGFkZGl0aW9uYWxSb3dQcm9wcy5FZGl0aW5nQ2VsbENvbXBvbmVudCA9IHRoaXMuRWRpdGluZ0NlbGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RSb3dFbmFibGVkIHx8IGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLmV4cGFuZFJvdyA9IGV4cGFuZFJvdztcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLnNlbGVjdFJvdyA9IHNlbGVjdFJvdztcbiAgICAgIH1cblxuICAgICAgY29udGVudCA9IGRhdGEubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBiYXNlUm93UHJvcHMgPSB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICB0YWJJbmRleENlbGwsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgICBjZWxsRWRpdCxcbiAgICAgICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgICAgICAgIGF0dHJzOiByb3dFdmVudHMgfHwge30sXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsUm93UHJvcHMsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGJhc2VSb3dQcm9wcy5zdHlsZSA9IF8uaXNGdW5jdGlvbihyb3dTdHlsZSlcbiAgICAgICAgICAgID8gKHJvd1N0eWxlKHJvdywgaW5kZXgpIGFzIGFueSlcbiAgICAgICAgICAgIDogKHJvd1N0eWxlIGFzIGFueSk7XG4gICAgICAgICAgYmFzZVJvd1Byb3BzLmNsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihyb3dDbGFzc2VzKVxuICAgICAgICAgICAgPyByb3dDbGFzc2VzKHJvdywgaW5kZXgpXG4gICAgICAgICAgICA6IHJvd0NsYXNzZXM7XG5cbiAgICAgICAgICByZXR1cm4gPHRoaXMuUm93Q29tcG9uZW50IHsuLi5iYXNlUm93UHJvcHN9IC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gPHRib2R5IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57Y29udGVudH08L3Rib2R5PjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb2R5O1xuIiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBlbGVtZW50IGhhcyBhIENTUyBjbGFzcy5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICByZXR1cm4gKFwiIFwiICsgKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgZWxlbWVudC5jbGFzc05hbWUpICsgXCIgXCIpLmluZGV4T2YoXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIikgIT09IC0xO1xufSIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwIGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwJztcbi8qKlxuICogVGhlIGA8UmVwbGFjZVRyYW5zaXRpb24+YCBjb21wb25lbnQgaXMgYSBzcGVjaWFsaXplZCBgVHJhbnNpdGlvbmAgY29tcG9uZW50XG4gKiB0aGF0IGFuaW1hdGVzIGJldHdlZW4gdHdvIGNoaWxkcmVuLlxuICpcbiAqIGBgYGpzeFxuICogPFJlcGxhY2VUcmFuc2l0aW9uIGluPlxuICogICA8RmFkZT48ZGl2PkkgYXBwZWFyIGZpcnN0PC9kaXY+PC9GYWRlPlxuICogICA8RmFkZT48ZGl2PkkgcmVwbGFjZSB0aGUgYWJvdmU8L2Rpdj48L0ZhZGU+XG4gKiA8L1JlcGxhY2VUcmFuc2l0aW9uPlxuICogYGBgXG4gKi9cblxudmFyIFJlcGxhY2VUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlcGxhY2VUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXBsYWNlVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcicsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJpbmcnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJlZCcsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0JywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRpbmcnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0ZWQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlcGxhY2VUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlTGlmZWN5Y2xlID0gZnVuY3Rpb24gaGFuZGxlTGlmZWN5Y2xlKGhhbmRsZXIsIGlkeCwgb3JpZ2luYWxBcmdzKSB7XG4gICAgdmFyIF9jaGlsZCRwcm9wcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilbaWR4XTtcbiAgICBpZiAoY2hpbGQucHJvcHNbaGFuZGxlcl0pIChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcylbaGFuZGxlcl0uYXBwbHkoX2NoaWxkJHByb3BzLCBvcmlnaW5hbEFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHtcbiAgICAgIHZhciBtYXliZU5vZGUgPSBjaGlsZC5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICB0aGlzLnByb3BzW2hhbmRsZXJdKG1heWJlTm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHByb3BzLCBpblByb3AgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZmlyc3QsIHtcbiAgICAgIGtleTogJ2ZpcnN0JyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRW50ZXIsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUVudGVyZWRcbiAgICB9KSA6IFJlYWN0LmNsb25lRWxlbWVudChzZWNvbmQsIHtcbiAgICAgIGtleTogJ3NlY29uZCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUV4aXQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUV4aXRpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBSZXBsYWNlVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUmVwbGFjZVRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBpbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wc1twcm9wTmFtZV0pICE9PSAyKSByZXR1cm4gbmV3IEVycm9yKFwiXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgbXVzdCBiZSBleGFjdGx5IHR3byB0cmFuc2l0aW9uIGNvbXBvbmVudHMuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IDoge307XG5leHBvcnQgZGVmYXVsdCBSZXBsYWNlVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcblxudmFyIF9sZWF2ZVJlbmRlcnMsIF9lbnRlclJlbmRlcnM7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRU5URVJFRCwgRU5URVJJTkcsIEVYSVRJTkcgfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcblxuZnVuY3Rpb24gYXJlQ2hpbGRyZW5EaWZmZXJlbnQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuKSB7XG4gIGlmIChvbGRDaGlsZHJlbiA9PT0gbmV3Q2hpbGRyZW4pIHJldHVybiBmYWxzZTtcblxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQob2xkQ2hpbGRyZW4pICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0NoaWxkcmVuKSAmJiBvbGRDaGlsZHJlbi5rZXkgIT0gbnVsbCAmJiBvbGRDaGlsZHJlbi5rZXkgPT09IG5ld0NoaWxkcmVuLmtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBFbnVtIG9mIG1vZGVzIGZvciBTd2l0Y2hUcmFuc2l0aW9uIGNvbXBvbmVudFxuICogQGVudW0geyBzdHJpbmcgfVxuICovXG5cblxuZXhwb3J0IHZhciBtb2RlcyA9IHtcbiAgb3V0OiAnb3V0LWluJyxcbiAgaW46ICdpbi1vdXQnXG59O1xuXG52YXIgY2FsbEhvb2sgPSBmdW5jdGlvbiBjYWxsSG9vayhlbGVtZW50LCBuYW1lLCBjYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWxlbWVudCRwcm9wcztcblxuICAgIGVsZW1lbnQucHJvcHNbbmFtZV0gJiYgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcylbbmFtZV0uYXBwbHkoX2VsZW1lbnQkcHJvcHMsIGFyZ3VtZW50cyk7XG4gICAgY2IoKTtcbiAgfTtcbn07XG5cbnZhciBsZWF2ZVJlbmRlcnMgPSAoX2xlYXZlUmVuZGVycyA9IHt9LCBfbGVhdmVSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZi5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORywgbnVsbCk7XG4gICAgfSlcbiAgfSk7XG59LCBfbGVhdmVSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY3VycmVudCA9IF9yZWYyLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYyLmNoYW5nZVN0YXRlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIFtjdXJyZW50LCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcpO1xuICAgIH0pXG4gIH0pXTtcbn0sIF9sZWF2ZVJlbmRlcnMpO1xudmFyIGVudGVyUmVuZGVycyA9IChfZW50ZXJSZW5kZXJzID0ge30sIF9lbnRlclJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjMuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSk7XG59LCBfZW50ZXJSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY3VycmVudCA9IF9yZWY0LmN1cnJlbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmNC5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFtSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSksIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlXG4gIH0pXTtcbn0sIF9lbnRlclJlbmRlcnMpO1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBbdnVlIHRyYW5zaXRpb24gbW9kZXNdKGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3RyYW5zaXRpb25zLmh0bWwjVHJhbnNpdGlvbi1Nb2RlcykuXG4gKiBZb3UgY2FuIHVzZSBpdCB3aGVuIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHJlbmRlciBiZXR3ZWVuIHN0YXRlIHRyYW5zaXRpb25zLlxuICogQmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUgYW5kIHRoZSBjaGlsZCdzIGtleSB3aGljaCBpcyB0aGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgbWFrZXMgYSBjb25zaXN0ZW50IHRyYW5zaXRpb24gYmV0d2VlbiB0aGVtLlxuICpcbiAqIElmIHRoZSBgb3V0LWluYCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIHdhaXRzIHVudGlsIHRoZSBvbGQgY2hpbGQgbGVhdmVzIGFuZCB0aGVuIGluc2VydHMgYSBuZXcgY2hpbGQuXG4gKiBJZiB0aGUgYGluLW91dGAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBpbnNlcnRzIGEgbmV3IGNoaWxkIGZpcnN0LCB3YWl0cyBmb3IgdGhlIG5ldyBjaGlsZCB0byBlbnRlciBhbmQgdGhlbiByZW1vdmVzIHRoZSBvbGQgY2hpbGQuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSB3YW50IHRoZSBhbmltYXRpb24gdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gKiAodGhhdCBpcywgdG8gaGF2ZSB0aGUgb2xkIGNoaWxkIHJlbW92ZWQgYW5kIGEgbmV3IGNoaWxkIGluc2VydGVkICoqYXQgdGhlIHNhbWUgdGltZSoqKSxcbiAqIHlvdSBzaG91bGQgdXNlXG4gKiBbYFRyYW5zaXRpb25Hcm91cGBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi1ncm91cClcbiAqIGluc3RlYWQuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgcmV0dXJuIChcbiAqICAgIDxTd2l0Y2hUcmFuc2l0aW9uPlxuICogICAgICA8Q1NTVHJhbnNpdGlvblxuICogICAgICAgIGtleT17c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGRvbmUsIGZhbHNlKX1cbiAqICAgICAgICBjbGFzc05hbWVzPSdmYWRlJ1xuICogICAgICA+XG4gKiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTdGF0ZShzdGF0ZSA9PiAhc3RhdGUpfT5cbiAqICAgICAgICAgIHtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgPC9Td2l0Y2hUcmFuc2l0aW9uPlxuICogICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGBjc3NcbiAqIC5mYWRlLWVudGVye1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWV4aXR7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZle1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcztcbiAqIH1cbiAqIGBgYFxuICovXG5cbnZhciBTd2l0Y2hUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXRjaFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaFRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IEVOVEVSRUQsXG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfTtcbiAgICBfdGhpcy5hcHBlYXJlZCA9IGZhbHNlO1xuXG4gICAgX3RoaXMuY2hhbmdlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdHVzLCBjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcy5zdGF0ZS5jdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXRjaFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYXBwZWFyZWQgPSB0cnVlO1xuICB9O1xuXG4gIFN3aXRjaFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IEVOVEVSSU5HICYmIHByb3BzLm1vZGUgPT09IG1vZGVzLmluKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jdXJyZW50ICYmIGFyZUNoaWxkcmVuRGlmZmVyZW50KHN0YXRlLmN1cnJlbnQsIHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMuY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIG1vZGUgPSBfdGhpcyRwcm9wcy5tb2RlLFxuICAgICAgICBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0YXR1cyA9IF90aGlzJHN0YXRlLnN0YXR1cyxcbiAgICAgICAgY3VycmVudCA9IF90aGlzJHN0YXRlLmN1cnJlbnQ7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGU6IHRoaXMuY2hhbmdlU3RhdGUsXG4gICAgICBzdGF0dXM6IHN0YXR1c1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEVOVEVSSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBlbnRlclJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVYSVRJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGxlYXZlUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVJFRDpcbiAgICAgICAgY29tcG9uZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogIXRoaXMuYXBwZWFyZWRcbiAgICAgIH1cbiAgICB9LCBjb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiBTd2l0Y2hUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2hUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gbW9kZXMuXG4gICAqIGBvdXQtaW5gOiBDdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0IGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBuZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbi5cbiAgICogYGluLW91dGA6IE5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluIGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBjdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0LlxuICAgKlxuICAgKiBAdHlwZSB7J291dC1pbid8J2luLW91dCd9XG4gICAqL1xuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW21vZGVzLmluLCBtb2Rlcy5vdXRdKSxcblxuICAvKipcbiAgICogQW55IGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKVxufSA6IHt9O1xuU3dpdGNoVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIG1vZGU6IG1vZGVzLm91dFxufTtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFRyYW5zaXRpb247IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCxcbiAgU2VsZWN0aW9uQ29udGV4dFZhbHVlLFxufSBmcm9tIFwiLi4vY29udGV4dHMvc2VsZWN0aW9uLWNvbnRleHRcIjtcblxuaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0aW9uQ29udGV4dFZhbHVlIHsgfVxuXG5jb25zdCBTZWxlY3Rpb25Db250ZXh0ID0gY3JlYXRlU2VsZWN0aW9uQ29udGV4dCgpO1xuXG5jb25zdCB3aXRoU2VsZWN0aW9uQ29udGV4dCA9XG4gIChDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8UHJvcHM+KSA9PiAocHJvcHM6IGFueSkgPT4gKFxuICAgIDxTZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhzZWxlY3RSb3cpID0+IDxDb21wb25lbnQgey4uLnByb3BzfSB7Li4uc2VsZWN0Um93fSAvPn1cbiAgICA8L1NlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTZWxlY3Rpb25Db250ZXh0O1xuIiwiZXhwb3J0IGNvbnN0IFJPV19TRUxFQ1RfU0lOR0xFID0gXCJyYWRpb1wiO1xuZXhwb3J0IGNvbnN0IFJPV19TRUxFQ1RfTVVMVElQTEUgPSBcImNoZWNrYm94XCI7XG5leHBvcnQgY29uc3QgUk9XX1NFTEVDVF9ESVNBQkxFRCA9IFwiUk9XX1NFTEVDVF9ESVNBQkxFRFwiO1xuZXhwb3J0IGNvbnN0IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFID0gXCJpbmRldGVybWluYXRlXCI7XG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQgPSBcImNoZWNrZWRcIjtcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEID0gXCJ1bmNoZWNrZWRcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJTX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5leHBvcnQgY29uc3QgRklMVEVSU19QT1NJVElPTl9UT1AgPSBcInRvcFwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUlNfUE9TSVRJT05fQk9UVE9NID0gXCJib3R0b21cIjtcblxuZXhwb3J0IGNvbnN0IFNPUlRfQVNDID0gXCJhc2NcIjtcbmV4cG9ydCBjb25zdCBTT1JUX0RFU0MgPSBcImRlc2NcIjtcbmV4cG9ydCBjb25zdCBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCA9IFwibGVmdFwiO1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9QT1NJVElPTl9SSUdIVCA9IFwicmlnaHRcIjtcbmV4cG9ydCBjb25zdCBUWVBFX1NUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgVFlQRV9OVU1CRVIgPSBcIm51bWJlclwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfQk9PTEVBTiA9IFwiYm9vbFwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfREFURSA9IFwiZGF0ZVwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQsIHtcbiAgUm93RXhwYW5kQ29udGV4dFZhbHVlLFxufSBmcm9tIFwiLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHMgfSBmcm9tIFwiLi9leHBhbmQtaGVhZGVyLWNlbGxcIjtcblxuaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgZXhwYW5kUm93PzogUm93RXhwYW5kQ29udGV4dFZhbHVlO1xufVxuXG5jb25zdCBFeHBhbnNpb25Db250ZXh0ID0gY3JlYXRlRXhwYW5zaW9uQ29udGV4dCgpO1xuXG5jb25zdCB3aXRoRXhwYW5kQ29udGV4dCA9IChDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8UHJvcHM+KSA9PiAoKSA9PlxuICAoXG4gICAgPEV4cGFuc2lvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KGV4cGFuZFJvdykgPT4gPENvbXBvbmVudCB7IC4uLiBleHBhbmRSb3cgfSAvPn1cbiAgICA8L0V4cGFuc2lvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhFeHBhbmRDb250ZXh0O1xuIiwiaW1wb3J0ICogYXMgZXhwYW5kIGZyb20gXCIuL2V4cGFuZFwiO1xuaW1wb3J0ICogYXMgbXV0YXRlIGZyb20gXCIuL211dGF0ZVwiO1xuaW1wb3J0ICogYXMgcm93cyBmcm9tIFwiLi9yb3dzXCI7XG5pbXBvcnQgKiBhcyBzZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgKiBhcyBzb3J0IGZyb20gXCIuL3NvcnRcIjtcbmltcG9ydCAqIGFzIHR5cGUgZnJvbSBcIi4vdHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnJvd3MsXG4gIC4uLnNlbGVjdGlvbixcbiAgLi4uZXhwYW5kLFxuICAuLi5tdXRhdGUsXG4gIC4uLnNvcnQsXG4gIC4uLnR5cGUsXG59O1xuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IFJPV19TRUxFQ1RfRElTQUJMRUQgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBldmVudHM6IHN0cmluZ1tdID0gW1xuICBcIm9uQ2xpY2tcIixcbiAgXCJvbkRvdWJsZUNsaWNrXCIsXG4gIFwib25Nb3VzZUVudGVyXCIsXG4gIFwib25Nb3VzZUxlYXZlXCIsXG4gIFwib25Db250ZXh0TWVudVwiLFxuICBcIm9uQXV4Q2xpY2tcIixcbl07XG5cbmludGVyZmFjZSBSb3dFdmVudERlbGVnYXRlclByb3BzIHtcbiAgcm93OiBhbnk7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICBzZWxlY3RhYmxlOiBib29sZWFuO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICByb3dJbmRleDogbnVtYmVyO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgZXhwYW5kUm93OiBhbnk7XG4gIHNlbGVjdFJvdzogYW55O1xuICBERUxBWV9GT1JfREJDTElDSzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUm93RXZlbnREZWxlZ2F0ZXIgPSA8XG4gIFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbj4oRXh0ZW5kQmFzZTogVCkgPT4ge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFeHRlbmRCYXNlIHtcbiAgICBjbGlja051bTogbnVtYmVyID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKC4uLnByb3BzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4ucHJvcHMpO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID1cbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBFdmVudCwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgICApIHtcbiAgICAgIHJldHVybiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgZXhwYW5kUm93LFxuICAgICAgICAgIHNlbGVjdFJvdyxcbiAgICAgICAgICBERUxBWV9GT1JfREJDTElDSyxcbiAgICAgICAgfTogUm93RXZlbnREZWxlZ2F0ZXJQcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgY29uc3QgY2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuXG4gICAgICAgICAgaWYgKGV4cGFuZFJvdyAmJiBleHBhbmRhYmxlICYmICFleHBhbmRSb3cuZXhwYW5kQnlDb2x1bW5Pbmx5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChzZWxlY3RSb3cubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdFJvdy5jbGlja1RvRXhwYW5kKSB8fFxuICAgICAgICAgICAgICBzZWxlY3RSb3cubW9kZSA9PT0gUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGV4cGFuZFJvdy5vblJvd0V4cGFuZChrZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCAmJiBzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBzZWxlY3RSb3cub25Sb3dTZWxlY3Qoa2V5LCAhc2VsZWN0ZWQsIHJvd0luZGV4LCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKERFTEFZX0ZPUl9EQkNMSUNLKSB7XG4gICAgICAgICAgdGhpcy5jbGlja051bSArPSAxO1xuICAgICAgICAgIF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tOdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgY2xpY2tGbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGlja051bSA9IDA7XG4gICAgICAgICAgfSwgREVMQVlfRk9SX0RCQ0xJQ0spKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpY2tGbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoXG4gICAgICBjYjogKGU6IEV2ZW50LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJvdywgcm93SW5kZXggfTogUm93RXZlbnREZWxlZ2F0ZXJQcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZShhdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICBjb25zdCBuZXdBdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4uYXR0cnMgfTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGV2ZW50cywgYXR0cikpIHtcbiAgICAgICAgICBuZXdBdHRyc1thdHRyXSA9IHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihhdHRyc1thdHRyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJzO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQsXG4gIENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFLFxuICBST1dfU0VMRUNUX01VTFRJUExFLFxuICBST1dfU0VMRUNUX1NJTkdMRSxcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBDaGVja0JveFByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGVja2VkOiBib29sZWFuO1xuICBpbmRldGVybWluYXRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ2hlY2tCb3g6IFJlYWN0LkZDPENoZWNrQm94UHJvcHM+ID0gKHtcbiAgY2xhc3NOYW1lLFxuICBjaGVja2VkLFxuICBpbmRldGVybWluYXRlLFxufSkgPT4gKFxuICA8aW5wdXRcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgcmVmPXsoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgIH1cbiAgICB9fVxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7IH19XG4gIC8+XG4pO1xuXG5pbnRlcmZhY2UgU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgbW9kZT86IHN0cmluZztcbiAgY2hlY2tlZFN0YXR1cz86IHN0cmluZztcbiAgb25BbGxSb3dzU2VsZWN0PzogKFxuICAgIGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+LFxuICAgIGlzVW5TZWxlY3Q6IGJvb2xlYW5cbiAgKSA9PiB2b2lkO1xuICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdE5vZGU7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChjaGVja2VkU3RhdHVzOiBzdHJpbmcpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvbkhlYWRlckNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogU2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgY29uc3QgeyBtb2RlLCBjaGVja2VkU3RhdHVzIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV4dFByb3BzLmNoZWNrZWRTdGF0dXMgIT09IGNoZWNrZWRTdGF0dXM7XG4gIH1cblxuICBoYW5kbGVDaGVja0JveENsaWNrKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgeyBvbkFsbFJvd3NTZWxlY3QsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNVblNlbGVjdCA9XG4gICAgICBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCB8fFxuICAgICAgY2hlY2tlZFN0YXR1cyA9PT0gQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG5cbiAgICBvbkFsbFJvd3NTZWxlY3QhKGUsIGlzVW5TZWxlY3QpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGUsXG4gICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIsXG4gICAgICBoaWRlU2VsZWN0QWxsLFxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGUsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGhpZGVTZWxlY3RBbGwpIHtcbiAgICAgIHJldHVybiA8dGggZGF0YS1yb3ctc2VsZWN0aW9uIC8+O1xuICAgIH1cblxuICAgIGNvbnN0IGNoZWNrZWQgPSBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDtcblxuICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcblxuICAgIGNvbnN0IGF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4gPSB7fTtcbiAgICBsZXQgY29udGVudDogUmVhY3ROb2RlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciB8fCBtb2RlID09PSBST1dfU0VMRUNUX01VTFRJUExFKSB7XG4gICAgICBhdHRycy5vbkNsaWNrID0gdGhpcy5oYW5kbGVDaGVja0JveENsaWNrO1xuICAgIH1cblxuICAgIGF0dHJzLnN0eWxlID0gKF8uaXNGdW5jdGlvbihoZWFkZXJDb2x1bW5TdHlsZSlcbiAgICAgID8gaGVhZGVyQ29sdW1uU3R5bGUoY2hlY2tlZFN0YXR1cyEpXG4gICAgICA6IGhlYWRlckNvbHVtblN0eWxlKSBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsoeyBib290c3RyYXA0IH0pID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcih7XG4gICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfTVVMVElQTEUpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgIDxDaGVja0JveFxuICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtib290c3RyYXA0ID8gXCJzZWxlY3Rpb24taW5wdXQtNFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtpbmRldGVybWluYXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24gey4uLmF0dHJzIGFzIGFueX0+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24sIFNlbGVjdFJvd1Byb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCBGb290ZXJDZWxsIGZyb20gXCIuL2Zvb3Rlci1jZWxsXCI7XG5pbXBvcnQgUm93VGVtcGxhdGUsIHsgRXhwYW5kUm93IH0gZnJvbSBcIi4vcm93L3Jvdy10ZW1wbGF0ZVwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZvb3RlclByb3BzIHtcbiAgZGF0YT86IGFueVtdO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPGFueT4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvdztcbn1cblxuY29uc3QgRm9vdGVyOiBSZWFjdC5GQzxGb290ZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkYXRhID0gW10sIGNsYXNzTmFtZSwgY29sdW1ucyA9IFtdLCBzZWxlY3RSb3csIGV4cGFuZFJvdyB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgpOiBSZWFjdE5vZGUge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5mb290ZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW4uZGF0YUZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZvb3RlckNlbGxcbiAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgY29sdW1uRGF0YT17Y29sdW1uRGF0YX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Zm9vdD5cbiAgICAgIDxSb3dUZW1wbGF0ZVxuICAgICAgICByZW5kZXJDb250ZW50PXtyZW5kZXJDb250ZW50fVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBjZWxsRWw9XCJ0aFwiXG4gICAgICAvPlxuICAgIDwvdGZvb3Q+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb290ZXI7XG4iLCJpbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQm9vdHN0cmFwVGFibGUgZnJvbSBcIi4vc3JjL2Jvb3RzdHJhcC10YWJsZVwiO1xuaW1wb3J0IHdpdGhDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dChCb290c3RyYXBUYWJsZSk7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZXh0IDQuMFxuLy8gUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9yZWFjdC1ib290c3RyYXAtdGFibGUyI3JlYWRtZVxuLy8gRGVmaW5pdGlvbnMgYnk6IFdsYWQgTWVpeG5lciA8aHR0cHM6Ly9naXRodWIuY29tL2dvc3RpY2tzPlxuLy8gICAgICAgICAgICAgICAgVmFsZW50aW4gU2xvYm96YW5pbiA8aHR0cHM6Ly9naXRodWIuY29tL2lnbmVmb2xpbz5cbi8vICAgICAgICAgICAgICAgIEpha3ViIFLDs8W8Ymlja2kgPGh0dHBzOi8vZ2l0aHViLmNvbS9qcm96Ymlja2k+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWRcbi8vIFR5cGVTY3JpcHQgVmVyc2lvbjogMy4wXG5cbi8vIGRvY3VtZW50YXRpb24gdGFrZW4gZnJvbSBodHRwczovL3JlYWN0LWJvb3RzdHJhcC10YWJsZS5naXRodWIuaW8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kb2NzL3RhYmxlLXByb3BzLmh0bWxcblxuZXhwb3J0ICogZnJvbSBcIi4vc3JjL2NvbnN0XCI7XG5pbXBvcnQge1xuICBST1dfU0VMRUNUX1NJTkdMRSxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VELFxuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgRklMVEVSU19QT1NJVElPTl9UT1AsXG4gIEZJTFRFUlNfUE9TSVRJT05fQk9UVE9NLFxufSBmcm9tIFwiLi9zcmMvY29uc3RcIjtcblxuZXhwb3J0IHR5cGUgUm93U2VsZWN0aW9uVHlwZSA9XG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfU0lOR0xFXG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfTVVMVElQTEVcbiAgfCB0eXBlb2YgUk9XX1NFTEVDVF9ESVNBQkxFRDtcbmV4cG9ydCB0eXBlIFRhYmxlQ2hlY2tib3hTdGF0dXMgPVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRFxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEO1xuZXhwb3J0IHR5cGUgRmlsdGVyUG9zaXRpb24gPVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0lOTElORVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX1RPUFxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTTtcblxuLyoqXG4gKiBUYWJsZSBjaGFuZ2UgZXZlbnQgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDaGFuZ2VUeXBlID0gXCJmaWx0ZXJcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJzb3J0XCIgfCBcImNlbGxFZGl0XCI7XG5cbi8qKlxuICogVXNlZCB0byBzcGVjaWZ5IHRoZSB0ZXh0IGFsaWdubWVudCBmb3IgYSBjb2x1bW4uXG4gKi9cbmV4cG9ydCB0eXBlIENlbGxBbGlnbm1lbnQgPVxuICB8IChcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcInN0YXJ0XCIgfCBcImVuZFwiKVxuICB8IHN0cmluZztcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5kZWNsYXJlIGVudW0gRmlsdGVyQ29tcGFyYXRvciB7XG4gIExJS0UgPSBcIkxJS0VcIixcbiAgRVEgPSBcIj1cIixcbiAgTkUgPSBcIiE9XCIsXG4gIEdUID0gXCI+XCIsXG4gIEdFID0gXCI+PVwiLFxuICBMVCA9IFwiPFwiLFxuICBMRSA9IFwiPD1cIixcbn1cblxuLyoqXG4gKiBTb3J0IE9yZGVyIHZhbHVlcy4gJ2FzYycgPSBhc2NlbmRpbmcsICdkZXNjJyA9IGRlc2NlbmRpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFNvcnRPcmRlciA9IFwiYXNjXCIgfCBcImRlc2NcIjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydFZhbHVlPFIsIEMgPSBhbnk+ID0gKFxuICBjZWxsOiBDLFxuICByb3c6IFJcbikgPT4gYm9vbGVhbiB8IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydEZ1bmM8VCwgRSBleHRlbmRzIGtleW9mIFQgPSBhbnk+ID0gKFxuICBhOiBUW0VdLFxuICBiOiBUW0VdLFxuICBvcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICBkYXRhRmllbGQ6IGFueSxcbiAgcm93QTogVCxcbiAgcm93QjogVFxuKSA9PiBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRDYXJldDxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9IChcbiAgb3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIiB8IHVuZGVmaW5lZCxcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPlxuKSA9PiBKU1guRWxlbWVudCB8IHN0cmluZyB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEhlYWRlclNvcnRpbmdDbGFzc2VzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksIEUgPSBhbnk+ID1cbiAgfCBzdHJpbmdcbiAgfCAoKFxuICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgc29ydE9yZGVyOiBcImFzY1wiIHwgXCJkZXNjXCIsXG4gICAgaXNMYXN0U29ydGluZzogYm9vbGVhbixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gc3RyaW5nKTtcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNoYW5nZVN0YXRlPFQ+IHtcbiAgcGFnZTogbnVtYmVyO1xuICBzaXplUGVyUGFnZTogbnVtYmVyO1xuICBzb3J0RmllbGQ6IHN0cmluZztcbiAgc29ydE9yZGVyOiBcImFzY1wiIHwgXCJkZXNjXCI7XG4gIGZpbHRlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IGZpbHRlclZhbDogYW55OyBmaWx0ZXJUeXBlOiBcIlRFWFRcIjsgY29tcGFyYXRvcjogYW55IH07XG4gIH07XG4gIGRhdGE6IFRbXTtcbiAgY2VsbEVkaXQ6IHtcbiAgICByb3dJZDogc3RyaW5nO1xuICAgIGRhdGFGaWVsZDogYW55O1xuICAgIG5ld1ZhbHVlOiBhbnk7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEhlYWRlckZvcm1hdHRlcjxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IChcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPixcbiAgY29sSW5kZXg6IG51bWJlcixcbiAgY29tcG9uZW50czoge1xuICAgIHNvcnRFbGVtZW50OiBKU1guRWxlbWVudDtcbiAgICBmaWx0ZXJFbGVtZW50OiBKU1guRWxlbWVudDtcbiAgfVxuKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG5cbmV4cG9ydCB0eXBlIENvbHVtbkZvcm1hdHRlcjxSLCBFID0gYW55LCBDID0gYW55PiA9IChcbiAgY2VsbDogQyxcbiAgcm93OiBSLFxuICByb3dJbmRleDogbnVtYmVyLFxuICBmb3JtYXRFeHRyYURhdGE/OiBFXG4pID0+IFJlYWN0LlJlYWN0Tm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB2YWxpZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVzY3JpcHRpb248VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4ge1xuICAvKipcbiAgICogSWYgc2V0IHRoZSBjb2x1bW4gd2lsbCBub3QgdXNlIGNlbGwgdmFsdWVzXG4gICAqL1xuICBpc0R1bW15RmllbGQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkYXRhRmllbGQ6IGFueTtcbiAgZm9ybWF0dGVyPzogQ29sdW1uRm9ybWF0dGVyPFQsIEU+IHwgdW5kZWZpbmVkO1xuICBoaWRkZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ29sdW1uIGhlYWRlciBmaWVsZFxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuICBjbGFzc2VzPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQ2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2xJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoXG4gICAgY2VsbDogVFtrZXlvZiBUXSxcbiAgICByb3c6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gUmVhY3QuQ1NTUHJvcGVydGllcylcbiAgfCB1bmRlZmluZWQ7XG4gIHNvcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzb3J0VmFsdWU/OiBDb2x1bW5Tb3J0VmFsdWU8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRGdW5jPzogQ29sdW1uU29ydEZ1bmM8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRDYXJldD86IENvbHVtblNvcnRDYXJldDxULCBFPiB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGFsaWduPzpcbiAgfCBDZWxsQWxpZ25tZW50XG4gIHwgKChcbiAgICBjZWxsOiBUW2tleW9mIFRdLFxuICAgIHJvdzogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXJcbiAgKSA9PiBDZWxsQWxpZ25tZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgKCgpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpIHwgdW5kZWZpbmVkO1xuXG4gIHRvb2x0aXBEYXRhRmllbGQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGVkaXRhYmxlPzpcbiAgfCBib29sZWFuXG4gIHwgKChjZWxsOiBhbnksIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIGVkaXRvcj86XG4gIHwge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBvcHRpb25zPzogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHwgdW5kZWZpbmVkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXI/OiBib29sZWFuIHwgVGFibGVDb2x1bW5GaWx0ZXJQcm9wcyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyVmFsdWU/OiAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyUmVuZGVyZXI/OiAoKGZpbHRlckhhbmRsZXI6IEZ1bmN0aW9uLCBjb2x1bW46IGFueSkgPT4gSlNYLkVsZW1lbnQpIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJBbGlnbj86IENlbGxBbGlnbm1lbnQgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckZvcm1hdHRlcj86IEhlYWRlckZvcm1hdHRlcjxUPiB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyU29ydGluZ0NsYXNzZXM/OiBIZWFkZXJTb3J0aW5nQ2xhc3NlczxULCBFPiB8IHVuZGVmaW5lZDtcbiAgZm9ybWF0RXh0cmFEYXRhPzpcbiAgfCAoe1xuICAgIHRvb2x0aXBGb3JtYXR0ZXI/OiAoKHJvdzogVCkgPT4gSlNYLkVsZW1lbnQpIHwgdW5kZWZpbmVkO1xuICB9ICYgRSlcbiAgfCB1bmRlZmluZWQ7XG4gIHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBmb290ZXI/OlxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCAoKFxuICAgIGNvbHVtbkRhdGE6IGFueSxcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXJcbiAgKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPXG4gIGZvb3RlckZvcm1hdHRlcj86XG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2x1bW5JbmRleDogbnVtYmVyLCB0ZXh0OiBhbnkpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJDbGFzc2VzPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlclN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyVGl0bGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBmb290ZXJFdmVudHM/OlxuICB8IHtcbiAgICBvbkNsaWNrOiAoXG4gICAgICBlOiBhbnksXG4gICAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgICAgY29sdW1uSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQWxpZ24/OlxuICB8IENlbGxBbGlnbm1lbnRcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbEluZGV4OiBudW1iZXIpID0+IENlbGxBbGlnbm1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJBdHRycz86XG4gIHwgb2JqZWN0XG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBvYmplY3QpXG4gIHwgdW5kZWZpbmVkO1xuICB2YWxpZGF0b3I/OlxuICB8ICgoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICByb3c6IFQsXG4gICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPixcbiAgICBkb25lOiAocmVzdWx0PzogVmFsaWRhdGlvblJlc3VsdCkgPT4gYW55XG4gICkgPT4gYm9vbGVhbiB8IFZhbGlkYXRpb25SZXN1bHQpXG4gIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDU1YgQ29sdW1uIG9wdGlvbnMgb25seSB1c2VkIHdpdGggdGhlIHRvb2xraXQgcHJvdmlkZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIGV4cG9ydCBjc3YgY2VsbCB0eXBlIGNhbiBiZSBOdW1iZXIgb3IgU3RyaW5nXG4gICAqL1xuICBjc3ZUeXBlPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ3VzdG9tIGNzdiBjZWxsIGZvcm1hdHRlciB1c2VkIHdoZW4gZXhwb3J0aW5nIGNzdlxuICAgKi9cbiAgY3N2Rm9ybWF0dGVyPzogQ29sdW1uRm9ybWF0dGVyPFQsIEU+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogY3N2VGV4dCBkZWZhdWx0cyB0byBjb2x1bW4udGV4dFxuICAgKi9cbiAgY3N2VGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRvZ2dsZSBjb2x1bW4gZGlzcGxheSBpbiBDU1YgZXhwb3J0XG4gICAqL1xuICBjc3ZFeHBvcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ29sdW1uIHRvZ2dsZSBsaXN0IHVzZWQgYnkgVG9vbGtpdCBwcm92aWRlclxuICAgKi9cbiAgdG9nZ2xlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmljIHJvdyBldmVudCBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIFJvd0V2ZW50SGFuZGxlcjxUPiA9IChcbiAgZTogU3ludGhldGljRXZlbnQsXG4gIHJvdzogVCxcbiAgcm93SW5kZXg6IG51bWJlclxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFJvdyBsZXZlbCBldmVudCBoYW5kbGVyc1xuICovXG5leHBvcnQgdHlwZSBSb3dFdmVudEhhbmRsZXJQcm9wczxUID0gYW55PiA9IFBhcnRpYWw8e1xuICBvbkNsaWNrOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uRG91YmxlQ2xpY2s6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Nb3VzZUVudGVyOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uTW91c2VMZWF2ZTogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbkNvbnRleHRNZW51OiBSb3dFdmVudEhhbmRsZXI8VD47XG59PjtcblxuLyoqXG4gKiBUYWJsZSBjaGFuZ2UgY2FsbGJhY2sgbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIFRhYmxlQ2hhbmdlSGFuZGxlcjxUPiA9IChcbiAgdHlwZTogVGFibGVDaGFuZ2VUeXBlLFxuICBuZXdTdGF0ZTogVGFibGVDaGFuZ2VTdGF0ZTxUPlxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFsbCBwb3NzaWJsZSBwYWdpbmF0aW9uIG9wdGlvbnMgaGFuZGxlZCBieSB0aGUgcGFnaW5hdGlvbiBwbHVnaW5cbiAqXG4gKiBDb25zdWx0IFtkb2N1bWVudGF0aW9uXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC10YWJsZS5naXRodWIuaW8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kb2NzL3BhZ2luYXRpb24tcHJvcHMuaHRtbClcbiAqL1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbk9wdGlvbnMgPSBQYXJ0aWFsPHtcbiAgY3VzdG9tOiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgY3VycmVudCBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzaXplIHBlciBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBzaXplUGVyUGFnZTogbnVtYmVyO1xuICAvKipcbiAgICogVG90YWwgZGF0YSBzaXplLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICB0b3RhbFNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIGZpcnN0IHBhZ2Ugd2lsbCBiZSAwLCBkZWZhdWx0IGlzIDFcbiAgICovXG4gIHBhZ2VTdGFydEluZGV4OiBudW1iZXI7XG4gIC8qKlxuICAgKiB0aGUgcGFnaW5hdGlvbiBiYXIgc2l6ZSwgZGVmYXVsdCBpcyA1XG4gICAqL1xuICBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogZGlzcGxheSBwYWdpbmF0aW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBzaG93VG90YWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIG51bWVyaWMgYXJyYXkgaXMgYWxzbyBhdmFpbGFibGU6IFs1LCAxMF0uIHRoZSBwdXJwb3NlIG9mIGFib3ZlIGV4YW1wbGUgaXMgY3VzdG9tIHRoZSB0ZXh0XG4gICAqL1xuICBzaXplUGVyUGFnZUxpc3Q6IG51bWJlcltdIHwgQXJyYXk8eyB0ZXh0OiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfT47XG4gIC8qKlxuICAgKiBoaWRlIHRoZSBnb2luZyB0byBmaXJzdCBhbmQgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgd2l0aEZpcnN0QW5kTGFzdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGFsd2F5cyBzaG93IHRoZSBuZXh0IGFuZCBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgYWx3YXlzU2hvd0FsbEJ0bnM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBmaXJzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgZmlyc3RQYWdlVGV4dDogc3RyaW5nIHwgSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgcHJlUGFnZVRleHQ6IHN0cmluZyB8IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgbmV4dCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbmV4dFBhZ2VUZXh0OiBzdHJpbmcgfCBKU1guRWxlbWVudDtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIGxhc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGxhc3RQYWdlVGV4dDogc3RyaW5nIHwgSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgbmV4dCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbmV4dFBhZ2VUaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIHByZXZpb3VzIHBhZ2UgYnV0dG9uXG4gICAqL1xuICBwcmVQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBmaXJzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgZmlyc3RQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBsYXN0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBsYXN0UGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBoaWRlIHRoZSBzaXplIHBlciBwYWdlIGRyb3Bkb3duXG4gICAqL1xuICBoaWRlU2l6ZVBlclBhZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBoaWRlIHBhZ2luYXRpb24gYmFyIHdoZW4gb25seSBvbmUgcGFnZSwgZGVmYXVsdCBpcyBmYWxzZVxuICAgKi9cbiAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBjdXN0b20gcGFnZSBidXR0b24gaW5zaWRlIHRoZSBwYWdpbmF0aW9uIGxpc3RcbiAgICovXG4gIHBhZ2VCdXR0b25SZW5kZXJlcjogKG9wdGlvbnM6IFBhZ2VCdXR0b25SZW5kZXJlck9wdGlvbnMpID0+IEpTWC5FbGVtZW50O1xuICAvKipcbiAgICogY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBwYWdlIHdhcyBjaGFuZ2luZ1xuICAgKi9cbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAvKipcbiAgICogY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBwYWdlIHNpemUgd2FzIGNoYW5naW5nXG4gICAqL1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAvKipcbiAgICogY3VzdG9tIHBhZ2luYXRpb24gbGlzdCBjb21wb25lbnRcbiAgICovXG4gIHBhZ2VMaXN0UmVuZGVyZXI6IChvcHRpb25zOiBQYWdlTGlzdFJlbmRlcmVyT3B0aW9ucykgPT4gSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogKG9wdGlvbnM6IFNpemVQZXJQYWdlUmVuZGVyZXJPcHRpb25zKSA9PiBKU1guRWxlbWVudDtcbiAgLyoqXG4gICAqIGN1c3RvbSBzaXplIHBlciBwYWdlIGRyb3Bkb3duIGNvbXBvbmVudFxuICAgKi9cbiAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogKFxuICAgIG9wdGlvbnM6IFNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJPcHRpb25zXG4gICkgPT4gSlNYLkVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gdGhlIHBhZ2luYXRpb24gdG90YWxcbiAgICovXG4gIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiAoXG4gICAgZnJvbTogbnVtYmVyLFxuICAgIHRvOiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyXG4gICkgPT4gSlNYLkVsZW1lbnQ7XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiB0ZXh0IG9mIHRoZSBvcHRpb25cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqIHNpemUgb2YgcGVyIHBhZ2Ugb3B0aW9uXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxpc3RSZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogY3VycmVudCBwYWdlXG4gICAqL1xuICBwYWdlczogQXJyYXk8e1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfT47XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBwYWdlOiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBpcyB0aGlzIHBhZ2UgdGhlIGN1cnJlbnQgcGFnZSBvciBub3RcbiAgICovXG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqICBpcyB0aGlzIHBhZ2UgZGlzYWJsZWQgb3Igbm90XG4gICAqL1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHBhZ2UgdGl0bGVcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZVJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBkcm9wZG93biBvcHRpb25zXG4gICAqL1xuICBvcHRpb25zOiBBcnJheTx7IHRleHQ6IHN0cmluZzsgcGFnZTogbnVtYmVyIH0+O1xuICAvKipcbiAgICogY3VycmVudCBzaXplIHBlciBwYWdlXG4gICAqL1xuICBjdXJyU2l6ZVBlclBhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2Ugc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RSb3dQcm9wczxUPiB7XG4gIG1vZGU6IHN0cmluZztcbiAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNsaWNrVG9FeHBhbmQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjbGlja1RvRWRpdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZD86IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIG9uU2VsZWN0PzpcbiAgfCAoKFxuICAgIHJvdzogVCxcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogU3ludGhldGljRXZlbnRcbiAgKSA9PiB2b2lkIHwgYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc2VsZWN0L3Vuc2VsZWN0IGFsbCBhbmQgaXQgb25seSB3b3JrIHdoZW4geW91IGNvbmZpZ3VyZSBzZWxlY3RSb3cubW9kZSBhcyBjaGVja2JveC5cbiAgICovXG4gIG9uU2VsZWN0QWxsPzpcbiAgfCAoKFxuICAgIGlzU2VsZWN0OiBib29sZWFuLFxuICAgIHJvd3M6IFRbXSxcbiAgICBlOiBSZWFjdC5TeW50aGV0aWNFdmVudFxuICApID0+IHZvaWQgfCBudW1iZXJbXSlcbiAgfCB1bmRlZmluZWQ7XG4gIHN0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgbm9uU2VsZWN0YWJsZT86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBub25TZWxlY3RhYmxlU3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIG5vblNlbGVjdGFibGVDbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgYmdDb2xvcj86ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0aW9uUmVuZGVyZXI/OlxuICB8ICgob3B0aW9uczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgcm93S2V5OiBzdHJpbmc7XG4gIH0pID0+IEpTWC5FbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OlxuICB8ICgob3B0aW9uczoge1xuICAgIG1vZGU6IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIH0pID0+IEpTWC5FbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQ29sdW1uU3R5bGU/OlxuICB8ICgoc3RhdHVzOiBzdHJpbmcpID0+IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQpXG4gIHwgQ1NTUHJvcGVydGllc1xuICB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0Q29sdW1uU3R5bGU/OlxuICB8ICgocHJvcHM6IHtcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgcm93S2V5OiBzdHJpbmc7XG4gIH0pID0+IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQpXG4gIHwgQ1NTUHJvcGVydGllc1xuICB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0Q29sdW1uUG9zaXRpb24/OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBUYWJsZVJlZjxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHRhYmxlOiB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGRhdGE6IFRbXTtcbiAgICB9O1xuICB9O1xuICBzZWxlY3Rpb25Db250ZXh0PzpcbiAgfCB7XG4gICAgc2VsZWN0ZWQ/OiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgcm93RXhwYW5kQ29udGV4dD86XG4gIHwge1xuICAgIHN0YXRlOiB7XG4gICAgICBleHBhbmRlZD86IGFueVtdIHwgdW5kZWZpbmVkO1xuICAgIH07XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIHBhZ2luYXRpb25Db250ZXh0PzpcbiAgfCB7XG4gICAgY3VyclBhZ2U6IG51bWJlcjtcbiAgICBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgc29ydENvbnRleHQ/OlxuICB8IHtcbiAgICBzdGF0ZToge1xuICAgICAgc29ydENvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD47XG4gICAgICBzb3J0T3JkZXI6IFNvcnRPcmRlcjtcbiAgICB9O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJDb250ZXh0PzpcbiAgfCB7XG4gICAgY3VyckZpbHRlcnM6IGFueTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgY2VsbEVkaXRDb250ZXh0PzpcbiAgfCB7XG4gICAgc3RhcnRFZGl0aW5nOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBUYWJsZVByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksIEsgPSBudW1iZXI+IHtcbiAgLyoqXG4gICAqIFRlbGxzIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZyB3aGljaCBjb2x1bW4gaXMgdW5pcXVlLlxuICAgKi9cbiAga2V5RmllbGQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBQcm92aWRlcyBkYXRhIGZvciB5b3VyIHRhYmxlLiBJdCBhY2NlcHRzIGEgc2luZ2xlIEFycmF5IG9iamVjdC5cbiAgICovXG4gIGRhdGE6IGFueVtdO1xuICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlPzpcbiAgfCBib29sZWFuXG4gIHwgUGFydGlhbDx7XG4gICAgcGFnaW5hdGlvbjogYm9vbGVhbjtcbiAgICBmaWx0ZXI6IGJvb2xlYW47XG4gICAgc29ydDogYm9vbGVhbjtcbiAgICBjZWxsRWRpdDogYm9vbGVhbjtcbiAgICBzZWFyY2g6IGJvb2xlYW47XG4gIH0+XG4gIHwgdW5kZWZpbmVkO1xuICBub0RhdGFJbmRpY2F0aW9uPzpcbiAgfCAoKCkgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmcpXG4gIHwgSlNYLkVsZW1lbnRcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIHN0cmlwZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBib3JkZXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGhvdmVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvZHlDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB3cmFwcGVyQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyV3JhcHBlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbmRlbnNlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBTYW1lIGFzIEhUTUwgY2FwdGlvbiB0YWcsIHlvdSBjYW4gc2V0IGl0IGFzIFN0cmluZyBvciBhIFJlYWN0IEpTWC5cbiAgICovXG4gIGNhcHRpb24/OiBKU1guRWxlbWVudCB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGFnaW5hdGlvbj86IHsgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWQ7XG4gIGZpbHRlcj86IHVua25vd24gfCB1bmRlZmluZWQ7XG4gIGNlbGxFZGl0PzogYW55O1xuICBzZWxlY3RSb3c/OiBTZWxlY3RSb3dQcm9wczxUPiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93UHJvcHM8VCwgSz4gfCB1bmRlZmluZWQ7XG4gIHBhcmVudENsYXNzTmFtZT86XG4gIHwgc3RyaW5nXG4gIHwgKChpc0V4cGFuZDogYm9vbGVhbiwgcm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICByb3dTdHlsZT86XG4gIHwgKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IENTU1Byb3BlcnRpZXMpXG4gIHwgQ1NTUHJvcGVydGllc1xuICB8IHVuZGVmaW5lZDtcbiAgcm93RXZlbnRzPzogUm93RXZlbnRIYW5kbGVyUHJvcHMgfCB1bmRlZmluZWQ7XG4gIHJvd0NsYXNzZXM/OiAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyc0NsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb290ZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U29ydGVkPzogW3sgZGF0YUZpZWxkOiBhbnk7IG9yZGVyOiBTb3J0T3JkZXIgfV0gfCB1bmRlZmluZWQ7XG4gIHNvcnQ/OlxuICB8IHtcbiAgICBkYXRhRmllbGQ/OiBhbnk7XG4gICAgb3JkZXI6IFNvcnRPcmRlcjtcbiAgICBzb3J0RnVuYz86IGFueTtcbiAgICBzb3J0Q2FyZXQ/OiBhbnk7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uPzogU29ydE9yZGVyIHwgdW5kZWZpbmVkO1xuICBvdmVybGF5PzogYW55O1xuICBvblRhYmxlQ2hhbmdlPzogVGFibGVDaGFuZ2VIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkO1xuICBvblNvcnQ/OiBhbnk7XG4gIG9uRmlsdGVyPzogYW55O1xuICBvbkV4dGVybmFsRmlsdGVyPzogYW55O1xuICAvKipcbiAgICogVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IHdoZW4gZGF0YSBzaXplIGNoYW5nZSBieSBzZWFyY2gvZmlsdGVyIGV0Yy5cbiAgICovXG4gIG9uRGF0YVNpemVDaGFuZ2U/OiAoKHByb3BzOiB7IGRhdGFTaXplOiBudW1iZXIgfSkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaD86IFNlYXJjaFByb3BzPFQ+IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLy8gVE9ETyBBZGRlZCBPblxuICBsb2FkaW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc29ydEZpZWxkPzogc3RyaW5nO1xuICBzb3J0T3JkZXI/OiBzdHJpbmc7XG4gIGN1cnJGaWx0ZXJzPzogb2JqZWN0O1xufVxuXG4vLyBkZWNsYXJlIGNsYXNzIEJvb3RzdHJhcFRhYmxlPFxuLy8gICBUIGV4dGVuZHMgb2JqZWN0ID0gYW55LFxuLy8gICBLID0gbnVtYmVyXG4vLyA+IGV4dGVuZHMgQ29tcG9uZW50PEJvb3RzdHJhcFRhYmxlUHJvcHM8VCwgSz4+IHt9XG4vLyBleHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcblxuLyoqXG4gKiBTZWFyY2ggcHJvcHNcbiAqXG4gKiBDb25zdWx0IFtkb2N1bWVudGF0aW9uXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC10YWJsZS5naXRodWIuaW8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kb2NzL3NlYXJjaC1wcm9wcy5odG1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb3BzPFQ+IHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaFRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTZWFyY2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qIGN1c3RvbSBzZWFyY2ggbWV0aG9kLCByZXR1cm4gdHJ1ZSBpZiBtYXRjaGVkIGFuZCBmYWxzZSBpZiBub3QgKi9cbiAgb25Db2x1bW5NYXRjaD86XG4gIHwgKChzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGNvbHVtbjogYW55O1xuICAgIHJvdzogVDtcbiAgfSkgPT4gYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIG9uQ2xlYXI/OiAoKSA9PiB2b2lkO1xuICBvblNlYXJjaD86IChzZWFyY2hUZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZENvbHVtblJlbmRlcmVyUHJvcHMge1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgcm93S2V5OiBzdHJpbmc7XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIHtcbiAgaXNBbnlFeHBhbmRzOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRSb3dQcm9wczxULCBLID0gbnVtYmVyPiB7XG4gIHJlbmRlcmVyOiAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gSlNYLkVsZW1lbnQpIHwgdW5kZWZpbmVkO1xuICBleHBhbmRlZD86IEtbXSB8IHVuZGVmaW5lZDtcbiAgb25FeHBhbmQ/OlxuICB8ICgocm93OiBULCBpc0V4cGFuZDogYm9vbGVhbiwgcm93SW5kZXg6IG51bWJlciwgZTogU3ludGhldGljRXZlbnQpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBvbkV4cGFuZEFsbD86XG4gIHwgKChpc0V4cGFuZEFsbDogYm9vbGVhbiwgcmVzdWx0czogVFtdLCBlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZClcbiAgfCB1bmRlZmluZWQ7XG4gIG5vbkV4cGFuZGFibGU/OiBLW10gfCB1bmRlZmluZWQ7XG4gIHNob3dFeHBhbmRDb2x1bW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kQnlDb2x1bW5Pbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kQ29sdW1uUmVuZGVyZXI/OlxuICB8ICgocHJvcHM6IEV4cGFuZENvbHVtblJlbmRlcmVyUHJvcHMpID0+IEpTWC5FbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI/OlxuICB8ICgocHJvcHM6IEV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKSA9PiBKU1guRWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZENvbHVtblBvc2l0aW9uPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86XG4gIHwgc3RyaW5nXG4gIHwgKChpc0V4cGFuZDogYm9vbGVhbiwgcm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxGViA9IGFueSwgVCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSBQYXJ0aWFsPHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBjdXN0b20gdGhlIGlucHV0IHBsYWNlaG9sZGVyXG4gICAqL1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogIGN1c3RvbSBjbGFzc25hbWUgb24gaW5wdXRcbiAgICovXG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogIGRlZmF1bHQgZmlsdGVyaW5nIHZhbHVlXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IGFueTtcbiAgLyoqXG4gICAqICB5b3VyIGN1c3RvbSBzdHlsZXMgb24gaW5wdXRcbiAgICovXG4gIHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICAvKipcbiAgICogIGhvdyBsb25nIHdpbGwgdHJpZ2dlciBmaWx0ZXJpbmcgYWZ0ZXIgdXNlciB0eXBpbmcsIGRlZmF1bHQgaXMgNTAwIG1zXG4gICAqL1xuICBkZWxheTogbnVtYmVyO1xuICAvKlxuICAgKiBleHBvcnQgZmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2VzcyBmaWx0ZXIgbWV0aG9kIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRGaWx0ZXI6IChmaWx0ZXI6ICh2YWx1ZTogRlYpID0+IHZvaWQgfCBUW10pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxpc3RlbmVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gY29sdW1uIGZpbHRlciBiZWluZyB0cmlnZ2VyZWQuIElmIHlvdSByZXR1cm4gYW4gYXJyYXkgdmFsdWUsIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZyB3aWxsIGFkb3B0IHRoaXMgdmFsdWUgYXMgdGhlIGZpbmFsIGZpbHRlcmVkIHJlc3VsdC5cbiAgICovXG4gIG9uRmlsdGVyOiAoZmlsdGVyVmFsdWU6IEZWKSA9PiB2b2lkIHwgVFtdO1xufT47XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZvb3RlckNlbGxQcm9wcyB7XG4gIGNvbHVtbkRhdGE/OiBhbnlbXTtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb247XG59XG5cbmNsYXNzIEZvb3RlckNlbGwgZXh0ZW5kcyBldmVudERlbGVnYXRlcihDb21wb25lbnQpPEZvb3RlckNlbGxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjb2x1bW5EYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgZm9vdGVyLFxuICAgICAgZm9vdGVyVGl0bGUsXG4gICAgICBmb290ZXJBbGlnbixcbiAgICAgIGZvb3RlckZvcm1hdHRlcixcbiAgICAgIGZvb3RlckV2ZW50cyxcbiAgICAgIGZvb3RlckNsYXNzZXMsXG4gICAgICBmb290ZXJTdHlsZSxcbiAgICAgIGZvb3RlckF0dHJzLFxuICAgIH0gPSBjb2x1bW47XG5cbiAgICBjb25zdCBkZWxlZ2F0ZUV2ZW50cyA9IHRoaXMuZGVsZWdhdGUoZm9vdGVyRXZlbnRzKTtcbiAgICBjb25zdCBjZWxsQXR0cnMgPSB7XG4gICAgICAuLi4oXy5pc0Z1bmN0aW9uKGZvb3RlckF0dHJzKVxuICAgICAgICA/IGZvb3RlckF0dHJzKGNvbHVtbiwgaW5kZXghKVxuICAgICAgICA6IGZvb3RlckF0dHJzKSxcbiAgICAgIC4uLmRlbGVnYXRlRXZlbnRzLFxuICAgIH07XG5cbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgaWYgKF8uaXNTdHJpbmcoZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3RlcjtcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICB0ZXh0ID0gZm9vdGVyKGNvbHVtbkRhdGEgfHwgW10sIGNvbHVtbiwgaW5kZXggfHwgMCk7XG4gICAgfVxuXG4gICAgbGV0IGNlbGxTdHlsZTogYW55ID0ge307XG4gICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oZm9vdGVyQ2xhc3NlcylcbiAgICAgID8gZm9vdGVyQ2xhc3Nlcyhjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICA6IGZvb3RlckNsYXNzZXM7XG5cbiAgICBpZiAoZm9vdGVyU3R5bGUpIHtcbiAgICAgIGNlbGxTdHlsZSA9IF8uaXNGdW5jdGlvbihmb290ZXJTdHlsZSlcbiAgICAgICAgPyBmb290ZXJTdHlsZShjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogZm9vdGVyU3R5bGU7XG4gICAgICBjZWxsU3R5bGUgPSBjZWxsU3R5bGUgPyB7IC4uLmNlbGxTdHlsZSB9IDogY2VsbFN0eWxlO1xuICAgIH1cblxuICAgIGlmIChmb290ZXJUaXRsZSkge1xuICAgICAgY2VsbEF0dHJzLnRpdGxlID0gXy5pc0Z1bmN0aW9uKGZvb3RlclRpdGxlKVxuICAgICAgICA/IGZvb3RlclRpdGxlKGNvbHVtbiwgaW5kZXggfHwgMClcbiAgICAgICAgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChmb290ZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihmb290ZXJBbGlnbilcbiAgICAgICAgPyBmb290ZXJBbGlnbihjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogZm9vdGVyQWxpZ247XG4gICAgfVxuXG4gICAgaWYgKGNlbGxDbGFzc2VzKSBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgY2VsbENsYXNzZXMpO1xuICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gZm9vdGVyRm9ybWF0dGVyXG4gICAgICA/IGZvb3RlckZvcm1hdHRlcihjb2x1bW4sIGluZGV4IHx8IDAsIHsgdGV4dCB9KVxuICAgICAgOiB0ZXh0O1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCBjZWxsQXR0cnMsIGNoaWxkcmVuIGFzIFJlYWN0Tm9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmltcG9ydCB7XG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSxcbiAgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCxcbiAgUk9XX1NFTEVDVF9TSU5HTEUsXG59IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25TdW1tYXJ5IH0gZnJvbSBcIi4uL3N0b3JlL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkNvbnRleHRWYWx1ZSB7XG4gIHNlbGVjdGVkPzogYW55W107XG4gIG9uUm93U2VsZWN0PzogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBvbkFsbFJvd3NTZWxlY3Q/OiAoZTogYW55LCBpc1VuU2VsZWN0OiBib29sZWFuKSA9PiB2b2lkO1xuICBhbGxSb3dzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBhbGxSb3dzTm90U2VsZWN0ZWQ/OiBib29sZWFuO1xuICBjaGVja2VkU3RhdHVzPzogc3RyaW5nO1xuICBtb2RlPzogc3RyaW5nO1xuICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbjtcbiAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW47XG4gIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbD86IGJvb2xlYW47XG4gIG9uU2VsZWN0PzogKFxuICAgIHJvdzogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvblNlbGVjdEFsbD86IChjaGVja2VkOiBib29sZWFuLCBzZWxlY3RlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQgfCBhbnlbXTtcbiAgbm9uU2VsZWN0YWJsZT86IGFueVtdO1xuICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChjaGVja2VkU3RhdHVzOiBzdHJpbmcpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0aW9uUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRhdGE6IGFueVtdO1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICBzZWxlY3RSb3c6IHtcbiAgICBzZWxlY3RlZD86IGFueVtdO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgaGlkZVNlbGVjdENvbHVtbj86IGJvb2xlYW47XG4gICAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW47XG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsPzogYm9vbGVhbjtcbiAgICBvblNlbGVjdD86IChcbiAgICAgIHJvdzogYW55LFxuICAgICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBlOiBhbnlcbiAgICApID0+IGJvb2xlYW47XG4gICAgb25TZWxlY3RBbGw/OiAoXG4gICAgICBjaGVja2VkOiBib29sZWFuLFxuICAgICAgc2VsZWN0ZWRSb3dzOiBhbnlbXSxcbiAgICAgIGU6IGFueVxuICAgICkgPT4gdm9pZCB8IGFueVtdO1xuICAgIG5vblNlbGVjdGFibGU/OiBhbnlbXTtcbiAgICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcj86IChhcmdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gICAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2hlY2tlZFN0YXR1czogc3RyaW5nKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFNlbGVjdGlvbkNvbnRleHQgPSB7fTtcbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFNlbGVjdGlvbkNvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRTZWxlY3Rpb25Db250ZXh0XG4pO1xuXG5jbGFzcyBTZWxlY3Rpb25Qcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxTZWxlY3Rpb25Qcm92aWRlclByb3BzPiB7XG4gIHNlbGVjdGVkOiBhbnlbXTtcbiAgaXNIYW5kbGVSb3dTZWxlY3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFNlbGVjdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCB8fCBbXTtcbiAgICB0aGlzLmlzSGFuZGxlUm93U2VsZWN0ID0gZmFsc2U7XG4gIH1cblxuICAvLyBleHBvc2VkIEFQSVxuICBnZXRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IFNlbGVjdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBpZiAodGhpcy5pc0hhbmRsZVJvd1NlbGVjdCkge1xuICAgICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBuZXh0UHJvcHMuc2VsZWN0Um93ICYmXG4gICAgICBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkICYmXG4gICAgICAhXy5pc0VxdWFsKG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQsIHRoaXMuc2VsZWN0ZWQpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZDtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dTZWxlY3QgPSAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBzZWxlY3RSb3c6IHsgbW9kZSwgb25TZWxlY3QgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSBbLi4udGhpcy5zZWxlY3RlZF07XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBpZiAob25TZWxlY3QpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgcmVzdWx0ID0gb25TZWxlY3Qocm93LCBjaGVja2VkLCByb3dJbmRleCwgZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IFtyb3dLZXldO1xuICAgICAgfSBlbHNlIGlmIChjaGVja2VkKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvd0tleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFsbFJvd3NTZWxlY3QgPSAoZTogYW55LCBpc1VuU2VsZWN0OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgc2VsZWN0Um93OiB7IG9uU2VsZWN0QWxsLCBub25TZWxlY3RhYmxlIH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzZWxlY3RlZCB9ID0gdGhpcztcblxuICAgIGxldCBjdXJyU2VsZWN0ZWQ6IGFueTtcblxuICAgIGlmICghaXNVblNlbGVjdCkge1xuICAgICAgY3VyclNlbGVjdGVkID0gc2VsZWN0ZWQuY29uY2F0KFxuICAgICAgICBkYXRhT3BlcmF0b3Iuc2VsZWN0YWJsZUtleXMoZGF0YSwga2V5RmllbGQsIG5vblNlbGVjdGFibGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBzZWxlY3RlZC5maWx0ZXIoXG4gICAgICAgIChzKSA9PiB0eXBlb2YgZGF0YS5maW5kKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICBpZiAob25TZWxlY3RBbGwpIHtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0QWxsKFxuICAgICAgICAhaXNVblNlbGVjdCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldFNlbGVjdGVkUm93cyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGlzVW5TZWxlY3QgPyBzZWxlY3RlZCA6IGN1cnJTZWxlY3RlZFxuICAgICAgICApLFxuICAgICAgICBlXG4gICAgICApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGFsbFJvd3NTZWxlY3RlZCwgYWxsUm93c05vdFNlbGVjdGVkIH0gPSBnZXRTZWxlY3Rpb25TdW1tYXJ5KFxuICAgICAgdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRcbiAgICApO1xuXG4gICAgbGV0IGNoZWNrZWRTdGF0dXM6IHN0cmluZztcblxuICAgIGlmIChhbGxSb3dzU2VsZWN0ZWQpIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFsbFJvd3NOb3RTZWxlY3RlZCkge1xuICAgICAgY2hlY2tlZFN0YXR1cyA9IENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAuLi50aGlzLnByb3BzLnNlbGVjdFJvdyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgICBvblJvd1NlbGVjdDogdGhpcy5oYW5kbGVSb3dTZWxlY3QsXG4gICAgICAgICAgb25BbGxSb3dzU2VsZWN0OiB0aGlzLmhhbmRsZUFsbFJvd3NTZWxlY3QsXG4gICAgICAgICAgYWxsUm93c1NlbGVjdGVkLFxuICAgICAgICAgIGFsbFJvd3NOb3RTZWxlY3RlZCxcbiAgICAgICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWxlY3Rpb25Db250ZXh0ID0gKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFNlbGVjdGlvblByb3ZpZGVyLFxuICBDb25zdW1lcjogU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgTW91c2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIENlbGxQcm9wcyB7XG4gIHJvdzogYW55O1xuICByb3dpbmRleDogbnVtYmVyO1xuICBjb2x1bW46IGFueTtcbiAgY29sdW1uaW5kZXg6IG51bWJlcjtcbiAgYXRzdGFydD86IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICBlZGl0YWJsZT86IHN0cmluZztcbiAgY2xpY2t0b2VkaXQ/OiBzdHJpbmc7XG4gIGRiY2xpY2t0b2VkaXQ/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG59XG5cbmNsYXNzIENlbGwgZXh0ZW5kcyBldmVudERlbGVnYXRlcihDb21wb25lbnQpPENlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBDZWxsUHJvcHMpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlID0gZmFsc2U7XG4gICAgaWYgKG5leHRQcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkKSB7XG4gICAgICBzaG91bGRVcGRhdGUgPSAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVXBkYXRlID1cbiAgICAgICAgXy5nZXQodGhpcy5wcm9wcy5yb3csIHRoaXMucHJvcHMuY29sdW1uLmRhdGFGaWVsZCkgIT09XG4gICAgICAgIF8uZ2V0KG5leHRQcm9wcy5yb3csIG5leHRQcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIGlmIChuZXh0UHJvcHMuZm9ybWF0dGVyKVxuXG4gICAgc2hvdWxkVXBkYXRlID1cbiAgICAgIChuZXh0UHJvcHMuY29sdW1uLmZvcm1hdHRlclxuICAgICAgICA/ICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpXG4gICAgICAgIDogZmFsc2UpIHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbi5oaWRkZW4gIT09IG5leHRQcm9wcy5jb2x1bW4uaGlkZGVuIHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQgIT09IG5leHRQcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkIHx8XG4gICAgICB0aGlzLnByb3BzLnJvd2luZGV4ICE9PSBuZXh0UHJvcHMucm93aW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY29sdW1uaW5kZXggIT09IG5leHRQcm9wcy5jb2x1bW5pbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgIT09IG5leHRQcm9wcy5jbGFzc05hbWUgfHxcbiAgICAgIHRoaXMucHJvcHMudGl0bGUgIT09IG5leHRQcm9wcy50aXRsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLmNsaWNrdG9lZGl0ICE9PSBuZXh0UHJvcHMuY2xpY2t0b2VkaXQgfHxcbiAgICAgIHRoaXMucHJvcHMuZGJjbGlja3RvZWRpdCAhPT0gbmV4dFByb3BzLmRiY2xpY2t0b2VkaXQgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgIV8uaXNFcXVhbChcbiAgICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uZm9ybWF0RXh0cmFEYXRhLFxuICAgICAgICBuZXh0UHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgKSB8fFxuICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbi5ldmVudHMsIG5leHRQcm9wcy5jb2x1bW4uZXZlbnRzKSB8fFxuICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbi5hdHRycywgbmV4dFByb3BzLmNvbHVtbi5hdHRycykgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleDtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBjcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChvcmlnaW5GdW5jOiAoZTogTW91c2VFdmVudCkgPT4gdm9pZCkge1xuICAgIHJldHVybiAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhdHN0YXJ0LCByb3dpbmRleCwgY29sdW1uaW5kZXgsIGNsaWNrdG9lZGl0LCBkYmNsaWNrdG9lZGl0IH0gPVxuICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgaWYgKChjbGlja3RvZWRpdCB8fCBkYmNsaWNrdG9lZGl0KSAmJiBfLmlzRnVuY3Rpb24ob3JpZ2luRnVuYykpIHtcbiAgICAgICAgb3JpZ2luRnVuYyhlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHN0YXJ0KSB7XG4gICAgICAgIGF0c3RhcnQocm93aW5kZXgsIGNvbHVtbmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIGF0c3RhcnQsXG4gICAgICByb3dpbmRleCxcbiAgICAgIGNvbHVtbmluZGV4LFxuICAgICAgZWRpdGFibGUsXG4gICAgICBjbGlja3RvZWRpdCxcbiAgICAgIGRiY2xpY2t0b2VkaXQsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBkYXRhRmllbGQsIGZvcm1hdHRlciwgZm9ybWF0RXh0cmFEYXRhIH0gPSBjb2x1bW47XG4gICAgY29uc3QgYXR0cnMgPSB0aGlzLmRlbGVnYXRlKHsgLi4ucmVzdCB9KTtcbiAgICBsZXQgY29udGVudCA9IGNvbHVtbi5pc0R1bW15RmllbGQgPyBudWxsIDogXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgY29udGVudCA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHJvdyxcbiAgICAgICAgcm93aW5kZXgsXG4gICAgICAgIGZvcm1hdEV4dHJhRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2xpY2t0b2VkaXQgPT09IFwidHJ1ZVwiICYmIGVkaXRhYmxlID09PSBcInRydWVcIikge1xuICAgICAgYXR0cnMub25DbGljayA9IHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwoYXR0cnMub25DbGljayk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRiY2xpY2t0b2VkaXQgPT09IFwidHJ1ZVwiICYmXG4gICAgICBlZGl0YWJsZSA9PT0gXCJ0cnVlXCJcbiAgICApIHtcbiAgICAgIGF0dHJzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uRG91YmxlQ2xpY2spO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgey4uLmF0dHJzfT5cbiAgICAgICAge3R5cGVvZiBjb250ZW50ID09PSBcImJvb2xlYW5cIiA/IGAke2NvbnRlbnR9YCA6IGNvbnRlbnR9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VsbDtcbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGVkaXRDZWxsID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgcm93SWQ6IGFueSwgZGF0YUZpZWxkOiBhbnksIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3Qgcm93ID0gZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93SWQpO1xuICBpZiAocm93KSBfLnNldChyb3csIGRhdGFGaWVsZCwgbmV3VmFsdWUpO1xufTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJjc3N0eXBlXCI7XG5pbXBvcnQgeyBGSUxURVJTX1BPU0lUSU9OX0lOTElORSwgU09SVF9ERVNDIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IENlbGxFdmVudERlbGVnYXRlciBhcyBldmVudERlbGVnYXRlciB9IGZyb20gXCIuL2NlbGwtZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgU29ydENhcmV0IGZyb20gXCIuL3NvcnQvY2FyZXRcIjtcbmltcG9ydCBTb3J0U3ltYm9sIGZyb20gXCIuL3NvcnQvc3ltYm9sXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgSGVhZGVyQ2VsbFByb3BzIHtcbiAgY29sdW1uOiB7XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgaXNEdW1teUZpZWxkPzogYm9vbGVhbjtcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIGhlYWRlckZvcm1hdHRlcj86IChcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIGV4dHJhRGF0YTogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZm9ybWF0dGVyPzogKFxuICAgICAgY2VsbDogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgZm9ybWF0RXh0cmFEYXRhOiBhbnlcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBmb3JtYXRFeHRyYURhdGE/OiBhbnk7XG4gICAgaGVhZGVyQ2xhc3Nlcz86IHN0cmluZyB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgY2xhc3Nlcz86IHN0cmluZyB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBoZWFkZXJTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBoZWFkZXJTb3J0aW5nQ2xhc3Nlcz86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nLFxuICAgICAgaXNMYXN0U29ydGluZzogYm9vbGVhbixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IHN0cmluZyk7XG4gICAgaGVhZGVyU29ydGluZ1N0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nLFxuICAgICAgaXNMYXN0U29ydGluZzogYm9vbGVhbixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIHN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgaGVhZGVyVGl0bGU/OiBib29sZWFuIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IHN0cmluZyk7XG4gICAgdGl0bGU/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBib29sZWFuIHwgc3RyaW5nKTtcbiAgICBoZWFkZXJFdmVudHM/OiBSZWNvcmQ8c3RyaW5nLCAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZD47XG4gICAgZXZlbnRzPzogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWRcbiAgICA+O1xuICAgIGhlYWRlckFsaWduPzpcbiAgICB8IFByb3BlcnR5LlRleHRBbGlnblxuICAgIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUHJvcGVydHkuVGV4dEFsaWduKTtcbiAgICBhbGlnbj86IHN0cmluZyB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBoZWFkZXJBdHRycz86XG4gICAgfCBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD5cbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pik7XG4gICAgYXR0cnM/OlxuICAgIHwgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+XG4gICAgfCAoKFxuICAgICAgY2VsbDogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICByb3dJbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVDZWxsRWxlbWVudD4pO1xuICAgIHNvcnQ/OiBib29sZWFuO1xuICAgIHNvcnRGdW5jPzogKGE6IGFueSwgYjogYW55LCBvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gbnVtYmVyO1xuICAgIG9uU29ydD86IChjb2x1bW46IGFueSwgc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgc29ydENhcmV0PzogYW55O1xuICAgIGVkaXRvcj86IG9iamVjdDtcbiAgICBlZGl0YWJsZT86IGJvb2xlYW4gfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pO1xuICAgIGVkaXRDZWxsU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBlZGl0Q2VsbENsYXNzZXM/OlxuICAgIHwgc3RyaW5nXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgZWRpdG9yU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBlZGl0b3JDbGFzc2VzPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGVkaXRvclJlbmRlcmVyPzogKFxuICAgICAgZWRpdG9yUHJvcHM6IGFueSxcbiAgICAgIHZhbHVlOiBhbnksXG4gICAgICByb3c6IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICB2YWxpZGF0b3I/OiAobmV3VmFsdWU6IGFueSwgcm93OiBhbnksIGNvbHVtbjogYW55KSA9PiBib29sZWFuIHwgc3RyaW5nO1xuICAgIGZpbHRlcj86IGFueTtcbiAgICBmaWx0ZXJSZW5kZXJlcj86IChcbiAgICAgIG9uQ3VzdG9tRmlsdGVyOiAodmFsdWU6IGFueSkgPT4gdm9pZCxcbiAgICAgIGNvbHVtbjogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZmlsdGVyVmFsdWU/OiAoY2VsbDogYW55LCByb3c6IGFueSkgPT4gc3RyaW5nO1xuICAgIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICB9O1xuICBpbmRleDogbnVtYmVyO1xuICBvblNvcnQ/OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIHNvcnRpbmc/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBzdHJpbmc7XG4gIHNvcnRDYXJldD86IGFueTtcbiAgaXNMYXN0U29ydGluZz86IGJvb2xlYW47XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIGdsb2JhbFNvcnRDYXJldD86IChvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5jbGFzcyBIZWFkZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxIZWFkZXJDZWxsUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGluZGV4LFxuICAgICAgb25Tb3J0LFxuICAgICAgc29ydGluZyxcbiAgICAgIHNvcnRPcmRlcixcbiAgICAgIGlzTGFzdFNvcnRpbmcsXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGN1cnJGaWx0ZXJzLFxuICAgICAgZmlsdGVyUG9zaXRpb24sXG4gICAgICBvbkV4dGVybmFsRmlsdGVyLFxuICAgICAgZ2xvYmFsU29ydENhcmV0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgdGV4dCxcbiAgICAgIHNvcnQsXG4gICAgICBzb3J0Q2FyZXQsXG4gICAgICBmaWx0ZXIsXG4gICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgIGhlYWRlclRpdGxlLFxuICAgICAgaGVhZGVyQWxpZ24sXG4gICAgICBoZWFkZXJGb3JtYXR0ZXIsXG4gICAgICBoZWFkZXJFdmVudHMsXG4gICAgICBoZWFkZXJDbGFzc2VzLFxuICAgICAgaGVhZGVyU3R5bGUsXG4gICAgICBoZWFkZXJBdHRycyxcbiAgICAgIGhlYWRlclNvcnRpbmdDbGFzc2VzLFxuICAgICAgaGVhZGVyU29ydGluZ1N0eWxlLFxuICAgIH0gPSBjb2x1bW47XG5cbiAgICBjb25zdCBzb3J0Q2FyZXRmdW5jID0gc29ydENhcmV0IHx8IGdsb2JhbFNvcnRDYXJldDtcblxuICAgIGNvbnN0IGRlbGVnYXRlRXZlbnRzID0gdGhpcy5kZWxlZ2F0ZShoZWFkZXJFdmVudHMpO1xuXG4gICAgY29uc3QgY3VzdG9tQXR0cnMgPSBfLmlzRnVuY3Rpb24oaGVhZGVyQXR0cnMpXG4gICAgICA/IGhlYWRlckF0dHJzKGNvbHVtbiwgaW5kZXgpXG4gICAgICA6IGhlYWRlckF0dHJzIHx8IHt9O1xuXG4gICAgY29uc3QgY2VsbEF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4gPSB7XG4gICAgICAuLi5jdXN0b21BdHRycyxcbiAgICAgIC4uLmRlbGVnYXRlRXZlbnRzLFxuICAgICAgdGFiSW5kZXg6IF8uaXNEZWZpbmVkKGN1c3RvbUF0dHJzLnRhYkluZGV4KSA/IGN1c3RvbUF0dHJzLnRhYkluZGV4IDogMCxcbiAgICB9O1xuXG4gICAgbGV0IHNvcnRTeW1ib2w6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBsZXQgZmlsdGVyRWxlbWVudDogUmVhY3QuUmVhY3ROb2RlO1xuICAgIGxldCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcbiAgICBsZXQgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oaGVhZGVyQ2xhc3NlcylcbiAgICAgID8gaGVhZGVyQ2xhc3Nlcyhjb2x1bW4sIGluZGV4KVxuICAgICAgOiBoZWFkZXJDbGFzc2VzO1xuXG4gICAgaWYgKGhlYWRlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyU3R5bGUpXG4gICAgICAgID8gaGVhZGVyU3R5bGUoY29sdW1uLCBpbmRleClcbiAgICAgICAgOiBoZWFkZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyVGl0bGUpXG4gICAgICAgID8gKGhlYWRlclRpdGxlKGNvbHVtbiwgaW5kZXgpIGFzIHN0cmluZylcbiAgICAgICAgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihoZWFkZXJBbGlnbilcbiAgICAgICAgPyBoZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgICA6IGhlYWRlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCBjdXN0b21DbGljayA9IGNlbGxBdHRycy5vbkNsaWNrO1xuICAgICAgY29uc3QgY3VzdG9tS2V5RG93biA9IGNlbGxBdHRycy5vbktleURvd247XG4gICAgICBjZWxsQXR0cnNbXCJhcmlhLWxhYmVsXCJdID0gc29ydGluZ1xuICAgICAgICA/IGAke3RleHR9IHNvcnQgJHtzb3J0T3JkZXJ9YFxuICAgICAgICA6IGAke3RleHR9IHNvcnRhYmxlYDtcbiAgICAgIGNlbGxBdHRycy5vbktleVVwID0gKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgICBvblNvcnQ/Lihjb2x1bW4pO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBFcnJvcjogQXJndW1lbnQgb2YgdHlwZSAnS2V5Ym9hcmRFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvXG4gICAgICAgICAgLy8gcGFyYW1ldGVyIG9mIHR5cGUgJ01vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQsIE1vdXNlRXZlbnQ+Jy5cbiAgICAgICAgICAvLyBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdXN0b21LZXlEb3duKSkgY3VzdG9tS2V5RG93bihlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNlbGxBdHRycy5vbkNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgb25Tb3J0Py4oY29sdW1uKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdXN0b21DbGljaykpIGN1c3RvbUNsaWNrKGUpO1xuICAgICAgfTtcbiAgICAgIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjcyhjZWxsQXR0cnMuY2xhc3NOYW1lLCBcInNvcnRhYmxlXCIpO1xuXG4gICAgICBpZiAoc29ydGluZykge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/IChcbiAgICAgICAgICBzb3J0Q2FyZXRmdW5jKHNvcnRPcmRlciB8fCBTT1JUX0RFU0MsIGNvbHVtbilcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U29ydENhcmV0IG9yZGVyPXtzb3J0T3JkZXIhfSAvPlxuICAgICAgICApO1xuXG4gICAgICAgIGNlbGxDbGFzc2VzID0gY3MoXG4gICAgICAgICAgY2VsbENsYXNzZXMsXG4gICAgICAgICAgXy5pc0Z1bmN0aW9uKGhlYWRlclNvcnRpbmdDbGFzc2VzKVxuICAgICAgICAgICAgPyBoZWFkZXJTb3J0aW5nQ2xhc3Nlcyhjb2x1bW4sIHNvcnRPcmRlciEsIGlzTGFzdFNvcnRpbmchLCBpbmRleClcbiAgICAgICAgICAgIDogaGVhZGVyU29ydGluZ0NsYXNzZXNcbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAgIC4uLihfLmlzRnVuY3Rpb24oaGVhZGVyU29ydGluZ1N0eWxlKVxuICAgICAgICAgICAgPyBoZWFkZXJTb3J0aW5nU3R5bGUoY29sdW1uLCBzb3J0T3JkZXIhLCBpc0xhc3RTb3J0aW5nISwgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdTdHlsZSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/IChcbiAgICAgICAgICBzb3J0Q2FyZXRmdW5jKHVuZGVmaW5lZCwgY29sdW1uKVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTb3J0U3ltYm9sIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNlbGxDbGFzc2VzKSBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgY2VsbENsYXNzZXMpO1xuICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgIGlmIChmaWx0ZXJQb3NpdGlvbiA9PT0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUpIHtcbiAgICAgIGlmIChmaWx0ZXJSZW5kZXJlcikge1xuICAgICAgICBjb25zdCBvbkN1c3RvbUZpbHRlciA9IG9uRXh0ZXJuYWxGaWx0ZXI/LihcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgZmlsdGVyPy5wcm9wcy50eXBlIHx8IFwiXCJcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyRWxlbWVudCA9IGZpbHRlclJlbmRlcmVyKG9uQ3VzdG9tRmlsdGVyISwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGZpbHRlckVsZW1lbnQgPSAoXG4gICAgICAgICAgPGZpbHRlci5GaWx0ZXJcbiAgICAgICAgICAgIHsuLi5maWx0ZXIucHJvcHN9XG4gICAgICAgICAgICBmaWx0ZXJTdGF0ZT17Y3VyckZpbHRlcnM/Lltjb2x1bW4uZGF0YUZpZWxkXX1cbiAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSA9IGhlYWRlckZvcm1hdHRlclxuICAgICAgPyBoZWFkZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCwge1xuICAgICAgICBzb3J0RWxlbWVudDogc29ydFN5bWJvbCxcbiAgICAgICAgZmlsdGVyRWxlbWVudCxcbiAgICAgIH0pXG4gICAgICA6IHRleHQ7XG5cbiAgICBpZiAoaGVhZGVyRm9ybWF0dGVyKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIGNlbGxBdHRycywgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJ0aFwiLFxuICAgICAgY2VsbEF0dHJzLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBzb3J0U3ltYm9sLFxuICAgICAgZmlsdGVyRWxlbWVudFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlbW90ZVJlc29sdmVyIGZyb20gXCIuLi9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXJcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4vYm9vdHN0cmFwXCI7XG5pbXBvcnQgY3JlYXRlQ29sdW1uQ29udGV4dCBmcm9tIFwiLi9jb2x1bW4tY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZURhdGFDb250ZXh0IGZyb20gXCIuL2RhdGEtY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZVJvd0V4cGFuZENvbnRleHQgZnJvbSBcIi4vcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4vc2VsZWN0aW9uLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVTb3J0Q29udGV4dCBmcm9tIFwiLi9zb3J0LWNvbnRleHRcIjtcblxuY29uc3Qgd2l0aENvbnRleHQgPSAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBCb290c3RyYXBUYWJsZUNvbnRhaW5lciBleHRlbmRzIFJlbW90ZVJlc29sdmVyKEJhc2UpIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLkRhdGFDb250ZXh0ID0gY3JlYXRlRGF0YUNvbnRleHQoKTtcblxuICAgICAgaWYgKHByb3BzLnJlZ2lzdGVyRXhwb3NlZEFQSSkge1xuICAgICAgICBjb25zdCBleHBvc2VkQVBJRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXG4gICAgICAgICAgXCJnZXQudGFibGUuZGF0YVwiLFxuICAgICAgICAgIChwYXlsb2FkKSA9PiAocGF5bG9hZC5yZXN1bHQgPSB0aGlzLnRhYmxlLmdldERhdGEoKSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXG4gICAgICAgICAgXCJnZXQuc2VsZWN0ZWQucm93c1wiLFxuICAgICAgICAgIChwYXlsb2FkKSA9PiAocGF5bG9hZC5yZXN1bHQgPSB0aGlzLnNlbGVjdGlvbkNvbnRleHQuZ2V0U2VsZWN0ZWQoKSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXCJnZXQuZmlsdGVyZWQucm93c1wiLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWFyY2hDb250ZXh0LmdldFNlYXJjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5maWx0ZXJDb250ZXh0LmdldEZpbHRlcmVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKGV4cG9zZWRBUElFbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLnNvcnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IGNyZWF0ZVNvcnRDb250ZXh0KFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlU29ydCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVNvcnRDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5jb2x1bW5Ub2dnbGUgfHxcbiAgICAgICAgcHJvcHMuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuaGlkZGVuKS5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5Db2x1bW5Db250ZXh0ID0gY3JlYXRlQ29sdW1uQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIHRoaXMuU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmV4cGFuZFJvdykge1xuICAgICAgICB0aGlzLlJvd0V4cGFuZENvbnRleHQgPSBjcmVhdGVSb3dFeHBhbmRDb250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5jZWxsRWRpdCAmJiBwcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gcHJvcHMuY2VsbEVkaXQuY3JlYXRlQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlQ2VsbEVkaXQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVDZWxsQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5maWx0ZXIpIHtcbiAgICAgICAgdGhpcy5GaWx0ZXJDb250ZXh0ID0gcHJvcHMuZmlsdGVyLmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlRmlsdGVyaW5nLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBwcm9wcy5wYWdpbmF0aW9uLmNyZWF0ZUNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNlYXJjaCAmJiBwcm9wcy5zZWFyY2guc2VhcmNoQ29udGV4dCkge1xuICAgICAgICB0aGlzLlNlYXJjaENvbnRleHQgPSBwcm9wcy5zZWFyY2guc2VhcmNoQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVTZWFyY2gsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKSB7XG4gICAgICAgIHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKF8pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIodGhpcy5yZW1vdGVFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBhbnkpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuc29ydCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLlNvcnRDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBjcmVhdGVTb3J0Q29udGV4dChcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVNvcnQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIW5leHRQcm9wcy5wYWdpbmF0aW9uICYmIHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiAhdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlUGFnZUNoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMuY2VsbEVkaXQgJiYgdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmICF0aGlzLnByb3BzLmNlbGxFZGl0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gbmV4dFByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlckJhc2UoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55LFxuICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPEJhc2VcbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLnRhYmxlID0gbil9XG4gICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgey4uLnNvcnRQcm9wc31cbiAgICAgICAgICB7Li4uZmlsdGVyUHJvcHN9XG4gICAgICAgICAgey4uLnNlYXJjaFByb3BzfVxuICAgICAgICAgIHsuLi5wYWdpbmF0aW9uUHJvcHN9XG4gICAgICAgICAgey4uLmNvbHVtblRvZ2dsZVByb3BzfVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhDb2x1bW5Db250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczogYW55LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Db2x1bW5Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICB0b2dnbGVzPXtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlID8gdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcyA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5Db2x1bW5Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhjb2x1bW5Ub2dnbGVQcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuQ29sdW1uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLkNvbHVtbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5TZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLnNlbGVjdGlvbkNvbnRleHQgPSBuKX1cbiAgICAgICAgICBzZWxlY3RSb3c9e3RoaXMucHJvcHMuc2VsZWN0Um93fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShcbiAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA8L3RoaXMuU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlJvd0V4cGFuZENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbmRDb250ZXh0ID0gbjtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGV4cGFuZFJvdz17dGhpcy5wcm9wcy5leHBhbmRSb3d9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtiYXNlKFxuICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgIDwvdGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQoYmFzZTogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLnBhZ2luYXRpb25Db250ZXh0ID0gbil9XG4gICAgICAgICAgcGFnaW5hdGlvbj17dGhpcy5wcm9wcy5wYWdpbmF0aW9ufVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzKX1cbiAgICAgICAgICBib290c3RyYXA0PXt0aGlzLnByb3BzLmJvb3RzdHJhcDR9XG4gICAgICAgICAgaXNSZW1vdGVQYWdpbmF0aW9uPXt0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbn1cbiAgICAgICAgICByZW1vdGVFbWl0dGVyPXt0aGlzLnJlbW90ZUVtaXR0ZXJ9XG4gICAgICAgICAgb25EYXRhU2l6ZUNoYW5nZT17dGhpcy5wcm9wcy5vbkRhdGFTaXplQ2hhbmdlfVxuICAgICAgICAgIHRhYmxlSWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsocGFnaW5hdGlvblByb3BzOiBhbnkpID0+XG4gICAgICAgICAgICAgIGJhc2UoXG4gICAgICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlBhZ2luYXRpb25Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU29ydENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLnNvcnRDb250ZXh0ID0gbil9XG4gICAgICAgICAgZGVmYXVsdFNvcnRlZD17dGhpcy5wcm9wcy5kZWZhdWx0U29ydGVkfVxuICAgICAgICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uPXt0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9ufVxuICAgICAgICAgIHNvcnQ9e3RoaXMucHJvcHMuc29ydH1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMpfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHNvcnRQcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKHJvb3RQcm9wcywgZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLlNvcnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuU29ydENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhTZWFyY2hDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wcz86IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wcz86IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuU2VhcmNoQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5zZWFyY2hDb250ZXh0ID0gbil9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMpfVxuICAgICAgICAgIHNlYXJjaFRleHQ9e3RoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHR9XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyPXt0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcn1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHNlYXJjaFByb3BzOiBhbnkpID0+IGJhc2Uocm9vdFByb3BzLCBmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMpfVxuICAgICAgICAgIDwvdGhpcy5TZWFyY2hDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aEZpbHRlckNvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChyb290UHJvcHM6IGFueSkgPT4gKFxuICAgICAgICA8dGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+ICh0aGlzLmZpbHRlckNvbnRleHQgPSBuKX1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YSgpfVxuICAgICAgICAgIGZpbHRlcj17dGhpcy5wcm9wcy5maWx0ZXIub3B0aW9ucyB8fCB7fX1cbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI9e3RoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoZmlsdGVyUHJvcHM6IGFueSkgPT4gYmFzZShyb290UHJvcHMsIGZpbHRlclByb3BzKX1cbiAgICAgICAgICA8L3RoaXMuRmlsdGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChyb290UHJvcHM6IHtcbiAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgIGZpbHRlclByb3BzPzogYW55LFxuICAgICAgICAgIHNlYXJjaFByb3BzPzogYW55LFxuICAgICAgICAgIHNvcnRQcm9wcz86IGFueSxcbiAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgKSA9PiBhbnk7XG4gICAgICB9KSA9PiAoXG4gICAgICAgIDx0aGlzLkNlbGxFZGl0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5jZWxsRWRpdENvbnRleHQgPSBuKX1cbiAgICAgICAgICBzZWxlY3RSb3c9e3RoaXMucHJvcHMuc2VsZWN0Um93fVxuICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKCl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShyb290UHJvcHMpfVxuICAgICAgICA8L3RoaXMuQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkLCBjb2x1bW5zLCBib290c3RyYXA0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgYmFzZVByb3BzID0geyBrZXlGaWVsZCwgY29sdW1ucyB9O1xuXG4gICAgICBsZXQgYmFzZSA9IHRoaXMucmVuZGVyQmFzZSgpO1xuXG4gICAgICBpZiAodGhpcy5Db2x1bW5Db250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDb2x1bW5Db250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNlbGVjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNlbGVjdGlvbkNvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUm93RXhwYW5kQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoUm93RXhwYW5kQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5QYWdpbmF0aW9uQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQoYmFzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNvcnRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTb3J0Q29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5TZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTZWFyY2hDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aEZpbHRlckNvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuQ2VsbEVkaXRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJvb3RzdHJhcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgYm9vdHN0cmFwNCB9fT5cbiAgICAgICAgICA8dGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlciB7Li4uYmFzZVByb3BzfSBkYXRhPXt0aGlzLnByb3BzLmRhdGF9PlxuICAgICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuQ29uc3VtZXI+e2Jhc2V9PC90aGlzLkRhdGFDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIDwvdGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9Cb290c3RyYXBDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhDb250ZXh0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBGSUxURVJTX1BPU0lUSU9OX1RPUCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgRmlsdGVyc0NlbGwgZnJvbSBcIi4vZmlsdGVycy1jZWxsXCI7XG5pbXBvcnQgUm93VGVtcGxhdGUgZnJvbSBcIi4vcm93L3Jvdy10ZW1wbGF0ZVwiO1xuXG5pbnRlcmZhY2UgRmlsdGVyc1Byb3BzIHtcbiAgY29sdW1uczogYW55W107XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gRnVuY3Rpb247XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc2VsZWN0Um93PzogYW55O1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIG9uU29ydD86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xufVxuXG5jb25zdCBGaWx0ZXJzOiBSZWFjdC5GQzxGaWx0ZXJzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5zLFxuICAgIG9uRmlsdGVyLFxuICAgIGN1cnJGaWx0ZXJzLFxuICAgIGZpbHRlclBvc2l0aW9uID0gRklMVEVSU19QT1NJVElPTl9UT1AsXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvdyxcbiAgfSA9IHByb3BzO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgZmlsdGVyQ29sdW1uczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzaG93RmlsdGVyc1JvdyA9IGZhbHNlO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGZpbHRlckNvbHVtbnMucHVzaChcbiAgICAgICAgPEZpbHRlcnNDZWxsXG4gICAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIGN1cnJGaWx0ZXJzPXtjdXJyRmlsdGVyc31cbiAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXtvbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyUmVuZGVyZXIgfHwgY29sdW1uLmZpbHRlcikge1xuICAgICAgICBpZiAoIXNob3dGaWx0ZXJzUm93KSB7XG4gICAgICAgICAgc2hvd0ZpbHRlcnNSb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlckNvbHVtbnM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Ym9keVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OlxuICAgICAgICAgIGZpbHRlclBvc2l0aW9uID09PSBGSUxURVJTX1BPU0lUSU9OX1RPUFxuICAgICAgICAgICAgPyBcInRhYmxlLWhlYWRlci1ncm91cFwiXG4gICAgICAgICAgICA6IFwidGFibGUtZm9vdGVyLWdyb3VwXCIsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxSb3dUZW1wbGF0ZVxuICAgICAgICByZW5kZXJDb250ZW50PXtyZW5kZXJDb250ZW50fVxuICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgIGNlbGxFbD1cInRkXCJcbiAgICAgIC8+XG4gICAgPC90Ym9keT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnM7XG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFJlbW90ZVJlc29sdmVyIGV4dGVuZHMgQ29tcG9uZW50PHR5cGVvZiBFeHRlbmRCYXNlPiB7XG4gICAgcmVtb3RlRW1pdHRlcjogRXZlbnRFbWl0dGVyO1xuXG4gICAgRGF0YUNvbnRleHQ6IGFueTtcbiAgICBDb2x1bW5Db250ZXh0OiBhbnk7XG4gICAgU2VsZWN0aW9uQ29udGV4dDogYW55O1xuICAgIFNlYXJjaENvbnRleHQ6IGFueTtcbiAgICBGaWx0ZXJDb250ZXh0OiBhbnk7XG4gICAgUm93RXhwYW5kQ29udGV4dDogYW55O1xuICAgIENlbGxFZGl0Q29udGV4dDogYW55O1xuICAgIFBhZ2luYXRpb25Db250ZXh0OiBhbnk7XG4gICAgU29ydENvbnRleHQ6IGFueTtcbiAgICBUYWJsZTogYW55O1xuXG4gICAgZGF0YUNvbnRleHQ6IGFueTtcbiAgICBjb2x1bW5Db250ZXh0OiBhbnk7XG4gICAgc2VsZWN0aW9uQ29udGV4dDogYW55O1xuICAgIHNlYXJjaENvbnRleHQ6IGFueTtcbiAgICBmaWx0ZXJDb250ZXh0OiBhbnk7XG4gICAgcm93RXhwYW5kQ29udGV4dDogYW55O1xuICAgIGNlbGxFZGl0Q29udGV4dDogYW55O1xuICAgIHBhZ2luYXRpb25Db250ZXh0OiBhbnk7XG4gICAgc29ydENvbnRleHQ6IGFueTtcbiAgICB0YWJsZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKFwicGFnaW5hdGlvbkNoYW5nZVwiLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKFwiaXNSZW1vdGVQYWdpbmF0aW9uXCIsIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKTtcbiAgICB9XG5cbiAgICBnZXROZXdlc3RTdGF0ZSA9IChzdGF0ZTogYW55ID0ge30pID0+IHtcbiAgICAgIGxldCBzb3J0T3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzZWFyY2hUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmlsdGVyczogYW55ID0ge307XG5cbiAgICAgIGlmICh0aGlzLnNvcnRDb250ZXh0KSB7XG4gICAgICAgIHNvcnRPcmRlciA9IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydE9yZGVyO1xuICAgICAgICBzb3J0RmllbGQgPSB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRDb2x1bW5cbiAgICAgICAgICA/IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydENvbHVtbi5kYXRhRmllbGRcbiAgICAgICAgICA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgZmlsdGVycyA9IHRoaXMuZmlsdGVyQ29udGV4dC5jdXJyRmlsdGVycztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbnRleHQuY3VyclBhZ2U7XG4gICAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29udGV4dC5jdXJyU2l6ZVBlclBhZ2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgc2VhcmNoVGV4dCA9IHRoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgc29ydEZpZWxkLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBwYWdlLFxuICAgICAgICBzaXplUGVyUGFnZSxcbiAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRhdGE6IHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGlzUmVtb3RlU2VhcmNoID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuc2VhcmNoKSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoZTogYW55ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgZS5yZXN1bHQgPSByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUucGFnaW5hdGlvbik7XG4gICAgICByZXR1cm4gZS5yZXN1bHQ7XG4gICAgfTtcblxuICAgIGlzUmVtb3RlRmlsdGVyaW5nID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuZmlsdGVyKSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVNvcnQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlbW90ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5zb3J0KSB8fFxuICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpc1JlbW90ZUNlbGxFZGl0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLmNlbGxFZGl0KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlUGFnZUNoYW5nZSA9IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcbiAgICAgICAgXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBwYWdlLCBzaXplUGVyUGFnZSB9KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlID0gKGZpbHRlcnM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGU6IHsgZmlsdGVyczogYW55OyBwYWdlPzogbnVtYmVyIH0gPSB7IGZpbHRlcnMgfTtcbiAgICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24ub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgbmV3U3RhdGUucGFnZSA9IF8uaXNEZWZpbmVkKG9wdGlvbnMucGFnZVN0YXJ0SW5kZXgpXG4gICAgICAgICAgPyBvcHRpb25zLnBhZ2VTdGFydEluZGV4XG4gICAgICAgICAgOiAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwiZmlsdGVyXCIsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUobmV3U3RhdGUpKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlU29ydENoYW5nZSA9IChzb3J0RmllbGQ6IHN0cmluZywgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcbiAgICAgICAgXCJzb3J0XCIsXG4gICAgICAgIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzb3J0RmllbGQsIHNvcnRPcmRlciB9KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlQ2VsbENoYW5nZSA9IChyb3dJZDogYW55LCBkYXRhRmllbGQ6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2VsbEVkaXQgPSB7IHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlIH07XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXCJjZWxsRWRpdFwiLCB0aGlzLmdldE5ld2VzdFN0YXRlKHsgY2VsbEVkaXQgfSkpO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UgPSAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXCJzZWFyY2hcIiwgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHNlYXJjaFRleHQgfSkpO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQ29sdW1uUmVzb2x2ZXIgZXh0ZW5kcyBDb21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICB2aXNpYmxlQ29sdW1uU2l6ZShpbmNsdWRlU2VsZWN0Q29sdW1uID0gdHJ1ZSkge1xuICAgICAgbGV0IGNvbHVtbkxlbjtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSAmJiB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZS50b2dnbGVzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZS50b2dnbGVzO1xuICAgICAgICBjb2x1bW5MZW4gPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5maWx0ZXIoKG5hbWUpID0+IGNvbHVtbnNbbmFtZV0pLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbkxlbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoKGM6IGFueSkgPT4gIWMuaGlkZGVuKS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoIWluY2x1ZGVTZWxlY3RDb2x1bW4pIHJldHVybiBjb2x1bW5MZW47XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgIXRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICAgICAgY29sdW1uTGVuICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5leHBhbmRSb3cgJiYgdGhpcy5wcm9wcy5leHBhbmRSb3cuc2hvd0V4cGFuZENvbHVtbikge1xuICAgICAgICBjb2x1bW5MZW4gKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2x1bW5MZW47XG4gICAgfVxuICB9O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3MjMpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNTQ0Ml9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNjAwM19fIiwiRXhwYW5kUm93IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN1cGVyIiwidGhpcyIsIm5vZGVSZWYiLCJjcmVhdGVSZWYiLCJyZW5kZXIiLCJjaGlsZHJlbiIsImV4cGFuZGVkIiwib25DbG9zZWQiLCJjbGFzc05hbWUiLCJyZXN0IiwiQ1NTVHJhbnNpdGlvbiIsImFwcGVhciIsImluIiwidGltZW91dCIsImNsYXNzTmFtZXMiLCJvbkV4aXRlZCIsInJlZiIsIm9yZGVyIiwib3JkZXJDbGFzcyIsImRyb3B1cCIsIlNPUlRfQVNDIiwiQm9vdHN0cmFwQ29udGV4dCIsIkNvbnN1bWVyIiwiYm9vdHN0cmFwNCIsImNvbnRlbnQiLCJjb2xTcGFuIiwiaW5kZXgiLCJjb2x1bW4iLCJjdXJyRmlsdGVycyIsIm9uRXh0ZXJuYWxGaWx0ZXIiLCJvbkZpbHRlciIsImZpbHRlciIsImZpbHRlckVsbSIsImNlbGxBdHRycyIsImNlbGxTdHlsZSIsInN0eWxlIiwiaGVhZGVyQWxpZ24iLCJ0ZXh0QWxpZ24iLCJpc0Z1bmN0aW9uIiwiZmlsdGVyUmVuZGVyZXIiLCJvbkN1c3RvbUZpbHRlciIsInR5cGUiLCJGaWx0ZXIiLCJmaWx0ZXJTdGF0ZSIsImRhdGFGaWVsZCIsImNyZWF0ZUVsZW1lbnQiLCJFeHRlbmRCYXNlIiwic2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyIsIm5leHRQcm9wcyIsImNsaWNrVG9FZGl0IiwiZGJjbGlja1RvRWRpdCIsImVkaXRpbmdSb3dJZHgiLCJyb3dJbmRleCIsInNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyIsImlzRXF1YWwiLCJhdHRycyIsInNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrIiwiY29sdW1ucyIsImxlbmd0aCIsImkiLCJzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyIsImVkaXRhYmxlIiwicm93Iiwic2hvdWxkVXBkYXRlQ2hpbGQiLCJzaG91bGRSb3dDb250ZW50VXBkYXRlIiwibWF0Y2hSb3ciLCJrZXlGaWVsZCIsImlkIiwiZ2V0IiwiZ2V0Um93QnlSb3dJZCIsImRhdGEiLCJmaW5kIiwiUm93QWdncmVnYXRvciIsIlJvd0V2ZW50RGVsZWdhdGVyIiwiY2xpY2tOdW0iLCJzaG91bGRVcGRhdGVSb3dDb250ZW50IiwiY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIiLCJiaW5kIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwic2VsZWN0ZWQiLCJleHBhbmRhYmxlIiwic2VsZWN0YWJsZSIsInNlbGVjdFJvdyIsImhpZGVTZWxlY3RDb2x1bW4iLCJpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0IiwicG9zaXRpb24iLCJJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCIsImV4cGFuZFJvdyIsInZpc2libGVDb2x1bW5TaXplIiwidGFiSW5kZXhDZWxsIiwia2V5Iiwic2VsZWN0Q29sdW1uUG9zaXRpb24iLCJjbGlja1RvU2VsZWN0Iiwic2hvd0V4cGFuZENvbHVtbiIsImV4cGFuZENvbHVtblBvc2l0aW9uIiwibmV3QXR0cnMiLCJkZWxlZ2F0ZSIsInJlbmRlcmVyIiwib25DbGljayIsInRhYkluZGV4U3RhcnQiLCJjaGlsZHJlbnMiLCJzaG91bGRVcGRhdGUiLCJzZWxlY3RDZWxsIiwicm93S2V5IiwiZGlzYWJsZWQiLCJ0YWJJbmRleCIsInVuc2hpZnQiLCJwdXNoIiwiZXhwYW5kQ2VsbCIsIkV4cGFuZENlbGwiLCJoYW5kbGVDbGljayIsImUiLCJvblJvd0V4cGFuZCIsInN0b3BQcm9wYWdhdGlvbiIsImV4cGFuZENvbHVtblJlbmRlcmVyIiwidW5kZWZpbmVkIiwiQm9vdHN0cmFwVGFibGUiLCJnZXREYXRhIiwidmlzaWJsZVJvd3MiLCJ2YWxpZGF0ZVByb3BzIiwiY29tcG9uZW50RGlkVXBkYXRlIiwib25EYXRhU2l6ZUNoYW5nZSIsInBhZ2luYXRpb24iLCJkYXRhU2l6ZSIsImxvYWRpbmciLCJvdmVybGF5IiwiTG9hZGluZ092ZXJsYXkiLCJyZW5kZXJUYWJsZSIsImNsYXNzZXMiLCJzdHJpcGVkIiwiaG92ZXIiLCJib3JkZXJlZCIsImNvbmRlbnNlZCIsIm5vRGF0YUluZGljYXRpb24iLCJjYXB0aW9uIiwicm93U3R5bGUiLCJyb3dDbGFzc2VzIiwid3JhcHBlckNsYXNzZXMiLCJyb3dFdmVudHMiLCJtb2RlIiwiUk9XX1NFTEVDVF9ESVNBQkxFRCIsIm5vbkV4cGFuZGFibGUiLCJjZWxsRWRpdCIsIm5vbkVkaXRhYmxlUm93cyIsImZpbHRlclBvc2l0aW9uIiwiRklMVEVSU19QT1NJVElPTl9JTkxJTkUiLCJ0YWJsZVdyYXBwZXJDbGFzcyIsInRhYmxlQ2xhc3MiLCJoYXNGaWx0ZXJzIiwic29tZSIsImNvbCIsImhhc0Zvb3RlciIsImhhcyIsInRhYmxlQ2FwdGlvbiIsImhlYWRlckNsYXNzZXMiLCJoZWFkZXJXcmFwcGVyQ2xhc3NlcyIsInNvcnRGaWVsZCIsInNvcnRPcmRlciIsIm9uU29ydCIsImdsb2JhbFNvcnRDYXJldCIsInNvcnQiLCJzb3J0Q2FyZXQiLCJmaWx0ZXJzQ2xhc3NlcyIsImJvZHlDbGFzc2VzIiwiaXNFbXB0eSIsImZvb3RlckNsYXNzZXMiLCJyZW5kZXJDb250ZW50IiwiY2VsbEVsIiwiU2VsZWN0aW9uQ2VsbCIsInNlbGVjdENvbHVtblN0eWxlIiwiaW5wdXRUeXBlIiwib25Sb3dTZWxlY3QiLCJST1dfU0VMRUNUX1NJTkdMRSIsInNlbGVjdGlvblJlbmRlcmVyIiwiY2hlY2tlZCIsInJvd2luZGV4Iiwicm93a2V5Iiwib25DaGFuZ2UiLCJpc0FueUV4cGFuZHMiLCJ4IiwiZXhwYW5kYWJsZUtleXMiLCJza2lwcyIsIm1hcCIsImNvbnRhaW5zIiwiZ2V0RXhwYW5kZWRSb3dzIiwiayIsIlJvd0V4cGFuZENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiaXNDbG9zaW5nIiwib25BbGxSb3dFeHBhbmQiLCJSb3dFeHBhbmRQcm92aWRlciIsInN0YXRlIiwiY2xvc2VkUm93Iiwic2V0U3RhdGUiLCJ2YWx1ZSIsImhhbmRsZVJvd0V4cGFuZCIsImlzRXhwYW5kZWQiLCJvbkV4cGFuZCIsIm9ubHlPbmVFeHBhbmRpbmciLCJjdXJyRXhwYW5kZWQiLCJjdXJySXNDbG9zaW5nIiwiY29uY2F0IiwiaGFuZGxlQWxsUm93RXhwYW5kIiwiZXhwYW5kQWxsIiwib25FeHBhbmRBbGwiLCJzIiwiZCIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInByZXZTdGF0ZSIsIm5leHRFeHBhbmRlZCIsInJvd0lkIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUHJvdmlkZXIiLCJjYXB0aW9uU2lkZSIsImV2ZW50cyIsIkNlbGxFdmVudERlbGVnYXRlciIsImNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIiLCJjYiIsImNvbHVtbkluZGV4IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJhdHRyIiwiaW5jbHVkZXMiLCJ0eXBlQ29udmVydCIsIlRZUEVfU1RSSU5HIiwiU3RyaW5nIiwiVFlQRV9OVU1CRVIiLCJOdW1iZXIiLCJUWVBFX0JPT0xFQU4iLCJUWVBFX0RBVEUiLCJEYXRlIiwiUm93UHVyZUNvbnRlbnQiLCJpc0VkaXRhYmxlIiwiZWRpdGluZ0NvbElkeCIsImF0c3RhcnQiLCJFZGl0aW5nQ2VsbENvbXBvbmVudCIsImNlbGxUaXRsZSIsIm9yaWdpbkZuIiwiY2VsbENsYXNzZXMiLCJ0aXRsZSIsImFsaWduIiwiaXNFbXB0eU9iamVjdCIsImVkaXRhYmxlQ2VsbCIsImlzRGVmaW5lZCIsInRvU3RyaW5nIiwiY29sdW1uaW5kZXgiLCJjbGlja3RvZWRpdCIsImRiY2xpY2t0b2VkaXQiLCJkZWZhdWx0Q29sdW1uQ29udGV4dCIsInRvZ2dsZXMiLCJDb2x1bW5Db250ZXh0IiwiQ29sdW1uUHJvdmlkZXIiLCJ0b2dnbGVDb2x1bW5zIiwiaGlkZGVuIiwiU2ltcGxlUm93IiwidHJBdHRycyIsIkRhdGFDb250ZXh0IiwiRGF0YVByb3ZpZGVyIiwiZmlsdGVyUHJvcHMiLCJzZWFyY2hQcm9wcyIsInNvcnRQcm9wcyIsInBhZ2luYXRpb25Qcm9wcyIsIldpdGhTZWxlY3Rpb25Sb3dDb25zdW1lciIsIlNlbGVjdGlvbkNvbnRleHQiLCJub25TZWxlY3RhYmxlIiwibm90U2VsZWN0YWJsZSIsInNlbGVjdGVkU3R5bGUiLCJzZWxlY3RlZENsYXNzZXMiLCJiZ0NvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwibm90U2VsZWN0YWJsZVN0eWxlIiwibm9uU2VsZWN0YWJsZVN0eWxlIiwibm90U2VsZWN0YWJsZUNsYXNzZXMiLCJub25TZWxlY3RhYmxlQ2xhc3NlcyIsInJlbmRlcldpdGhTZWxlY3Rpb24iLCJkaXNwbGF5TmFtZSIsImNyZWF0ZVNlbGVjdGlvbkNvbnRleHQiLCJjb21wYXJhdG9yIiwiYSIsImIiLCJyZXN1bHQiLCJsb2NhbGVDb21wYXJlIiwic29ydEZ1bmMiLCJzb3J0VmFsdWUiLCJfZGF0YSIsInZhbHVlQSIsInZhbHVlQiIsIlNPUlRfREVTQyIsIm5leHRPcmRlciIsImN1cnJlbnRTb3J0Q29sdW1uIiwic29ydENvbHVtbiIsImRlZmF1bHRPcmRlciIsInNwbGl0TmVzdGVkIiwic3RyIiwiam9pbiIsInJlcGxhY2UiLCJzcGxpdCIsImFzc2lnbiIsInRhcmdldCIsImZpZWxkIiwiZGlyZWN0R2V0IiwicGF0aEFycmF5IiwiY3VyciIsInBhdGgiLCJzZXQiLCJzYWZlIiwibGV2ZWwiLCJFcnJvciIsIm9iaiIsImlzT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJjYWxsIiwic2xlZXAiLCJmbiIsIm1zIiwic2V0VGltZW91dCIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsaXN0IiwiaW5kZXhPZiIsIkV4cGFuc2lvbkhlYWRlckNlbGwiLCJoYW5kbGVDaGVja0JveENsaWNrIiwiZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIiLCJnZXRTZWxlY3Rpb25TdW1tYXJ5IiwiYWxsUm93c1NlbGVjdGVkIiwiYWxsUm93c05vdFNlbGVjdGVkIiwicm93S2V5cyIsInNlbGVjdGFibGVLZXlzIiwidW5TZWxlY3RhYmxlS2V5cyIsImdldFNlbGVjdGVkUm93cyIsIlZFUlNJT04iLCJnIiwiZ2xvYmFsIiwiRnVuY3Rpb24iLCJBcnJheVByb3RvIiwiQXJyYXkiLCJPYmpQcm90byIsIlN5bWJvbFByb3RvIiwiU3ltYm9sIiwic2xpY2UiLCJzdXBwb3J0c0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJzdXBwb3J0c0RhdGFWaWV3IiwiRGF0YVZpZXciLCJuYXRpdmVJc0FycmF5IiwiaXNBcnJheSIsIm5hdGl2ZUtleXMiLCJuYXRpdmVDcmVhdGUiLCJjcmVhdGUiLCJuYXRpdmVJc1ZpZXciLCJpc1ZpZXciLCJfaXNOYU4iLCJpc05hTiIsIl9pc0Zpbml0ZSIsImlzRmluaXRlIiwiaGFzRW51bUJ1ZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwibm9uRW51bWVyYWJsZVByb3BzIiwiTUFYX0FSUkFZX0lOREVYIiwiTWF0aCIsInBvdyIsInJlc3RBcmd1bWVudHMiLCJzdGFydEluZGV4IiwibWF4IiwiYXJncyIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiaXNCb29sZWFuIiwiaXNFbGVtZW50Iiwibm9kZVR5cGUiLCJ0YWdUZXN0ZXIiLCJuYW1lIiwidGFnIiwibm9kZWxpc3QiLCJkb2N1bWVudCIsImNoaWxkTm9kZXMiLCJJbnQ4QXJyYXkiLCJoYXNEYXRhVmlld0J1ZyIsInRlc3QiLCJpc0lFMTEiLCJNYXAiLCJpc0RhdGFWaWV3IiwiZ2V0SW50OCIsImlzQXJyYXlCdWZmZXIiLCJidWZmZXIiLCJpc0FyZ3VtZW50cyIsImlzU3ltYm9sIiwicGFyc2VGbG9hdCIsImlzTnVtYmVyIiwiY29uc3RhbnQiLCJjcmVhdGVTaXplUHJvcGVydHlDaGVjayIsImdldFNpemVQcm9wZXJ0eSIsImNvbGxlY3Rpb24iLCJzaXplUHJvcGVydHkiLCJzaGFsbG93UHJvcGVydHkiLCJ0eXBlZEFycmF5UGF0dGVybiIsImNvbGxlY3ROb25FbnVtUHJvcHMiLCJoYXNoIiwibCIsImVtdWxhdGVkU2V0Iiwibm9uRW51bUlkeCIsInByb3RvIiwicHJvcCIsImlzU3RyaW5nIiwiaXNNYXRjaCIsIm9iamVjdCIsIl9rZXlzIiwiXyIsIl93cmFwcGVkIiwidG9CdWZmZXJWaWV3IiwiYnVmZmVyU291cmNlIiwiVWludDhBcnJheSIsImJ5dGVPZmZzZXQiLCJ2YWx1ZU9mIiwidG9KU09OIiwidGFnRGF0YVZpZXciLCJlcSIsImFTdGFjayIsImJTdGFjayIsImRlZXBFcSIsImFyZUFycmF5cyIsImFDdG9yIiwiYkN0b3IiLCJwb3AiLCJhbGxLZXlzIiwiaWUxMWZpbmdlcnByaW50IiwibWV0aG9kcyIsIndlYWtNYXBNZXRob2RzIiwiZm9yRWFjaE5hbWUiLCJjb21tb25Jbml0IiwibWFwVGFpbCIsIm1hcE1ldGhvZHMiLCJzZXRNZXRob2RzIiwidmFsdWVzIiwicGFpcnMiLCJpbnZlcnQiLCJmdW5jdGlvbnMiLCJuYW1lcyIsImNyZWF0ZUFzc2lnbmVyIiwia2V5c0Z1bmMiLCJkZWZhdWx0cyIsInNvdXJjZSIsImJhc2VDcmVhdGUiLCJDdG9yIiwiZXh0ZW5kT3duIiwiY2xvbmUiLCJleHRlbmQiLCJ0YXAiLCJpbnRlcmNlcHRvciIsInRvUGF0aCIsImRlZXBHZXQiLCJkZWZhdWx0VmFsdWUiLCJpZGVudGl0eSIsIm1hdGNoZXIiLCJwcm9wZXJ0eSIsIm9wdGltaXplQ2IiLCJjb250ZXh0IiwiYXJnQ291bnQiLCJhY2N1bXVsYXRvciIsImJhc2VJdGVyYXRlZSIsIml0ZXJhdGVlIiwiSW5maW5pdHkiLCJtYXBPYmplY3QiLCJyZXN1bHRzIiwiY3VycmVudEtleSIsIm5vb3AiLCJwcm9wZXJ0eU9mIiwidGltZXMiLCJuIiwiYWNjdW0iLCJyYW5kb20iLCJtaW4iLCJmbG9vciIsIm5vdyIsImdldFRpbWUiLCJjcmVhdGVFc2NhcGVyIiwiZXNjYXBlciIsIm1hdGNoIiwidGVzdFJlZ2V4cCIsIlJlZ0V4cCIsInJlcGxhY2VSZWdleHAiLCJzdHJpbmciLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiZXZhbHVhdGUiLCJpbnRlcnBvbGF0ZSIsImVzY2FwZSIsIm5vTWF0Y2giLCJlc2NhcGVzIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlQ2hhciIsImJhcmVJZGVudGlmaWVyIiwidGVtcGxhdGUiLCJ0ZXh0Iiwic2V0dGluZ3MiLCJvbGRTZXR0aW5ncyIsIm9mZnNldCIsImFyZ3VtZW50IiwidmFyaWFibGUiLCJmYWxsYmFjayIsImlkQ291bnRlciIsInVuaXF1ZUlkIiwicHJlZml4IiwiY2hhaW4iLCJpbnN0YW5jZSIsIl9jaGFpbiIsImV4ZWN1dGVCb3VuZCIsInNvdXJjZUZ1bmMiLCJib3VuZEZ1bmMiLCJjYWxsaW5nQ29udGV4dCIsInBhcnRpYWwiLCJib3VuZEFyZ3MiLCJwbGFjZWhvbGRlciIsImJvdW5kIiwiVHlwZUVycm9yIiwiY2FsbEFyZ3MiLCJmbGF0dGVuIiwiaW5wdXQiLCJkZXB0aCIsInN0cmljdCIsIm91dHB1dCIsImlkeCIsImoiLCJsZW4iLCJtZW1vaXplIiwiaGFzaGVyIiwiY2FjaGUiLCJhZGRyZXNzIiwiZGVsYXkiLCJ0aHJvdHRsZSIsIm9wdGlvbnMiLCJwcmV2aW91cyIsImxhdGVyIiwibGVhZGluZyIsInRocm90dGxlZCIsIl9ub3ciLCJyZW1haW5pbmciLCJ0cmFpbGluZyIsImNhbmNlbCIsInBhc3NlZCIsImRlYm91bmNlZCIsIl9hcmdzIiwid3JhcCIsIndyYXBwZXIiLCJuZWdhdGUiLCJwcmVkaWNhdGUiLCJjb21wb3NlIiwic3RhcnQiLCJhZnRlciIsImJlZm9yZSIsIm1lbW8iLCJmaW5kS2V5IiwiY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIiLCJkaXIiLCJhcnJheSIsInNvcnRlZEluZGV4IiwibG93IiwiaGlnaCIsIm1pZCIsImNyZWF0ZUluZGV4RmluZGVyIiwicHJlZGljYXRlRmluZCIsIml0ZW0iLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4IiwiZmluZFdoZXJlIiwiZWFjaCIsImNyZWF0ZVJlZHVjZSIsImluaXRpYWwiLCJyZWR1Y2VyIiwicmVqZWN0IiwiZXZlcnkiLCJmcm9tSW5kZXgiLCJndWFyZCIsImNvbnRleHRQYXRoIiwibWV0aG9kIiwicGx1Y2siLCJ3aGVyZSIsImNvbXB1dGVkIiwibGFzdENvbXB1dGVkIiwidiIsInJlU3RyU3ltYm9sIiwidG9BcnJheSIsInNhbXBsZSIsImxhc3QiLCJyYW5kIiwidGVtcCIsInNodWZmbGUiLCJzb3J0QnkiLCJjcml0ZXJpYSIsImxlZnQiLCJyaWdodCIsImdyb3VwIiwiYmVoYXZpb3IiLCJwYXJ0aXRpb24iLCJwYXNzIiwic2l6ZSIsImtleUluT2JqIiwicGljayIsImZpcnN0IiwiY29tcGFjdCIsIkJvb2xlYW4iLCJvdGhlckFycmF5cyIsImRpZmZlcmVuY2UiLCJ1bmlxIiwiaXNTb3J0ZWQiLCJzZWVuIiwiYXJyYXlzIiwiaW50ZXJzZWN0aW9uIiwiYXJnc0xlbmd0aCIsInVuemlwIiwicmFuZ2UiLCJzdG9wIiwic3RlcCIsImNlaWwiLCJjaHVuayIsImNvdW50IiwiY2hhaW5SZXN1bHQiLCJtaXhpbiIsImRhdGFPcGVyYXRvciIsImlzUmVtb3RlU29ydCIsImhhbmRsZVNvcnRDaGFuZ2UiLCJkZWZhdWx0U29ydENvbnRleHQiLCJTb3J0Q29udGV4dCIsIlNvcnRQcm92aWRlciIsImhhbmRsZVNvcnQiLCJkZWZhdWx0U29ydERpcmVjdGlvbiIsImRlZmF1bHRTb3J0ZWQiLCJpbml0U29ydCIsImNvbXBvbmVudERpZE1vdW50Iiwic29ydENvbHVtbnMiLCJoaWRkZW5Sb3dzIiwiU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAiLCJFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCIsImN1cnJTb3J0IiwiaXNMYXN0U29ydGluZyIsInNvcnRpbmciLCJFeHBhbnNpb25Db250ZXh0IiwicGFyZW50Q2xhc3NOYW1lIiwicmVuZGVyV2l0aEV4cGFuc2lvbiIsIkJvZHkiLCJFZGl0aW5nQ2VsbCIsImNyZWF0ZUVkaXRpbmdDZWxsIiwib25TdGFydEVkaXQiLCJSb3dDb21wb25lbnQiLCJzZWxlY3RSb3dFbmFibGVkIiwiZXhwYW5kUm93RW5hYmxlZCIsIndpdGhSb3dMZXZlbENlbGxFZGl0IiwiaW5kaWNhdGlvbiIsImFkZGl0aW9uYWxSb3dQcm9wcyIsImJhc2VSb3dQcm9wcyIsIl9leHRlbmRzIiwidCIsInIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIl9zZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzTG9vc2UiLCJvIiwicmVwbGFjZUNsYXNzTmFtZSIsIm9yaWdDbGFzcyIsImNsYXNzVG9SZW1vdmUiLCJmb3JjZVJlZmxvdyIsIm5vZGUiLCJzY3JvbGxUb3AiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiVHJhbnNpdGlvbiIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsImluaXRpYWxTdGF0dXMiLCJpc01vdW50aW5nIiwiZW50ZXIiLCJhcHBlYXJTdGF0dXMiLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiX3JlZiIsIl9wcm90byIsInVwZGF0ZVN0YXR1cyIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNhbmNlbE5leHRDYWxsYmFjayIsImdldFRpbWVvdXRzIiwiZXhpdCIsIm1vdW50aW5nIiwiY3VycmVudCIsInBlcmZvcm1FbnRlciIsInBlcmZvcm1FeGl0IiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwiX3JlZjIiLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0IiwiY29uZmlnIiwic2FmZVNldFN0YXRlIiwib25FbnRlcmVkIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvblRyYW5zaXRpb25FbmQiLCJfdGhpczMiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJuZXh0U3RhdGUiLCJjYWxsYmFjayIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImFjdGl2ZSIsImV2ZW50IiwiaGFuZGxlciIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJhZGRFbmRMaXN0ZW5lciIsIl9yZWYzIiwibWF5YmVOZXh0Q2FsbGJhY2siLCJfdGhpcyRwcm9wcyIsImNoaWxkUHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0Iiwib25seSIsImNvbnRleHRUeXBlIiwicHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzIiwicmVtb3ZlQ2xhc3MiLCJjIiwiZWxlbWVudCIsImNsYXNzTGlzdCIsInJlbW92ZSIsInNldEF0dHJpYnV0ZSIsImJhc2VWYWwiLCJfbGVuIiwiX2tleSIsImFwcGxpZWRDbGFzc2VzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50IiwicmVzb2x2ZUFyZ3VtZW50cyIsInJlbW92ZUNsYXNzZXMiLCJhZGRDbGFzcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudDIiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQzIiwiZ2V0Q2xhc3NOYW1lcyIsImlzU3RyaW5nQ2xhc3NOYW1lcyIsImJhc2VDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkb25lQ2xhc3NOYW1lIiwicGhhc2UiLCJhZGQiLCJoYXNDbGFzcyIsIl9hZGRDbGFzcyIsIl90aGlzJGFwcGxpZWRDbGFzc2VzJCIsImJhc2UiLCJkb25lIiwiZ2V0Q2hpbGRNYXBwaW5nIiwibWFwRm4iLCJDaGlsZHJlbiIsImNoaWxkIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwiZ2V0TmV4dENoaWxkTWFwcGluZyIsInByZXZDaGlsZE1hcHBpbmciLCJuZXh0Q2hpbGRNYXBwaW5nIiwicHJldiIsIm5leHQiLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiY2xvbmVFbGVtZW50IiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiY29udGV4dFZhbHVlIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiY3VycmVudENoaWxkTWFwcGluZyIsImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSIsIlJlcGxhY2VUcmFuc2l0aW9uIiwiaGFuZGxlRW50ZXIiLCJfbGVuMiIsIl9rZXkyIiwiaGFuZGxlTGlmZWN5Y2xlIiwiaGFuZGxlRW50ZXJpbmciLCJfbGVuMyIsIl9rZXkzIiwiaGFuZGxlRW50ZXJlZCIsIl9sZW40IiwiX2tleTQiLCJoYW5kbGVFeGl0IiwiX2xlbjUiLCJfa2V5NSIsImhhbmRsZUV4aXRpbmciLCJfbGVuNiIsIl9rZXk2IiwiX2xlbjciLCJfa2V5NyIsIm9yaWdpbmFsQXJncyIsIl9jaGlsZCRwcm9wcyIsImluUHJvcCIsIl9SZWFjdCRDaGlsZHJlbiR0b0FyciIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm9sZENoaWxkcmVuIiwibmV3Q2hpbGRyZW4iLCJfdGhpcyRzdGF0ZSIsIlJPV19TRUxFQ1RfTVVMVElQTEUiLCJDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSIsIkNIRUNLQk9YX1NUQVRVU19DSEVDS0VEIiwiQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCIsIkZJTFRFUlNfUE9TSVRJT05fVE9QIiwiRklMVEVSU19QT1NJVElPTl9CT1RUT00iLCJJTkRJQ0FUT1JfUE9TSVRJT05fUklHSFQiLCJyb3dzIiwic2VsZWN0aW9uIiwiZXhwYW5kIiwibXV0YXRlIiwiaGFzT3duIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOdW1iZXJJc05hTiIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJvbmNlIiwiZW1pdHRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInByZXBlbmQiLCJtIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwibmV3TGlzdGVuZXIiLCJlbWl0Iiwid2FybmVkIiwidyIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsIndyYXBwZWQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwiY29weSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ3cmFwTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiUmFuZ2VFcnJvciIsImdldFByb3RvdHlwZU9mIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVycm9yIiwiZXIiLCJtZXNzYWdlIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0Iiwic3BsaWNlT25lIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiY2xpY2tGbiIsImV4cGFuZEJ5Q29sdW1uT25seSIsImNsaWNrVG9FeHBhbmQiLCJDaGVja0JveCIsImluZGV0ZXJtaW5hdGUiLCJTZWxlY3Rpb25IZWFkZXJDZWxsIiwiY2hlY2tlZFN0YXR1cyIsIm9uQWxsUm93c1NlbGVjdCIsInNlbGVjdGlvbkhlYWRlclJlbmRlcmVyIiwiaGlkZVNlbGVjdEFsbCIsImhlYWRlckNvbHVtblN0eWxlIiwiZm9vdGVyIiwiY29sdW1uRGF0YSIsIkZvb3RlckNlbGwiLCJmb290ZXJUaXRsZSIsImZvb3RlckFsaWduIiwiZm9vdGVyRm9ybWF0dGVyIiwiZm9vdGVyRXZlbnRzIiwiZm9vdGVyU3R5bGUiLCJmb290ZXJBdHRycyIsImRlbGVnYXRlRXZlbnRzIiwiU2VsZWN0aW9uUHJvdmlkZXIiLCJoYW5kbGVSb3dTZWxlY3QiLCJvblNlbGVjdCIsImN1cnJTZWxlY3RlZCIsImlzSGFuZGxlUm93U2VsZWN0IiwiZm9yY2VVcGRhdGUiLCJoYW5kbGVBbGxSb3dzU2VsZWN0IiwiaXNVblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwiZ2V0U2VsZWN0ZWQiLCJDZWxsIiwiY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwiLCJpc0R1bW15RmllbGQiLCJmb3JtYXR0ZXIiLCJmb3JtYXRFeHRyYURhdGEiLCJvcmlnaW5GdW5jIiwib25Eb3VibGVDbGljayIsImVkaXRDZWxsIiwibmV3VmFsdWUiLCJIZWFkZXJDZWxsIiwiaGVhZGVyVGl0bGUiLCJoZWFkZXJGb3JtYXR0ZXIiLCJoZWFkZXJFdmVudHMiLCJoZWFkZXJTdHlsZSIsImhlYWRlckF0dHJzIiwiaGVhZGVyU29ydGluZ0NsYXNzZXMiLCJoZWFkZXJTb3J0aW5nU3R5bGUiLCJzb3J0Q2FyZXRmdW5jIiwiY3VzdG9tQXR0cnMiLCJzb3J0U3ltYm9sIiwiZmlsdGVyRWxlbWVudCIsImN1c3RvbUNsaWNrIiwiY3VzdG9tS2V5RG93biIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJzb3J0RWxlbWVudCIsIkJhc2UiLCJyZWdpc3RlckV4cG9zZWRBUEkiLCJleHBvc2VkQVBJRW1pdHRlciIsInBheWxvYWQiLCJ0YWJsZSIsInNlbGVjdGlvbkNvbnRleHQiLCJzZWFyY2hDb250ZXh0IiwiZ2V0U2VhcmNoZWQiLCJmaWx0ZXJDb250ZXh0IiwiZ2V0RmlsdGVyZWQiLCJoYW5kbGVSZW1vdGVTb3J0Q2hhbmdlIiwiY29sdW1uVG9nZ2xlIiwiQ2VsbEVkaXRDb250ZXh0IiwiaXNSZW1vdGVDZWxsRWRpdCIsImhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UiLCJGaWx0ZXJDb250ZXh0IiwiaXNSZW1vdGVGaWx0ZXJpbmciLCJoYW5kbGVSZW1vdGVGaWx0ZXJDaGFuZ2UiLCJQYWdpbmF0aW9uQ29udGV4dCIsInNlYXJjaCIsIlNlYXJjaENvbnRleHQiLCJpc1JlbW90ZVNlYXJjaCIsImhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwic2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJyZW1vdGVFbWl0dGVyIiwiaXNSZW1vdGVQYWdpbmF0aW9uIiwiaGFuZGxlUmVtb3RlUGFnZUNoYW5nZSIsInJlbmRlckJhc2UiLCJyb290UHJvcHMiLCJjb2x1bW5Ub2dnbGVQcm9wcyIsInJlbmRlcldpdGhDb2x1bW5Db250ZXh0IiwiYmFzZVByb3BzIiwicmVuZGVyV2l0aFNlbGVjdGlvbkNvbnRleHQiLCJyZW5kZXJXaXRoUm93RXhwYW5kQ29udGV4dCIsInJvd0V4cGFuZENvbnRleHQiLCJyZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQiLCJwYWdpbmF0aW9uQ29udGV4dCIsInRhYmxlSWQiLCJyZW5kZXJXaXRoU29ydENvbnRleHQiLCJzb3J0Q29udGV4dCIsInJlbmRlcldpdGhTZWFyY2hDb250ZXh0Iiwic2VhcmNoVGV4dCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsInJlbmRlcldpdGhGaWx0ZXJDb250ZXh0IiwicmVuZGVyV2l0aENlbGxFZGl0Q29udGV4dCIsImNlbGxFZGl0Q29udGV4dCIsImRpc3BsYXkiLCJmaWx0ZXJDb2x1bW5zIiwic2hvd0ZpbHRlcnNSb3ciLCJnZXROZXdlc3RTdGF0ZSIsInBhZ2UiLCJzaXplUGVyUGFnZSIsImZpbHRlcnMiLCJjdXJyUGFnZSIsImN1cnJTaXplUGVyUGFnZSIsInJlbW90ZSIsIm9uVGFibGVDaGFuZ2UiLCJuZXdTdGF0ZSIsInBhZ2VTdGFydEluZGV4IiwiaW5jbHVkZVNlbGVjdENvbHVtbiIsImNvbHVtbkxlbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJ0b1N0cmluZ1RhZyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9