openstack-uicore-foundation 4.0.97 → 4.0.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/ajaxloader.js +184 -1
- package/lib/components/attendance-tracker.js +1992 -1
- package/lib/components/bulk-actions-selector.js +194 -1
- package/lib/components/circle-button.js +223 -1
- package/lib/components/clock.js +678 -1
- package/lib/components/exclusive-wrapper.js +151 -1
- package/lib/components/extra-questions.js +1902 -1
- package/lib/components/form-validation.js +190 -1
- package/lib/components/forms/rsvp-form.js +940 -1
- package/lib/components/forms/simple-form.js +708 -1
- package/lib/components/free-text-search.js +2042 -1
- package/lib/components/google-map.js +576 -1
- package/lib/components/index.js +12840 -1
- package/lib/components/inputs/access-levels-input.js +2306 -1
- package/lib/components/inputs/action-dropdown.js +219 -1
- package/lib/components/inputs/checkbox-list.js +339 -1
- package/lib/components/inputs/company-input.js +2341 -1
- package/lib/components/inputs/country-dropdown.js +2399 -1
- package/lib/components/inputs/country-input.js +2302 -1
- package/lib/components/inputs/datetimepicker.js +314 -1
- package/lib/components/inputs/dropdown.js +259 -1
- package/lib/components/inputs/editor-input.js +270 -1
- package/lib/components/inputs/event-input.js +2280 -1
- package/lib/components/inputs/free-multi-text-input.js +252 -1
- package/lib/components/inputs/group-input.js +2275 -1
- package/lib/components/inputs/grouped-dropdown.js +244 -1
- package/lib/components/inputs/language-input.js +2307 -1
- package/lib/components/inputs/member-input.js +2302 -1
- package/lib/components/inputs/operator-input.js +328 -1
- package/lib/components/inputs/organization-input.js +2325 -1
- package/lib/components/inputs/promocode-input.js +2310 -1
- package/lib/components/inputs/radio-list.js +297 -1
- package/lib/components/inputs/registration-company-input.js +2470 -1
- package/lib/components/inputs/speaker-input.js +2336 -1
- package/lib/components/inputs/sponsor-input.js +2284 -1
- package/lib/components/inputs/stepped-select.js +197 -1
- package/lib/components/inputs/summit-days-select.js +162 -1
- package/lib/components/inputs/summit-input.js +2282 -1
- package/lib/components/inputs/summit-venues-select.js +172 -1
- package/lib/components/inputs/tag-input.js +2352 -1
- package/lib/components/inputs/text-input.js +202 -1
- package/lib/components/inputs/textarea-input.js +181 -1
- package/lib/components/inputs/ticket-types-input.js +2338 -1
- package/lib/components/inputs/upload-input-v2.js +834 -1
- package/lib/components/inputs/upload-input.js +391 -1
- package/lib/components/progressive-img.js +289 -1
- package/lib/components/raw-html.js +125 -1
- package/lib/components/schedule-builder-constants.js +81 -1
- package/lib/components/schedule-builder-view.js +1684 -1
- package/lib/components/sections/panel.js +156 -1
- package/lib/components/simple-link-list.js +790 -1
- package/lib/components/sponsored-project-input.js +2281 -1
- package/lib/components/summit-dropdown.js +214 -1
- package/lib/components/table-editable.js +895 -1
- package/lib/components/table-selectable.js +552 -1
- package/lib/components/table-sortable.js +657 -1
- package/lib/components/table.js +510 -1
- package/lib/components/video-stream.js +226 -1
- package/lib/css/components/bulk-actions-selector.css +16 -1
- package/lib/css/components/circle-button.css +24 -1
- package/lib/css/components/extra-questions.css +29 -1
- package/lib/css/components/form-validation.css +29 -1
- package/lib/css/components/free-text-search.css +29 -1
- package/lib/css/components/index.css +1354 -2
- package/lib/css/components/inputs/action-dropdown.css +46 -1
- package/lib/css/components/inputs/datetimepicker.css +208 -1
- package/lib/css/components/inputs/grouped-dropdown.css +25 -1
- package/lib/css/components/inputs/stepped-select.css +12 -1
- package/lib/css/components/inputs/upload-input-v2.css +106 -1
- package/lib/css/components/inputs/upload-input.css +43 -1
- package/lib/css/components/progressive-img.css +16 -1
- package/lib/css/components/schedule-builder-view.css +230 -1
- package/lib/css/components/simple-link-list.css +189 -1
- package/lib/css/components/summit-dropdown.css +35 -1
- package/lib/css/components/table-editable.css +145 -1
- package/lib/css/components/table-selectable.css +147 -1
- package/lib/css/components/table-sortable.css +150 -1
- package/lib/css/components/table.css +147 -1
- package/lib/i18n.js +449 -1
- package/lib/models/index.js +238 -1
- package/lib/models/summit-event.js +210 -1
- package/lib/security/abstract-auth-callback-route.js +2114 -1
- package/lib/security/actions.js +1818 -1
- package/lib/security/constants.js +71 -1
- package/lib/security/methods.js +1818 -1
- package/lib/security/reducers.js +1961 -1
- package/lib/security/session-checker.js +2179 -1
- package/lib/utils/actions.js +1818 -1
- package/lib/utils/fragment-parser.js +207 -1
- package/lib/utils/methods.js +369 -1
- package/lib/utils/query-actions.js +2154 -1
- package/lib/utils/questions-set.js +609 -1
- package/lib/utils/reducers.js +1874 -1
- package/lib/utils/use-fit-text.js +178 -1
- package/package.json +1 -1
|
@@ -1 +1,1902 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(()=>(()=>{"use strict";var e={2230:(e,t,a)=>{a.d(t,{default:()=>p});var r=a(3838),n=a.n(r),s=a(580),l=a.n(s),i=a(6689),o=a.n(i),u=a(4656),c=a.n(u),d=a(418);const m=["onChange","value","className","options","id","children","error","disabled","name","ariaLabelledBy"];class p extends o().Component{constructor(e){super(e);let t=!!e.value&&e.value.find((t=>!e.options.map((e=>e.value)).includes(t)));this.state={otherChecked:!!t},this.handleChange=this.handleChange.bind(this),this.handleOtherCBChange=this.handleOtherCBChange.bind(this)}handleChange(e){let t=this.props.options.map((e=>e.value)),a=this.props.value?[...this.props.value]:[];if("checkbox"===e.target.type)if(e.target.checked){const t=isNaN(e.target.value)?e.target.value:parseInt(e.target.value);a.push(t)}else a=a.filter((t=>t!=e.target.value));else a=a.filter((e=>t.includes(e))),a.push(e.target.value);let r={target:{id:this.props.id,value:a,type:"checkboxlist"}};this.props.onChange(r)}handleOtherCBChange(e){this.setState({otherChecked:e.target.checked})}render(){let e,t=this.props,{onChange:a,value:r,className:s,options:l,id:i,children:u,error:p,disabled:h,name:b,ariaLabelledBy:g}=t,{otherChecked:f}=(n()(t,m),this.state),v=this.props.hasOwnProperty("inline"),y=this.props.hasOwnProperty("html"),_=this.props.hasOwnProperty("allowOther"),E=!!r&&r.find((e=>!l.map((e=>e.value)).includes(e))),q=this.props.hasOwnProperty("error")&&""!==p,C=this.props.hasOwnProperty("disabled")&&1==h;return e=v?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px",marginTop:"7px"},o().createElement("div",{id:`chl_wrapper_${i}`,"aria-labelledby":g},o().createElement("div",{className:"checkboxes-div"+(q?" error":"")},l.map((t=>{let a=!!r&&r.includes(t.value);return o().createElement("div",{className:"form-check abc-checkbox",key:"radio_key_"+t.value,style:e},o().createElement("input",{type:"checkbox",id:`cb_${i}_${t.value}`,name:b||i,checked:a,disabled:C,onChange:this.handleChange,className:"form-check-input",value:t.value}),o().createElement("label",{className:"form-check-label",htmlFor:`cb_${i}_${t.value}`},y&&o().createElement(d.default,null,t.label),!y&&t.label))})),_&&o().createElement("div",{className:"form-check abc-checkbox",style:e},o().createElement("input",{type:"checkbox",id:"cb_other"+i,checked:f,disabled:C,onChange:this.handleOtherCBChange,className:"form-check-input",value:"other"}),o().createElement("label",{className:"form-check-label",htmlFor:"cb_other"+i},c().translate("general.other"))),_&&f&&o().createElement("div",{style:{paddingLeft:"22px",width:"50%"}},o().createElement("input",{className:"form-control",disabled:C,onChange:this.handleChange,value:E}))),q&&o().createElement("p",{className:"error-label"},p))}}p.defaultProps={ariaLabelledBy:null},p.propTypes={id:l().string.isRequired}},401:(e,t,a)=>{a.d(t,{default:()=>g});var r=a(8213),n=a.n(r),s=a(8779),l=a.n(s),i=a(3838),o=a.n(i),u=a(6689),c=a.n(u),d=a(1929),m=a.n(d);const p=["onChange","value","className","error","clearable","disabled","overrideCSS","ariaLabelledBy"];function h(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function b(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?h(Object(a),!0).forEach((function(t){l()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):h(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}class g extends c().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(e){let t=null;t=this.props.isMulti?e?e.map((e=>e.value)):null:e?e.value:null;let a={target:{id:this.props.id,value:t,type:"dropdown"}};this.props.onChange(a)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,clearable:l,disabled:i,overrideCSS:u,ariaLabelledBy:d}=e,h=o()(e,p),g=this.props.hasOwnProperty("error")&&""!=s,f=this.props.hasOwnProperty("clearable"),v=this.props.hasOwnProperty("disabled")&&1==i,y=null,_=r;this.props.hasOwnProperty("overrideCSS")&&0!=u||(_="dropdown "+r+" "+(g?"error":"")),y=this.props.isMulti?this.props.options.filter((e=>a.includes(e.value))):a instanceof Object||null==a?a:this.props.options.find((e=>e.value==a));const E={menu:e=>b(b({},e),{},{zIndex:999})};return c().createElement("div",null,c().createElement(m(),n()({className:_,value:y,onChange:this.handleChange,isClearable:f,isDisabled:v,styles:E,"aria-labelledby":d},h)),g&&c().createElement("p",{className:"error-label"},s))}}g.defaultProps={ariaLabelledBy:null}},7027:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(3838),n=a.n(r),s=a(6689),l=a.n(s),i=a(418),o=a(580),u=a.n(o);const c=["onChange","value","className","error","ariaLabelledBy","disabled","options","id","name"];class d extends l().Component{constructor(e){super(e),this.state={value:e.value},this.handleChange=this.handleChange.bind(this)}handleChange(e){let t={target:{id:this.props.id,value:e.target.value,type:"radio"}};this.props.onChange(t)}getLabel(e,t,a,r,n){return a?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},n&&l().createElement(i.default,null,e.label),!n&&e.label):r?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`},e.label):l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},l().createElement("h4",{style:{marginTop:"0px"}},e.label),l().createElement(i.default,null,e.description))}render(){let e,t=this.props,{onChange:a,value:r,className:s,error:i,ariaLabelledBy:o,disabled:u,options:d,id:m,name:p}=t,h=(n()(t,c),this.props.hasOwnProperty("error")&&""!=i),b=this.props.hasOwnProperty("inline"),g=this.props.hasOwnProperty("simple"),f=this.props.hasOwnProperty("html"),v=this.props.hasOwnProperty("disabled")&&1==u;return e=b?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px"},l().createElement("div",{id:`rl_wrapper_${m}`,"aria-labelledby":o},d.map((t=>{let a=t.value==r;return l().createElement("div",{className:"form-check abc-radio",key:`radio_key_${m}_${t.value}`,style:e},l().createElement("input",{className:"form-check-input",type:"radio",id:`radio_${m}_${t.value}`,value:t.value,checked:a,onChange:this.handleChange,disabled:v,name:p||`radio_${m}`}),this.getLabel(t,m,b,g,f))})),h&&l().createElement("p",{className:"error-label"},i))}}d.defaultProps={ariaLabelledBy:null},d.propTypes={id:u().string.isRequired}},1833:(e,t,a)=>{a.d(t,{default:()=>c});var r=a(8213),n=a.n(r),s=a(3838),l=a.n(s),i=a(6689),o=a.n(i);const u=["onChange","value","className","error","ariaLabelledBy","containerClassName"];class c extends o().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}componentDidUpdate(e,t,a){this.props.value!==e.value&&(this.input.value=this.props.value)}handleChange(e){this.props.onChange(e)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,ariaLabelledBy:i,containerClassName:c}=e,d=l()(e,u),m=this.props.hasOwnProperty("error")&&""!==s,p=this.props.hasOwnProperty("className")?r:"form-control",h=this.props.hasOwnProperty("containerClassName")?c:"container-form-control";return o().createElement("div",{className:h},o().createElement("input",n()({className:`${p} ${m?"error":""}`,ref:e=>{this.input=e},defaultValue:a,"aria-labelledby":i,onChange:this.handleChange},d)),m&&o().createElement("p",{className:"error-label"},s))}}c.defaultProps={ariaLabelledBy:null}},418:(e,t,a)=>{a.d(t,{default:()=>s});var r=a(6689),n=a.n(r);const s=({children:e,replaceNewLine:t=!1,className:a=""})=>n().createElement("span",{className:a,dangerouslySetInnerHTML:{__html:t?null==e?void 0:e.replace(/\n/g,"<br />"):e}})},6793:(e,t,a)=>{a.d(t,{toSlug:()=>r});a(8362),a(6530);const r=e=>(e=e.toLowerCase()).replace(/[^a-zA-Z0-9]+/g,"_")},1995:(e,t,a)=>{a.d(t,{default:()=>h});var r=a(8779),n=a.n(r),s=a(6793);function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){n()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}const o="ComboBox",u="CheckBoxList",c="RadioButtonList",d=[o,u,c],m="And",p="Equal";class h{constructor(e,t=[]){n()(this,"_parseQuestion",(e=>{if(this.questionByName[(0,s.toSlug)(e.name)]=e,this.questionById[parseInt(e.id)]=e,e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules)this.rules[parseInt(t.id)]=t,this._parseQuestion(t.sub_question)})),n()(this,"_parseQuestions",(()=>{for(let e of this.questions)this._parseQuestion(e)})),n()(this,"_allowsValues",(e=>d.includes(e.type))),n()(this,"_allowsValue",((e,t)=>{let a=t.value.split(",").map((e=>parseInt(e)));for(let t of a)if(!e.values.map((e=>e.id)).includes(t))return!1;return!0})),n()(this,"_getAnswerFor",(e=>{let t=Number.isInteger(e)?e:e.id,a=this.answers[t]||null;return a||null})),n()(this,"_hasValue",(e=>""!==e.value)),n()(this,"_answerContains",((e,t)=>e.value.split(",").includes(t))),n()(this,"_isSubQuestionVisible",(e=>{let t=e.answer_values_operator===m;const a=this._getAnswerFor(e.parent_question_id);if(a)switch(e.visibility_condition){case p:for(let r of e.answer_values)t=e.answer_values_operator===m?t&&this._answerContains(a,r):t||this._answerContains(a,r);break;case"NotEqual":for(let r of e.answer_values)t=e.answer_values_operator===m?t&&!this._answerContains(a,r):t||!this._answerContains(a,r)}else t=e.visibility_condition!==p;return"Visible"===e.visibility?t:!t})),n()(this,"_isAnswered",(e=>{const t=this._getAnswerFor(e);if("MainQuestion"===e.class)return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));for(let a of e.parent_rules)if(this._isSubQuestionVisible(this.rules[a]))return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));return!0})),n()(this,"_checkQuestion",(e=>{let t=this._isAnswered(e);if(e.hasOwnProperty("sub_question_rules"))for(let a of e.sub_question_rules)t=t&&this._checkQuestion(a.sub_question);return t})),n()(this,"_formatQuestionAnswer",(e=>{var t;let a={};const r=(0,s.toSlug)(e.name);let n=null===(t=this.originalAnswers.find((t=>t.question_id===e.id)))||void 0===t?void 0:t.value;if(n&&("CheckBox"===e.type&&(n="false"!==n&&!!n),e.type!==c&&e.type!==o||(n=parseInt(n)),e.type===u&&(n=n.split(",").map((e=>parseInt(e)))||[])),a[r]=n||"",e.type===u&&""===a[r]&&(a[r]=[]),e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules){let e=this._formatQuestionAnswer(t.sub_question);a=i(i({},a),e)}return a})),n()(this,"formatAnswers",(()=>{let e={};return this.questions.forEach((t=>{let a=this._formatQuestionAnswer(t);e=i(i({},e),a)})),e})),n()(this,"completed",(()=>{let e=!0;for(let t of this.questions)e=e&&this._checkQuestion(t);return e})),n()(this,"getQuestionByName",(e=>{const t=(0,s.toSlug)(e);return this.questionByName[e]||this.questionByName[t]||null})),n()(this,"getQuestionById",(e=>this.questionById[parseInt(e)]||null)),this.questions=e,this.originalAnswers=t,this.answers=[];for(let e of this.originalAnswers)this.answers[e.question_id]=e;this.questionByName={},this.questionById={},this.rules={},this._parseQuestions()}}},8779:e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},8213:e=>{e.exports=require("@babel/runtime/helpers/extends")},3838:e=>{e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},4656:e=>{e.exports=require("i18n-react/dist/i18n-react")},8362:e=>{e.exports=require("moment-timezone")},580:e=>{e.exports=require("prop-types")},6689:e=>{e.exports=require("react")},1929:e=>{e.exports=require("react-select")},6530:e=>{e.exports=require("urijs")}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,a),s.exports}(()=>{a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t}})(),(()=>{a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}})(),(()=>{a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})();var r={};return(()=>{a.r(r),a.d(r,{default:()=>k});var e=a(8213),t=a.n(e),n=a(3838),s=a.n(n),l=a(6689),i=a.n(l),o=a(580),u=a.n(o),c=a(418),d=a(1833),m=a(401),p=a(7027),h=a(2230),b=a(1995);const g=require("react-final-form");var f=a(6793);const v=["input","meta","question","className","isDisabled","isRequired"],y=["input","meta","question","isDisabled","isRequired"],_=["input","meta","question","isDisabled","isRequired"],E=["input","meta","question","isDisabled","isRequired","maxValues"],q=e=>{let{input:a,meta:r,question:n,className:l,isDisabled:o,isRequired:u}=e,c=s()(e,v);return i().createElement(d.default,t()({},a,c,{containerClassName:l,name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),value:a.value,disabled:o,required:u,onChange:a.onChange,placeholder:n.placeholder}))},C=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o}=e,u=s()(e,y);return i().createElement(p.default,t()({},a,u,{name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),overrideCSS:!0,value:a.value,disabled:l,required:o,onChange:a.onChange}))},w=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o}=e,u=s()(e,_);return i().createElement(m.default,t()({},a,u,{name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),overrideCSS:!0,value:a.value,disabled:l,required:o,onChange:a.onChange}))},S=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o,maxValues:u}=e,c=s()(e,E);return i().createElement(h.default,t()({},a,c,{id:(0,f.toSlug)(n.name),name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,value:a.value,disabled:l,required:o,onChange:e=>{const t=e.target.value;return u>0&&t.length>u?null:a.onChange(e)}}))},N=e=>e?e=>e?void 0:"Required":()=>{},O=i().forwardRef((({extraQuestions:e,userAnswers:t,onAnswerChanges:a,className:r="questions-form",questionContainerClassName:n="question-container",questionLabelContainerClassName:s="question-label-container",questionControlContainerClassName:o="question-control-container",readOnly:u=!1,debug:d=!1,buttonText:m="Submit",RequiredErrorMessage:p="Required",ValidationErrorClassName:h="extra-question-error",allowExtraQuestionsEdit:v=!0,onError:y=(e=>console.log("form errors: ",e)),shouldScroll2FirstError:_=!0},E)=>{let O=null;const k=(0,l.useRef)({}),x=(0,l.useRef)(null),[P,B]=(0,l.useState)({});(0,l.useEffect)((()=>{L()}),[e]),(0,l.useImperativeHandle)(E,(()=>({doSubmit(){x.current.dispatchEvent(new Event("submit",{cancelable:!0,bubbles:!0}))}})));const L=()=>{const a=new b.default(e,t);B(a.formatAnswers())},j=({when:e,rule:t,children:a})=>i().createElement(g.Field,{name:e,subscription:{value:!0}},(({input:{value:e}})=>R(t,$(e,t),a))),F=({name:e})=>i().createElement(g.Field,{name:e,subscription:{error:!0,touched:!0}},(({meta:{error:e,touched:t}})=>e&&t?i().createElement("div",{className:h},e):null)),$=(e,t)=>{let a=t.answer_values;if(Array.isArray(e)){if(!e.length)return!1;let r="And"===t.answer_values_operator;return a.forEach((a=>{r="And"===t.answer_values_operator?r&&e.includes(parseInt(a)):r||e.includes(parseInt(a))})),r}return a.includes(e.toString())},R=(e,t,a)=>"Visible"===e.visibility?"Equal"===e.visibility_condition?t?a:(delete k.current[e.sub_question.id],null):t?(delete k.current[e.sub_question.id],null):a:"Equal"===e.visibility_condition?t?(delete k.current[e.sub_question.id],null):a:t?a:(delete k.current[e.sub_question.id],null),A=e=>{const t=String.fromCharCode(160),a=document.createElement("div");a.innerHTML=e.label;const r=a.textContent||a.innerText||"",n=e.mandatory?`${r}${t}<b>*</b>`:r;return`<label id="${(0,f.toSlug)(e.name)} label" htmlFor="${(0,f.toSlug)(e.name)}">\n ${n}\n </label>`},D=e=>{let t=e.values;const a=!v&&((e,t)=>{const a=(0,f.toSlug)(e.name);if(!t.hasOwnProperty(a))return!1;const r=t[a];return Array.isArray(r)||"string"==typeof r?r.length>0:"number"==typeof r?r>0:"boolean"==typeof r&&r})(e,P);var r,u,d;if("Text"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>k.current[e.id]=t,className:n},i().createElement(c.default,{className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),question:e,isDisabled:a,isRequired:e.mandatory,validate:N(e.mandatory),component:q}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(r=e.sub_question_rules)||void 0===r?void 0:r.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("TextArea"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>k.current[e.id]=t,className:n},i().createElement(c.default,{className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{validate:N(e.mandatory),name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),disabled:a,required:e.mandatory,component:"textarea"}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(u=e.sub_question_rules)||void 0===u?void 0:u.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("CheckBox"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>k.current[e.id]=t,style:{display:"flex"},className:n},i().createElement(c.default,{className:`eq-checkbox-label ${s}`},A(e)),i().createElement("div",{className:o},i().createElement("div",{className:"form-check abc-checkbox"},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),validate:N(e.mandatory),disabled:a,required:e.mandatory,type:"checkbox",className:"form-check-input",component:"input"}),i().createElement("label",{className:"form-check-label",htmlFor:(0,f.toSlug)(e.name)}),i().createElement(F,{name:(0,f.toSlug)(e.name)})))),(null===(d=e.sub_question_rules)||void 0===d?void 0:d.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("RadioButtonList"===e.type){var m;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{key:(0,f.toSlug)(e.name),ref:t=>k.current[e.id]=t,className:n},i().createElement(c.default,{className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:N(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:C}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(m=e.sub_question_rules)||void 0===m?void 0:m.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("ComboBox"===e.type){var p;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>k.current[e.id]=t,className:n},i().createElement(c.default,{className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:N(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:w}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(p=e.sub_question_rules)||void 0===p?void 0:p.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("CheckBoxList"===e.type){var h;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>k.current[e.id]=t,className:n},i().createElement(c.default,{className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),className:o,validate:N(e.mandatory),options:r,question:e,maxValues:e.max_selected_values,isDisabled:a,isRequired:e.mandatory,component:S}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(h=e.sub_question_rules)||void 0===h?void 0:h.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}return null},V=(e,t,a)=>{var r;if(e.mandatory&&(e=>!!k.current[e.id])(e)){const r=(0,f.toSlug)(e.name);t.hasOwnProperty((0,f.toSlug)(r))&&""!==t[(0,f.toSlug)(r)]&&0!==t[r].length||(a[r]=p)}null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{V(e.sub_question,t,a)}))};if(!Object.keys(P).length)return null;const Q=(e,t,a)=>{var r;t.includes((0,f.toSlug)(e.name))&&a.push(e),null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{Q(e.sub_question,t,a)}))},I=t=>{const a=[];return e.forEach((e=>{Q(e,t,a)})),a.sort(((e,t)=>e.order>t.order))[0]};return Object.keys(P).length?i().createElement("div",{className:r},i().createElement(g.Form,{validate:t=>{const a={};return e.forEach((e=>{V(e,t,a)})),a},onSubmit:e=>{a(e)},initialValues:P},(({handleSubmit:t,form:a,submitting:r,pristine:n,values:s})=>(O=t,i().createElement("form",{onSubmit:e=>{const r=a.getRegisteredFields().filter((e=>a.getFieldState(e).invalid));if(r.length>0){const e=I(r);y(r,k.current[e.id]),_&&(e=>{const t=I(e);k.current[t.id].scrollIntoView({behavior:"smooth",block:"center"})})(r)}t(e)},ref:x},u?i().createElement("fieldset",{disabled:"disabled"},e.map((e=>D(e)))):e.map((e=>D(e))),d&&i().createElement("pre",null,JSON.stringify(s,0,2)))))),!E&&i().createElement("button",{type:"submit",onClick:e=>{O(e)},style:{marginTop:10}},m)):null}));O.propTypes={extraQuestions:u().array.isRequired,userAnswers:u().array.isRequired,onAnswerChanges:u().func.isRequired,className:u().string,debug:u().bool,buttonText:u().string,questionContainerClassName:u().string,questionLabelContainerClassName:u().string,questionControlContainerClassName:u().string,RequiredErrorMessage:u().string,ValidationErrorClassName:u().string,allowExtraQuestionsEdit:u().bool,shouldScroll2FirstError:u().bool};const k=O})(),r})()));
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
|
5
|
+
define("openstack-uicore-foundation", [], factory);
|
|
6
|
+
else if(typeof exports === 'object')
|
|
7
|
+
exports["openstack-uicore-foundation"] = factory();
|
|
8
|
+
else
|
|
9
|
+
root["openstack-uicore-foundation"] = factory();
|
|
10
|
+
})(this, () => {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
/******/ var __webpack_modules__ = ({
|
|
14
|
+
|
|
15
|
+
/***/ "./src/components/inputs/checkbox-list.js":
|
|
16
|
+
/*!************************************************!*\
|
|
17
|
+
!*** ./src/components/inputs/checkbox-list.js ***!
|
|
18
|
+
\************************************************/
|
|
19
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
20
|
+
|
|
21
|
+
__webpack_require__.r(__webpack_exports__);
|
|
22
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
|
+
/* harmony export */ "default": () => (/* binding */ CheckboxList)
|
|
24
|
+
/* harmony export */ });
|
|
25
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
|
|
26
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
|
|
27
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
|
|
28
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
|
|
29
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
|
|
30
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
31
|
+
/* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n-react/dist/i18n-react */ "i18n-react/dist/i18n-react");
|
|
32
|
+
/* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__);
|
|
33
|
+
/* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
|
|
34
|
+
|
|
35
|
+
const _excluded = ["onChange", "value", "className", "options", "id", "children", "error", "disabled", "name", "ariaLabelledBy"];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Copyright 2018 OpenStack Foundation
|
|
39
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
40
|
+
* you may not use this file except in compliance with the License.
|
|
41
|
+
* You may obtain a copy of the License at
|
|
42
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
43
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
44
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
45
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
46
|
+
* See the License for the specific language governing permissions and
|
|
47
|
+
* limitations under the License.
|
|
48
|
+
**/
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class CheckboxList extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
|
|
54
|
+
constructor(props) {
|
|
55
|
+
super(props);
|
|
56
|
+
let otherValue = props.value ? props.value.find(v => !props.options.map(op => op.value).includes(v)) : false;
|
|
57
|
+
this.state = {
|
|
58
|
+
otherChecked: !!otherValue
|
|
59
|
+
};
|
|
60
|
+
this.handleChange = this.handleChange.bind(this);
|
|
61
|
+
this.handleOtherCBChange = this.handleOtherCBChange.bind(this);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
handleChange(event) {
|
|
65
|
+
let optionValues = this.props.options.map(op => op.value);
|
|
66
|
+
let value = this.props.value ? [...this.props.value] : [];
|
|
67
|
+
|
|
68
|
+
if (event.target.type === 'checkbox') {
|
|
69
|
+
if (event.target.checked) {
|
|
70
|
+
const theVal = isNaN(event.target.value) ? event.target.value : parseInt(event.target.value);
|
|
71
|
+
value.push(theVal);
|
|
72
|
+
} else {
|
|
73
|
+
value = value.filter(v => v != event.target.value);
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
value = value.filter(v => optionValues.includes(v));
|
|
77
|
+
value.push(event.target.value);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let ev = {
|
|
81
|
+
target: {
|
|
82
|
+
id: this.props.id,
|
|
83
|
+
value: value,
|
|
84
|
+
type: 'checkboxlist'
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
this.props.onChange(ev);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
handleOtherCBChange(event) {
|
|
91
|
+
this.setState({
|
|
92
|
+
otherChecked: event.target.checked
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
render() {
|
|
97
|
+
let _this$props = this.props,
|
|
98
|
+
{
|
|
99
|
+
onChange,
|
|
100
|
+
value,
|
|
101
|
+
className,
|
|
102
|
+
options,
|
|
103
|
+
id,
|
|
104
|
+
children,
|
|
105
|
+
error,
|
|
106
|
+
disabled,
|
|
107
|
+
name,
|
|
108
|
+
ariaLabelledBy
|
|
109
|
+
} = _this$props,
|
|
110
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
|
|
111
|
+
|
|
112
|
+
let {
|
|
113
|
+
otherChecked
|
|
114
|
+
} = this.state;
|
|
115
|
+
let inline = this.props.hasOwnProperty('inline');
|
|
116
|
+
let html = this.props.hasOwnProperty('html');
|
|
117
|
+
let allowOther = this.props.hasOwnProperty('allowOther');
|
|
118
|
+
let otherValue = value ? value.find(v => !options.map(op => op.value).includes(v)) : false;
|
|
119
|
+
let has_error = this.props.hasOwnProperty('error') && error !== '';
|
|
120
|
+
let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
|
|
121
|
+
let style, label;
|
|
122
|
+
|
|
123
|
+
if (inline) {
|
|
124
|
+
style = {
|
|
125
|
+
paddingLeft: '22px',
|
|
126
|
+
marginLeft: '20px',
|
|
127
|
+
float: 'left'
|
|
128
|
+
};
|
|
129
|
+
} else {
|
|
130
|
+
style = {
|
|
131
|
+
paddingLeft: '22px',
|
|
132
|
+
marginTop: '7px'
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
137
|
+
id: `chl_wrapper_${id}`,
|
|
138
|
+
"aria-labelledby": ariaLabelledBy
|
|
139
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
140
|
+
className: "checkboxes-div" + (has_error ? ' error' : '')
|
|
141
|
+
}, options.map(op => {
|
|
142
|
+
let checked = value ? value.includes(op.value) : false;
|
|
143
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
144
|
+
className: "form-check abc-checkbox",
|
|
145
|
+
key: "radio_key_" + op.value,
|
|
146
|
+
style: style
|
|
147
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
|
|
148
|
+
type: "checkbox",
|
|
149
|
+
id: `cb_${id}_${op.value}`,
|
|
150
|
+
name: name ? name : id,
|
|
151
|
+
checked: checked,
|
|
152
|
+
disabled: isDisabled,
|
|
153
|
+
onChange: this.handleChange,
|
|
154
|
+
className: "form-check-input",
|
|
155
|
+
value: op.value
|
|
156
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
|
|
157
|
+
className: "form-check-label",
|
|
158
|
+
htmlFor: `cb_${id}_${op.value}`
|
|
159
|
+
}, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], null, op.label), !html && op.label));
|
|
160
|
+
}), allowOther && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
161
|
+
className: "form-check abc-checkbox",
|
|
162
|
+
style: style
|
|
163
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
|
|
164
|
+
type: "checkbox",
|
|
165
|
+
id: "cb_other" + id,
|
|
166
|
+
checked: otherChecked,
|
|
167
|
+
disabled: isDisabled,
|
|
168
|
+
onChange: this.handleOtherCBChange,
|
|
169
|
+
className: "form-check-input",
|
|
170
|
+
value: "other"
|
|
171
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
|
|
172
|
+
className: "form-check-label",
|
|
173
|
+
htmlFor: "cb_other" + id
|
|
174
|
+
}, i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default().translate("general.other"))), allowOther && otherChecked && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
175
|
+
style: {
|
|
176
|
+
paddingLeft: '22px',
|
|
177
|
+
width: '50%'
|
|
178
|
+
}
|
|
179
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
|
|
180
|
+
className: "form-control",
|
|
181
|
+
disabled: isDisabled,
|
|
182
|
+
onChange: this.handleChange,
|
|
183
|
+
value: otherValue
|
|
184
|
+
}))), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
|
|
185
|
+
className: "error-label"
|
|
186
|
+
}, error));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
CheckboxList.defaultProps = {
|
|
191
|
+
ariaLabelledBy: null
|
|
192
|
+
};
|
|
193
|
+
CheckboxList.propTypes = {
|
|
194
|
+
id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string.isRequired)
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/***/ }),
|
|
198
|
+
|
|
199
|
+
/***/ "./src/components/inputs/dropdown.js":
|
|
200
|
+
/*!*******************************************!*\
|
|
201
|
+
!*** ./src/components/inputs/dropdown.js ***!
|
|
202
|
+
\*******************************************/
|
|
203
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
204
|
+
|
|
205
|
+
__webpack_require__.r(__webpack_exports__);
|
|
206
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
207
|
+
/* harmony export */ "default": () => (/* binding */ Dropdown)
|
|
208
|
+
/* harmony export */ });
|
|
209
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
|
|
210
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
|
|
211
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
|
|
212
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);
|
|
213
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
|
|
214
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
|
|
215
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
|
|
216
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
|
|
217
|
+
/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-select */ "react-select");
|
|
218
|
+
/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_select__WEBPACK_IMPORTED_MODULE_4__);
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
const _excluded = ["onChange", "value", "className", "error", "clearable", "disabled", "overrideCSS", "ariaLabelledBy"];
|
|
223
|
+
|
|
224
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
225
|
+
|
|
226
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Copyright 2017 OpenStack Foundation
|
|
230
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
231
|
+
* you may not use this file except in compliance with the License.
|
|
232
|
+
* You may obtain a copy of the License at
|
|
233
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
234
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
235
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
236
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
237
|
+
* See the License for the specific language governing permissions and
|
|
238
|
+
* limitations under the License.
|
|
239
|
+
**/
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class Dropdown extends (react__WEBPACK_IMPORTED_MODULE_3___default().Component) {
|
|
243
|
+
constructor(props) {
|
|
244
|
+
super(props);
|
|
245
|
+
this.handleChange = this.handleChange.bind(this);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
handleChange(selection) {
|
|
249
|
+
let value = null;
|
|
250
|
+
|
|
251
|
+
if (this.props.isMulti) {
|
|
252
|
+
value = selection ? selection.map(val => val.value) : null;
|
|
253
|
+
} else {
|
|
254
|
+
value = selection ? selection.value : null;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
let ev = {
|
|
258
|
+
target: {
|
|
259
|
+
id: this.props.id,
|
|
260
|
+
value: value,
|
|
261
|
+
type: 'dropdown'
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
this.props.onChange(ev);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
render() {
|
|
268
|
+
let _this$props = this.props,
|
|
269
|
+
{
|
|
270
|
+
onChange,
|
|
271
|
+
value,
|
|
272
|
+
className,
|
|
273
|
+
error,
|
|
274
|
+
clearable,
|
|
275
|
+
disabled,
|
|
276
|
+
overrideCSS,
|
|
277
|
+
ariaLabelledBy
|
|
278
|
+
} = _this$props,
|
|
279
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(_this$props, _excluded);
|
|
280
|
+
|
|
281
|
+
let has_error = this.props.hasOwnProperty('error') && error != '';
|
|
282
|
+
let isClearable = this.props.hasOwnProperty('clearable');
|
|
283
|
+
let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
|
|
284
|
+
let theValue = null;
|
|
285
|
+
let selectClassName = className;
|
|
286
|
+
|
|
287
|
+
if (!this.props.hasOwnProperty('overrideCSS') || overrideCSS == false) {
|
|
288
|
+
selectClassName = 'dropdown ' + className + ' ' + (has_error ? 'error' : '');
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (this.props.isMulti) {
|
|
292
|
+
theValue = this.props.options.filter(op => value.includes(op.value));
|
|
293
|
+
} else {
|
|
294
|
+
theValue = value instanceof Object || value == null ? value : this.props.options.find(opt => opt.value == value);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const selectStyles = {
|
|
298
|
+
menu: styles => _objectSpread(_objectSpread({}, styles), {}, {
|
|
299
|
+
zIndex: 999
|
|
300
|
+
})
|
|
301
|
+
};
|
|
302
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react_select__WEBPACK_IMPORTED_MODULE_4___default()), _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
|
|
303
|
+
className: selectClassName,
|
|
304
|
+
value: theValue,
|
|
305
|
+
onChange: this.handleChange,
|
|
306
|
+
isClearable: isClearable,
|
|
307
|
+
isDisabled: isDisabled,
|
|
308
|
+
styles: selectStyles,
|
|
309
|
+
"aria-labelledby": ariaLabelledBy
|
|
310
|
+
}, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("p", {
|
|
311
|
+
className: "error-label"
|
|
312
|
+
}, error));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
Dropdown.defaultProps = {
|
|
317
|
+
ariaLabelledBy: null
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
/***/ }),
|
|
321
|
+
|
|
322
|
+
/***/ "./src/components/inputs/radio-list.js":
|
|
323
|
+
/*!*********************************************!*\
|
|
324
|
+
!*** ./src/components/inputs/radio-list.js ***!
|
|
325
|
+
\*********************************************/
|
|
326
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
327
|
+
|
|
328
|
+
__webpack_require__.r(__webpack_exports__);
|
|
329
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
330
|
+
/* harmony export */ "default": () => (/* binding */ RadioList)
|
|
331
|
+
/* harmony export */ });
|
|
332
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
|
|
333
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
|
|
334
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
335
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
336
|
+
/* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
|
|
337
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
|
|
338
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
|
|
339
|
+
|
|
340
|
+
const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "disabled", "options", "id", "name"];
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Copyright 2018 OpenStack Foundation
|
|
344
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
345
|
+
* you may not use this file except in compliance with the License.
|
|
346
|
+
* You may obtain a copy of the License at
|
|
347
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
348
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
349
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
350
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
351
|
+
* See the License for the specific language governing permissions and
|
|
352
|
+
* limitations under the License.
|
|
353
|
+
**/
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
class RadioList extends (react__WEBPACK_IMPORTED_MODULE_1___default().Component) {
|
|
358
|
+
constructor(props) {
|
|
359
|
+
super(props);
|
|
360
|
+
this.state = {
|
|
361
|
+
value: props.value
|
|
362
|
+
};
|
|
363
|
+
this.handleChange = this.handleChange.bind(this);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
handleChange(selection) {
|
|
367
|
+
let ev = {
|
|
368
|
+
target: {
|
|
369
|
+
id: this.props.id,
|
|
370
|
+
value: selection.target.value,
|
|
371
|
+
type: 'radio'
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
this.props.onChange(ev);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
getLabel(option, id, inline, simple, html) {
|
|
378
|
+
if (inline) {
|
|
379
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
|
|
380
|
+
className: "form-check-label",
|
|
381
|
+
htmlFor: `radio_${id}_${option.value}`,
|
|
382
|
+
style: {
|
|
383
|
+
display: 'inline-block'
|
|
384
|
+
}
|
|
385
|
+
}, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.label), !html && option.label);
|
|
386
|
+
} else if (simple) {
|
|
387
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
|
|
388
|
+
className: "form-check-label",
|
|
389
|
+
htmlFor: `radio_${id}_${option.value}`
|
|
390
|
+
}, option.label);
|
|
391
|
+
} else {
|
|
392
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
|
|
393
|
+
className: "form-check-label",
|
|
394
|
+
htmlFor: `radio_${id}_${option.value}`,
|
|
395
|
+
style: {
|
|
396
|
+
display: 'inline-block'
|
|
397
|
+
}
|
|
398
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("h4", {
|
|
399
|
+
style: {
|
|
400
|
+
marginTop: '0px'
|
|
401
|
+
}
|
|
402
|
+
}, option.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.description));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
render() {
|
|
407
|
+
let _this$props = this.props,
|
|
408
|
+
{
|
|
409
|
+
onChange,
|
|
410
|
+
value,
|
|
411
|
+
className,
|
|
412
|
+
error,
|
|
413
|
+
ariaLabelledBy,
|
|
414
|
+
disabled,
|
|
415
|
+
options,
|
|
416
|
+
id,
|
|
417
|
+
name
|
|
418
|
+
} = _this$props,
|
|
419
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
|
|
420
|
+
|
|
421
|
+
let has_error = this.props.hasOwnProperty('error') && error != '';
|
|
422
|
+
let inline = this.props.hasOwnProperty('inline');
|
|
423
|
+
let simple = this.props.hasOwnProperty('simple');
|
|
424
|
+
let html = this.props.hasOwnProperty('html');
|
|
425
|
+
let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
|
|
426
|
+
let style, label;
|
|
427
|
+
|
|
428
|
+
if (inline) {
|
|
429
|
+
style = {
|
|
430
|
+
paddingLeft: '22px',
|
|
431
|
+
marginLeft: '20px',
|
|
432
|
+
float: 'left'
|
|
433
|
+
};
|
|
434
|
+
} else {
|
|
435
|
+
style = {
|
|
436
|
+
paddingLeft: '22px'
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
|
|
441
|
+
id: `rl_wrapper_${id}`,
|
|
442
|
+
"aria-labelledby": ariaLabelledBy
|
|
443
|
+
}, options.map(op => {
|
|
444
|
+
let checked = op.value == value;
|
|
445
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
|
|
446
|
+
className: "form-check abc-radio",
|
|
447
|
+
key: `radio_key_${id}_${op.value}`,
|
|
448
|
+
style: style
|
|
449
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("input", {
|
|
450
|
+
className: "form-check-input",
|
|
451
|
+
type: "radio",
|
|
452
|
+
id: `radio_${id}_${op.value}`,
|
|
453
|
+
value: op.value,
|
|
454
|
+
checked: checked,
|
|
455
|
+
onChange: this.handleChange,
|
|
456
|
+
disabled: isDisabled,
|
|
457
|
+
name: name ? name : `radio_${id}`
|
|
458
|
+
}), this.getLabel(op, id, inline, simple, html));
|
|
459
|
+
}), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", {
|
|
460
|
+
className: "error-label"
|
|
461
|
+
}, error));
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
}
|
|
465
|
+
RadioList.defaultProps = {
|
|
466
|
+
ariaLabelledBy: null
|
|
467
|
+
};
|
|
468
|
+
RadioList.propTypes = {
|
|
469
|
+
id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string.isRequired)
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
/***/ }),
|
|
473
|
+
|
|
474
|
+
/***/ "./src/components/inputs/text-input.js":
|
|
475
|
+
/*!*********************************************!*\
|
|
476
|
+
!*** ./src/components/inputs/text-input.js ***!
|
|
477
|
+
\*********************************************/
|
|
478
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
479
|
+
|
|
480
|
+
__webpack_require__.r(__webpack_exports__);
|
|
481
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
482
|
+
/* harmony export */ "default": () => (/* binding */ Input)
|
|
483
|
+
/* harmony export */ });
|
|
484
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
|
|
485
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
|
|
486
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
|
|
487
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
|
|
488
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
|
|
489
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "containerClassName"];
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Copyright 2017 OpenStack Foundation
|
|
496
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
497
|
+
* you may not use this file except in compliance with the License.
|
|
498
|
+
* You may obtain a copy of the License at
|
|
499
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
500
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
501
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
502
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
503
|
+
* See the License for the specific language governing permissions and
|
|
504
|
+
* limitations under the License.
|
|
505
|
+
**/
|
|
506
|
+
|
|
507
|
+
class Input extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
|
|
508
|
+
constructor(props) {
|
|
509
|
+
super(props);
|
|
510
|
+
this.handleChange = this.handleChange.bind(this);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
componentDidUpdate(prevProps, prevState, snapshot) {
|
|
514
|
+
if (this.props.value !== prevProps.value) {
|
|
515
|
+
this.input.value = this.props.value;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
handleChange(ev) {
|
|
520
|
+
this.props.onChange(ev);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
render() {
|
|
524
|
+
let _this$props = this.props,
|
|
525
|
+
{
|
|
526
|
+
onChange,
|
|
527
|
+
value,
|
|
528
|
+
className,
|
|
529
|
+
error,
|
|
530
|
+
ariaLabelledBy,
|
|
531
|
+
containerClassName
|
|
532
|
+
} = _this$props,
|
|
533
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_this$props, _excluded);
|
|
534
|
+
|
|
535
|
+
let has_error = this.props.hasOwnProperty('error') && error !== '';
|
|
536
|
+
let class_name = this.props.hasOwnProperty('className') ? className : 'form-control';
|
|
537
|
+
let container_class_name = this.props.hasOwnProperty('containerClassName') ? containerClassName : 'container-form-control';
|
|
538
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
539
|
+
className: container_class_name
|
|
540
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
|
|
541
|
+
className: `${class_name} ${has_error ? 'error' : ''}`,
|
|
542
|
+
ref: node => {
|
|
543
|
+
this.input = node;
|
|
544
|
+
},
|
|
545
|
+
defaultValue: value,
|
|
546
|
+
"aria-labelledby": ariaLabelledBy,
|
|
547
|
+
onChange: this.handleChange
|
|
548
|
+
}, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
|
|
549
|
+
className: "error-label"
|
|
550
|
+
}, error));
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
}
|
|
554
|
+
Input.defaultProps = {
|
|
555
|
+
ariaLabelledBy: null
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
/***/ }),
|
|
559
|
+
|
|
560
|
+
/***/ "./src/components/raw-html/index.js":
|
|
561
|
+
/*!******************************************!*\
|
|
562
|
+
!*** ./src/components/raw-html/index.js ***!
|
|
563
|
+
\******************************************/
|
|
564
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
565
|
+
|
|
566
|
+
__webpack_require__.r(__webpack_exports__);
|
|
567
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
568
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
569
|
+
/* harmony export */ });
|
|
570
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
571
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
const RawHTML = ({
|
|
575
|
+
children,
|
|
576
|
+
replaceNewLine = false,
|
|
577
|
+
className = ""
|
|
578
|
+
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
|
|
579
|
+
className: className,
|
|
580
|
+
dangerouslySetInnerHTML: {
|
|
581
|
+
__html: replaceNewLine ? children === null || children === void 0 ? void 0 : children.replace(/\n/g, '<br />') : children
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RawHTML);
|
|
586
|
+
|
|
587
|
+
/***/ }),
|
|
588
|
+
|
|
589
|
+
/***/ "./src/utils/methods.js":
|
|
590
|
+
/*!******************************!*\
|
|
591
|
+
!*** ./src/utils/methods.js ***!
|
|
592
|
+
\******************************/
|
|
593
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
594
|
+
|
|
595
|
+
__webpack_require__.r(__webpack_exports__);
|
|
596
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
597
|
+
/* harmony export */ "arraysEqual": () => (/* binding */ arraysEqual),
|
|
598
|
+
/* harmony export */ "base64URLEncode": () => (/* binding */ base64URLEncode),
|
|
599
|
+
/* harmony export */ "buildAPIBaseUrl": () => (/* binding */ buildAPIBaseUrl),
|
|
600
|
+
/* harmony export */ "epochToMoment": () => (/* binding */ epochToMoment),
|
|
601
|
+
/* harmony export */ "epochToMomentTimeZone": () => (/* binding */ epochToMomentTimeZone),
|
|
602
|
+
/* harmony export */ "findElementPos": () => (/* binding */ findElementPos),
|
|
603
|
+
/* harmony export */ "formatEpoch": () => (/* binding */ formatEpoch),
|
|
604
|
+
/* harmony export */ "getAllowedUserGroups": () => (/* binding */ getAllowedUserGroups),
|
|
605
|
+
/* harmony export */ "getAuthCallback": () => (/* binding */ getAuthCallback),
|
|
606
|
+
/* harmony export */ "getBackURL": () => (/* binding */ getBackURL),
|
|
607
|
+
/* harmony export */ "getCurrentHref": () => (/* binding */ getCurrentHref),
|
|
608
|
+
/* harmony export */ "getCurrentLocation": () => (/* binding */ getCurrentLocation),
|
|
609
|
+
/* harmony export */ "getCurrentPathName": () => (/* binding */ getCurrentPathName),
|
|
610
|
+
/* harmony export */ "getCurrentUserLanguage": () => (/* binding */ getCurrentUserLanguage),
|
|
611
|
+
/* harmony export */ "getFromLocalStorage": () => (/* binding */ getFromLocalStorage),
|
|
612
|
+
/* harmony export */ "getOrigin": () => (/* binding */ getOrigin),
|
|
613
|
+
/* harmony export */ "getTimeServiceUrl": () => (/* binding */ getTimeServiceUrl),
|
|
614
|
+
/* harmony export */ "hasErrors": () => (/* binding */ hasErrors),
|
|
615
|
+
/* harmony export */ "isClearingSessionState": () => (/* binding */ isClearingSessionState),
|
|
616
|
+
/* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
|
|
617
|
+
/* harmony export */ "objectToQueryString": () => (/* binding */ objectToQueryString),
|
|
618
|
+
/* harmony export */ "putOnLocalStorage": () => (/* binding */ putOnLocalStorage),
|
|
619
|
+
/* harmony export */ "removeFromLocalStorage": () => (/* binding */ removeFromLocalStorage),
|
|
620
|
+
/* harmony export */ "retryPromise": () => (/* binding */ retryPromise),
|
|
621
|
+
/* harmony export */ "scrollToError": () => (/* binding */ scrollToError),
|
|
622
|
+
/* harmony export */ "setSessionClearingState": () => (/* binding */ setSessionClearingState),
|
|
623
|
+
/* harmony export */ "shallowEqual": () => (/* binding */ shallowEqual),
|
|
624
|
+
/* harmony export */ "toSlug": () => (/* binding */ toSlug)
|
|
625
|
+
/* harmony export */ });
|
|
626
|
+
/* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-timezone */ "moment-timezone");
|
|
627
|
+
/* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_timezone__WEBPACK_IMPORTED_MODULE_0__);
|
|
628
|
+
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! urijs */ "urijs");
|
|
629
|
+
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(urijs__WEBPACK_IMPORTED_MODULE_1__);
|
|
630
|
+
/**
|
|
631
|
+
* Copyright 2018 OpenStack Foundation
|
|
632
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
633
|
+
* you may not use this file except in compliance with the License.
|
|
634
|
+
* You may obtain a copy of the License at
|
|
635
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
636
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
637
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
638
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
639
|
+
* See the License for the specific language governing permissions and
|
|
640
|
+
* limitations under the License.
|
|
641
|
+
**/
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
const findElementPos = obj => {
|
|
645
|
+
var curtop = -70;
|
|
646
|
+
|
|
647
|
+
if (obj.offsetParent) {
|
|
648
|
+
do {
|
|
649
|
+
curtop += obj.offsetTop;
|
|
650
|
+
} while (obj = obj.offsetParent);
|
|
651
|
+
|
|
652
|
+
return [curtop];
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
const epochToMoment = atime => {
|
|
656
|
+
if (!atime) return atime;
|
|
657
|
+
atime = atime * 1000;
|
|
658
|
+
return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime);
|
|
659
|
+
};
|
|
660
|
+
const epochToMomentTimeZone = (atime, time_zone) => {
|
|
661
|
+
if (!atime) return atime;
|
|
662
|
+
atime = atime * 1000;
|
|
663
|
+
return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime).tz(time_zone);
|
|
664
|
+
};
|
|
665
|
+
const formatEpoch = (atime, format = 'M/D/YYYY h:mm a') => {
|
|
666
|
+
if (!atime) return atime;
|
|
667
|
+
return epochToMoment(atime).format(format);
|
|
668
|
+
};
|
|
669
|
+
const objectToQueryString = obj => {
|
|
670
|
+
var str = "";
|
|
671
|
+
|
|
672
|
+
for (var key in obj) {
|
|
673
|
+
if (str != "") {
|
|
674
|
+
str += "&";
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
str += key + "=" + encodeURIComponent(obj[key]);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
return str;
|
|
681
|
+
};
|
|
682
|
+
const getBackURL = () => {
|
|
683
|
+
let url = urijs__WEBPACK_IMPORTED_MODULE_1___default()(window.location.href);
|
|
684
|
+
let query = url.search(true);
|
|
685
|
+
let fragment = url.fragment();
|
|
686
|
+
let backUrl = query.hasOwnProperty('BackUrl') ? query['BackUrl'] : null;
|
|
687
|
+
|
|
688
|
+
if (fragment != null && fragment != '') {
|
|
689
|
+
backUrl += `#${fragment}`;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
return backUrl;
|
|
693
|
+
};
|
|
694
|
+
const toSlug = text => {
|
|
695
|
+
text = text.toLowerCase();
|
|
696
|
+
return text.replace(/[^a-zA-Z0-9]+/g, '_');
|
|
697
|
+
};
|
|
698
|
+
const getAuthCallback = () => {
|
|
699
|
+
if (typeof window !== 'undefined') {
|
|
700
|
+
return `${window.location.origin}/auth/callback`;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
return null;
|
|
704
|
+
};
|
|
705
|
+
const getCurrentLocation = () => {
|
|
706
|
+
let location = '';
|
|
707
|
+
|
|
708
|
+
if (typeof window !== 'undefined') {
|
|
709
|
+
location = window.location; // check if we are on iframe
|
|
710
|
+
|
|
711
|
+
if (window.top) location = window.top.location;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
return location;
|
|
715
|
+
};
|
|
716
|
+
const getOrigin = () => {
|
|
717
|
+
if (typeof window !== 'undefined') {
|
|
718
|
+
return window.location.origin;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
return null;
|
|
722
|
+
};
|
|
723
|
+
const getCurrentPathName = () => {
|
|
724
|
+
if (typeof window !== 'undefined') {
|
|
725
|
+
return window.location.pathname;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
return null;
|
|
729
|
+
};
|
|
730
|
+
const getCurrentHref = () => {
|
|
731
|
+
if (typeof window !== 'undefined') {
|
|
732
|
+
return window.location.href;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
return null;
|
|
736
|
+
};
|
|
737
|
+
const getAllowedUserGroups = () => {
|
|
738
|
+
if (typeof window !== 'undefined') {
|
|
739
|
+
return window.ALLOWED_USER_GROUPS || '';
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
return null;
|
|
743
|
+
};
|
|
744
|
+
const buildAPIBaseUrl = relativeUrl => {
|
|
745
|
+
if (typeof window !== 'undefined') {
|
|
746
|
+
return `${window.API_BASE_URL}${relativeUrl}`;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
return null``;
|
|
750
|
+
};
|
|
751
|
+
const putOnLocalStorage = (key, value) => {
|
|
752
|
+
if (typeof window !== 'undefined') {
|
|
753
|
+
window.localStorage.setItem(key, value);
|
|
754
|
+
}
|
|
755
|
+
};
|
|
756
|
+
const getFromLocalStorage = (key, removeIt) => {
|
|
757
|
+
if (typeof window !== 'undefined') {
|
|
758
|
+
let val = window.localStorage.getItem(key);
|
|
759
|
+
|
|
760
|
+
if (removeIt) {
|
|
761
|
+
console.log(`getFromLocalStorage removing key ${key}`);
|
|
762
|
+
removeFromLocalStorage(key);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
return val;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
return null;
|
|
769
|
+
};
|
|
770
|
+
const removeFromLocalStorage = key => {
|
|
771
|
+
if (typeof window !== 'undefined') {
|
|
772
|
+
window.localStorage.removeItem(key);
|
|
773
|
+
}
|
|
774
|
+
};
|
|
775
|
+
const isClearingSessionState = () => {
|
|
776
|
+
if (typeof window !== 'undefined') {
|
|
777
|
+
return window.clearing_session_state;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
return false;
|
|
781
|
+
};
|
|
782
|
+
const setSessionClearingState = val => {
|
|
783
|
+
if (typeof window !== 'undefined') {
|
|
784
|
+
window.clearing_session_state = val;
|
|
785
|
+
}
|
|
786
|
+
};
|
|
787
|
+
const getCurrentUserLanguage = () => {
|
|
788
|
+
let language = 'en';
|
|
789
|
+
|
|
790
|
+
if (typeof navigator !== 'undefined') {
|
|
791
|
+
language = navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
return language;
|
|
795
|
+
};
|
|
796
|
+
const scrollToError = errors => {
|
|
797
|
+
if (Object.keys(errors).length > 0) {
|
|
798
|
+
const firstError = Object.keys(errors)[0];
|
|
799
|
+
const firstNode = document.getElementById(firstError);
|
|
800
|
+
if (firstNode) window.scrollTo(0, findElementPos(firstNode));
|
|
801
|
+
}
|
|
802
|
+
};
|
|
803
|
+
const hasErrors = (field, errors) => {
|
|
804
|
+
if (field in errors) {
|
|
805
|
+
return errors[field];
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
return '';
|
|
809
|
+
};
|
|
810
|
+
const shallowEqual = (object1, object2) => {
|
|
811
|
+
const keys1 = Object.keys(object1);
|
|
812
|
+
const keys2 = Object.keys(object2);
|
|
813
|
+
|
|
814
|
+
if (keys1.length !== keys2.length) {
|
|
815
|
+
return false;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
for (let key of keys1) {
|
|
819
|
+
if (object1[key] !== object2[key]) {
|
|
820
|
+
return false;
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
return true;
|
|
825
|
+
};
|
|
826
|
+
const arraysEqual = (a1, a2) => a1.length === a2.length && a1.every((o, idx) => shallowEqual(o, a2[idx]));
|
|
827
|
+
const isEmpty = obj => {
|
|
828
|
+
return Object.keys(obj).length === 0;
|
|
829
|
+
};
|
|
830
|
+
const base64URLEncode = str => {
|
|
831
|
+
return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
832
|
+
};
|
|
833
|
+
const retryPromise = async (cb, maxNumberOfRetries = 3) => {
|
|
834
|
+
for (let i = 0; i < maxNumberOfRetries; i++) {
|
|
835
|
+
if (await cb()) {
|
|
836
|
+
return true;
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
return false;
|
|
841
|
+
};
|
|
842
|
+
const getTimeServiceUrl = () => {
|
|
843
|
+
if (typeof window !== 'undefined') {
|
|
844
|
+
return window.TIMEINTERVALSINCE1970_API_URL || process.env.TIMEINTERVALSINCE1970_API_URL;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
return null;
|
|
848
|
+
};
|
|
849
|
+
|
|
850
|
+
/***/ }),
|
|
851
|
+
|
|
852
|
+
/***/ "./src/utils/questions-set.js":
|
|
853
|
+
/*!************************************!*\
|
|
854
|
+
!*** ./src/utils/questions-set.js ***!
|
|
855
|
+
\************************************/
|
|
856
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
857
|
+
|
|
858
|
+
__webpack_require__.r(__webpack_exports__);
|
|
859
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
860
|
+
/* harmony export */ "AllowedMultipleValueQuestionType": () => (/* binding */ AllowedMultipleValueQuestionType),
|
|
861
|
+
/* harmony export */ "AnswerValuesOperator_And": () => (/* binding */ AnswerValuesOperator_And),
|
|
862
|
+
/* harmony export */ "AnswerValuesOperator_Or": () => (/* binding */ AnswerValuesOperator_Or),
|
|
863
|
+
/* harmony export */ "CheckBoxListQuestionType": () => (/* binding */ CheckBoxListQuestionType),
|
|
864
|
+
/* harmony export */ "CheckBoxQuestionType": () => (/* binding */ CheckBoxQuestionType),
|
|
865
|
+
/* harmony export */ "ComboBoxQuestionType": () => (/* binding */ ComboBoxQuestionType),
|
|
866
|
+
/* harmony export */ "MainQuestionClassType": () => (/* binding */ MainQuestionClassType),
|
|
867
|
+
/* harmony export */ "RadioButtonListQuestionType": () => (/* binding */ RadioButtonListQuestionType),
|
|
868
|
+
/* harmony export */ "VisibilityCondition_Equal": () => (/* binding */ VisibilityCondition_Equal),
|
|
869
|
+
/* harmony export */ "VisibilityCondition_NotEqual": () => (/* binding */ VisibilityCondition_NotEqual),
|
|
870
|
+
/* harmony export */ "Visibility_Visible": () => (/* binding */ Visibility_Visible),
|
|
871
|
+
/* harmony export */ "default": () => (/* binding */ QuestionsSet)
|
|
872
|
+
/* harmony export */ });
|
|
873
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
|
|
874
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
|
|
875
|
+
/* harmony import */ var _methods__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods */ "./src/utils/methods.js");
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
879
|
+
|
|
880
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
881
|
+
|
|
882
|
+
const CheckBoxQuestionType = 'CheckBox';
|
|
883
|
+
const ComboBoxQuestionType = 'ComboBox';
|
|
884
|
+
const CheckBoxListQuestionType = 'CheckBoxList';
|
|
885
|
+
const RadioButtonListQuestionType = 'RadioButtonList';
|
|
886
|
+
const AllowedMultipleValueQuestionType = [ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType];
|
|
887
|
+
const AnswerValuesOperator_And = 'And';
|
|
888
|
+
const AnswerValuesOperator_Or = 'Or';
|
|
889
|
+
const VisibilityCondition_Equal = 'Equal';
|
|
890
|
+
const VisibilityCondition_NotEqual = 'NotEqual';
|
|
891
|
+
const Visibility_Visible = 'Visible';
|
|
892
|
+
const MainQuestionClassType = 'MainQuestion';
|
|
893
|
+
|
|
894
|
+
class QuestionsSet {
|
|
895
|
+
constructor(questions, answers = []) {
|
|
896
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestion", q => {
|
|
897
|
+
this.questionByName[(0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(q.name)] = q;
|
|
898
|
+
this.questionById[parseInt(q.id)] = q;
|
|
899
|
+
if (q.hasOwnProperty('sub_question_rules')) for (let r of q.sub_question_rules) {
|
|
900
|
+
this.rules[parseInt(r.id)] = r;
|
|
901
|
+
|
|
902
|
+
this._parseQuestion(r.sub_question);
|
|
903
|
+
}
|
|
904
|
+
});
|
|
905
|
+
|
|
906
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestions", () => {
|
|
907
|
+
for (let q of this.questions) {
|
|
908
|
+
this._parseQuestion(q);
|
|
909
|
+
}
|
|
910
|
+
});
|
|
911
|
+
|
|
912
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValues", q => {
|
|
913
|
+
return AllowedMultipleValueQuestionType.includes(q.type);
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValue", (q, answer) => {
|
|
917
|
+
let value = answer.value.split(',').map(v => parseInt(v));
|
|
918
|
+
|
|
919
|
+
for (let av of value) {
|
|
920
|
+
if (!q.values.map(e => e.id).includes(av)) return false;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
return true;
|
|
924
|
+
});
|
|
925
|
+
|
|
926
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_getAnswerFor", q => {
|
|
927
|
+
let id = Number.isInteger(q) ? q : q.id;
|
|
928
|
+
let a = this.answers[id] || null;
|
|
929
|
+
return a ? a : null;
|
|
930
|
+
});
|
|
931
|
+
|
|
932
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_hasValue", answer => {
|
|
933
|
+
return answer.value !== '';
|
|
934
|
+
});
|
|
935
|
+
|
|
936
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_answerContains", (answer, val) => {
|
|
937
|
+
return answer.value.split(',').includes(val);
|
|
938
|
+
});
|
|
939
|
+
|
|
940
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isSubQuestionVisible", rule => {
|
|
941
|
+
let initialCondition = rule.answer_values_operator === AnswerValuesOperator_And ? true : false;
|
|
942
|
+
|
|
943
|
+
const parentQuestionAnswer = this._getAnswerFor(rule.parent_question_id);
|
|
944
|
+
|
|
945
|
+
if (!parentQuestionAnswer) {
|
|
946
|
+
initialCondition = rule.visibility_condition === VisibilityCondition_Equal ? false : true;
|
|
947
|
+
} else {
|
|
948
|
+
switch (rule.visibility_condition) {
|
|
949
|
+
case VisibilityCondition_Equal:
|
|
950
|
+
{
|
|
951
|
+
for (let answerValue of rule.answer_values) {
|
|
952
|
+
if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || this._answerContains(parentQuestionAnswer, answerValue);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
break;
|
|
956
|
+
|
|
957
|
+
case VisibilityCondition_NotEqual:
|
|
958
|
+
{
|
|
959
|
+
for (let answerValue of rule.answer_values) {
|
|
960
|
+
if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && !this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || !this._answerContains(parentQuestionAnswer, answerValue);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
break;
|
|
964
|
+
}
|
|
965
|
+
} // final visibility check
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
if (rule.visibility === Visibility_Visible) {
|
|
969
|
+
return initialCondition;
|
|
970
|
+
} // not visible
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
return !initialCondition;
|
|
974
|
+
});
|
|
975
|
+
|
|
976
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isAnswered", q => {
|
|
977
|
+
const answer = this._getAnswerFor(q);
|
|
978
|
+
|
|
979
|
+
if (q.class === MainQuestionClassType) {
|
|
980
|
+
if (!q.mandatory) return true;
|
|
981
|
+
if (!answer) return false;
|
|
982
|
+
if (!this._hasValue(answer)) return false;
|
|
983
|
+
if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
|
|
984
|
+
return true;
|
|
985
|
+
} // check parent rules ...
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
for (let ruleId of q.parent_rules) {
|
|
989
|
+
if (!this._isSubQuestionVisible(this.rules[ruleId])) // if question is not visible skip it
|
|
990
|
+
continue;
|
|
991
|
+
if (!q.mandatory) return true;
|
|
992
|
+
if (!answer) return false;
|
|
993
|
+
if (!this._hasValue(answer)) return false;
|
|
994
|
+
if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
|
|
995
|
+
return true;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
return true;
|
|
999
|
+
});
|
|
1000
|
+
|
|
1001
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_checkQuestion", q => {
|
|
1002
|
+
let res = this._isAnswered(q);
|
|
1003
|
+
|
|
1004
|
+
if (q.hasOwnProperty('sub_question_rules')) for (let rule of q.sub_question_rules) {
|
|
1005
|
+
// check recursive all the tree till leaves ...
|
|
1006
|
+
res = res && this._checkQuestion(rule.sub_question);
|
|
1007
|
+
}
|
|
1008
|
+
return res;
|
|
1009
|
+
});
|
|
1010
|
+
|
|
1011
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_formatQuestionAnswer", question => {
|
|
1012
|
+
var _this$originalAnswers;
|
|
1013
|
+
|
|
1014
|
+
let res = {};
|
|
1015
|
+
const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(question.name);
|
|
1016
|
+
let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
|
|
1017
|
+
|
|
1018
|
+
if (userAnswer) {
|
|
1019
|
+
if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer;
|
|
1020
|
+
if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = parseInt(userAnswer);
|
|
1021
|
+
if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => parseInt(ansVal)) || [];
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
res[slug] = userAnswer || '';
|
|
1025
|
+
if (question.type === CheckBoxListQuestionType && res[slug] === '') res[slug] = [];
|
|
1026
|
+
if (question.hasOwnProperty('sub_question_rules')) for (let rule of question.sub_question_rules) {
|
|
1027
|
+
// check recursive all the tree till leaves ...
|
|
1028
|
+
let res1 = this._formatQuestionAnswer(rule.sub_question);
|
|
1029
|
+
|
|
1030
|
+
res = _objectSpread(_objectSpread({}, res), res1);
|
|
1031
|
+
}
|
|
1032
|
+
return res;
|
|
1033
|
+
});
|
|
1034
|
+
|
|
1035
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "formatAnswers", () => {
|
|
1036
|
+
let res = {};
|
|
1037
|
+
this.questions.forEach(q => {
|
|
1038
|
+
let res1 = this._formatQuestionAnswer(q);
|
|
1039
|
+
|
|
1040
|
+
res = _objectSpread(_objectSpread({}, res), res1);
|
|
1041
|
+
});
|
|
1042
|
+
return res;
|
|
1043
|
+
});
|
|
1044
|
+
|
|
1045
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "completed", () => {
|
|
1046
|
+
let res = true;
|
|
1047
|
+
|
|
1048
|
+
for (let q of this.questions) {
|
|
1049
|
+
res = res && this._checkQuestion(q);
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
return res;
|
|
1053
|
+
});
|
|
1054
|
+
|
|
1055
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionByName", name => {
|
|
1056
|
+
const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(name);
|
|
1057
|
+
return this.questionByName[name] || this.questionByName[slug] || null;
|
|
1058
|
+
});
|
|
1059
|
+
|
|
1060
|
+
_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionById", id => {
|
|
1061
|
+
return this.questionById[parseInt(id)] || null;
|
|
1062
|
+
});
|
|
1063
|
+
|
|
1064
|
+
this.questions = questions;
|
|
1065
|
+
this.originalAnswers = answers;
|
|
1066
|
+
this.answers = []; // map answers to associate array
|
|
1067
|
+
|
|
1068
|
+
for (let a of this.originalAnswers) this.answers[a.question_id] = a;
|
|
1069
|
+
|
|
1070
|
+
this.questionByName = {};
|
|
1071
|
+
this.questionById = {}; // associative array ( rule id , rule);
|
|
1072
|
+
|
|
1073
|
+
this.rules = {};
|
|
1074
|
+
|
|
1075
|
+
this._parseQuestions();
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
/***/ }),
|
|
1081
|
+
|
|
1082
|
+
/***/ "./src/components/extra-questions/index.scss":
|
|
1083
|
+
/*!***************************************************!*\
|
|
1084
|
+
!*** ./src/components/extra-questions/index.scss ***!
|
|
1085
|
+
\***************************************************/
|
|
1086
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1087
|
+
|
|
1088
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1089
|
+
// extracted by mini-css-extract-plugin
|
|
1090
|
+
|
|
1091
|
+
|
|
1092
|
+
/***/ }),
|
|
1093
|
+
|
|
1094
|
+
/***/ "@babel/runtime/helpers/defineProperty":
|
|
1095
|
+
/*!********************************************************!*\
|
|
1096
|
+
!*** external "@babel/runtime/helpers/defineProperty" ***!
|
|
1097
|
+
\********************************************************/
|
|
1098
|
+
/***/ ((module) => {
|
|
1099
|
+
|
|
1100
|
+
module.exports = require("@babel/runtime/helpers/defineProperty");
|
|
1101
|
+
|
|
1102
|
+
/***/ }),
|
|
1103
|
+
|
|
1104
|
+
/***/ "@babel/runtime/helpers/extends":
|
|
1105
|
+
/*!*************************************************!*\
|
|
1106
|
+
!*** external "@babel/runtime/helpers/extends" ***!
|
|
1107
|
+
\*************************************************/
|
|
1108
|
+
/***/ ((module) => {
|
|
1109
|
+
|
|
1110
|
+
module.exports = require("@babel/runtime/helpers/extends");
|
|
1111
|
+
|
|
1112
|
+
/***/ }),
|
|
1113
|
+
|
|
1114
|
+
/***/ "@babel/runtime/helpers/objectWithoutProperties":
|
|
1115
|
+
/*!*****************************************************************!*\
|
|
1116
|
+
!*** external "@babel/runtime/helpers/objectWithoutProperties" ***!
|
|
1117
|
+
\*****************************************************************/
|
|
1118
|
+
/***/ ((module) => {
|
|
1119
|
+
|
|
1120
|
+
module.exports = require("@babel/runtime/helpers/objectWithoutProperties");
|
|
1121
|
+
|
|
1122
|
+
/***/ }),
|
|
1123
|
+
|
|
1124
|
+
/***/ "i18n-react/dist/i18n-react":
|
|
1125
|
+
/*!*********************************************!*\
|
|
1126
|
+
!*** external "i18n-react/dist/i18n-react" ***!
|
|
1127
|
+
\*********************************************/
|
|
1128
|
+
/***/ ((module) => {
|
|
1129
|
+
|
|
1130
|
+
module.exports = require("i18n-react/dist/i18n-react");
|
|
1131
|
+
|
|
1132
|
+
/***/ }),
|
|
1133
|
+
|
|
1134
|
+
/***/ "moment-timezone":
|
|
1135
|
+
/*!**********************************!*\
|
|
1136
|
+
!*** external "moment-timezone" ***!
|
|
1137
|
+
\**********************************/
|
|
1138
|
+
/***/ ((module) => {
|
|
1139
|
+
|
|
1140
|
+
module.exports = require("moment-timezone");
|
|
1141
|
+
|
|
1142
|
+
/***/ }),
|
|
1143
|
+
|
|
1144
|
+
/***/ "prop-types":
|
|
1145
|
+
/*!*****************************!*\
|
|
1146
|
+
!*** external "prop-types" ***!
|
|
1147
|
+
\*****************************/
|
|
1148
|
+
/***/ ((module) => {
|
|
1149
|
+
|
|
1150
|
+
module.exports = require("prop-types");
|
|
1151
|
+
|
|
1152
|
+
/***/ }),
|
|
1153
|
+
|
|
1154
|
+
/***/ "react":
|
|
1155
|
+
/*!************************!*\
|
|
1156
|
+
!*** external "react" ***!
|
|
1157
|
+
\************************/
|
|
1158
|
+
/***/ ((module) => {
|
|
1159
|
+
|
|
1160
|
+
module.exports = require("react");
|
|
1161
|
+
|
|
1162
|
+
/***/ }),
|
|
1163
|
+
|
|
1164
|
+
/***/ "react-final-form":
|
|
1165
|
+
/*!***********************************!*\
|
|
1166
|
+
!*** external "react-final-form" ***!
|
|
1167
|
+
\***********************************/
|
|
1168
|
+
/***/ ((module) => {
|
|
1169
|
+
|
|
1170
|
+
module.exports = require("react-final-form");
|
|
1171
|
+
|
|
1172
|
+
/***/ }),
|
|
1173
|
+
|
|
1174
|
+
/***/ "react-select":
|
|
1175
|
+
/*!*******************************!*\
|
|
1176
|
+
!*** external "react-select" ***!
|
|
1177
|
+
\*******************************/
|
|
1178
|
+
/***/ ((module) => {
|
|
1179
|
+
|
|
1180
|
+
module.exports = require("react-select");
|
|
1181
|
+
|
|
1182
|
+
/***/ }),
|
|
1183
|
+
|
|
1184
|
+
/***/ "urijs":
|
|
1185
|
+
/*!************************!*\
|
|
1186
|
+
!*** external "urijs" ***!
|
|
1187
|
+
\************************/
|
|
1188
|
+
/***/ ((module) => {
|
|
1189
|
+
|
|
1190
|
+
module.exports = require("urijs");
|
|
1191
|
+
|
|
1192
|
+
/***/ })
|
|
1193
|
+
|
|
1194
|
+
/******/ });
|
|
1195
|
+
/************************************************************************/
|
|
1196
|
+
/******/ // The module cache
|
|
1197
|
+
/******/ var __webpack_module_cache__ = {};
|
|
1198
|
+
/******/
|
|
1199
|
+
/******/ // The require function
|
|
1200
|
+
/******/ function __webpack_require__(moduleId) {
|
|
1201
|
+
/******/ // Check if module is in cache
|
|
1202
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
1203
|
+
/******/ if (cachedModule !== undefined) {
|
|
1204
|
+
/******/ return cachedModule.exports;
|
|
1205
|
+
/******/ }
|
|
1206
|
+
/******/ // Create a new module (and put it into the cache)
|
|
1207
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
1208
|
+
/******/ // no module.id needed
|
|
1209
|
+
/******/ // no module.loaded needed
|
|
1210
|
+
/******/ exports: {}
|
|
1211
|
+
/******/ };
|
|
1212
|
+
/******/
|
|
1213
|
+
/******/ // Execute the module function
|
|
1214
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
1215
|
+
/******/
|
|
1216
|
+
/******/ // Return the exports of the module
|
|
1217
|
+
/******/ return module.exports;
|
|
1218
|
+
/******/ }
|
|
1219
|
+
/******/
|
|
1220
|
+
/************************************************************************/
|
|
1221
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
1222
|
+
/******/ (() => {
|
|
1223
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
1224
|
+
/******/ __webpack_require__.n = (module) => {
|
|
1225
|
+
/******/ var getter = module && module.__esModule ?
|
|
1226
|
+
/******/ () => (module['default']) :
|
|
1227
|
+
/******/ () => (module);
|
|
1228
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
1229
|
+
/******/ return getter;
|
|
1230
|
+
/******/ };
|
|
1231
|
+
/******/ })();
|
|
1232
|
+
/******/
|
|
1233
|
+
/******/ /* webpack/runtime/define property getters */
|
|
1234
|
+
/******/ (() => {
|
|
1235
|
+
/******/ // define getter functions for harmony exports
|
|
1236
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
1237
|
+
/******/ for(var key in definition) {
|
|
1238
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
1239
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
1240
|
+
/******/ }
|
|
1241
|
+
/******/ }
|
|
1242
|
+
/******/ };
|
|
1243
|
+
/******/ })();
|
|
1244
|
+
/******/
|
|
1245
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
1246
|
+
/******/ (() => {
|
|
1247
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
1248
|
+
/******/ })();
|
|
1249
|
+
/******/
|
|
1250
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
1251
|
+
/******/ (() => {
|
|
1252
|
+
/******/ // define __esModule on exports
|
|
1253
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
1254
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
1255
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
1256
|
+
/******/ }
|
|
1257
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
1258
|
+
/******/ };
|
|
1259
|
+
/******/ })();
|
|
1260
|
+
/******/
|
|
1261
|
+
/************************************************************************/
|
|
1262
|
+
var __webpack_exports__ = {};
|
|
1263
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
1264
|
+
(() => {
|
|
1265
|
+
/*!*************************************************!*\
|
|
1266
|
+
!*** ./src/components/extra-questions/index.js ***!
|
|
1267
|
+
\*************************************************/
|
|
1268
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1269
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1270
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1271
|
+
/* harmony export */ });
|
|
1272
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
|
|
1273
|
+
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
|
|
1274
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
|
|
1275
|
+
/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
|
|
1276
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
|
|
1277
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
1278
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
|
|
1279
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
|
|
1280
|
+
/* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
|
|
1281
|
+
/* harmony import */ var _inputs_text_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../inputs/text-input */ "./src/components/inputs/text-input.js");
|
|
1282
|
+
/* harmony import */ var _inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../inputs/dropdown */ "./src/components/inputs/dropdown.js");
|
|
1283
|
+
/* harmony import */ var _inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../inputs/radio-list */ "./src/components/inputs/radio-list.js");
|
|
1284
|
+
/* harmony import */ var _inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../inputs/checkbox-list */ "./src/components/inputs/checkbox-list.js");
|
|
1285
|
+
/* harmony import */ var _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/questions-set */ "./src/utils/questions-set.js");
|
|
1286
|
+
/* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-final-form */ "react-final-form");
|
|
1287
|
+
/* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_final_form__WEBPACK_IMPORTED_MODULE_10__);
|
|
1288
|
+
/* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./index.scss */ "./src/components/extra-questions/index.scss");
|
|
1289
|
+
/* harmony import */ var _utils_methods__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/methods */ "./src/utils/methods.js");
|
|
1290
|
+
|
|
1291
|
+
|
|
1292
|
+
const _excluded = ["input", "meta", "question", "className", "isDisabled", "isRequired"],
|
|
1293
|
+
_excluded2 = ["input", "meta", "question", "isDisabled", "isRequired"],
|
|
1294
|
+
_excluded3 = ["input", "meta", "question", "isDisabled", "isRequired"],
|
|
1295
|
+
_excluded4 = ["input", "meta", "question", "isDisabled", "isRequired", "maxValues"];
|
|
1296
|
+
|
|
1297
|
+
/**
|
|
1298
|
+
* Copyright 2017 OpenStack Foundation
|
|
1299
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1300
|
+
* you may not use this file except in compliance with the License.
|
|
1301
|
+
* You may obtain a copy of the License at
|
|
1302
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1303
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
1304
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1305
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1306
|
+
* See the License for the specific language governing permissions and
|
|
1307
|
+
* limitations under the License.
|
|
1308
|
+
**/
|
|
1309
|
+
|
|
1310
|
+
|
|
1311
|
+
|
|
1312
|
+
|
|
1313
|
+
|
|
1314
|
+
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
|
|
1321
|
+
const InputAdapter = _ref => {
|
|
1322
|
+
let {
|
|
1323
|
+
input,
|
|
1324
|
+
meta,
|
|
1325
|
+
question,
|
|
1326
|
+
className,
|
|
1327
|
+
isDisabled,
|
|
1328
|
+
isRequired
|
|
1329
|
+
} = _ref,
|
|
1330
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref, _excluded);
|
|
1331
|
+
|
|
1332
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_text_input__WEBPACK_IMPORTED_MODULE_5__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
|
|
1333
|
+
containerClassName: className,
|
|
1334
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1335
|
+
ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
|
|
1336
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1337
|
+
value: input.value,
|
|
1338
|
+
disabled: isDisabled,
|
|
1339
|
+
required: isRequired,
|
|
1340
|
+
onChange: input.onChange,
|
|
1341
|
+
placeholder: question.placeholder
|
|
1342
|
+
}));
|
|
1343
|
+
};
|
|
1344
|
+
|
|
1345
|
+
const RadioButtonListAdapter = _ref2 => {
|
|
1346
|
+
let {
|
|
1347
|
+
input,
|
|
1348
|
+
meta,
|
|
1349
|
+
question,
|
|
1350
|
+
isDisabled,
|
|
1351
|
+
isRequired
|
|
1352
|
+
} = _ref2,
|
|
1353
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref2, _excluded2);
|
|
1354
|
+
|
|
1355
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
|
|
1356
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1357
|
+
ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
|
|
1358
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1359
|
+
overrideCSS: true,
|
|
1360
|
+
value: input.value,
|
|
1361
|
+
disabled: isDisabled,
|
|
1362
|
+
required: isRequired,
|
|
1363
|
+
onChange: input.onChange
|
|
1364
|
+
}));
|
|
1365
|
+
};
|
|
1366
|
+
|
|
1367
|
+
const DropdownAdapter = _ref3 => {
|
|
1368
|
+
let {
|
|
1369
|
+
input,
|
|
1370
|
+
meta,
|
|
1371
|
+
question,
|
|
1372
|
+
isDisabled,
|
|
1373
|
+
isRequired
|
|
1374
|
+
} = _ref3,
|
|
1375
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref3, _excluded3);
|
|
1376
|
+
|
|
1377
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
|
|
1378
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1379
|
+
ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
|
|
1380
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1381
|
+
overrideCSS: true,
|
|
1382
|
+
value: input.value,
|
|
1383
|
+
disabled: isDisabled,
|
|
1384
|
+
required: isRequired,
|
|
1385
|
+
onChange: input.onChange
|
|
1386
|
+
}));
|
|
1387
|
+
};
|
|
1388
|
+
|
|
1389
|
+
const CheckBoxListAdapter = _ref4 => {
|
|
1390
|
+
let {
|
|
1391
|
+
input,
|
|
1392
|
+
meta,
|
|
1393
|
+
question,
|
|
1394
|
+
isDisabled,
|
|
1395
|
+
isRequired,
|
|
1396
|
+
maxValues
|
|
1397
|
+
} = _ref4,
|
|
1398
|
+
rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref4, _excluded4);
|
|
1399
|
+
|
|
1400
|
+
const shouldChange = ev => {
|
|
1401
|
+
const question_answers = ev.target.value; // if there's a max value of options checked and the value from the input is higher than the max, don't change the value
|
|
1402
|
+
|
|
1403
|
+
if (maxValues > 0 && question_answers.length > maxValues) {
|
|
1404
|
+
return null;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
return input.onChange(ev);
|
|
1408
|
+
};
|
|
1409
|
+
|
|
1410
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
|
|
1411
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1412
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
|
|
1413
|
+
ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
|
|
1414
|
+
value: input.value,
|
|
1415
|
+
disabled: isDisabled,
|
|
1416
|
+
required: isRequired,
|
|
1417
|
+
onChange: shouldChange
|
|
1418
|
+
}));
|
|
1419
|
+
};
|
|
1420
|
+
|
|
1421
|
+
const getValidator = isRequired => isRequired ? value => value ? undefined : "Required" : () => {};
|
|
1422
|
+
|
|
1423
|
+
const ExtraQuestionsForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(({
|
|
1424
|
+
extraQuestions,
|
|
1425
|
+
userAnswers,
|
|
1426
|
+
onAnswerChanges,
|
|
1427
|
+
className = 'questions-form',
|
|
1428
|
+
questionContainerClassName = 'question-container',
|
|
1429
|
+
questionLabelContainerClassName = 'question-label-container',
|
|
1430
|
+
questionControlContainerClassName = 'question-control-container',
|
|
1431
|
+
readOnly = false,
|
|
1432
|
+
debug = false,
|
|
1433
|
+
buttonText = 'Submit',
|
|
1434
|
+
RequiredErrorMessage = 'Required',
|
|
1435
|
+
ValidationErrorClassName = 'extra-question-error',
|
|
1436
|
+
allowExtraQuestionsEdit = true,
|
|
1437
|
+
onError = e => console.log('form errors: ', e),
|
|
1438
|
+
shouldScroll2FirstError = true
|
|
1439
|
+
}, ref) => {
|
|
1440
|
+
let submit = null;
|
|
1441
|
+
const questionRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)({});
|
|
1442
|
+
const formRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);
|
|
1443
|
+
const [answers, setAnswers] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)({});
|
|
1444
|
+
(0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => {
|
|
1445
|
+
formatUserAnswers();
|
|
1446
|
+
}, [extraQuestions]); // @see https://beta.reactjs.org/reference/react/useImperativeHandle
|
|
1447
|
+
|
|
1448
|
+
(0,react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle)(ref, () => ({
|
|
1449
|
+
doSubmit() {
|
|
1450
|
+
formRef.current.dispatchEvent(new Event("submit", {
|
|
1451
|
+
cancelable: true,
|
|
1452
|
+
bubbles: true
|
|
1453
|
+
}));
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
}));
|
|
1457
|
+
|
|
1458
|
+
const formatUserAnswers = () => {
|
|
1459
|
+
const qs = new _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__["default"](extraQuestions, userAnswers);
|
|
1460
|
+
setAnswers(qs.formatAnswers());
|
|
1461
|
+
};
|
|
1462
|
+
|
|
1463
|
+
const Condition = ({
|
|
1464
|
+
when,
|
|
1465
|
+
rule,
|
|
1466
|
+
children
|
|
1467
|
+
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1468
|
+
name: when,
|
|
1469
|
+
subscription: {
|
|
1470
|
+
value: true
|
|
1471
|
+
}
|
|
1472
|
+
}, ({
|
|
1473
|
+
input: {
|
|
1474
|
+
value
|
|
1475
|
+
}
|
|
1476
|
+
}) => checkVisibility(rule, checkRule(value, rule), children));
|
|
1477
|
+
|
|
1478
|
+
const Error = ({
|
|
1479
|
+
name
|
|
1480
|
+
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1481
|
+
name: name,
|
|
1482
|
+
subscription: {
|
|
1483
|
+
error: true,
|
|
1484
|
+
touched: true
|
|
1485
|
+
}
|
|
1486
|
+
}, ({
|
|
1487
|
+
meta: {
|
|
1488
|
+
error,
|
|
1489
|
+
touched
|
|
1490
|
+
}
|
|
1491
|
+
}) => error && touched ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1492
|
+
className: ValidationErrorClassName
|
|
1493
|
+
}, error) : null);
|
|
1494
|
+
|
|
1495
|
+
const checkRule = (value, rule) => {
|
|
1496
|
+
let values = rule.answer_values;
|
|
1497
|
+
|
|
1498
|
+
if (Array.isArray(value)) {
|
|
1499
|
+
if (!value.length) return false;
|
|
1500
|
+
let res = rule.answer_values_operator === "And";
|
|
1501
|
+
values.forEach(v => {
|
|
1502
|
+
if (rule.answer_values_operator === "And") {
|
|
1503
|
+
res = res && value.includes(parseInt(v));
|
|
1504
|
+
} else {
|
|
1505
|
+
// Or
|
|
1506
|
+
res = res || value.includes(parseInt(v));
|
|
1507
|
+
}
|
|
1508
|
+
});
|
|
1509
|
+
return res;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
return values.includes(value.toString());
|
|
1513
|
+
};
|
|
1514
|
+
|
|
1515
|
+
const checkVisibility = (rule, ruleResult, children) => {
|
|
1516
|
+
if (rule.visibility === "Visible") {
|
|
1517
|
+
if (rule.visibility_condition === "Equal") {
|
|
1518
|
+
if (ruleResult) return children;
|
|
1519
|
+
delete questionRef.current[rule.sub_question.id];
|
|
1520
|
+
return null;
|
|
1521
|
+
} // Non Equal
|
|
1522
|
+
|
|
1523
|
+
|
|
1524
|
+
if (!ruleResult) {
|
|
1525
|
+
return children;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
delete questionRef.current[rule.sub_question.id];
|
|
1529
|
+
return null;
|
|
1530
|
+
} // not visible
|
|
1531
|
+
|
|
1532
|
+
|
|
1533
|
+
if (rule.visibility_condition === "Equal") {
|
|
1534
|
+
if (!ruleResult) return children;
|
|
1535
|
+
delete questionRef.current[rule.sub_question.id];
|
|
1536
|
+
return null;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
if (ruleResult) return children;
|
|
1540
|
+
delete questionRef.current[rule.sub_question.id];
|
|
1541
|
+
return null;
|
|
1542
|
+
};
|
|
1543
|
+
|
|
1544
|
+
const getLabel = q => {
|
|
1545
|
+
// Keep the last word and the required asterisk on the same line
|
|
1546
|
+
const nonBreakingSpace = String.fromCharCode(160); // equals to
|
|
1547
|
+
// Using browser parser isntead of regex to avoid possible issues
|
|
1548
|
+
|
|
1549
|
+
const div = document.createElement("div");
|
|
1550
|
+
div.innerHTML = q.label;
|
|
1551
|
+
const label = div.textContent || div.innerText || "";
|
|
1552
|
+
const labelText = q.mandatory ? `${label}${nonBreakingSpace}<b>*</b>` : label;
|
|
1553
|
+
const labelHTML = `<label id="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)} label" htmlFor="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)}">
|
|
1554
|
+
${labelText}
|
|
1555
|
+
</label>`;
|
|
1556
|
+
return labelHTML;
|
|
1557
|
+
};
|
|
1558
|
+
|
|
1559
|
+
const isAnswered = (q, answers) => {
|
|
1560
|
+
const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
|
|
1561
|
+
if (!answers.hasOwnProperty(slug)) return false;
|
|
1562
|
+
const answer = answers[slug]; // check type
|
|
1563
|
+
|
|
1564
|
+
if (Array.isArray(answer)) return answer.length > 0;
|
|
1565
|
+
if (typeof answer === 'string') return answer.length > 0;
|
|
1566
|
+
if (typeof answer === 'number') return answer > 0;
|
|
1567
|
+
if (typeof answer === 'boolean') return answer;
|
|
1568
|
+
return false;
|
|
1569
|
+
};
|
|
1570
|
+
|
|
1571
|
+
const renderQuestion = q => {
|
|
1572
|
+
let questionValues = q.values; // disable field if edit isn't allowed and the questions is answered
|
|
1573
|
+
|
|
1574
|
+
const isDisabled = !allowExtraQuestionsEdit && isAnswered(q, answers); // @see https://codesandbox.io/s/vg05y?file=/index.js
|
|
1575
|
+
|
|
1576
|
+
if (q.type === "Text") {
|
|
1577
|
+
var _q$sub_question_rules;
|
|
1578
|
+
|
|
1579
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1580
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1581
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1582
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1583
|
+
className: questionContainerClassName
|
|
1584
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1585
|
+
className: questionLabelContainerClassName
|
|
1586
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1587
|
+
className: questionControlContainerClassName
|
|
1588
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1589
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1590
|
+
question: q,
|
|
1591
|
+
isDisabled: isDisabled,
|
|
1592
|
+
isRequired: q.mandatory,
|
|
1593
|
+
validate: getValidator(q.mandatory),
|
|
1594
|
+
component: InputAdapter
|
|
1595
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1596
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1597
|
+
}))), ((_q$sub_question_rules = q.sub_question_rules) === null || _q$sub_question_rules === void 0 ? void 0 : _q$sub_question_rules.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1598
|
+
key: r.id,
|
|
1599
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1600
|
+
rule: r
|
|
1601
|
+
}, renderQuestion(r.sub_question))));
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
if (q.type === "TextArea") {
|
|
1605
|
+
var _q$sub_question_rules2;
|
|
1606
|
+
|
|
1607
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1608
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1609
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1610
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1611
|
+
className: questionContainerClassName
|
|
1612
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1613
|
+
className: questionLabelContainerClassName
|
|
1614
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1615
|
+
className: questionControlContainerClassName
|
|
1616
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1617
|
+
validate: getValidator(q.mandatory),
|
|
1618
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1619
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1620
|
+
disabled: isDisabled,
|
|
1621
|
+
required: q.mandatory,
|
|
1622
|
+
component: "textarea"
|
|
1623
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1624
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1625
|
+
}))), ((_q$sub_question_rules2 = q.sub_question_rules) === null || _q$sub_question_rules2 === void 0 ? void 0 : _q$sub_question_rules2.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1626
|
+
key: r.id,
|
|
1627
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1628
|
+
rule: r
|
|
1629
|
+
}, renderQuestion(r.sub_question))));
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
if (q.type === "CheckBox") {
|
|
1633
|
+
var _q$sub_question_rules3;
|
|
1634
|
+
|
|
1635
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1636
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1637
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1638
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1639
|
+
style: {
|
|
1640
|
+
display: 'flex'
|
|
1641
|
+
},
|
|
1642
|
+
className: questionContainerClassName
|
|
1643
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1644
|
+
className: `eq-checkbox-label ${questionLabelContainerClassName}`
|
|
1645
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1646
|
+
className: questionControlContainerClassName
|
|
1647
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1648
|
+
className: "form-check abc-checkbox"
|
|
1649
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1650
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1651
|
+
id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1652
|
+
validate: getValidator(q.mandatory),
|
|
1653
|
+
disabled: isDisabled,
|
|
1654
|
+
required: q.mandatory,
|
|
1655
|
+
type: "checkbox",
|
|
1656
|
+
className: "form-check-input",
|
|
1657
|
+
component: "input"
|
|
1658
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
|
|
1659
|
+
className: "form-check-label",
|
|
1660
|
+
htmlFor: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1661
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1662
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1663
|
+
})))), ((_q$sub_question_rules3 = q.sub_question_rules) === null || _q$sub_question_rules3 === void 0 ? void 0 : _q$sub_question_rules3.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1664
|
+
key: r.id,
|
|
1665
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1666
|
+
rule: r
|
|
1667
|
+
}, renderQuestion(r.sub_question))));
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
if (q.type === "RadioButtonList") {
|
|
1671
|
+
var _q$sub_question_rules4;
|
|
1672
|
+
|
|
1673
|
+
const options = questionValues.map(val => ({
|
|
1674
|
+
label: val.label,
|
|
1675
|
+
value: val.id
|
|
1676
|
+
}));
|
|
1677
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1678
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1679
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1680
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1681
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1682
|
+
className: questionContainerClassName
|
|
1683
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1684
|
+
className: questionLabelContainerClassName
|
|
1685
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1686
|
+
className: questionControlContainerClassName
|
|
1687
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1688
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1689
|
+
options: options,
|
|
1690
|
+
question: q,
|
|
1691
|
+
validate: getValidator(q.mandatory),
|
|
1692
|
+
isDisabled: isDisabled,
|
|
1693
|
+
isRequired: q.mandatory,
|
|
1694
|
+
component: RadioButtonListAdapter
|
|
1695
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1696
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1697
|
+
}))), ((_q$sub_question_rules4 = q.sub_question_rules) === null || _q$sub_question_rules4 === void 0 ? void 0 : _q$sub_question_rules4.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1698
|
+
key: r.id,
|
|
1699
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1700
|
+
rule: r
|
|
1701
|
+
}, renderQuestion(r.sub_question))));
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
if (q.type === "ComboBox") {
|
|
1705
|
+
var _q$sub_question_rules5;
|
|
1706
|
+
|
|
1707
|
+
const options = questionValues.map(val => ({
|
|
1708
|
+
label: val.label,
|
|
1709
|
+
value: val.id
|
|
1710
|
+
}));
|
|
1711
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1712
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1713
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1714
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1715
|
+
className: questionContainerClassName
|
|
1716
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1717
|
+
className: questionLabelContainerClassName
|
|
1718
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1719
|
+
className: questionControlContainerClassName
|
|
1720
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1721
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1722
|
+
options: options,
|
|
1723
|
+
question: q,
|
|
1724
|
+
validate: getValidator(q.mandatory),
|
|
1725
|
+
isDisabled: isDisabled,
|
|
1726
|
+
isRequired: q.mandatory,
|
|
1727
|
+
component: DropdownAdapter
|
|
1728
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1729
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1730
|
+
}))), ((_q$sub_question_rules5 = q.sub_question_rules) === null || _q$sub_question_rules5 === void 0 ? void 0 : _q$sub_question_rules5.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1731
|
+
key: r.id,
|
|
1732
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1733
|
+
rule: r
|
|
1734
|
+
}, renderQuestion(r.sub_question))));
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
if (q.type === "CheckBoxList") {
|
|
1738
|
+
var _q$sub_question_rules6;
|
|
1739
|
+
|
|
1740
|
+
const options = questionValues.map(val => ({
|
|
1741
|
+
label: val.label,
|
|
1742
|
+
value: val.id
|
|
1743
|
+
}));
|
|
1744
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
|
|
1745
|
+
key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1746
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1747
|
+
ref: el => questionRef.current[q.id] = el,
|
|
1748
|
+
className: questionContainerClassName
|
|
1749
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
1750
|
+
className: questionLabelContainerClassName
|
|
1751
|
+
}, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1752
|
+
className: questionControlContainerClassName
|
|
1753
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
|
|
1754
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1755
|
+
className: questionControlContainerClassName,
|
|
1756
|
+
validate: getValidator(q.mandatory),
|
|
1757
|
+
options: options,
|
|
1758
|
+
question: q,
|
|
1759
|
+
maxValues: q.max_selected_values,
|
|
1760
|
+
isDisabled: isDisabled,
|
|
1761
|
+
isRequired: q.mandatory,
|
|
1762
|
+
component: CheckBoxListAdapter
|
|
1763
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
|
|
1764
|
+
name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
|
|
1765
|
+
}))), ((_q$sub_question_rules6 = q.sub_question_rules) === null || _q$sub_question_rules6 === void 0 ? void 0 : _q$sub_question_rules6.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
|
|
1766
|
+
key: r.id,
|
|
1767
|
+
when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
|
|
1768
|
+
rule: r
|
|
1769
|
+
}, renderQuestion(r.sub_question))));
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
return null;
|
|
1773
|
+
};
|
|
1774
|
+
|
|
1775
|
+
const isVisible = q => {
|
|
1776
|
+
return !!questionRef.current[q.id];
|
|
1777
|
+
};
|
|
1778
|
+
|
|
1779
|
+
const validateQuestion = (q, values, errors) => {
|
|
1780
|
+
var _q$sub_question_rules7;
|
|
1781
|
+
|
|
1782
|
+
if (q.mandatory && isVisible(q)) {
|
|
1783
|
+
const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
|
|
1784
|
+
|
|
1785
|
+
if (!values.hasOwnProperty((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)) || values[(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)] === "" || values[slug].length === 0) {
|
|
1786
|
+
errors[slug] = RequiredErrorMessage;
|
|
1787
|
+
}
|
|
1788
|
+
} // validate sub rules
|
|
1789
|
+
|
|
1790
|
+
|
|
1791
|
+
(_q$sub_question_rules7 = q.sub_question_rules) === null || _q$sub_question_rules7 === void 0 ? void 0 : _q$sub_question_rules7.forEach(r => {
|
|
1792
|
+
validateQuestion(r.sub_question, values, errors);
|
|
1793
|
+
});
|
|
1794
|
+
};
|
|
1795
|
+
|
|
1796
|
+
const onSubmit = values => {
|
|
1797
|
+
onAnswerChanges(values);
|
|
1798
|
+
};
|
|
1799
|
+
|
|
1800
|
+
const validate = values => {
|
|
1801
|
+
const errors = {};
|
|
1802
|
+
extraQuestions.forEach(q => {
|
|
1803
|
+
validateQuestion(q, values, errors);
|
|
1804
|
+
});
|
|
1805
|
+
return errors;
|
|
1806
|
+
};
|
|
1807
|
+
|
|
1808
|
+
if (!Object.keys(answers).length) return null;
|
|
1809
|
+
|
|
1810
|
+
const getErrorFields = (q, invalidFormFields, errorFields) => {
|
|
1811
|
+
var _q$sub_question_rules8;
|
|
1812
|
+
|
|
1813
|
+
if (invalidFormFields.includes((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name))) {
|
|
1814
|
+
errorFields.push(q);
|
|
1815
|
+
} // find errors on sub rules
|
|
1816
|
+
|
|
1817
|
+
|
|
1818
|
+
(_q$sub_question_rules8 = q.sub_question_rules) === null || _q$sub_question_rules8 === void 0 ? void 0 : _q$sub_question_rules8.forEach(r => {
|
|
1819
|
+
getErrorFields(r.sub_question, invalidFormFields, errorFields);
|
|
1820
|
+
});
|
|
1821
|
+
};
|
|
1822
|
+
|
|
1823
|
+
const getFirstError = invalidFormFields => {
|
|
1824
|
+
const errorFields = [];
|
|
1825
|
+
extraQuestions.forEach(q => {
|
|
1826
|
+
getErrorFields(q, invalidFormFields, errorFields);
|
|
1827
|
+
});
|
|
1828
|
+
return errorFields.sort((a, b) => a.order > b.order)[0];
|
|
1829
|
+
};
|
|
1830
|
+
|
|
1831
|
+
const scrollToFirstError = invalidFormFields => {
|
|
1832
|
+
const firstError = getFirstError(invalidFormFields);
|
|
1833
|
+
questionRef.current[firstError.id].scrollIntoView({
|
|
1834
|
+
behavior: 'smooth',
|
|
1835
|
+
block: 'center'
|
|
1836
|
+
});
|
|
1837
|
+
};
|
|
1838
|
+
|
|
1839
|
+
if (!Object.keys(answers).length) return null;
|
|
1840
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
|
|
1841
|
+
className: className
|
|
1842
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Form, {
|
|
1843
|
+
validate: validate,
|
|
1844
|
+
onSubmit: onSubmit,
|
|
1845
|
+
initialValues: answers
|
|
1846
|
+
}, ({
|
|
1847
|
+
handleSubmit,
|
|
1848
|
+
form,
|
|
1849
|
+
submitting,
|
|
1850
|
+
pristine,
|
|
1851
|
+
values
|
|
1852
|
+
}) => {
|
|
1853
|
+
submit = handleSubmit;
|
|
1854
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("form", {
|
|
1855
|
+
onSubmit: event => {
|
|
1856
|
+
const invalidFormFields = form.getRegisteredFields().filter(field => form.getFieldState(field).invalid);
|
|
1857
|
+
|
|
1858
|
+
if (invalidFormFields.length > 0) {
|
|
1859
|
+
const firstError = getFirstError(invalidFormFields);
|
|
1860
|
+
onError(invalidFormFields, questionRef.current[firstError.id]);
|
|
1861
|
+
if (shouldScroll2FirstError) scrollToFirstError(invalidFormFields);
|
|
1862
|
+
}
|
|
1863
|
+
|
|
1864
|
+
handleSubmit(event);
|
|
1865
|
+
},
|
|
1866
|
+
ref: formRef
|
|
1867
|
+
}, readOnly ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("fieldset", {
|
|
1868
|
+
disabled: "disabled"
|
|
1869
|
+
}, extraQuestions.map(q => renderQuestion(q))) : extraQuestions.map(q => renderQuestion(q)), debug && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("pre", null, JSON.stringify(values, 0, 2)));
|
|
1870
|
+
}), !ref && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("button", {
|
|
1871
|
+
type: "submit",
|
|
1872
|
+
onClick: event => {
|
|
1873
|
+
submit(event);
|
|
1874
|
+
},
|
|
1875
|
+
style: {
|
|
1876
|
+
marginTop: 10
|
|
1877
|
+
}
|
|
1878
|
+
}, buttonText));
|
|
1879
|
+
});
|
|
1880
|
+
ExtraQuestionsForm.propTypes = {
|
|
1881
|
+
extraQuestions: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
|
|
1882
|
+
userAnswers: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
|
|
1883
|
+
onAnswerChanges: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func.isRequired),
|
|
1884
|
+
className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1885
|
+
debug: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
|
|
1886
|
+
buttonText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1887
|
+
questionContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1888
|
+
questionLabelContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1889
|
+
questionControlContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1890
|
+
RequiredErrorMessage: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1891
|
+
ValidationErrorClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
|
|
1892
|
+
allowExtraQuestionsEdit: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
|
|
1893
|
+
shouldScroll2FirstError: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool)
|
|
1894
|
+
};
|
|
1895
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtraQuestionsForm);
|
|
1896
|
+
})();
|
|
1897
|
+
|
|
1898
|
+
/******/ return __webpack_exports__;
|
|
1899
|
+
/******/ })()
|
|
1900
|
+
;
|
|
1901
|
+
});
|
|
1902
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNSSxZQUFOLFNBQTJCSCx3REFBM0IsQ0FBMkM7RUFFdERLLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2YsTUFBTUEsS0FBTjtJQUVBLElBQUlDLFVBQVUsR0FBR0QsS0FBSyxDQUFDRSxLQUFOLEdBQWNGLEtBQUssQ0FBQ0UsS0FBTixDQUFZQyxJQUFaLENBQWtCQyxDQUFDLElBQUksQ0FBQ0osS0FBSyxDQUFDSyxPQUFOLENBQWNDLEdBQWQsQ0FBa0JDLEVBQUUsSUFBSUEsRUFBRSxDQUFDTCxLQUEzQixFQUFrQ00sUUFBbEMsQ0FBMkNKLENBQTNDLENBQXhCLENBQWQsR0FBd0YsS0FBekc7SUFFQSxLQUFLSyxLQUFMLEdBQWE7TUFDVEMsWUFBWSxFQUFFLENBQUMsQ0FBQ1Q7SUFEUCxDQUFiO0lBSUEsS0FBS1UsWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjtJQUNBLEtBQUtDLG1CQUFMLEdBQTJCLEtBQUtBLG1CQUFMLENBQXlCRCxJQUF6QixDQUE4QixJQUE5QixDQUEzQjtFQUNIOztFQUVERCxZQUFZLENBQUNHLEtBQUQsRUFBUTtJQUNoQixJQUFJQyxZQUFZLEdBQUcsS0FBS2YsS0FBTCxDQUFXSyxPQUFYLENBQW1CQyxHQUFuQixDQUF1QkMsRUFBRSxJQUFJQSxFQUFFLENBQUNMLEtBQWhDLENBQW5CO0lBQ0EsSUFBSUEsS0FBSyxHQUFHLEtBQUtGLEtBQUwsQ0FBV0UsS0FBWCxHQUFtQixDQUFDLEdBQUcsS0FBS0YsS0FBTCxDQUFXRSxLQUFmLENBQW5CLEdBQTJDLEVBQXZEOztJQUVBLElBQUlZLEtBQUssQ0FBQ0UsTUFBTixDQUFhQyxJQUFiLEtBQXNCLFVBQTFCLEVBQXNDO01BQ2xDLElBQUlILEtBQUssQ0FBQ0UsTUFBTixDQUFhRSxPQUFqQixFQUEwQjtRQUN0QixNQUFNQyxNQUFNLEdBQUdDLEtBQUssQ0FBQ04sS0FBSyxDQUFDRSxNQUFOLENBQWFkLEtBQWQsQ0FBTCxHQUE0QlksS0FBSyxDQUFDRSxNQUFOLENBQWFkLEtBQXpDLEdBQWlEbUIsUUFBUSxDQUFDUCxLQUFLLENBQUNFLE1BQU4sQ0FBYWQsS0FBZCxDQUF4RTtRQUNBQSxLQUFLLENBQUNvQixJQUFOLENBQVdILE1BQVg7TUFDSCxDQUhELE1BR087UUFDSGpCLEtBQUssR0FBR0EsS0FBSyxDQUFDcUIsTUFBTixDQUFjbkIsQ0FBQyxJQUFJQSxDQUFDLElBQUlVLEtBQUssQ0FBQ0UsTUFBTixDQUFhZCxLQUFyQyxDQUFSO01BQ0g7SUFDSixDQVBELE1BT087TUFDSEEsS0FBSyxHQUFHQSxLQUFLLENBQUNxQixNQUFOLENBQWFuQixDQUFDLElBQUlXLFlBQVksQ0FBQ1AsUUFBYixDQUFzQkosQ0FBdEIsQ0FBbEIsQ0FBUjtNQUNBRixLQUFLLENBQUNvQixJQUFOLENBQVdSLEtBQUssQ0FBQ0UsTUFBTixDQUFhZCxLQUF4QjtJQUNIOztJQUVELElBQUlzQixFQUFFLEdBQUc7TUFBQ1IsTUFBTSxFQUFFO1FBQ1ZTLEVBQUUsRUFBRSxLQUFLekIsS0FBTCxDQUFXeUIsRUFETDtRQUVWdkIsS0FBSyxFQUFFQSxLQUZHO1FBR1ZlLElBQUksRUFBRTtNQUhJO0lBQVQsQ0FBVDtJQU1BLEtBQUtqQixLQUFMLENBQVcwQixRQUFYLENBQW9CRixFQUFwQjtFQUNIOztFQUVEWCxtQkFBbUIsQ0FBQ0MsS0FBRCxFQUFRO0lBQ3ZCLEtBQUthLFFBQUwsQ0FBYztNQUFDakIsWUFBWSxFQUFFSSxLQUFLLENBQUNFLE1BQU4sQ0FBYUU7SUFBNUIsQ0FBZDtFQUNIOztFQUVEVSxNQUFNLEdBQUc7SUFFTCxrQkFBeUcsS0FBSzVCLEtBQTlHO0lBQUEsSUFBSTtNQUFDMEIsUUFBRDtNQUFXeEIsS0FBWDtNQUFrQjJCLFNBQWxCO01BQTZCeEIsT0FBN0I7TUFBc0NvQixFQUF0QztNQUEwQ0ssUUFBMUM7TUFBb0RDLEtBQXBEO01BQTJEQyxRQUEzRDtNQUFvRUMsSUFBcEU7TUFBMEVDO0lBQTFFLENBQUo7SUFBQSxJQUFpR0MsSUFBakc7O0lBQ0EsSUFBSTtNQUFFekI7SUFBRixJQUFtQixLQUFLRCxLQUE1QjtJQUVBLElBQUkyQixNQUFNLEdBQUssS0FBS3BDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsUUFBMUIsQ0FBZjtJQUNBLElBQUlDLElBQUksR0FBSyxLQUFLdEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixNQUExQixDQUFiO0lBQ0EsSUFBSUUsVUFBVSxHQUFLLEtBQUt2QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFlBQTFCLENBQW5CO0lBQ0EsSUFBSXBDLFVBQVUsR0FBR0MsS0FBSyxHQUFHQSxLQUFLLENBQUNDLElBQU4sQ0FBWUMsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxFQUFFLElBQUlBLEVBQUUsQ0FBQ0wsS0FBckIsRUFBNEJNLFFBQTVCLENBQXFDSixDQUFyQyxDQUFsQixDQUFILEdBQWlFLEtBQXZGO0lBQ0EsSUFBSW9DLFNBQVMsR0FBSyxLQUFLeEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixPQUExQixLQUFzQ04sS0FBSyxLQUFLLEVBQWxFO0lBQ0EsSUFBSVUsVUFBVSxHQUFJLEtBQUt6QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFVBQTFCLEtBQXlDTCxRQUFRLElBQUksSUFBdkU7SUFHQSxJQUFJVSxLQUFKLEVBQVdDLEtBQVg7O0lBRUEsSUFBSVAsTUFBSixFQUFZO01BQ1JNLEtBQUssR0FBRztRQUNKRSxXQUFXLEVBQUUsTUFEVDtRQUVKQyxVQUFVLEVBQUUsTUFGUjtRQUdKQyxLQUFLLEVBQUU7TUFISCxDQUFSO0lBS0gsQ0FORCxNQU1PO01BQ0hKLEtBQUssR0FBRztRQUNKRSxXQUFXLEVBQUUsTUFEVDtRQUVKRyxTQUFTLEVBQUU7TUFGUCxDQUFSO0lBSUg7O0lBRUQsb0JBQ0k7TUFBSyxFQUFFLEVBQUcsZUFBY3RCLEVBQUcsRUFBM0I7TUFBOEIsbUJBQWlCUztJQUEvQyxnQkFDSTtNQUFLLFNBQVMsRUFBRSxvQkFBb0JNLFNBQVMsR0FBRyxRQUFILEdBQWMsRUFBM0M7SUFBaEIsR0FDTW5DLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxFQUFFLElBQUk7TUFDaEIsSUFBSVcsT0FBTyxHQUFHaEIsS0FBSyxHQUFHQSxLQUFLLENBQUNNLFFBQU4sQ0FBZUQsRUFBRSxDQUFDTCxLQUFsQixDQUFILEdBQThCLEtBQWpEO01BQ0Esb0JBQ0k7UUFBSyxTQUFTLEVBQUMseUJBQWY7UUFBeUMsR0FBRyxFQUFFLGVBQWVLLEVBQUUsQ0FBQ0wsS0FBaEU7UUFBdUUsS0FBSyxFQUFFd0M7TUFBOUUsZ0JBQ0k7UUFBTyxJQUFJLEVBQUMsVUFBWjtRQUNPLEVBQUUsRUFBRyxNQUFLakIsRUFBRyxJQUFHbEIsRUFBRSxDQUFDTCxLQUFNLEVBRGhDO1FBRU8sSUFBSSxFQUFFK0IsSUFBSSxHQUFFQSxJQUFGLEdBQVNSLEVBRjFCO1FBR08sT0FBTyxFQUFFUCxPQUhoQjtRQUlPLFFBQVEsRUFBRXVCLFVBSmpCO1FBS08sUUFBUSxFQUFFLEtBQUs5QixZQUx0QjtRQUtvQyxTQUFTLEVBQUMsa0JBTDlDO1FBS2lFLEtBQUssRUFBRUosRUFBRSxDQUFDTDtNQUwzRSxFQURKLGVBT0k7UUFBTyxTQUFTLEVBQUMsa0JBQWpCO1FBQW9DLE9BQU8sRUFBRyxNQUFLdUIsRUFBRyxJQUFHbEIsRUFBRSxDQUFDTCxLQUFNO01BQWxFLEdBQ0tvQyxJQUFJLGlCQUNMLDJEQUFDLGlEQUFELFFBQVUvQixFQUFFLENBQUNvQyxLQUFiLENBRkosRUFJSyxDQUFDTCxJQUFELElBQ0QvQixFQUFFLENBQUNvQyxLQUxQLENBUEosQ0FESjtJQWtCSCxDQXBCQyxDQUROLEVBdUJLSixVQUFVLGlCQUNYO01BQUssU0FBUyxFQUFDLHlCQUFmO01BQXlDLEtBQUssRUFBRUc7SUFBaEQsZ0JBQ0k7TUFBTyxJQUFJLEVBQUMsVUFBWjtNQUF1QixFQUFFLEVBQUUsYUFBYWpCLEVBQXhDO01BQTRDLE9BQU8sRUFBRWYsWUFBckQ7TUFBbUUsUUFBUSxFQUFFK0IsVUFBN0U7TUFDTyxRQUFRLEVBQUUsS0FBSzVCLG1CQUR0QjtNQUMyQyxTQUFTLEVBQUMsa0JBRHJEO01BQ3dFLEtBQUssRUFBQztJQUQ5RSxFQURKLGVBR0k7TUFBTyxTQUFTLEVBQUMsa0JBQWpCO01BQW9DLE9BQU8sRUFBRSxhQUFhWTtJQUExRCxHQUNLOUIsMkVBQUEsQ0FBWSxlQUFaLENBREwsQ0FISixDQXhCSixFQWlDSzRDLFVBQVUsSUFBSTdCLFlBQWQsaUJBQ0Q7TUFBSyxLQUFLLEVBQUU7UUFBQ2tDLFdBQVcsRUFBRSxNQUFkO1FBQXNCSyxLQUFLLEVBQUU7TUFBN0I7SUFBWixnQkFDSTtNQUFPLFNBQVMsRUFBQyxjQUFqQjtNQUFnQyxRQUFRLEVBQUVSLFVBQTFDO01BQXNELFFBQVEsRUFBRSxLQUFLOUIsWUFBckU7TUFBbUYsS0FBSyxFQUFFVjtJQUExRixFQURKLENBbENKLENBREosRUF5Q0t1QyxTQUFTLGlCQUNWO01BQUcsU0FBUyxFQUFDO0lBQWIsR0FBNEJULEtBQTVCLENBMUNKLENBREo7RUFnREg7O0FBeEhxRDtBQTJIMURsQyxZQUFZLENBQUNxRCxZQUFiLEdBQTRCO0VBQ3hCaEIsY0FBYyxFQUFHO0FBRE8sQ0FBNUI7QUFLQXJDLFlBQVksQ0FBQ3NELFNBQWIsR0FBeUI7RUFDckIxQixFQUFFLEVBQUVoQyxxRUFBMkI0RDtBQURWLENBQXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVlLE1BQU1FLFFBQU4sU0FBdUI3RCx3REFBdkIsQ0FBdUM7RUFFbERLLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2YsTUFBTUEsS0FBTjtJQUVBLEtBQUtXLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7RUFDSDs7RUFFREQsWUFBWSxDQUFDNkMsU0FBRCxFQUFZO0lBRXBCLElBQUl0RCxLQUFLLEdBQUcsSUFBWjs7SUFDQSxJQUFJLEtBQUtGLEtBQUwsQ0FBV3lELE9BQWYsRUFBd0I7TUFDcEJ2RCxLQUFLLEdBQUdzRCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ2xELEdBQVYsQ0FBY29ELEdBQUcsSUFBSUEsR0FBRyxDQUFDeEQsS0FBekIsQ0FBSCxHQUFxQyxJQUF0RDtJQUNILENBRkQsTUFFTztNQUNIQSxLQUFLLEdBQUdzRCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ3RELEtBQWIsR0FBcUIsSUFBdEM7SUFDSDs7SUFFRCxJQUFJc0IsRUFBRSxHQUFHO01BQUNSLE1BQU0sRUFBRTtRQUNWUyxFQUFFLEVBQUUsS0FBS3pCLEtBQUwsQ0FBV3lCLEVBREw7UUFFVnZCLEtBQUssRUFBRUEsS0FGRztRQUdWZSxJQUFJLEVBQUU7TUFISTtJQUFULENBQVQ7SUFNQSxLQUFLakIsS0FBTCxDQUFXMEIsUUFBWCxDQUFvQkYsRUFBcEI7RUFDSDs7RUFFREksTUFBTSxHQUFHO0lBRUwsa0JBQXFHLEtBQUs1QixLQUExRztJQUFBLElBQUk7TUFBQzBCLFFBQUQ7TUFBV3hCLEtBQVg7TUFBa0IyQixTQUFsQjtNQUE2QkUsS0FBN0I7TUFBb0M0QixTQUFwQztNQUErQzNCLFFBQS9DO01BQXlENEIsV0FBekQ7TUFBc0UxQjtJQUF0RSxDQUFKO0lBQUEsSUFBNkZDLElBQTdGOztJQUNBLElBQUlLLFNBQVMsR0FBSyxLQUFLeEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixPQUExQixLQUFzQ04sS0FBSyxJQUFJLEVBQWpFO0lBQ0EsSUFBSThCLFdBQVcsR0FBSSxLQUFLN0QsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixXQUExQixDQUFuQjtJQUNBLElBQUlJLFVBQVUsR0FBSSxLQUFLekMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixVQUExQixLQUF5Q0wsUUFBUSxJQUFJLElBQXZFO0lBQ0EsSUFBSThCLFFBQVEsR0FBRyxJQUFmO0lBRUEsSUFBSUMsZUFBZSxHQUFHbEMsU0FBdEI7O0lBRUEsSUFBSSxDQUFDLEtBQUs3QixLQUFMLENBQVdxQyxjQUFYLENBQTBCLGFBQTFCLENBQUQsSUFBNkN1QixXQUFXLElBQUksS0FBaEUsRUFBdUU7TUFDbkVHLGVBQWUsR0FBRyxjQUFjbEMsU0FBZCxHQUEwQixHQUExQixJQUFpQ1csU0FBUyxHQUFHLE9BQUgsR0FBYSxFQUF2RCxDQUFsQjtJQUNIOztJQUVELElBQUksS0FBS3hDLEtBQUwsQ0FBV3lELE9BQWYsRUFBd0I7TUFDcEJLLFFBQVEsR0FBRyxLQUFLOUQsS0FBTCxDQUFXSyxPQUFYLENBQW1Ca0IsTUFBbkIsQ0FBMEJoQixFQUFFLElBQUlMLEtBQUssQ0FBQ00sUUFBTixDQUFlRCxFQUFFLENBQUNMLEtBQWxCLENBQWhDLENBQVg7SUFDSCxDQUZELE1BRU87TUFDSDRELFFBQVEsR0FBSTVELEtBQUssWUFBWThELE1BQWpCLElBQTJCOUQsS0FBSyxJQUFJLElBQXJDLEdBQTZDQSxLQUE3QyxHQUFxRCxLQUFLRixLQUFMLENBQVdLLE9BQVgsQ0FBbUJGLElBQW5CLENBQXdCOEQsR0FBRyxJQUFJQSxHQUFHLENBQUMvRCxLQUFKLElBQWFBLEtBQTVDLENBQWhFO0lBQ0g7O0lBRUQsTUFBTWdFLFlBQVksR0FBRztNQUFFQyxJQUFJLEVBQUVDLE1BQU0sb0NBQVVBLE1BQVY7UUFBa0JDLE1BQU0sRUFBRTtNQUExQjtJQUFkLENBQXJCO0lBRUEsb0JBQ0kscUZBQ0ksMkRBQUMscURBQUQ7TUFDSSxTQUFTLEVBQUVOLGVBRGY7TUFFSSxLQUFLLEVBQUVELFFBRlg7TUFHSSxRQUFRLEVBQUUsS0FBS25ELFlBSG5CO01BSUksV0FBVyxFQUFFa0QsV0FKakI7TUFLSSxVQUFVLEVBQUVwQixVQUxoQjtNQU1JLE1BQU0sRUFBRXlCLFlBTlo7TUFPSSxtQkFBaUJoQztJQVByQixHQVFRQyxJQVJSLEVBREosRUFXS0ssU0FBUyxpQkFDVjtNQUFHLFNBQVMsRUFBQztJQUFiLEdBQTRCVCxLQUE1QixDQVpKLENBREo7RUFrQkg7O0FBbEVpRDtBQXFFdER3QixRQUFRLENBQUNMLFlBQVQsR0FBd0I7RUFDcEJoQixjQUFjLEVBQUc7QUFERyxDQUF4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVlLE1BQU1vQyxTQUFOLFNBQXdCNUUsd0RBQXhCLENBQXdDO0VBRW5ESyxXQUFXLENBQUNDLEtBQUQsRUFBUTtJQUNmLE1BQU1BLEtBQU47SUFFQSxLQUFLUyxLQUFMLEdBQWE7TUFDVFAsS0FBSyxFQUFFRixLQUFLLENBQUNFO0lBREosQ0FBYjtJQUlBLEtBQUtTLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7RUFDSDs7RUFFREQsWUFBWSxDQUFDNkMsU0FBRCxFQUFZO0lBRXBCLElBQUloQyxFQUFFLEdBQUc7TUFBQ1IsTUFBTSxFQUFFO1FBQ1ZTLEVBQUUsRUFBRSxLQUFLekIsS0FBTCxDQUFXeUIsRUFETDtRQUVWdkIsS0FBSyxFQUFFc0QsU0FBUyxDQUFDeEMsTUFBVixDQUFpQmQsS0FGZDtRQUdWZSxJQUFJLEVBQUU7TUFISTtJQUFULENBQVQ7SUFNQSxLQUFLakIsS0FBTCxDQUFXMEIsUUFBWCxDQUFvQkYsRUFBcEI7RUFDSDs7RUFFRCtDLFFBQVEsQ0FBQ0MsTUFBRCxFQUFTL0MsRUFBVCxFQUFhVyxNQUFiLEVBQXFCcUMsTUFBckIsRUFBNkJuQyxJQUE3QixFQUFtQztJQUN2QyxJQUFJRixNQUFKLEVBQVk7TUFDUixvQkFDSTtRQUFPLFNBQVMsRUFBQyxrQkFBakI7UUFBb0MsT0FBTyxFQUFHLFNBQVFYLEVBQUcsSUFBRytDLE1BQU0sQ0FBQ3RFLEtBQU0sRUFBekU7UUFBNEUsS0FBSyxFQUFFO1VBQUN3RSxPQUFPLEVBQUU7UUFBVjtNQUFuRixHQUNLcEMsSUFBSSxpQkFDTCwyREFBQyxpREFBRCxRQUNLa0MsTUFBTSxDQUFDN0IsS0FEWixDQUZKLEVBTUssQ0FBQ0wsSUFBRCxJQUNEa0MsTUFBTSxDQUFDN0IsS0FQWCxDQURKO0lBWUgsQ0FiRCxNQWFPLElBQUk4QixNQUFKLEVBQVk7TUFDZixvQkFDSTtRQUFPLFNBQVMsRUFBQyxrQkFBakI7UUFBb0MsT0FBTyxFQUFHLFNBQVFoRCxFQUFHLElBQUcrQyxNQUFNLENBQUN0RSxLQUFNO01BQXpFLEdBQ0tzRSxNQUFNLENBQUM3QixLQURaLENBREo7SUFLSCxDQU5NLE1BTUE7TUFDSCxvQkFDSTtRQUFPLFNBQVMsRUFBQyxrQkFBakI7UUFBb0MsT0FBTyxFQUFHLFNBQVFsQixFQUFHLElBQUcrQyxNQUFNLENBQUN0RSxLQUFNLEVBQXpFO1FBQTRFLEtBQUssRUFBRTtVQUFDd0UsT0FBTyxFQUFFO1FBQVY7TUFBbkYsZ0JBQ0k7UUFBSSxLQUFLLEVBQUU7VUFBQzNCLFNBQVMsRUFBRTtRQUFaO01BQVgsR0FBZ0N5QixNQUFNLENBQUM3QixLQUF2QyxDQURKLGVBRUksMkRBQUMsaURBQUQsUUFBVTZCLE1BQU0sQ0FBQ0csV0FBakIsQ0FGSixDQURKO0lBTUg7RUFDSjs7RUFFRC9DLE1BQU0sR0FBRztJQUVMLGtCQUE4RixLQUFLNUIsS0FBbkc7SUFBQSxJQUFJO01BQUMwQixRQUFEO01BQVd4QixLQUFYO01BQWtCMkIsU0FBbEI7TUFBNkJFLEtBQTdCO01BQW9DRyxjQUFwQztNQUFvREYsUUFBcEQ7TUFBOEQzQixPQUE5RDtNQUFzRW9CLEVBQXRFO01BQTBFUTtJQUExRSxDQUFKO0lBQUEsSUFBc0ZFLElBQXRGOztJQUNBLElBQUlLLFNBQVMsR0FBSyxLQUFLeEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixPQUExQixLQUFzQ04sS0FBSyxJQUFJLEVBQWpFO0lBQ0EsSUFBSUssTUFBTSxHQUFLLEtBQUtwQyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFFBQTFCLENBQWY7SUFDQSxJQUFJb0MsTUFBTSxHQUFLLEtBQUt6RSxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFFBQTFCLENBQWY7SUFDQSxJQUFJQyxJQUFJLEdBQUssS0FBS3RDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsTUFBMUIsQ0FBYjtJQUNBLElBQUlJLFVBQVUsR0FBSSxLQUFLekMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixVQUExQixLQUF5Q0wsUUFBUSxJQUFJLElBQXZFO0lBRUEsSUFBSVUsS0FBSixFQUFXQyxLQUFYOztJQUVBLElBQUlQLE1BQUosRUFBWTtNQUNSTSxLQUFLLEdBQUc7UUFDSkUsV0FBVyxFQUFFLE1BRFQ7UUFFSkMsVUFBVSxFQUFFLE1BRlI7UUFHSkMsS0FBSyxFQUFFO01BSEgsQ0FBUjtJQU9ILENBUkQsTUFRTztNQUNISixLQUFLLEdBQUc7UUFDSkUsV0FBVyxFQUFFO01BRFQsQ0FBUjtJQUdIOztJQUVELG9CQUNJO01BQUssRUFBRSxFQUFHLGNBQWFuQixFQUFHLEVBQTFCO01BQTZCLG1CQUFpQlM7SUFBOUMsR0FDTTdCLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxFQUFFLElBQUk7TUFDaEIsSUFBSVcsT0FBTyxHQUFJWCxFQUFFLENBQUNMLEtBQUgsSUFBWUEsS0FBM0I7TUFDQSxvQkFDSTtRQUFLLFNBQVMsRUFBQyxzQkFBZjtRQUFzQyxHQUFHLEVBQUcsYUFBWXVCLEVBQUcsSUFBR2xCLEVBQUUsQ0FBQ0wsS0FBTSxFQUF2RTtRQUEwRSxLQUFLLEVBQUV3QztNQUFqRixnQkFDSTtRQUNJLFNBQVMsRUFBQyxrQkFEZDtRQUVJLElBQUksRUFBQyxPQUZUO1FBR0ksRUFBRSxFQUFHLFNBQVFqQixFQUFHLElBQUdsQixFQUFFLENBQUNMLEtBQU0sRUFIaEM7UUFJSSxLQUFLLEVBQUVLLEVBQUUsQ0FBQ0wsS0FKZDtRQUtJLE9BQU8sRUFBRWdCLE9BTGI7UUFNSSxRQUFRLEVBQUUsS0FBS1AsWUFObkI7UUFPSSxRQUFRLEVBQUU4QixVQVBkO1FBUUksSUFBSSxFQUFFUixJQUFJLEdBQUdBLElBQUgsR0FBVyxTQUFRUixFQUFHO01BUnBDLEVBREosRUFXSyxLQUFLOEMsUUFBTCxDQUFjaEUsRUFBZCxFQUFrQmtCLEVBQWxCLEVBQXNCVyxNQUF0QixFQUE4QnFDLE1BQTlCLEVBQXNDbkMsSUFBdEMsQ0FYTCxDQURKO0lBZUgsQ0FqQkMsQ0FETixFQW9CS0UsU0FBUyxpQkFDVjtNQUFHLFNBQVMsRUFBQztJQUFiLEdBQTRCVCxLQUE1QixDQXJCSixDQURKO0VBMkJIOztBQXpHa0Q7QUE0R3ZEdUMsU0FBUyxDQUFDcEIsWUFBVixHQUF5QjtFQUNyQmhCLGNBQWMsRUFBRztBQURJLENBQXpCO0FBSUFvQyxTQUFTLENBQUNuQixTQUFWLEdBQXNCO0VBQ2xCMUIsRUFBRSxFQUFFaEMscUVBQTJCNEQ7QUFEYixDQUF0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRWUsTUFBTXVCLEtBQU4sU0FBb0JsRix3REFBcEIsQ0FBb0M7RUFFL0NLLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2YsTUFBTUEsS0FBTjtJQUVBLEtBQUtXLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7RUFDSDs7RUFFRGlFLGtCQUFrQixDQUFDQyxTQUFELEVBQVlDLFNBQVosRUFBdUJDLFFBQXZCLEVBQWlDO0lBQy9DLElBQUksS0FBS2hGLEtBQUwsQ0FBV0UsS0FBWCxLQUFxQjRFLFNBQVMsQ0FBQzVFLEtBQW5DLEVBQTBDO01BQ3RDLEtBQUsrRSxLQUFMLENBQVcvRSxLQUFYLEdBQW1CLEtBQUtGLEtBQUwsQ0FBV0UsS0FBOUI7SUFDSDtFQUNKOztFQUVEUyxZQUFZLENBQUNhLEVBQUQsRUFBSztJQUNiLEtBQUt4QixLQUFMLENBQVcwQixRQUFYLENBQW9CRixFQUFwQjtFQUNIOztFQUVESSxNQUFNLEdBQUc7SUFFTCxrQkFBc0YsS0FBSzVCLEtBQTNGO0lBQUEsSUFBSTtNQUFDMEIsUUFBRDtNQUFXeEIsS0FBWDtNQUFrQjJCLFNBQWxCO01BQTZCRSxLQUE3QjtNQUFvQ0csY0FBcEM7TUFBb0RnRDtJQUFwRCxDQUFKO0lBQUEsSUFBOEUvQyxJQUE5RTs7SUFDQSxJQUFJSyxTQUFTLEdBQUssS0FBS3hDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsT0FBMUIsS0FBc0NOLEtBQUssS0FBSyxFQUFsRTtJQUNBLElBQUlvRCxVQUFVLEdBQUcsS0FBS25GLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsV0FBMUIsSUFBeUNSLFNBQXpDLEdBQXFELGNBQXRFO0lBQ0EsSUFBSXVELG9CQUFvQixHQUFHLEtBQUtwRixLQUFMLENBQVdxQyxjQUFYLENBQTBCLG9CQUExQixJQUFrRDZDLGtCQUFsRCxHQUF1RSx3QkFBbEc7SUFDQSxvQkFDSTtNQUFLLFNBQVMsRUFBRUU7SUFBaEIsZ0JBQ0k7TUFDSSxTQUFTLEVBQUcsR0FBRUQsVUFBVyxJQUFHM0MsU0FBUyxHQUFHLE9BQUgsR0FBYSxFQUFHLEVBRHpEO01BRUksR0FBRyxFQUFFNkMsSUFBSSxJQUFJO1FBQUMsS0FBS0osS0FBTCxHQUFhSSxJQUFiO01BQWtCLENBRnBDO01BR0ksWUFBWSxFQUFFbkYsS0FIbEI7TUFJSSxtQkFBaUJnQyxjQUpyQjtNQUtJLFFBQVEsRUFBRSxLQUFLdkI7SUFMbkIsR0FNUXdCLElBTlIsRUFESixFQVNLSyxTQUFTLGlCQUNWO01BQUcsU0FBUyxFQUFDO0lBQWIsR0FBNEJULEtBQTVCLENBVkosQ0FESjtFQWdCSDs7QUF4QzhDO0FBMkNuRDZDLEtBQUssQ0FBQzFCLFlBQU4sR0FBcUI7RUFDakJoQixjQUFjLEVBQUc7QUFEQSxDQUFyQjs7Ozs7Ozs7Ozs7Ozs7OztBQzFEQTs7QUFFQSxNQUFNdEMsT0FBTyxHQUFHLENBQUM7RUFBQ2tDLFFBQUQ7RUFBV3dELGNBQWMsR0FBRyxLQUE1QjtFQUFtQ3pELFNBQVMsR0FBRztBQUEvQyxDQUFELGtCQUNaO0VBQU0sU0FBUyxFQUFFQSxTQUFqQjtFQUNNLHVCQUF1QixFQUFFO0lBQUUwRCxNQUFNLEVBQUVELGNBQWMsR0FBR3hELFFBQUgsYUFBR0EsUUFBSCx1QkFBR0EsUUFBUSxDQUFFMEQsT0FBVixDQUFrQixLQUFsQixFQUF5QixRQUF6QixDQUFILEdBQXdDMUQ7RUFBaEU7QUFEL0IsRUFESjs7QUFJQSxpRUFBZWxDLE9BQWY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFTyxNQUFNK0YsY0FBYyxHQUFJQyxHQUFELElBQVM7RUFDbkMsSUFBSUMsTUFBTSxHQUFHLENBQUMsRUFBZDs7RUFDQSxJQUFJRCxHQUFHLENBQUNFLFlBQVIsRUFBc0I7SUFDbEIsR0FBRztNQUNDRCxNQUFNLElBQUlELEdBQUcsQ0FBQ0csU0FBZDtJQUNILENBRkQsUUFFU0gsR0FBRyxHQUFHQSxHQUFHLENBQUNFLFlBRm5COztJQUdBLE9BQU8sQ0FBQ0QsTUFBRCxDQUFQO0VBQ0g7QUFDSixDQVJNO0FBVUEsTUFBTUcsYUFBYSxHQUFJQyxLQUFELElBQVc7RUFDcEMsSUFBRyxDQUFDQSxLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYQSxLQUFLLEdBQUdBLEtBQUssR0FBRyxJQUFoQjtFQUNBLE9BQU9SLHNEQUFNLENBQUNRLEtBQUQsQ0FBYjtBQUNILENBSk07QUFNQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDRCxLQUFELEVBQVFFLFNBQVIsS0FBc0I7RUFDdkQsSUFBRyxDQUFDRixLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYQSxLQUFLLEdBQUdBLEtBQUssR0FBRyxJQUFoQjtFQUNBLE9BQU9SLHNEQUFNLENBQUNRLEtBQUQsQ0FBTixDQUFjRyxFQUFkLENBQWlCRCxTQUFqQixDQUFQO0FBQ0gsQ0FKTTtBQU1BLE1BQU1FLFdBQVcsR0FBRyxDQUFDSixLQUFELEVBQVFLLE1BQU0sR0FBRyxpQkFBakIsS0FBdUM7RUFDOUQsSUFBRyxDQUFDTCxLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYLE9BQU9ELGFBQWEsQ0FBQ0MsS0FBRCxDQUFiLENBQXFCSyxNQUFyQixDQUE0QkEsTUFBNUIsQ0FBUDtBQUNILENBSE07QUFLQSxNQUFNQyxtQkFBbUIsR0FBSVgsR0FBRCxJQUFTO0VBQ3hDLElBQUlZLEdBQUcsR0FBRyxFQUFWOztFQUNBLEtBQUssSUFBSUMsR0FBVCxJQUFnQmIsR0FBaEIsRUFBcUI7SUFDakIsSUFBSVksR0FBRyxJQUFJLEVBQVgsRUFBZTtNQUNYQSxHQUFHLElBQUksR0FBUDtJQUNIOztJQUNEQSxHQUFHLElBQUlDLEdBQUcsR0FBRyxHQUFOLEdBQVlDLGtCQUFrQixDQUFDZCxHQUFHLENBQUNhLEdBQUQsQ0FBSixDQUFyQztFQUNIOztFQUVELE9BQU9ELEdBQVA7QUFDSCxDQVZNO0FBWUEsTUFBTUcsVUFBVSxHQUFHLE1BQU07RUFDNUIsSUFBSUMsR0FBRyxHQUFRbEIsNENBQUcsQ0FBQ21CLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBakIsQ0FBbEI7RUFDQSxJQUFJQyxLQUFLLEdBQU1KLEdBQUcsQ0FBQ0ssTUFBSixDQUFXLElBQVgsQ0FBZjtFQUNBLElBQUlDLFFBQVEsR0FBR04sR0FBRyxDQUFDTSxRQUFKLEVBQWY7RUFDQSxJQUFJQyxPQUFPLEdBQUlILEtBQUssQ0FBQzNFLGNBQU4sQ0FBcUIsU0FBckIsSUFBa0MyRSxLQUFLLENBQUMsU0FBRCxDQUF2QyxHQUFxRCxJQUFwRTs7RUFDQSxJQUFHRSxRQUFRLElBQUksSUFBWixJQUFvQkEsUUFBUSxJQUFJLEVBQW5DLEVBQXNDO0lBQ2xDQyxPQUFPLElBQUssSUFBR0QsUUFBUyxFQUF4QjtFQUNIOztFQUNELE9BQU9DLE9BQVA7QUFDSCxDQVRNO0FBV0EsTUFBTUMsTUFBTSxHQUFJQyxJQUFELElBQVM7RUFDM0JBLElBQUksR0FBR0EsSUFBSSxDQUFDQyxXQUFMLEVBQVA7RUFDQSxPQUFPRCxJQUFJLENBQUM3QixPQUFMLENBQWEsZ0JBQWIsRUFBOEIsR0FBOUIsQ0FBUDtBQUNILENBSE07QUFLQSxNQUFNK0IsZUFBZSxHQUFHLE1BQU07RUFDakMsSUFBRyxPQUFPVixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQVEsR0FBRUEsTUFBTSxDQUFDQyxRQUFQLENBQWdCVSxNQUFPLGdCQUFqQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxrQkFBa0IsR0FBRyxNQUFNO0VBQ3BDLElBQUlYLFFBQVEsR0FBRyxFQUFmOztFQUNBLElBQUcsT0FBT0QsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QkMsUUFBUSxHQUFHRCxNQUFNLENBQUNDLFFBQWxCLENBRDhCLENBRTlCOztJQUNBLElBQUlELE1BQU0sQ0FBQ2EsR0FBWCxFQUNJWixRQUFRLEdBQUdELE1BQU0sQ0FBQ2EsR0FBUCxDQUFXWixRQUF0QjtFQUNQOztFQUNELE9BQU9BLFFBQVA7QUFDSCxDQVRNO0FBV0EsTUFBTWEsU0FBUyxHQUFHLE1BQU07RUFDM0IsSUFBRyxPQUFPZCxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQlUsTUFBdkI7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTUksa0JBQWtCLEdBQUcsTUFBTTtFQUNwQyxJQUFHLE9BQU9mLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDL0IsT0FBT0EsTUFBTSxDQUFDQyxRQUFQLENBQWdCZSxRQUF2QjtFQUNGOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxjQUFjLEdBQUcsTUFBTTtFQUNoQyxJQUFHLE9BQU9qQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBdkI7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTWdCLG9CQUFvQixHQUFHLE1BQU07RUFDdEMsSUFBRyxPQUFPbEIsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNtQixtQkFBUCxJQUE4QixFQUFyQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxlQUFlLEdBQUlDLFdBQUQsSUFBaUI7RUFDNUMsSUFBRyxPQUFPckIsTUFBUCxLQUFrQixXQUFyQixFQUFpQztJQUM3QixPQUFRLEdBQUVBLE1BQU0sQ0FBQ3NCLFlBQWEsR0FBRUQsV0FBWSxFQUE1QztFQUNIOztFQUNELE9BQU8sSUFBSyxFQUFaO0FBQ0gsQ0FMTTtBQU9BLE1BQU1FLGlCQUFpQixHQUFHLENBQUMzQixHQUFELEVBQU12RyxLQUFOLEtBQWdCO0VBQzdDLElBQUcsT0FBTzJHLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUJBLE1BQU0sQ0FBQ3dCLFlBQVAsQ0FBb0JDLE9BQXBCLENBQTRCN0IsR0FBNUIsRUFBaUN2RyxLQUFqQztFQUNIO0FBQ0osQ0FKTTtBQU1BLE1BQU1xSSxtQkFBbUIsR0FBRyxDQUFDOUIsR0FBRCxFQUFNK0IsUUFBTixLQUFtQjtFQUNsRCxJQUFHLE9BQU8zQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLElBQUluRCxHQUFHLEdBQUdtRCxNQUFNLENBQUN3QixZQUFQLENBQW9CSSxPQUFwQixDQUE0QmhDLEdBQTVCLENBQVY7O0lBQ0EsSUFBRytCLFFBQUgsRUFBWTtNQUNSRSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxvQ0FBbUNsQyxHQUFJLEVBQXBEO01BQ0FtQyxzQkFBc0IsQ0FBQ25DLEdBQUQsQ0FBdEI7SUFDSDs7SUFDRCxPQUFPL0MsR0FBUDtFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBVk07QUFZQSxNQUFNa0Ysc0JBQXNCLEdBQUluQyxHQUFELElBQVM7RUFDM0MsSUFBRyxPQUFPSSxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCQSxNQUFNLENBQUN3QixZQUFQLENBQW9CUSxVQUFwQixDQUErQnBDLEdBQS9CO0VBQ0g7QUFDSixDQUpNO0FBTUEsTUFBTXFDLHNCQUFzQixHQUFHLE1BQU07RUFDeEMsSUFBRyxPQUFPakMsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNrQyxzQkFBZDtFQUNIOztFQUNELE9BQU8sS0FBUDtBQUNILENBTE07QUFPQSxNQUFNQyx1QkFBdUIsR0FBSXRGLEdBQUQsSUFBUztFQUM1QyxJQUFHLE9BQU9tRCxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCQSxNQUFNLENBQUNrQyxzQkFBUCxHQUFnQ3JGLEdBQWhDO0VBQ0g7QUFDSixDQUpNO0FBTUEsTUFBTXVGLHNCQUFzQixHQUFHLE1BQU07RUFDeEMsSUFBSUMsUUFBUSxHQUFHLElBQWY7O0VBQ0EsSUFBRyxPQUFPQyxTQUFQLEtBQXFCLFdBQXhCLEVBQXFDO0lBQ2pDRCxRQUFRLEdBQUlDLFNBQVMsQ0FBQ0MsU0FBVixJQUF1QkQsU0FBUyxDQUFDQyxTQUFWLENBQW9CLENBQXBCLENBQXhCLElBQW1ERCxTQUFTLENBQUNELFFBQTdELElBQXlFQyxTQUFTLENBQUNFLFlBQTlGO0VBQ0g7O0VBQ0QsT0FBT0gsUUFBUDtBQUNILENBTk07QUFRQSxNQUFNSSxhQUFhLEdBQUlDLE1BQUQsSUFBWTtFQUNyQyxJQUFHdkYsTUFBTSxDQUFDd0YsSUFBUCxDQUFZRCxNQUFaLEVBQW9CRSxNQUFwQixHQUE2QixDQUFoQyxFQUFtQztJQUMvQixNQUFNQyxVQUFVLEdBQUcxRixNQUFNLENBQUN3RixJQUFQLENBQVlELE1BQVosRUFBb0IsQ0FBcEIsQ0FBbkI7SUFDQSxNQUFNSSxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QkgsVUFBeEIsQ0FBbEI7SUFDQSxJQUFJQyxTQUFKLEVBQWU5QyxNQUFNLENBQUNpRCxRQUFQLENBQWdCLENBQWhCLEVBQW1CbkUsY0FBYyxDQUFDZ0UsU0FBRCxDQUFqQztFQUNsQjtBQUNKLENBTk07QUFRQSxNQUFNSSxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRVCxNQUFSLEtBQW1CO0VBQ3hDLElBQUdTLEtBQUssSUFBSVQsTUFBWixFQUFvQjtJQUNoQixPQUFPQSxNQUFNLENBQUNTLEtBQUQsQ0FBYjtFQUNIOztFQUNELE9BQU8sRUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxZQUFZLEdBQUcsQ0FBQ0MsT0FBRCxFQUFVQyxPQUFWLEtBQXNCO0VBQzlDLE1BQU1DLEtBQUssR0FBR3BHLE1BQU0sQ0FBQ3dGLElBQVAsQ0FBWVUsT0FBWixDQUFkO0VBQ0EsTUFBTUcsS0FBSyxHQUFHckcsTUFBTSxDQUFDd0YsSUFBUCxDQUFZVyxPQUFaLENBQWQ7O0VBRUEsSUFBSUMsS0FBSyxDQUFDWCxNQUFOLEtBQWlCWSxLQUFLLENBQUNaLE1BQTNCLEVBQW1DO0lBQy9CLE9BQU8sS0FBUDtFQUNIOztFQUVELEtBQUssSUFBSWhELEdBQVQsSUFBZ0IyRCxLQUFoQixFQUF1QjtJQUNuQixJQUFJRixPQUFPLENBQUN6RCxHQUFELENBQVAsS0FBaUIwRCxPQUFPLENBQUMxRCxHQUFELENBQTVCLEVBQW1DO01BQy9CLE9BQU8sS0FBUDtJQUNIO0VBQ0o7O0VBRUQsT0FBTyxJQUFQO0FBQ0gsQ0FmTTtBQWlCQSxNQUFNNkQsV0FBVyxHQUFHLENBQUNDLEVBQUQsRUFBS0MsRUFBTCxLQUN2QkQsRUFBRSxDQUFDZCxNQUFILEtBQWNlLEVBQUUsQ0FBQ2YsTUFBakIsSUFBMkJjLEVBQUUsQ0FBQ0UsS0FBSCxDQUFTLENBQUNDLENBQUQsRUFBSUMsR0FBSixLQUFZVixZQUFZLENBQUNTLENBQUQsRUFBSUYsRUFBRSxDQUFDRyxHQUFELENBQU4sQ0FBakMsQ0FEeEI7QUFHQSxNQUFNQyxPQUFPLEdBQUloRixHQUFELElBQVM7RUFDNUIsT0FBTzVCLE1BQU0sQ0FBQ3dGLElBQVAsQ0FBWTVELEdBQVosRUFBaUI2RCxNQUFqQixLQUE0QixDQUFuQztBQUNILENBRk07QUFLQSxNQUFNb0IsZUFBZSxHQUFJckUsR0FBRCxJQUFTO0VBQ3BDLE9BQU9BLEdBQUcsQ0FDTHNFLFFBREUsQ0FDTyxRQURQLEVBRUZ0RixPQUZFLENBRU0sS0FGTixFQUVhLEdBRmIsRUFHRkEsT0FIRSxDQUdNLEtBSE4sRUFHYSxHQUhiLEVBSUZBLE9BSkUsQ0FJTSxJQUpOLEVBSVksRUFKWixDQUFQO0FBS0gsQ0FOTTtBQVFBLE1BQU11RixZQUFZLEdBQUcsT0FDeEJDLEVBRHdCLEVBRXhCQyxrQkFBa0IsR0FBRyxDQUZHLEtBR3ZCO0VBQ0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxrQkFBcEIsRUFBd0NDLENBQUMsRUFBekMsRUFBNkM7SUFDekMsSUFBSSxNQUFNRixFQUFFLEVBQVosRUFBZ0I7TUFDWixPQUFPLElBQVA7SUFDSDtFQUNKOztFQUVELE9BQU8sS0FBUDtBQUNILENBWE07QUFhQSxNQUFNRyxpQkFBaUIsR0FBRyxNQUFNO0VBQ25DLElBQUcsT0FBT3RFLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUIsT0FBT0EsTUFBTSxDQUFDdUUsNkJBQVAsSUFBd0NDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRiw2QkFBM0Q7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdE9BLE1BQU1HLG9CQUFvQixHQUFHLFVBQTdCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsVUFBN0I7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxjQUFqQztBQUNBLE1BQU1DLDJCQUEyQixHQUFHLGlCQUFwQztBQUNBLE1BQU1DLGdDQUFnQyxHQUFHLENBQUNILG9CQUFELEVBQXVCQyx3QkFBdkIsRUFBaURDLDJCQUFqRCxDQUF6QztBQUNBLE1BQU1FLHdCQUF3QixHQUFHLEtBQWpDO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsSUFBaEM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxPQUFsQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLFVBQXJDO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsU0FBM0I7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxjQUE5QjtBQUNQO0FBRWUsTUFBTUMsWUFBTixDQUFtQjtFQUU5Qm5NLFdBQVcsQ0FBQ29NLFNBQUQsRUFBWUMsT0FBTyxHQUFHLEVBQXRCLEVBQTBCO0lBQUEscUdBY25CQyxDQUFELElBQU87TUFDcEIsS0FBS0MsY0FBTCxDQUFvQmxGLGdEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQTFCLElBQXNDb0ssQ0FBdEM7TUFDQSxLQUFLRSxZQUFMLENBQWtCbEwsUUFBUSxDQUFDZ0wsQ0FBQyxDQUFDNUssRUFBSCxDQUExQixJQUFvQzRLLENBQXBDO01BQ0EsSUFBR0EsQ0FBQyxDQUFDaEssY0FBRixDQUFpQixvQkFBakIsQ0FBSCxFQUNJLEtBQUssSUFBSW1LLENBQVQsSUFBY0gsQ0FBQyxDQUFDSSxrQkFBaEIsRUFBb0M7UUFDaEMsS0FBS0MsS0FBTCxDQUFXckwsUUFBUSxDQUFDbUwsQ0FBQyxDQUFDL0ssRUFBSCxDQUFuQixJQUE2QitLLENBQTdCOztRQUNBLEtBQUtHLGNBQUwsQ0FBb0JILENBQUMsQ0FBQ0ksWUFBdEI7TUFDSDtJQUNSLENBdEJvQzs7SUFBQSxzR0F3Qm5CLE1BQU07TUFDcEIsS0FBSyxJQUFJUCxDQUFULElBQWMsS0FBS0YsU0FBbkIsRUFBOEI7UUFDMUIsS0FBS1EsY0FBTCxDQUFvQk4sQ0FBcEI7TUFDSDtJQUNKLENBNUJvQzs7SUFBQSxvR0E4QnBCQSxDQUFELElBQU87TUFDbkIsT0FBT1YsZ0NBQWdDLENBQUNuTCxRQUFqQyxDQUEwQzZMLENBQUMsQ0FBQ3BMLElBQTVDLENBQVA7SUFDSCxDQWhDb0M7O0lBQUEsbUdBa0N0QixDQUFDb0wsQ0FBRCxFQUFJUSxNQUFKLEtBQWU7TUFDMUIsSUFBSTNNLEtBQUssR0FBRzJNLE1BQU0sQ0FBQzNNLEtBQVAsQ0FBYTRNLEtBQWIsQ0FBbUIsR0FBbkIsRUFBd0J4TSxHQUF4QixDQUE0QkYsQ0FBQyxJQUFJaUIsUUFBUSxDQUFDakIsQ0FBRCxDQUF6QyxDQUFaOztNQUNBLEtBQUssSUFBSTJNLEVBQVQsSUFBZTdNLEtBQWYsRUFBc0I7UUFDbEIsSUFBSSxDQUFDbU0sQ0FBQyxDQUFDVyxNQUFGLENBQVMxTSxHQUFULENBQWEyTSxDQUFDLElBQUlBLENBQUMsQ0FBQ3hMLEVBQXBCLEVBQXdCakIsUUFBeEIsQ0FBaUN1TSxFQUFqQyxDQUFMLEVBQ0ksT0FBTyxLQUFQO01BQ1A7O01BQ0QsT0FBTyxJQUFQO0lBQ0gsQ0F6Q29DOztJQUFBLG9HQTJDcEJWLENBQUQsSUFBTztNQUNuQixJQUFJNUssRUFBRSxHQUFHeUwsTUFBTSxDQUFDQyxTQUFQLENBQWlCZCxDQUFqQixJQUFzQkEsQ0FBdEIsR0FBMEJBLENBQUMsQ0FBQzVLLEVBQXJDO01BQ0EsSUFBSTJMLENBQUMsR0FBRyxLQUFLaEIsT0FBTCxDQUFhM0ssRUFBYixLQUFvQixJQUE1QjtNQUNBLE9BQU8yTCxDQUFDLEdBQUdBLENBQUgsR0FBTyxJQUFmO0lBQ0gsQ0EvQ29DOztJQUFBLGdHQWlEeEJQLE1BQUQsSUFBWTtNQUNwQixPQUFPQSxNQUFNLENBQUMzTSxLQUFQLEtBQWlCLEVBQXhCO0lBQ0gsQ0FuRG9DOztJQUFBLHNHQXFEbkIsQ0FBQzJNLE1BQUQsRUFBU25KLEdBQVQsS0FBaUI7TUFDL0IsT0FBT21KLE1BQU0sQ0FBQzNNLEtBQVAsQ0FBYTRNLEtBQWIsQ0FBbUIsR0FBbkIsRUFBd0J0TSxRQUF4QixDQUFpQ2tELEdBQWpDLENBQVA7SUFDSCxDQXZEb0M7O0lBQUEsNEdBeURaMkosSUFBRCxJQUFVO01BQzlCLElBQUlDLGdCQUFnQixHQUFHRCxJQUFJLENBQUNFLHNCQUFMLEtBQWdDM0Isd0JBQWhDLEdBQTJELElBQTNELEdBQWtFLEtBQXpGOztNQUNBLE1BQU00QixvQkFBb0IsR0FBRyxLQUFLQyxhQUFMLENBQW1CSixJQUFJLENBQUNLLGtCQUF4QixDQUE3Qjs7TUFDQSxJQUFJLENBQUNGLG9CQUFMLEVBQTJCO1FBQ3ZCRixnQkFBZ0IsR0FBR0QsSUFBSSxDQUFDTSxvQkFBTCxLQUE4QjdCLHlCQUE5QixHQUEwRCxLQUExRCxHQUFrRSxJQUFyRjtNQUNILENBRkQsTUFFTztRQUNILFFBQVF1QixJQUFJLENBQUNNLG9CQUFiO1VBQ0ksS0FBSzdCLHlCQUFMO1lBQWdDO2NBQzVCLEtBQUssSUFBSThCLFdBQVQsSUFBd0JQLElBQUksQ0FBQ1EsYUFBN0IsRUFBNEM7Z0JBQ3hDLElBQUlSLElBQUksQ0FBQ0Usc0JBQUwsS0FBZ0MzQix3QkFBcEMsRUFDSTBCLGdCQUFnQixHQUFHQSxnQkFBZ0IsSUFBSSxLQUFLUSxlQUFMLENBQXFCTixvQkFBckIsRUFBMkNJLFdBQTNDLENBQXZDLENBREosS0FHSU4sZ0JBQWdCLEdBQUdBLGdCQUFnQixJQUFJLEtBQUtRLGVBQUwsQ0FBcUJOLG9CQUFyQixFQUEyQ0ksV0FBM0MsQ0FBdkM7Y0FDUDtZQUNKO1lBQ0c7O1VBQ0osS0FBSzdCLDRCQUFMO1lBQW1DO2NBQy9CLEtBQUssSUFBSTZCLFdBQVQsSUFBd0JQLElBQUksQ0FBQ1EsYUFBN0IsRUFBNEM7Z0JBQ3hDLElBQUlSLElBQUksQ0FBQ0Usc0JBQUwsS0FBZ0MzQix3QkFBcEMsRUFDSTBCLGdCQUFnQixHQUFHQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUtRLGVBQUwsQ0FBcUJOLG9CQUFyQixFQUEyQ0ksV0FBM0MsQ0FBeEMsQ0FESixLQUdJTixnQkFBZ0IsR0FBR0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLUSxlQUFMLENBQXFCTixvQkFBckIsRUFBMkNJLFdBQTNDLENBQXhDO2NBQ1A7WUFDSjtZQUNHO1FBbEJSO01Bb0JILENBMUI2QixDQTJCOUI7OztNQUNBLElBQUlQLElBQUksQ0FBQ1UsVUFBTCxLQUFvQi9CLGtCQUF4QixFQUE0QztRQUN4QyxPQUFPc0IsZ0JBQVA7TUFDSCxDQTlCNkIsQ0ErQjlCOzs7TUFDQSxPQUFPLENBQUNBLGdCQUFSO0lBQ0gsQ0ExRm9DOztJQUFBLGtHQTRGdEJqQixDQUFELElBQU87TUFDakIsTUFBTVEsTUFBTSxHQUFHLEtBQUtZLGFBQUwsQ0FBbUJwQixDQUFuQixDQUFmOztNQUVBLElBQUlBLENBQUMsQ0FBQzJCLEtBQUYsS0FBWS9CLHFCQUFoQixFQUF1QztRQUNuQyxJQUFJLENBQUNJLENBQUMsQ0FBQzRCLFNBQVAsRUFBa0IsT0FBTyxJQUFQO1FBQ2xCLElBQUksQ0FBQ3BCLE1BQUwsRUFBYSxPQUFPLEtBQVA7UUFDYixJQUFJLENBQUMsS0FBS3FCLFNBQUwsQ0FBZXJCLE1BQWYsQ0FBTCxFQUE2QixPQUFPLEtBQVA7UUFDN0IsSUFBSSxLQUFLc0IsYUFBTCxDQUFtQjlCLENBQW5CLEtBQXlCLENBQUMsS0FBSytCLFlBQUwsQ0FBa0IvQixDQUFsQixFQUFxQlEsTUFBckIsQ0FBOUIsRUFDSSxPQUFPLEtBQVA7UUFDSixPQUFPLElBQVA7TUFDSCxDQVZnQixDQVlqQjs7O01BQ0EsS0FBSyxJQUFJd0IsTUFBVCxJQUFtQmhDLENBQUMsQ0FBQ2lDLFlBQXJCLEVBQW1DO1FBQy9CLElBQUksQ0FBQyxLQUFLQyxxQkFBTCxDQUEyQixLQUFLN0IsS0FBTCxDQUFXMkIsTUFBWCxDQUEzQixDQUFMLEVBQXFEO1VBQ2pEO1FBQ0osSUFBSSxDQUFDaEMsQ0FBQyxDQUFDNEIsU0FBUCxFQUFrQixPQUFPLElBQVA7UUFDbEIsSUFBSSxDQUFDcEIsTUFBTCxFQUFhLE9BQU8sS0FBUDtRQUNiLElBQUksQ0FBQyxLQUFLcUIsU0FBTCxDQUFlckIsTUFBZixDQUFMLEVBQTZCLE9BQU8sS0FBUDtRQUM3QixJQUFJLEtBQUtzQixhQUFMLENBQW1COUIsQ0FBbkIsS0FBeUIsQ0FBQyxLQUFLK0IsWUFBTCxDQUFrQi9CLENBQWxCLEVBQXFCUSxNQUFyQixDQUE5QixFQUNJLE9BQU8sS0FBUDtRQUNKLE9BQU8sSUFBUDtNQUNIOztNQUVELE9BQU8sSUFBUDtJQUNILENBckhvQzs7SUFBQSxxR0F1SG5CUixDQUFELElBQU87TUFDcEIsSUFBSW1DLEdBQUcsR0FBRyxLQUFLQyxXQUFMLENBQWlCcEMsQ0FBakIsQ0FBVjs7TUFDQSxJQUFHQSxDQUFDLENBQUNoSyxjQUFGLENBQWlCLG9CQUFqQixDQUFILEVBQ0ksS0FBSyxJQUFJZ0wsSUFBVCxJQUFpQmhCLENBQUMsQ0FBQ0ksa0JBQW5CLEVBQXVDO1FBQ25DO1FBQ0ErQixHQUFHLEdBQUdBLEdBQUcsSUFBSSxLQUFLRSxjQUFMLENBQW9CckIsSUFBSSxDQUFDVCxZQUF6QixDQUFiO01BQ0g7TUFDTCxPQUFPNEIsR0FBUDtJQUNILENBL0hvQzs7SUFBQSw0R0FpSVpHLFFBQUQsSUFBYztNQUFBOztNQUNsQyxJQUFJSCxHQUFHLEdBQUcsRUFBVjtNQUNBLE1BQU1JLElBQUksR0FBR3hILGdEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBQW5CO01BQ0EsSUFBSTRNLFVBQVUsNEJBQUcsS0FBS0MsZUFBTCxDQUFxQjNPLElBQXJCLENBQTBCaU4sQ0FBQyxJQUFJQSxDQUFDLENBQUMyQixXQUFGLEtBQWtCSixRQUFRLENBQUNsTixFQUExRCxDQUFILDBEQUFHLHNCQUErRHZCLEtBQWhGOztNQUVBLElBQUcyTyxVQUFILEVBQWU7UUFDWCxJQUFJRixRQUFRLENBQUMxTixJQUFULEtBQWtCc0ssb0JBQXRCLEVBQTRDc0QsVUFBVSxHQUFHQSxVQUFVLEtBQUssT0FBZixHQUF5QixLQUF6QixHQUFpQyxDQUFDLENBQUNBLFVBQWhEO1FBQzVDLElBQUlGLFFBQVEsQ0FBQzFOLElBQVQsS0FBa0J5SywyQkFBbEIsSUFBaURpRCxRQUFRLENBQUMxTixJQUFULEtBQWtCdUssb0JBQXZFLEVBQTZGcUQsVUFBVSxHQUFHeE4sUUFBUSxDQUFDd04sVUFBRCxDQUFyQjtRQUM3RixJQUFJRixRQUFRLENBQUMxTixJQUFULEtBQWtCd0ssd0JBQXRCLEVBQWdEb0QsVUFBVSxHQUFHQSxVQUFVLENBQUMvQixLQUFYLENBQWlCLEdBQWpCLEVBQXNCeE0sR0FBdEIsQ0FBMEIwTyxNQUFNLElBQUkzTixRQUFRLENBQUMyTixNQUFELENBQTVDLEtBQXlELEVBQXRFO01BQ25EOztNQUVEUixHQUFHLENBQUNJLElBQUQsQ0FBSCxHQUFhQyxVQUFVLElBQUksRUFBM0I7TUFDQSxJQUFHRixRQUFRLENBQUMxTixJQUFULEtBQWtCd0ssd0JBQWxCLElBQThDK0MsR0FBRyxDQUFDSSxJQUFELENBQUgsS0FBYyxFQUEvRCxFQUFtRUosR0FBRyxDQUFDSSxJQUFELENBQUgsR0FBWSxFQUFaO01BQ25FLElBQUdELFFBQVEsQ0FBQ3RNLGNBQVQsQ0FBd0Isb0JBQXhCLENBQUgsRUFDSSxLQUFLLElBQUlnTCxJQUFULElBQWlCc0IsUUFBUSxDQUFDbEMsa0JBQTFCLEVBQThDO1FBQzFDO1FBQ0EsSUFBSXdDLElBQUksR0FBRyxLQUFLQyxxQkFBTCxDQUEyQjdCLElBQUksQ0FBQ1QsWUFBaEMsQ0FBWDs7UUFDQTRCLEdBQUcsbUNBQU9BLEdBQVAsR0FBZVMsSUFBZixDQUFIO01BQ0g7TUFDTCxPQUFPVCxHQUFQO0lBQ0gsQ0FySm9DOztJQUFBLG9HQXVKckIsTUFBTTtNQUNsQixJQUFJQSxHQUFHLEdBQUcsRUFBVjtNQUNBLEtBQUtyQyxTQUFMLENBQWVnRCxPQUFmLENBQXVCOUMsQ0FBQyxJQUFJO1FBQ3hCLElBQUk0QyxJQUFJLEdBQUcsS0FBS0MscUJBQUwsQ0FBMkI3QyxDQUEzQixDQUFYOztRQUNBbUMsR0FBRyxtQ0FBT0EsR0FBUCxHQUFjUyxJQUFkLENBQUg7TUFDSCxDQUhEO01BSUEsT0FBT1QsR0FBUDtJQUNILENBOUpvQzs7SUFBQSxnR0FnS3pCLE1BQU07TUFDZCxJQUFJQSxHQUFHLEdBQUcsSUFBVjs7TUFDQSxLQUFLLElBQUluQyxDQUFULElBQWMsS0FBS0YsU0FBbkIsRUFBOEI7UUFDMUJxQyxHQUFHLEdBQUdBLEdBQUcsSUFBSSxLQUFLRSxjQUFMLENBQW9CckMsQ0FBcEIsQ0FBYjtNQUNIOztNQUNELE9BQU9tQyxHQUFQO0lBQ0gsQ0F0S29DOztJQUFBLHdHQXdLaEJ2TSxJQUFELElBQVU7TUFDMUIsTUFBTTJNLElBQUksR0FBR3hILGdEQUFNLENBQUNuRixJQUFELENBQW5CO01BQ0EsT0FBTyxLQUFLcUssY0FBTCxDQUFvQnJLLElBQXBCLEtBQTZCLEtBQUtxSyxjQUFMLENBQW9Cc0MsSUFBcEIsQ0FBN0IsSUFBMkQsSUFBbEU7SUFDSCxDQTNLb0M7O0lBQUEsc0dBNktsQm5OLEVBQUQsSUFBUTtNQUN0QixPQUFPLEtBQUs4SyxZQUFMLENBQWtCbEwsUUFBUSxDQUFDSSxFQUFELENBQTFCLEtBQW1DLElBQTFDO0lBQ0gsQ0EvS29DOztJQUNqQyxLQUFLMEssU0FBTCxHQUFpQkEsU0FBakI7SUFDQSxLQUFLMkMsZUFBTCxHQUF1QjFDLE9BQXZCO0lBQ0EsS0FBS0EsT0FBTCxHQUFlLEVBQWYsQ0FIaUMsQ0FJakM7O0lBQ0EsS0FBSyxJQUFJZ0IsQ0FBVCxJQUFjLEtBQUswQixlQUFuQixFQUNJLEtBQUsxQyxPQUFMLENBQWFnQixDQUFDLENBQUMyQixXQUFmLElBQThCM0IsQ0FBOUI7O0lBQ0osS0FBS2QsY0FBTCxHQUFzQixFQUF0QjtJQUNBLEtBQUtDLFlBQUwsR0FBb0IsRUFBcEIsQ0FSaUMsQ0FTakM7O0lBQ0EsS0FBS0csS0FBTCxHQUFhLEVBQWI7O0lBQ0EsS0FBSzBDLGVBQUw7RUFDSDs7QUFkNkI7Ozs7Ozs7Ozs7O0FDYmxDOzs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNUSxZQUFZLEdBQUcsUUFBMkU7RUFBQSxJQUExRTtJQUFFM0ssS0FBRjtJQUFTNEssSUFBVDtJQUFlbEIsUUFBZjtJQUF5QjlNLFNBQXpCO0lBQW9DWSxVQUFwQztJQUFnRFk7RUFBaEQsQ0FBMEU7RUFBQSxJQUFYbEIsSUFBVzs7RUFFNUYsb0JBQ0ksMkRBQUMsMERBQUQsNEVBQ1E4QyxLQURSLEVBRVE5QyxJQUZSO0lBR0ksa0JBQWtCLEVBQUVOLFNBSHhCO0lBSUksSUFBSSxFQUFFdUYsdURBQU0sQ0FBQ3VILFFBQVEsQ0FBQzFNLElBQVYsQ0FKaEI7SUFLSSxjQUFjLEVBQUcsR0FBRW1GLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBQWdCLFFBTDdDO0lBTUksRUFBRSxFQUFFbUYsdURBQU0sQ0FBQ3VILFFBQVEsQ0FBQzFNLElBQVYsQ0FOZDtJQU9JLEtBQUssRUFBRWdELEtBQUssQ0FBQy9FLEtBUGpCO0lBUUksUUFBUSxFQUFFdUMsVUFSZDtJQVNJLFFBQVEsRUFBRVksVUFUZDtJQVVJLFFBQVEsRUFBRTRCLEtBQUssQ0FBQ3ZELFFBVnBCO0lBV0ksV0FBVyxFQUFFaU4sUUFBUSxDQUFDbUI7RUFYMUIsR0FESjtBQWVILENBakJEOztBQW1CQSxNQUFNQyxzQkFBc0IsR0FBRyxTQUFnRTtFQUFBLElBQS9EO0lBQUU5SyxLQUFGO0lBQVM0SyxJQUFUO0lBQWVsQixRQUFmO0lBQXlCbE0sVUFBekI7SUFBcUNZO0VBQXJDLENBQStEO0VBQUEsSUFBWGxCLElBQVc7O0VBRTNGLG9CQUNJLDJEQUFDLDBEQUFELDRFQUNROEMsS0FEUixFQUVROUMsSUFGUjtJQUdJLElBQUksRUFBRWlGLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBSGhCO0lBSUksY0FBYyxFQUFHLEdBQUVtRix1REFBTSxDQUFDdUgsUUFBUSxDQUFDMU0sSUFBVixDQUFnQixRQUo3QztJQUtJLEVBQUUsRUFBRW1GLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBTGQ7SUFNSSxXQUFXLEVBQUUsSUFOakI7SUFPSSxLQUFLLEVBQUVnRCxLQUFLLENBQUMvRSxLQVBqQjtJQVFJLFFBQVEsRUFBRXVDLFVBUmQ7SUFTSSxRQUFRLEVBQUVZLFVBVGQ7SUFVSSxRQUFRLEVBQUU0QixLQUFLLENBQUN2RDtFQVZwQixHQURKO0FBYUUsQ0FmTjs7QUFpQkEsTUFBTXNPLGVBQWUsR0FBRyxTQUFnRTtFQUFBLElBQS9EO0lBQUUvSyxLQUFGO0lBQVM0SyxJQUFUO0lBQWVsQixRQUFmO0lBQXlCbE0sVUFBekI7SUFBcUNZO0VBQXJDLENBQStEO0VBQUEsSUFBWGxCLElBQVc7O0VBRXBGLG9CQUFRLDJEQUFDLHdEQUFELDRFQUNBOEMsS0FEQSxFQUVBOUMsSUFGQTtJQUdKLElBQUksRUFBRWlGLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBSFI7SUFJSixjQUFjLEVBQUcsR0FBRW1GLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBQWdCLFFBSnJDO0lBS0osRUFBRSxFQUFFbUYsdURBQU0sQ0FBQ3VILFFBQVEsQ0FBQzFNLElBQVYsQ0FMTjtJQU1KLFdBQVcsRUFBRSxJQU5UO0lBT0osS0FBSyxFQUFFZ0QsS0FBSyxDQUFDL0UsS0FQVDtJQVFKLFFBQVEsRUFBRXVDLFVBUk47SUFTSixRQUFRLEVBQUVZLFVBVE47SUFVSixRQUFRLEVBQUU0QixLQUFLLENBQUN2RDtFQVZaLEdBQVI7QUFZSCxDQWREOztBQWdCQSxNQUFNdU8sbUJBQW1CLEdBQUcsU0FBMkU7RUFBQSxJQUExRTtJQUFFaEwsS0FBRjtJQUFTNEssSUFBVDtJQUFlbEIsUUFBZjtJQUF5QmxNLFVBQXpCO0lBQXFDWSxVQUFyQztJQUFpRDZNO0VBQWpELENBQTBFO0VBQUEsSUFBWC9OLElBQVc7O0VBRW5HLE1BQU1nTyxZQUFZLEdBQUkzTyxFQUFELElBQVE7SUFDekIsTUFBTTRPLGdCQUFnQixHQUFHNU8sRUFBRSxDQUFDUixNQUFILENBQVVkLEtBQW5DLENBRHlCLENBRXpCOztJQUNBLElBQUlnUSxTQUFTLEdBQUcsQ0FBWixJQUFpQkUsZ0JBQWdCLENBQUMzRyxNQUFqQixHQUEwQnlHLFNBQS9DLEVBQTBEO01BQ3RELE9BQU8sSUFBUDtJQUNIOztJQUNELE9BQU9qTCxLQUFLLENBQUN2RCxRQUFOLENBQWVGLEVBQWYsQ0FBUDtFQUNILENBUEQ7O0VBUUEsb0JBQ0ksMkRBQUMsNkRBQUQsNEVBQ1F5RCxLQURSLEVBRVE5QyxJQUZSO0lBR0ksRUFBRSxFQUFFaUYsdURBQU0sQ0FBQ3VILFFBQVEsQ0FBQzFNLElBQVYsQ0FIZDtJQUlJLElBQUksRUFBRW1GLHVEQUFNLENBQUN1SCxRQUFRLENBQUMxTSxJQUFWLENBSmhCO0lBS0ksY0FBYyxFQUFHLEdBQUVtRix1REFBTSxDQUFDdUgsUUFBUSxDQUFDMU0sSUFBVixDQUFnQixRQUw3QztJQU1JLEtBQUssRUFBRWdELEtBQUssQ0FBQy9FLEtBTmpCO0lBT0ksUUFBUSxFQUFFdUMsVUFQZDtJQVFJLFFBQVEsRUFBRVksVUFSZDtJQVNJLFFBQVEsRUFBRThNO0VBVGQsR0FESjtBQWFILENBdkJEOztBQXlCQSxNQUFNRSxZQUFZLEdBQUdoTixVQUFVLElBQzNCQSxVQUFVLEdBQUduRCxLQUFLLElBQUtBLEtBQUssR0FBR29RLFNBQUgsR0FBZSxVQUFqQyxHQUErQyxNQUFNLENBQUUsQ0FEckU7O0FBR0EsTUFBTUMsa0JBQWtCLGdCQUFHN1EsdURBQUEsQ0FBaUIsQ0FBQztFQUNJK1EsY0FESjtFQUVJQyxXQUZKO0VBR0lDLGVBSEo7RUFJSTlPLFNBQVMsR0FBRyxnQkFKaEI7RUFLSStPLDBCQUEwQixHQUFHLG9CQUxqQztFQU1JQywrQkFBK0IsR0FBRywwQkFOdEM7RUFPSUMsaUNBQWlDLEdBQUUsNEJBUHZDO0VBUUlDLFFBQVEsR0FBRyxLQVJmO0VBU0lDLEtBQUssR0FBRyxLQVRaO0VBVUlDLFVBQVUsR0FBRyxRQVZqQjtFQVdJQyxvQkFBb0IsR0FBRyxVQVgzQjtFQVlJQyx3QkFBd0IsR0FBRyxzQkFaL0I7RUFhSUMsdUJBQXVCLEdBQUcsSUFiOUI7RUFjSUMsT0FBTyxHQUFJcEUsQ0FBRCxJQUFPdkUsT0FBTyxDQUFDQyxHQUFSLENBQVksZUFBWixFQUE2QnNFLENBQTdCLENBZHJCO0VBZUlxRSx1QkFBdUIsR0FBRztBQWY5QixDQUFELEVBZ0JJQyxHQWhCSixLQWdCWTtFQUVwRCxJQUFJQyxNQUFNLEdBQUcsSUFBYjtFQUVBLE1BQU1DLFdBQVcsR0FBR2xDLDZDQUFNLENBQUMsRUFBRCxDQUExQjtFQUNBLE1BQU1tQyxPQUFPLEdBQUduQyw2Q0FBTSxDQUFDLElBQUQsQ0FBdEI7RUFDQSxNQUFNLENBQUNuRCxPQUFELEVBQVV1RixVQUFWLElBQXdCbkMsK0NBQVEsQ0FBQyxFQUFELENBQXRDO0VBRUFGLGdEQUFTLENBQUMsTUFBTTtJQUNac0MsaUJBQWlCO0VBQ3BCLENBRlEsRUFFTixDQUFDbkIsY0FBRCxDQUZNLENBQVQsQ0FSb0QsQ0FhcEQ7O0VBQ0FoQiwwREFBbUIsQ0FBQzhCLEdBQUQsRUFBTSxPQUFPO0lBQzVCTSxRQUFRLEdBQUc7TUFDUEgsT0FBTyxDQUFDSSxPQUFSLENBQWdCQyxhQUFoQixDQUE4QixJQUFJQyxLQUFKLENBQVUsUUFBVixFQUFvQjtRQUFFQyxVQUFVLEVBQUUsSUFBZDtRQUFvQkMsT0FBTyxFQUFFO01BQTdCLENBQXBCLENBQTlCO0lBQ0g7O0VBSDJCLENBQVAsQ0FBTixDQUFuQjs7RUFNQSxNQUFNTixpQkFBaUIsR0FBRyxNQUFNO0lBQzVCLE1BQU1PLEVBQUUsR0FBRyxJQUFJakcsNERBQUosQ0FBaUJ1RSxjQUFqQixFQUFpQ0MsV0FBakMsQ0FBWDtJQUNBaUIsVUFBVSxDQUFDUSxFQUFFLENBQUNDLGFBQUgsRUFBRCxDQUFWO0VBQ0gsQ0FIRDs7RUFLQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQztJQUFDQyxJQUFEO0lBQU9qRixJQUFQO0lBQWF2TDtFQUFiLENBQUQsa0JBQ2QsMkRBQUMsb0RBQUQ7SUFBTyxJQUFJLEVBQUV3USxJQUFiO0lBQW1CLFlBQVksRUFBRTtNQUFDcFMsS0FBSyxFQUFFO0lBQVI7RUFBakMsR0FDSyxDQUFDO0lBQUMrRSxLQUFLLEVBQUU7TUFBQy9FO0lBQUQ7RUFBUixDQUFELEtBQ0dxUyxlQUFlLENBQUNsRixJQUFELEVBQU9tRixTQUFTLENBQUN0UyxLQUFELEVBQVFtTixJQUFSLENBQWhCLEVBQStCdkwsUUFBL0IsQ0FGdkIsQ0FESjs7RUFRQSxNQUFNMlEsS0FBSyxHQUFHLENBQUM7SUFBRXhRO0VBQUYsQ0FBRCxrQkFDViwyREFBQyxvREFBRDtJQUFPLElBQUksRUFBRUEsSUFBYjtJQUFtQixZQUFZLEVBQUU7TUFBRUYsS0FBSyxFQUFFLElBQVQ7TUFBZTJRLE9BQU8sRUFBRTtJQUF4QjtFQUFqQyxHQUNLLENBQUM7SUFBRTdDLElBQUksRUFBRTtNQUFFOU4sS0FBRjtNQUFTMlE7SUFBVDtFQUFSLENBQUQsS0FDRzNRLEtBQUssSUFBSTJRLE9BQVQsZ0JBQW1CO0lBQUssU0FBUyxFQUFFdkI7RUFBaEIsR0FBMkNwUCxLQUEzQyxDQUFuQixHQUE2RSxJQUZyRixDQURKOztFQVFBLE1BQU15USxTQUFTLEdBQUcsQ0FBQ3RTLEtBQUQsRUFBUW1OLElBQVIsS0FBaUI7SUFDL0IsSUFBSUwsTUFBTSxHQUFHSyxJQUFJLENBQUNRLGFBQWxCOztJQUVBLElBQUk4RSxLQUFLLENBQUNDLE9BQU4sQ0FBYzFTLEtBQWQsQ0FBSixFQUEwQjtNQUN0QixJQUFJLENBQUNBLEtBQUssQ0FBQ3VKLE1BQVgsRUFBbUIsT0FBTyxLQUFQO01BQ25CLElBQUkrRSxHQUFHLEdBQUduQixJQUFJLENBQUNFLHNCQUFMLEtBQWdDLEtBQTFDO01BQ0FQLE1BQU0sQ0FBQ21DLE9BQVAsQ0FBZ0IvTyxDQUFELElBQU87UUFDbEIsSUFBSWlOLElBQUksQ0FBQ0Usc0JBQUwsS0FBZ0MsS0FBcEMsRUFBMkM7VUFDdkNpQixHQUFHLEdBQUdBLEdBQUcsSUFBSXRPLEtBQUssQ0FBQ00sUUFBTixDQUFlYSxRQUFRLENBQUNqQixDQUFELENBQXZCLENBQWI7UUFDSCxDQUZELE1BRU87VUFDSDtVQUNBb08sR0FBRyxHQUFHQSxHQUFHLElBQUl0TyxLQUFLLENBQUNNLFFBQU4sQ0FBZWEsUUFBUSxDQUFDakIsQ0FBRCxDQUF2QixDQUFiO1FBQ0g7TUFDSixDQVBEO01BUUEsT0FBT29PLEdBQVA7SUFDSDs7SUFDRCxPQUFPeEIsTUFBTSxDQUFDeE0sUUFBUCxDQUFnQk4sS0FBSyxDQUFDNEssUUFBTixFQUFoQixDQUFQO0VBQ0gsQ0FqQkQ7O0VBbUJBLE1BQU15SCxlQUFlLEdBQUcsQ0FBQ2xGLElBQUQsRUFBT3dGLFVBQVAsRUFBbUIvUSxRQUFuQixLQUFnQztJQUNwRCxJQUFJdUwsSUFBSSxDQUFDVSxVQUFMLEtBQW9CLFNBQXhCLEVBQW1DO01BQy9CLElBQUlWLElBQUksQ0FBQ00sb0JBQUwsS0FBOEIsT0FBbEMsRUFBMkM7UUFDdkMsSUFBR2tGLFVBQUgsRUFBZSxPQUFPL1EsUUFBUDtRQUNmLE9BQU8yUCxXQUFXLENBQUNLLE9BQVosQ0FBb0J6RSxJQUFJLENBQUNULFlBQUwsQ0FBa0JuTCxFQUF0QyxDQUFQO1FBQ0EsT0FBTyxJQUFQO01BQ0gsQ0FMOEIsQ0FNL0I7OztNQUNBLElBQUcsQ0FBQ29SLFVBQUosRUFBZTtRQUNYLE9BQU8vUSxRQUFQO01BQ0g7O01BQ0QsT0FBTzJQLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQnpFLElBQUksQ0FBQ1QsWUFBTCxDQUFrQm5MLEVBQXRDLENBQVA7TUFDQSxPQUFPLElBQVA7SUFDSCxDQWJtRCxDQWNwRDs7O0lBQ0EsSUFBSTRMLElBQUksQ0FBQ00sb0JBQUwsS0FBOEIsT0FBbEMsRUFBMkM7TUFDdkMsSUFBRyxDQUFDa0YsVUFBSixFQUFnQixPQUFPL1EsUUFBUDtNQUNoQixPQUFPMlAsV0FBVyxDQUFDSyxPQUFaLENBQW9CekUsSUFBSSxDQUFDVCxZQUFMLENBQWtCbkwsRUFBdEMsQ0FBUDtNQUNBLE9BQU8sSUFBUDtJQUNIOztJQUNELElBQUdvUixVQUFILEVBQWUsT0FBTy9RLFFBQVA7SUFDZixPQUFPMlAsV0FBVyxDQUFDSyxPQUFaLENBQW9CekUsSUFBSSxDQUFDVCxZQUFMLENBQWtCbkwsRUFBdEMsQ0FBUDtJQUNBLE9BQU8sSUFBUDtFQUNILENBdkJEOztFQXlCQSxNQUFNOEMsUUFBUSxHQUFJOEgsQ0FBRCxJQUFPO0lBQ3BCO0lBQ0EsTUFBTXlHLGdCQUFnQixHQUFHQyxNQUFNLENBQUNDLFlBQVAsQ0FBb0IsR0FBcEIsQ0FBekIsQ0FGb0IsQ0FFK0I7SUFFbkQ7O0lBQ0EsTUFBTUMsR0FBRyxHQUFHckosUUFBUSxDQUFDc0osYUFBVCxDQUF1QixLQUF2QixDQUFaO0lBQ0FELEdBQUcsQ0FBQ0UsU0FBSixHQUFnQjlHLENBQUMsQ0FBQzFKLEtBQWxCO0lBQ0EsTUFBTUEsS0FBSyxHQUFHc1EsR0FBRyxDQUFDRyxXQUFKLElBQW1CSCxHQUFHLENBQUNJLFNBQXZCLElBQW9DLEVBQWxEO0lBRUEsTUFBTUMsU0FBUyxHQUFHakgsQ0FBQyxDQUFDNEIsU0FBRixHQUFlLEdBQUV0TCxLQUFNLEdBQUVtUSxnQkFBaUIsVUFBMUMsR0FBc0RuUSxLQUF4RTtJQUNBLE1BQU00USxTQUFTLEdBQUksY0FBYW5NLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQVMsb0JBQW1CbUYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FBUztBQUN6RixrQ0FBa0NxUixTQUFVO0FBQzVDLG9DQUZRO0lBSUEsT0FBT0MsU0FBUDtFQUNILENBZkQ7O0VBaUJBLE1BQU1DLFVBQVUsR0FBRyxDQUFDbkgsQ0FBRCxFQUFJRCxPQUFKLEtBQWdCO0lBQy9CLE1BQU13QyxJQUFJLEdBQUd4SCx1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUFuQjtJQUNBLElBQUcsQ0FBQ21LLE9BQU8sQ0FBQy9KLGNBQVIsQ0FBdUJ1TSxJQUF2QixDQUFKLEVBQWtDLE9BQU8sS0FBUDtJQUNsQyxNQUFNL0IsTUFBTSxHQUFHVCxPQUFPLENBQUN3QyxJQUFELENBQXRCLENBSCtCLENBSS9COztJQUNBLElBQUcrRCxLQUFLLENBQUNDLE9BQU4sQ0FBYy9GLE1BQWQsQ0FBSCxFQUEwQixPQUFPQSxNQUFNLENBQUNwRCxNQUFQLEdBQWdCLENBQXZCO0lBQzFCLElBQUksT0FBT29ELE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0MsT0FBT0EsTUFBTSxDQUFDcEQsTUFBUCxHQUFnQixDQUF2QjtJQUNoQyxJQUFHLE9BQU9vRCxNQUFQLEtBQWtCLFFBQXJCLEVBQStCLE9BQU9BLE1BQU0sR0FBRyxDQUFoQjtJQUMvQixJQUFHLE9BQU9BLE1BQVAsS0FBa0IsU0FBckIsRUFBZ0MsT0FBT0EsTUFBUDtJQUNoQyxPQUFPLEtBQVA7RUFDSCxDQVZEOztFQVlBLE1BQU00RyxjQUFjLEdBQUlwSCxDQUFELElBQU87SUFDMUIsSUFBSXFILGNBQWMsR0FBR3JILENBQUMsQ0FBQ1csTUFBdkIsQ0FEMEIsQ0FFMUI7O0lBQ0EsTUFBTXZLLFVBQVUsR0FBRyxDQUFDMk8sdUJBQUQsSUFBNEJvQyxVQUFVLENBQUNuSCxDQUFELEVBQUlELE9BQUosQ0FBekQsQ0FIMEIsQ0FJMUI7O0lBQ0EsSUFBSUMsQ0FBQyxDQUFDcEwsSUFBRixLQUFXLE1BQWYsRUFBdUI7TUFBQTs7TUFDbkIsb0JBQ0ksMkRBQUMsMkNBQUQ7UUFBVSxHQUFHLEVBQUVtRyx1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSDtNQUFyQixnQkFDSTtRQUFLLEdBQUcsRUFBRTBSLEVBQUUsSUFBSWxDLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQnpGLENBQUMsQ0FBQzVLLEVBQXRCLElBQTRCa1MsRUFBNUM7UUFBZ0QsU0FBUyxFQUFFL0M7TUFBM0QsZ0JBQ0ksMkRBQUMsaURBQUQ7UUFBUyxTQUFTLEVBQUVDO01BQXBCLEdBQXNEdE0sUUFBUSxDQUFDOEgsQ0FBRCxDQUE5RCxDQURKLGVBRUk7UUFBSyxTQUFTLEVBQUV5RTtNQUFoQixnQkFDSSwyREFBQyxvREFBRDtRQUFPLElBQUksRUFBRTFKLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQW5CO1FBQ08sUUFBUSxFQUFFb0ssQ0FEakI7UUFFTyxVQUFVLEVBQUU1SixVQUZuQjtRQUdPLFVBQVUsRUFBRTRKLENBQUMsQ0FBQzRCLFNBSHJCO1FBSU8sUUFBUSxFQUFFb0MsWUFBWSxDQUFDaEUsQ0FBQyxDQUFDNEIsU0FBSCxDQUo3QjtRQUtPLFNBQVMsRUFBRTJCO01BTGxCLEVBREosZUFRSSwyREFBQyxLQUFEO1FBQU8sSUFBSSxFQUFFeEksdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUg7TUFBbkIsRUFSSixDQUZKLENBREosRUFjSywwQkFBQW9LLENBQUMsQ0FBQ0ksa0JBQUYsZ0ZBQXNCaEQsTUFBdEIsSUFBK0IsQ0FBL0IsSUFDRDRDLENBQUMsQ0FBQ0ksa0JBQUYsQ0FBcUJuTSxHQUFyQixDQUEwQmtNLENBQUQsaUJBRWpCLDJEQUFDLFNBQUQ7UUFBVyxHQUFHLEVBQUVBLENBQUMsQ0FBQy9LLEVBQWxCO1FBQXNCLElBQUksRUFBRTJGLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQWxDO1FBQTRDLElBQUksRUFBRXVLO01BQWxELEdBQ0tpSCxjQUFjLENBQUNqSCxDQUFDLENBQUNJLFlBQUgsQ0FEbkIsQ0FGUixDQWZKLENBREo7SUF5Qkg7O0lBQ0QsSUFBSVAsQ0FBQyxDQUFDcEwsSUFBRixLQUFXLFVBQWYsRUFBMkI7TUFBQTs7TUFDdkIsb0JBQ0ksMkRBQUMsMkNBQUQ7UUFBVSxHQUFHLEVBQUVtRyx1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSDtNQUFyQixnQkFDSTtRQUFLLEdBQUcsRUFBRTBSLEVBQUUsSUFBSWxDLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQnpGLENBQUMsQ0FBQzVLLEVBQXRCLElBQTRCa1MsRUFBNUM7UUFBZ0QsU0FBUyxFQUFFL0M7TUFBM0QsZ0JBQ0ksMkRBQUMsaURBQUQ7UUFBUyxTQUFTLEVBQUVDO01BQXBCLEdBQXNEdE0sUUFBUSxDQUFDOEgsQ0FBRCxDQUE5RCxDQURKLGVBRUk7UUFBSyxTQUFTLEVBQUV5RTtNQUFoQixnQkFDSSwyREFBQyxvREFBRDtRQUNPLFFBQVEsRUFBRVQsWUFBWSxDQUFDaEUsQ0FBQyxDQUFDNEIsU0FBSCxDQUQ3QjtRQUVPLElBQUksRUFBRTdHLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBRm5CO1FBR08sRUFBRSxFQUFFbUYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FIakI7UUFJTyxRQUFRLEVBQUVRLFVBSmpCO1FBS08sUUFBUSxFQUFFNEosQ0FBQyxDQUFDNEIsU0FMbkI7UUFNTyxTQUFTLEVBQUM7TUFOakIsRUFESixlQVFJLDJEQUFDLEtBQUQ7UUFBTyxJQUFJLEVBQUU3Ryx1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSDtNQUFuQixFQVJKLENBRkosQ0FESixFQWNLLDJCQUFBb0ssQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0JoRCxNQUF0QixJQUErQixDQUEvQixJQUNENEMsQ0FBQyxDQUFDSSxrQkFBRixDQUFxQm5NLEdBQXJCLENBQTBCa00sQ0FBRCxpQkFFakIsMkRBQUMsU0FBRDtRQUFXLEdBQUcsRUFBRUEsQ0FBQyxDQUFDL0ssRUFBbEI7UUFBc0IsSUFBSSxFQUFFMkYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FBbEM7UUFBNEMsSUFBSSxFQUFFdUs7TUFBbEQsR0FDS2lILGNBQWMsQ0FBQ2pILENBQUMsQ0FBQ0ksWUFBSCxDQURuQixDQUZSLENBZkosQ0FESjtJQXlCSDs7SUFDRCxJQUFJUCxDQUFDLENBQUNwTCxJQUFGLEtBQVcsVUFBZixFQUEyQjtNQUFBOztNQUN2QixvQkFDSSwyREFBQywyQ0FBRDtRQUFVLEdBQUcsRUFBRW1HLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFIO01BQXJCLGdCQUNJO1FBQUssR0FBRyxFQUFFMFIsRUFBRSxJQUFJbEMsV0FBVyxDQUFDSyxPQUFaLENBQW9CekYsQ0FBQyxDQUFDNUssRUFBdEIsSUFBNEJrUyxFQUE1QztRQUFnRCxLQUFLLEVBQUU7VUFBQ2pQLE9BQU8sRUFBRTtRQUFWLENBQXZEO1FBQ0ssU0FBUyxFQUFFa007TUFEaEIsZ0JBRUksMkRBQUMsaURBQUQ7UUFBUyxTQUFTLEVBQUcscUJBQW9CQywrQkFBZ0M7TUFBekUsR0FDS3RNLFFBQVEsQ0FBQzhILENBQUQsQ0FEYixDQUZKLGVBS0k7UUFBSyxTQUFTLEVBQUV5RTtNQUFoQixnQkFDSTtRQUFLLFNBQVMsRUFBQztNQUFmLGdCQUNJLDJEQUFDLG9EQUFEO1FBQ08sSUFBSSxFQUFFMUosdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FEbkI7UUFFTyxFQUFFLEVBQUVtRix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUZqQjtRQUdPLFFBQVEsRUFBRW9PLFlBQVksQ0FBQ2hFLENBQUMsQ0FBQzRCLFNBQUgsQ0FIN0I7UUFJTyxRQUFRLEVBQUV4TCxVQUpqQjtRQUtPLFFBQVEsRUFBRTRKLENBQUMsQ0FBQzRCLFNBTG5CO1FBTU8sSUFBSSxFQUFDLFVBTlo7UUFPTyxTQUFTLEVBQUMsa0JBUGpCO1FBUU8sU0FBUyxFQUFDO01BUmpCLEVBREosZUFVSTtRQUFPLFNBQVMsRUFBQyxrQkFBakI7UUFBb0MsT0FBTyxFQUFFN0csdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUg7TUFBbkQsRUFWSixlQVdJLDJEQUFDLEtBQUQ7UUFBTyxJQUFJLEVBQUVtRix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSDtNQUFuQixFQVhKLENBREosQ0FMSixDQURKLEVBc0JLLDJCQUFBb0ssQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0JoRCxNQUF0QixJQUErQixDQUEvQixJQUNENEMsQ0FBQyxDQUFDSSxrQkFBRixDQUFxQm5NLEdBQXJCLENBQTBCa00sQ0FBRCxpQkFFakIsMkRBQUMsU0FBRDtRQUFXLEdBQUcsRUFBRUEsQ0FBQyxDQUFDL0ssRUFBbEI7UUFBc0IsSUFBSSxFQUFFMkYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FBbEM7UUFBNEMsSUFBSSxFQUFFdUs7TUFBbEQsR0FDS2lILGNBQWMsQ0FBQ2pILENBQUMsQ0FBQ0ksWUFBSCxDQURuQixDQUZSLENBdkJKLENBREo7SUFpQ0g7O0lBQ0QsSUFBSVAsQ0FBQyxDQUFDcEwsSUFBRixLQUFXLGlCQUFmLEVBQWtDO01BQUE7O01BQzlCLE1BQU1aLE9BQU8sR0FBR3FULGNBQWMsQ0FBQ3BULEdBQWYsQ0FBbUJvRCxHQUFHLEtBQUs7UUFBQ2YsS0FBSyxFQUFHZSxHQUFHLENBQUNmLEtBQWI7UUFBb0J6QyxLQUFLLEVBQUd3RCxHQUFHLENBQUNqQztNQUFoQyxDQUFMLENBQXRCLENBQWhCO01BQ0Esb0JBQ0ksMkRBQUMsMkNBQUQ7UUFBVSxHQUFHLEVBQUUyRix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSDtNQUFyQixnQkFDSTtRQUFLLEdBQUcsRUFBRW1GLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQWhCO1FBQTBCLEdBQUcsRUFBRTBSLEVBQUUsSUFBSWxDLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQnpGLENBQUMsQ0FBQzVLLEVBQXRCLElBQTRCa1MsRUFBakU7UUFBcUUsU0FBUyxFQUFFL0M7TUFBaEYsZ0JBQ0ksMkRBQUMsaURBQUQ7UUFBUyxTQUFTLEVBQUVDO01BQXBCLEdBQ0t0TSxRQUFRLENBQUM4SCxDQUFELENBRGIsQ0FESixlQUlJO1FBQUssU0FBUyxFQUFFeUU7TUFBaEIsZ0JBQ0ksMkRBQUMsb0RBQUQ7UUFBTyxJQUFJLEVBQUUxSix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUFuQjtRQUNPLE9BQU8sRUFBRTVCLE9BRGhCO1FBRU8sUUFBUSxFQUFFZ00sQ0FGakI7UUFHTyxRQUFRLEVBQUVnRSxZQUFZLENBQUNoRSxDQUFDLENBQUM0QixTQUFILENBSDdCO1FBSU8sVUFBVSxFQUFFeEwsVUFKbkI7UUFLTyxVQUFVLEVBQUU0SixDQUFDLENBQUM0QixTQUxyQjtRQU1PLFNBQVMsRUFBRThCO01BTmxCLEVBREosZUFRSSwyREFBQyxLQUFEO1FBQU8sSUFBSSxFQUFFM0ksdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUg7TUFBbkIsRUFSSixDQUpKLENBREosRUFnQkssMkJBQUFvSyxDQUFDLENBQUNJLGtCQUFGLGtGQUFzQmhELE1BQXRCLElBQStCLENBQS9CLElBQ0Q0QyxDQUFDLENBQUNJLGtCQUFGLENBQXFCbk0sR0FBckIsQ0FBMEJrTSxDQUFELGlCQUVqQiwyREFBQyxTQUFEO1FBQVcsR0FBRyxFQUFFQSxDQUFDLENBQUMvSyxFQUFsQjtRQUFzQixJQUFJLEVBQUUyRix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUFsQztRQUE0QyxJQUFJLEVBQUV1SztNQUFsRCxHQUNLaUgsY0FBYyxDQUFDakgsQ0FBQyxDQUFDSSxZQUFILENBRG5CLENBRlIsQ0FqQkosQ0FESjtJQTJCSDs7SUFDRCxJQUFJUCxDQUFDLENBQUNwTCxJQUFGLEtBQVcsVUFBZixFQUEyQjtNQUFBOztNQUN2QixNQUFNWixPQUFPLEdBQUdxVCxjQUFjLENBQUNwVCxHQUFmLENBQW1Cb0QsR0FBRyxLQUFLO1FBQUNmLEtBQUssRUFBR2UsR0FBRyxDQUFDZixLQUFiO1FBQW9CekMsS0FBSyxFQUFHd0QsR0FBRyxDQUFDakM7TUFBaEMsQ0FBTCxDQUF0QixDQUFoQjtNQUNBLG9CQUNJLDJEQUFDLDJDQUFEO1FBQVUsR0FBRyxFQUFFMkYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUg7TUFBckIsZ0JBQ0k7UUFBSyxHQUFHLEVBQUUwUixFQUFFLElBQUlsQyxXQUFXLENBQUNLLE9BQVosQ0FBb0J6RixDQUFDLENBQUM1SyxFQUF0QixJQUE0QmtTLEVBQTVDO1FBQWdELFNBQVMsRUFBRS9DO01BQTNELGdCQUNJLDJEQUFDLGlEQUFEO1FBQVMsU0FBUyxFQUFFQztNQUFwQixHQUNLdE0sUUFBUSxDQUFDOEgsQ0FBRCxDQURiLENBREosZUFJSTtRQUFLLFNBQVMsRUFBRXlFO01BQWhCLGdCQUNJLDJEQUFDLG9EQUFEO1FBQU8sSUFBSSxFQUFFMUosdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FBbkI7UUFDTyxPQUFPLEVBQUU1QixPQURoQjtRQUVPLFFBQVEsRUFBRWdNLENBRmpCO1FBR08sUUFBUSxFQUFFZ0UsWUFBWSxDQUFDaEUsQ0FBQyxDQUFDNEIsU0FBSCxDQUg3QjtRQUlPLFVBQVUsRUFBRXhMLFVBSm5CO1FBS08sVUFBVSxFQUFFNEosQ0FBQyxDQUFDNEIsU0FMckI7UUFNTyxTQUFTLEVBQUUrQjtNQU5sQixFQURKLGVBU0ksMkRBQUMsS0FBRDtRQUFPLElBQUksRUFBRTVJLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFIO01BQW5CLEVBVEosQ0FKSixDQURKLEVBaUJLLDJCQUFBb0ssQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0JoRCxNQUF0QixJQUErQixDQUEvQixJQUNENEMsQ0FBQyxDQUFDSSxrQkFBRixDQUFxQm5NLEdBQXJCLENBQTBCa00sQ0FBRCxpQkFFakIsMkRBQUMsU0FBRDtRQUFXLEdBQUcsRUFBRUEsQ0FBQyxDQUFDL0ssRUFBbEI7UUFBc0IsSUFBSSxFQUFFMkYsdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUgsQ0FBbEM7UUFBNEMsSUFBSSxFQUFFdUs7TUFBbEQsR0FDS2lILGNBQWMsQ0FBQ2pILENBQUMsQ0FBQ0ksWUFBSCxDQURuQixDQUZSLENBbEJKLENBREo7SUE0Qkg7O0lBQ0QsSUFBSVAsQ0FBQyxDQUFDcEwsSUFBRixLQUFXLGNBQWYsRUFBK0I7TUFBQTs7TUFDM0IsTUFBTVosT0FBTyxHQUFHcVQsY0FBYyxDQUFDcFQsR0FBZixDQUFtQm9ELEdBQUcsS0FBSztRQUFDZixLQUFLLEVBQUdlLEdBQUcsQ0FBQ2YsS0FBYjtRQUFvQnpDLEtBQUssRUFBR3dELEdBQUcsQ0FBQ2pDO01BQWhDLENBQUwsQ0FBdEIsQ0FBaEI7TUFDQSxvQkFDSSwyREFBQywyQ0FBRDtRQUFVLEdBQUcsRUFBRTJGLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFIO01BQXJCLGdCQUNJO1FBQUssR0FBRyxFQUFFMFIsRUFBRSxJQUFJbEMsV0FBVyxDQUFDSyxPQUFaLENBQW9CekYsQ0FBQyxDQUFDNUssRUFBdEIsSUFBNEJrUyxFQUE1QztRQUFnRCxTQUFTLEVBQUUvQztNQUEzRCxnQkFDSSwyREFBQyxpREFBRDtRQUFTLFNBQVMsRUFBRUM7TUFBcEIsR0FDS3RNLFFBQVEsQ0FBQzhILENBQUQsQ0FEYixDQURKLGVBSUk7UUFBSyxTQUFTLEVBQUV5RTtNQUFoQixnQkFDSSwyREFBQyxvREFBRDtRQUFPLElBQUksRUFBRTFKLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQW5CO1FBQ08sU0FBUyxFQUFFNk8saUNBRGxCO1FBRU8sUUFBUSxFQUFFVCxZQUFZLENBQUNoRSxDQUFDLENBQUM0QixTQUFILENBRjdCO1FBR08sT0FBTyxFQUFFNU4sT0FIaEI7UUFJTyxRQUFRLEVBQUVnTSxDQUpqQjtRQUtPLFNBQVMsRUFBRUEsQ0FBQyxDQUFDdUgsbUJBTHBCO1FBTU8sVUFBVSxFQUFFblIsVUFObkI7UUFPTyxVQUFVLEVBQUU0SixDQUFDLENBQUM0QixTQVByQjtRQVFPLFNBQVMsRUFBRWdDO01BUmxCLEVBREosZUFXSSwyREFBQyxLQUFEO1FBQU8sSUFBSSxFQUFFN0ksdURBQU0sQ0FBQ2lGLENBQUMsQ0FBQ3BLLElBQUg7TUFBbkIsRUFYSixDQUpKLENBREosRUFtQkssMkJBQUFvSyxDQUFDLENBQUNJLGtCQUFGLGtGQUFzQmhELE1BQXRCLElBQStCLENBQS9CLElBQ0Q0QyxDQUFDLENBQUNJLGtCQUFGLENBQXFCbk0sR0FBckIsQ0FBMEJrTSxDQUFELGlCQUVqQiwyREFBQyxTQUFEO1FBQVcsR0FBRyxFQUFFQSxDQUFDLENBQUMvSyxFQUFsQjtRQUFzQixJQUFJLEVBQUUyRix1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUFsQztRQUE0QyxJQUFJLEVBQUV1SztNQUFsRCxHQUNLaUgsY0FBYyxDQUFDakgsQ0FBQyxDQUFDSSxZQUFILENBRG5CLENBRlIsQ0FwQkosQ0FESjtJQThCSDs7SUFDRCxPQUFPLElBQVA7RUFDSCxDQTdMRDs7RUErTEEsTUFBTWlILFNBQVMsR0FBSXhILENBQUQsSUFBTztJQUNyQixPQUFPLENBQUMsQ0FBQ29GLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQnpGLENBQUMsQ0FBQzVLLEVBQXRCLENBQVQ7RUFDSCxDQUZEOztFQUlBLE1BQU1xUyxnQkFBZ0IsR0FBRyxDQUFDekgsQ0FBRCxFQUFJVyxNQUFKLEVBQVl6RCxNQUFaLEtBQXVCO0lBQUE7O0lBQzVDLElBQUk4QyxDQUFDLENBQUM0QixTQUFGLElBQWU0RixTQUFTLENBQUN4SCxDQUFELENBQTVCLEVBQWlDO01BQzdCLE1BQU11QyxJQUFJLEdBQUd4SCx1REFBTSxDQUFDaUYsQ0FBQyxDQUFDcEssSUFBSCxDQUFuQjs7TUFDQSxJQUFJLENBQUMrSyxNQUFNLENBQUMzSyxjQUFQLENBQXNCK0UsdURBQU0sQ0FBQ3dILElBQUQsQ0FBNUIsQ0FBRCxJQUF3QzVCLE1BQU0sQ0FBQzVGLHVEQUFNLENBQUN3SCxJQUFELENBQVAsQ0FBTixLQUF5QixFQUFqRSxJQUF1RTVCLE1BQU0sQ0FBQzRCLElBQUQsQ0FBTixDQUFhbkYsTUFBYixLQUF3QixDQUFuRyxFQUFzRztRQUNsR0YsTUFBTSxDQUFDcUYsSUFBRCxDQUFOLEdBQWVzQyxvQkFBZjtNQUNIO0lBQ0osQ0FOMkMsQ0FPNUM7OztJQUNBLDBCQUFBN0UsQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0IwQyxPQUF0QixDQUErQjNDLENBQUQsSUFBTztNQUNqQ3NILGdCQUFnQixDQUFDdEgsQ0FBQyxDQUFDSSxZQUFILEVBQWlCSSxNQUFqQixFQUF5QnpELE1BQXpCLENBQWhCO0lBQ0gsQ0FGRDtFQUdILENBWEQ7O0VBYUEsTUFBTXdLLFFBQVEsR0FBSS9HLE1BQUQsSUFBWTtJQUN6QjJELGVBQWUsQ0FBQzNELE1BQUQsQ0FBZjtFQUNILENBRkQ7O0VBSUEsTUFBTWdILFFBQVEsR0FBSWhILE1BQUQsSUFBWTtJQUN6QixNQUFNekQsTUFBTSxHQUFHLEVBQWY7SUFDQWtILGNBQWMsQ0FBQ3RCLE9BQWYsQ0FBd0I5QyxDQUFDLElBQUk7TUFDekJ5SCxnQkFBZ0IsQ0FBQ3pILENBQUQsRUFBSVcsTUFBSixFQUFZekQsTUFBWixDQUFoQjtJQUNILENBRkQ7SUFHQSxPQUFPQSxNQUFQO0VBQ0gsQ0FORDs7RUFRQSxJQUFHLENBQUN2RixNQUFNLENBQUN3RixJQUFQLENBQVk0QyxPQUFaLEVBQXFCM0MsTUFBekIsRUFBaUMsT0FBTyxJQUFQOztFQUVqQyxNQUFNd0ssY0FBYyxHQUFHLENBQUM1SCxDQUFELEVBQUk2SCxpQkFBSixFQUF1QkMsV0FBdkIsS0FBdUM7SUFBQTs7SUFDMUQsSUFBSUQsaUJBQWlCLENBQUMxVCxRQUFsQixDQUEyQjRHLHVEQUFNLENBQUNpRixDQUFDLENBQUNwSyxJQUFILENBQWpDLENBQUosRUFBZ0Q7TUFDNUNrUyxXQUFXLENBQUM3UyxJQUFaLENBQWlCK0ssQ0FBakI7SUFDSCxDQUh5RCxDQUkxRDs7O0lBQ0EsMEJBQUFBLENBQUMsQ0FBQ0ksa0JBQUYsa0ZBQXNCMEMsT0FBdEIsQ0FBK0IzQyxDQUFELElBQU87TUFDakN5SCxjQUFjLENBQUN6SCxDQUFDLENBQUNJLFlBQUgsRUFBaUJzSCxpQkFBakIsRUFBb0NDLFdBQXBDLENBQWQ7SUFDSCxDQUZEO0VBR0gsQ0FSRDs7RUFVQSxNQUFNQyxhQUFhLEdBQUlGLGlCQUFELElBQXVCO0lBQ3pDLE1BQU1DLFdBQVcsR0FBRyxFQUFwQjtJQUNBMUQsY0FBYyxDQUFDdEIsT0FBZixDQUF1QjlDLENBQUMsSUFBSTtNQUN4QjRILGNBQWMsQ0FBQzVILENBQUQsRUFBSTZILGlCQUFKLEVBQXVCQyxXQUF2QixDQUFkO0lBQ0gsQ0FGRDtJQUdBLE9BQU9BLFdBQVcsQ0FBQ0UsSUFBWixDQUFpQixDQUFDakgsQ0FBRCxFQUFJa0gsQ0FBSixLQUFVbEgsQ0FBQyxDQUFDbUgsS0FBRixHQUFVRCxDQUFDLENBQUNDLEtBQXZDLEVBQThDLENBQTlDLENBQVA7RUFDSCxDQU5EOztFQVFBLE1BQU1DLGtCQUFrQixHQUFJTixpQkFBRCxJQUF1QjtJQUM5QyxNQUFNeEssVUFBVSxHQUFHMEssYUFBYSxDQUFDRixpQkFBRCxDQUFoQztJQUNBekMsV0FBVyxDQUFDSyxPQUFaLENBQW9CcEksVUFBVSxDQUFDakksRUFBL0IsRUFBbUNnVCxjQUFuQyxDQUFrRDtNQUM5Q0MsUUFBUSxFQUFFLFFBRG9DO01BRTlDQyxLQUFLLEVBQUU7SUFGdUMsQ0FBbEQ7RUFJSCxDQU5EOztFQVFBLElBQUksQ0FBQzNRLE1BQU0sQ0FBQ3dGLElBQVAsQ0FBWTRDLE9BQVosRUFBcUIzQyxNQUExQixFQUFrQyxPQUFPLElBQVA7RUFFbEMsb0JBQ0k7SUFBSyxTQUFTLEVBQUU1SDtFQUFoQixnQkFDSSwyREFBQyxtREFBRDtJQUNJLFFBQVEsRUFBRW1TLFFBRGQ7SUFFSSxRQUFRLEVBQUVELFFBRmQ7SUFHSSxhQUFhLEVBQUUzSDtFQUhuQixHQUtLLENBQUM7SUFBQ3dJLFlBQUQ7SUFBZUMsSUFBZjtJQUFxQkMsVUFBckI7SUFBaUNDLFFBQWpDO0lBQTJDL0g7RUFBM0MsQ0FBRCxLQUF3RDtJQUNyRHdFLE1BQU0sR0FBR29ELFlBQVQ7SUFDQSxvQkFDSTtNQUNJLFFBQVEsRUFBRzlULEtBQUQsSUFBVztRQUNqQixNQUFNb1QsaUJBQWlCLEdBQUdXLElBQUksQ0FBQ0csbUJBQUwsR0FBMkJ6VCxNQUEzQixDQUFrQ3lJLEtBQUssSUFBSTZLLElBQUksQ0FBQ0ksYUFBTCxDQUFtQmpMLEtBQW5CLEVBQTBCa0wsT0FBckUsQ0FBMUI7O1FBQ0EsSUFBSWhCLGlCQUFpQixDQUFDekssTUFBbEIsR0FBMkIsQ0FBL0IsRUFBa0M7VUFDOUIsTUFBTUMsVUFBVSxHQUFHMEssYUFBYSxDQUFDRixpQkFBRCxDQUFoQztVQUNBN0MsT0FBTyxDQUFDNkMsaUJBQUQsRUFBb0J6QyxXQUFXLENBQUNLLE9BQVosQ0FBb0JwSSxVQUFVLENBQUNqSSxFQUEvQixDQUFwQixDQUFQO1VBQ0EsSUFBRzZQLHVCQUFILEVBQ0lrRCxrQkFBa0IsQ0FBQ04saUJBQUQsQ0FBbEI7UUFDUDs7UUFDRFUsWUFBWSxDQUFDOVQsS0FBRCxDQUFaO01BQ0gsQ0FWTDtNQVdJLEdBQUcsRUFBRTRRO0lBWFQsR0FZS1gsUUFBUSxnQkFDTDtNQUFVLFFBQVEsRUFBQztJQUFuQixHQUNLTixjQUFjLENBQUNuUSxHQUFmLENBQW9CK0wsQ0FBRCxJQUFPb0gsY0FBYyxDQUFDcEgsQ0FBRCxDQUF4QyxDQURMLENBREssR0FLTG9FLGNBQWMsQ0FBQ25RLEdBQWYsQ0FBb0IrTCxDQUFELElBQU9vSCxjQUFjLENBQUNwSCxDQUFELENBQXhDLENBakJSLEVBbUJLMkUsS0FBSyxpQkFBSSx3RUFBTW1FLElBQUksQ0FBQ0MsU0FBTCxDQUFlcEksTUFBZixFQUF1QixDQUF2QixFQUEwQixDQUExQixDQUFOLENBbkJkLENBREo7RUF1QkgsQ0E5QkwsQ0FESixFQWlDSyxDQUFDdUUsR0FBRCxpQkFDRDtJQUNJLElBQUksRUFBQyxRQURUO0lBRUksT0FBTyxFQUFHelEsS0FBRCxJQUFXO01BQ2hCMFEsTUFBTSxDQUFDMVEsS0FBRCxDQUFOO0lBQ0gsQ0FKTDtJQUtJLEtBQUssRUFBRTtNQUFDaUMsU0FBUyxFQUFFO0lBQVo7RUFMWCxHQU9La08sVUFQTCxDQWxDSixDQURKO0FBK0NILENBM2EwQixDQUEzQjtBQTZhQVYsa0JBQWtCLENBQUNwTixTQUFuQixHQUErQjtFQUMzQnNOLGNBQWMsRUFBRWhSLG9FQURXO0VBRTNCaVIsV0FBVyxFQUFFalIsb0VBRmM7RUFHM0JrUixlQUFlLEVBQUVsUixtRUFIVTtFQUkzQm9DLFNBQVMsRUFBRXBDLDBEQUpnQjtFQUszQnVSLEtBQUssRUFBRXZSLHdEQUxvQjtFQU0zQndSLFVBQVUsRUFBRXhSLDBEQU5lO0VBTzNCbVIsMEJBQTBCLEVBQUVuUiwwREFQRDtFQVEzQm9SLCtCQUErQixFQUFFcFIsMERBUk47RUFTM0JxUixpQ0FBaUMsRUFBRXJSLDBEQVRSO0VBVTNCeVIsb0JBQW9CLEVBQUV6UiwwREFWSztFQVczQjBSLHdCQUF3QixFQUFFMVIsMERBWEM7RUFZM0IyUix1QkFBdUIsRUFBRTNSLHdEQVpFO0VBYTNCNlIsdUJBQXVCLEVBQUU3Uix3REFBYzhWO0FBYlosQ0FBL0I7QUFnQkEsaUVBQWVoRixrQkFBZixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RleHQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvcmF3LWh0bWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL3V0aWxzL21ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL3V0aWxzL3F1ZXN0aW9ucy1zZXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZXh0cmEtcXVlc3Rpb25zL2luZGV4LnNjc3M/MWE3MyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXNlbGVjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInVyaWpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2V4dHJhLXF1ZXN0aW9ucy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoZWNrYm94TGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSBwcm9wcy52YWx1ZSA/IHByb3BzLnZhbHVlLmZpbmQoIHYgPT4gIXByb3BzLm9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG90aGVyQ2hlY2tlZDogISFvdGhlclZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UgPSB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgbGV0IG9wdGlvblZhbHVlcyA9IHRoaXMucHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlID8gWy4uLnRoaXMucHJvcHMudmFsdWVdIDogW107XG5cbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVWYWwgPSBpc05hTihldmVudC50YXJnZXQudmFsdWUpID8gZXZlbnQudGFyZ2V0LnZhbHVlIDogcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHRoZVZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKCB2ID0+IHYgIT0gZXZlbnQudGFyZ2V0LnZhbHVlIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKHYgPT4gb3B0aW9uVmFsdWVzLmluY2x1ZGVzKHYpKTtcbiAgICAgICAgICAgIHZhbHVlLnB1c2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94bGlzdCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU90aGVyQ0JDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3RoZXJDaGVja2VkOiBldmVudC50YXJnZXQuY2hlY2tlZH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBvcHRpb25zLCBpZCwgY2hpbGRyZW4sIGVycm9yLCBkaXNhYmxlZCxuYW1lLCBhcmlhTGFiZWxsZWRCeSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgeyBvdGhlckNoZWNrZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgYWxsb3dPdGhlciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dPdGhlcicpICk7XG4gICAgICAgIGxldCBvdGhlclZhbHVlID0gdmFsdWUgPyB2YWx1ZS5maW5kKCB2ID0+ICFvcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSkuaW5jbHVkZXModikgKSA6IGZhbHNlIDtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcblxuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnN3B4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgaWQ9e2BjaGxfd3JhcHBlcl8ke2lkfWB9IGFyaWEtbGFiZWxsZWRieT17YXJpYUxhYmVsbGVkQnl9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcImNoZWNrYm94ZXMtZGl2XCIgKyAoaGFzX2Vycm9yID8gJyBlcnJvcicgOiAnJykgfT5cbiAgICAgICAgICAgICAgICAgICAgeyBvcHRpb25zLm1hcChvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IHZhbHVlID8gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBrZXk9e1wicmFkaW9fa2V5X1wiICsgb3AudmFsdWV9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lPyBuYW1lIDogaWQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9e29wLnZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWAgIH0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2h0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcC5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtcImNiX290aGVyXCIgKyBpZH0gY2hlY2tlZD17b3RoZXJDaGVja2VkfSBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9XCJvdGhlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e1wiY2Jfb3RoZXJcIiArIGlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLm90aGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dPdGhlciAmJiBvdGhlckNoZWNrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3BhZGRpbmdMZWZ0OiAnMjJweCcsIHdpZHRoOiAnNTAlJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGRpc2FibGVkPXtpc0Rpc2FibGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IHZhbHVlPXtvdGhlclZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuQ2hlY2tib3hMaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhcmlhTGFiZWxsZWRCeSA6IG51bGwsXG59XG5cblxuQ2hlY2tib3hMaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24ubWFwKHZhbCA9PiB2YWwudmFsdWUpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBjbGVhcmFibGUsIGRpc2FibGVkLCBvdmVycmlkZUNTUywgYXJpYUxhYmVsbGVkQnksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNDbGVhcmFibGUgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xlYXJhYmxlJykpO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGxldCBzZWxlY3RDbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvdmVycmlkZUNTUycpIHx8IG92ZXJyaWRlQ1NTID09IGZhbHNlKSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzc05hbWUgPSAnZHJvcGRvd24gJyArIGNsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB0aGlzLnByb3BzLm9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RTdHlsZXMgPSB7IG1lbnU6IHN0eWxlcyA9PiAoeyAuLi5zdHlsZXMsIHpJbmRleDogOTk5IH0pIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzPXtzZWxlY3RTdHlsZXN9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17YXJpYUxhYmVsbGVkQnl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuRHJvcGRvd24uZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaW9MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3Rpb24udGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyYWRpbydcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldExhYmVsKG9wdGlvbiwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKSB7XG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ319PlxuICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaW1wbGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gPlxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBzdHlsZT17e21hcmdpblRvcDogJzBweCd9fT57b3B0aW9uLmxhYmVsfTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcHRpb24uZGVzY3JpcHRpb259PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBhcmlhTGFiZWxsZWRCeSwgZGlzYWJsZWQsIG9wdGlvbnMsaWQsIG5hbWUsLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpbmxpbmUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lubGluZScpICk7XG4gICAgICAgIGxldCBzaW1wbGUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NpbXBsZScpICk7XG4gICAgICAgIGxldCBodG1sID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdodG1sJykgKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcblxuICAgICAgICBsZXQgc3R5bGUsIGxhYmVsO1xuXG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogJzIwcHgnLFxuICAgICAgICAgICAgICAgIGZsb2F0OiAnbGVmdCdcbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgaWQ9e2BybF93cmFwcGVyXyR7aWR9YH0gYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX0+XG4gICAgICAgICAgICAgICAgeyBvcHRpb25zLm1hcChvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gKG9wLnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtcmFkaW9cIiBrZXk9e2ByYWRpb19rZXlfJHtpZH1fJHtvcC52YWx1ZX1gfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ByYWRpb18ke2lkfV8ke29wLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtvcC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZSA/IG5hbWUgOiBgcmFkaW9fJHtpZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuZ2V0TGFiZWwob3AsIGlkLCBpbmxpbmUsIHNpbXBsZSwgaHRtbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuUmFkaW9MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhcmlhTGFiZWxsZWRCeSA6IG51bGwsXG59XG5cblJhZGlvTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGFyaWFMYWJlbGxlZEJ5LCBjb250YWluZXJDbGFzc05hbWUsLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NfbmFtZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJ2Zvcm0tY29udHJvbCc7XG4gICAgICAgIGxldCBjb250YWluZXJfY2xhc3NfbmFtZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnRhaW5lckNsYXNzTmFtZScpID8gY29udGFpbmVyQ2xhc3NOYW1lIDogJ2NvbnRhaW5lci1mb3JtLWNvbnRyb2wnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRhaW5lcl9jbGFzc19uYW1lfT5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc19uYW1lfSAke2hhc19lcnJvciA/ICdlcnJvcicgOiAnJ31gfVxuICAgICAgICAgICAgICAgICAgICByZWY9e25vZGUgPT4ge3RoaXMuaW5wdXQgPSBub2RlfX1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbklucHV0LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhcmlhTGFiZWxsZWRCeSA6IG51bGwsXG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUmF3SFRNTCA9ICh7Y2hpbGRyZW4sIHJlcGxhY2VOZXdMaW5lID0gZmFsc2UsIGNsYXNzTmFtZSA9IFwiXCJ9KSA9PlxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogcmVwbGFjZU5ld0xpbmUgPyBjaGlsZHJlbj8ucmVwbGFjZSgvXFxuL2csICc8YnIgLz4nKSA6IGNoaWxkcmVufX0gLz5cblxuZXhwb3J0IGRlZmF1bHQgUmF3SFRNTDsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5cbmV4cG9ydCBjb25zdCBmaW5kRWxlbWVudFBvcyA9IChvYmopID0+IHtcbiAgICB2YXIgY3VydG9wID0gLTcwO1xuICAgIGlmIChvYmoub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnRvcCArPSBvYmoub2Zmc2V0VG9wO1xuICAgICAgICB9IHdoaWxlIChvYmogPSBvYmoub2Zmc2V0UGFyZW50KTtcbiAgICAgICAgcmV0dXJuIFtjdXJ0b3BdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50ID0gKGF0aW1lKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgYXRpbWUgPSBhdGltZSAqIDEwMDA7XG4gICAgcmV0dXJuIG1vbWVudChhdGltZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXBvY2hUb01vbWVudFRpbWVab25lID0gKGF0aW1lLCB0aW1lX3pvbmUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKS50eih0aW1lX3pvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVwb2NoID0gKGF0aW1lLCBmb3JtYXQgPSAnTS9EL1lZWVkgaDptbSBhJykgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIHJldHVybiBlcG9jaFRvTW9tZW50KGF0aW1lKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBvYmplY3RUb1F1ZXJ5U3RyaW5nID0gKG9iaikgPT4ge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKHN0ciAhPSBcIlwiKSB7XG4gICAgICAgICAgICBzdHIgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGtleSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhY2tVUkwgPSAoKSA9PiB7XG4gICAgbGV0IHVybCAgICAgID0gVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBsZXQgcXVlcnkgICAgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgIGxldCBmcmFnbWVudCA9IHVybC5mcmFnbWVudCgpO1xuICAgIGxldCBiYWNrVXJsICA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogbnVsbDtcbiAgICBpZihmcmFnbWVudCAhPSBudWxsICYmIGZyYWdtZW50ICE9ICcnKXtcbiAgICAgICAgYmFja1VybCArPSBgIyR7ZnJhZ21lbnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tVcmw7XG59O1xuXG5leHBvcnQgY29uc3QgdG9TbHVnID0gKHRleHQpID0+e1xuICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCdfJyk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvY2FsbGJhY2tgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gJyc7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBvbiBpZnJhbWVcbiAgICAgICAgaWYgKHdpbmRvdy50b3ApXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy50b3AubG9jYXRpb247XG4gICAgfVxuICAgIHJldHVybiBsb2NhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmlnaW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQYXRoTmFtZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRIcmVmID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZFVzZXJHcm91cHMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5BTExPV0VEX1VTRVJfR1JPVVBTIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEFQSUJhc2VVcmwgPSAocmVsYXRpdmVVcmwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cuQVBJX0JBU0VfVVJMfSR7cmVsYXRpdmVVcmx9YDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxgYDtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRPbkxvY2FsU3RvcmFnZSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGcm9tTG9jYWxTdG9yYWdlID0gKGtleSwgcmVtb3ZlSXQpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgdmFsID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmKHJlbW92ZUl0KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBnZXRGcm9tTG9jYWxTdG9yYWdlIHJlbW92aW5nIGtleSAke2tleX1gKTtcbiAgICAgICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tTG9jYWxTdG9yYWdlID0gKGtleSkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhcmluZ19zZXNzaW9uX3N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUgPSAodmFsKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGUgPSB2YWw7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UgPSAoKSA9PiB7XG4gICAgbGV0IGxhbmd1YWdlID0gJ2VuJztcbiAgICBpZih0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsYW5ndWFnZSA9IChuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0pIHx8IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlO1xuICAgIH1cbiAgICByZXR1cm4gbGFuZ3VhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FcnJvciA9IChlcnJvcnMpID0+IHtcbiAgICBpZihPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0RXJyb3IpO1xuICAgICAgICBpZiAoZmlyc3ROb2RlKSB3aW5kb3cuc2Nyb2xsVG8oMCwgZmluZEVsZW1lbnRQb3MoZmlyc3ROb2RlKSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhc0Vycm9ycyA9IChmaWVsZCwgZXJyb3JzKSA9PiB7XG4gICAgaWYoZmllbGQgaW4gZXJyb3JzKSB7XG4gICAgICAgIHJldHVybiBlcnJvcnNbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hhbGxvd0VxdWFsID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHtcbiAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKG9iamVjdDEpO1xuICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqZWN0Mik7XG5cbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBrZXlzMSkge1xuICAgICAgICBpZiAob2JqZWN0MVtrZXldICE9PSBvYmplY3QyW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFycmF5c0VxdWFsID0gKGExLCBhMikgPT5cbiAgICBhMS5sZW5ndGggPT09IGEyLmxlbmd0aCAmJiBhMS5ldmVyeSgobywgaWR4KSA9PiBzaGFsbG93RXF1YWwobywgYTJbaWR4XSkpO1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChvYmopID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBiYXNlNjRVUkxFbmNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgLnJlcGxhY2UoLz0vZywgJycpXG59XG5cbmV4cG9ydCBjb25zdCByZXRyeVByb21pc2UgPSBhc3luYyAoXG4gICAgY2IsXG4gICAgbWF4TnVtYmVyT2ZSZXRyaWVzID0gM1xuKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhOdW1iZXJPZlJldHJpZXM7IGkrKykge1xuICAgICAgICBpZiAoYXdhaXQgY2IoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lU2VydmljZVVybCA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LlRJTUVJTlRFUlZBTFNJTkNFMTk3MF9BUElfVVJMIHx8IHByb2Nlc3MuZW52LlRJTUVJTlRFUlZBTFNJTkNFMTk3MF9BUElfVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCJleHBvcnQgY29uc3QgQ2hlY2tCb3hRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3gnO1xuZXhwb3J0IGNvbnN0IENvbWJvQm94UXVlc3Rpb25UeXBlID0gJ0NvbWJvQm94J1xuZXhwb3J0IGNvbnN0IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveExpc3QnO1xuZXhwb3J0IGNvbnN0IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSA9ICdSYWRpb0J1dHRvbkxpc3QnO1xuZXhwb3J0IGNvbnN0IEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlID0gW0NvbWJvQm94UXVlc3Rpb25UeXBlLCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUsIFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZV07XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID0gJ0FuZCc7XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IgPSAnT3InO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPSAnRXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwgPSAnTm90RXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlfVmlzaWJsZSA9ICdWaXNpYmxlJztcbmV4cG9ydCBjb25zdCBNYWluUXVlc3Rpb25DbGFzc1R5cGUgPSAnTWFpblF1ZXN0aW9uJztcbmltcG9ydCB7dG9TbHVnfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXN0aW9uc1NldCB7XG5cbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIGFuc3dlcnMgPSBbXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHF1ZXN0aW9ucztcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFuc3dlcnMgPSBhbnN3ZXJzXG4gICAgICAgIHRoaXMuYW5zd2VycyA9IFtdO1xuICAgICAgICAvLyBtYXAgYW5zd2VycyB0byBhc3NvY2lhdGUgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgYSBvZiB0aGlzLm9yaWdpbmFsQW5zd2VycylcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thLnF1ZXN0aW9uX2lkXSA9IGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWUgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZCA9IHt9XG4gICAgICAgIC8vIGFzc29jaWF0aXZlIGFycmF5ICggcnVsZSBpZCAsIHJ1bGUpO1xuICAgICAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb25zKCk7XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlOYW1lW3RvU2x1ZyhxLm5hbWUpXSA9IHE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KHEuaWQpXSA9IHE7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucnVsZXNbcGFyc2VJbnQoci5pZCldID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWVzID0gKHEpID0+IHtcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlLmluY2x1ZGVzKHEudHlwZSk7XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlID0gKHEsIGFuc3dlcikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiBwYXJzZUludCh2KSk7XG4gICAgICAgIGZvciAobGV0IGF2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXEudmFsdWVzLm1hcChlID0+IGUuaWQpLmluY2x1ZGVzKGF2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2dldEFuc3dlckZvciA9IChxKSA9PiB7XG4gICAgICAgIGxldCBpZCA9IE51bWJlci5pc0ludGVnZXIocSkgPyBxIDogcS5pZDtcbiAgICAgICAgbGV0IGEgPSB0aGlzLmFuc3dlcnNbaWRdIHx8IG51bGw7XG4gICAgICAgIHJldHVybiBhID8gYSA6IG51bGw7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlID0gKGFuc3dlcikgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICBfYW5zd2VyQ29udGFpbnMgPSAoYW5zd2VyLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKHZhbCk7XG4gICAgfVxuXG4gICAgX2lzU3ViUXVlc3Rpb25WaXNpYmxlID0gKHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxDb25kaXRpb24gPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyZW50UXVlc3Rpb25BbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocnVsZS5wYXJlbnRfcXVlc3Rpb25faWQpO1xuICAgICAgICBpZiAoIXBhcmVudFF1ZXN0aW9uQW5zd2VyKSB7XG4gICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8IHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgdmlzaWJpbGl0eSBjaGVja1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5X1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiAhaW5pdGlhbENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBfaXNBbnN3ZXJlZCA9IChxKSA9PiB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihxKTtcblxuICAgICAgICBpZiAocS5jbGFzcyA9PT0gTWFpblF1ZXN0aW9uQ2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBwYXJlbnQgcnVsZXMgLi4uXG4gICAgICAgIGZvciAobGV0IHJ1bGVJZCBvZiBxLnBhcmVudF9ydWxlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSh0aGlzLnJ1bGVzW3J1bGVJZF0pKSAvLyBpZiBxdWVzdGlvbiBpcyBub3QgdmlzaWJsZSBza2lwIGl0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2hlY2tRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLl9pc0Fuc3dlcmVkKHEpO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBfZm9ybWF0UXVlc3Rpb25BbnN3ZXIgPSAocXVlc3Rpb24pID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBzbHVnID0gdG9TbHVnKHF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICBsZXQgdXNlckFuc3dlciA9IHRoaXMub3JpZ2luYWxBbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxdWVzdGlvbi5pZCk/LnZhbHVlO1xuXG4gICAgICAgIGlmKHVzZXJBbnN3ZXIpIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIgPT09ICdmYWxzZScgPyBmYWxzZSA6ICEhdXNlckFuc3dlcjtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgfHwgcXVlc3Rpb24udHlwZSA9PT0gQ29tYm9Cb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSBwYXJzZUludCh1c2VyQW5zd2VyKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveExpc3RRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyLnNwbGl0KCcsJykubWFwKGFuc1ZhbCA9PiBwYXJzZUludChhbnNWYWwpKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc1tzbHVnXSA9ICB1c2VyQW5zd2VyIHx8ICcnO1xuICAgICAgICBpZihxdWVzdGlvbi50eXBlID09PSBDaGVja0JveExpc3RRdWVzdGlvblR5cGUgJiYgcmVzW3NsdWddID09PSAnJykgcmVzW3NsdWddID0gW11cbiAgICAgICAgaWYocXVlc3Rpb24uaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxdWVzdGlvbi5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIGxldCByZXMxID0gdGhpcy5fZm9ybWF0UXVlc3Rpb25BbnN3ZXIocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsIC4uLnJlczF9O1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZvcm1hdEFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xuICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihxKTtcbiAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsLi4ucmVzMX07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbXBsZXRlZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeU5hbWUgPSAobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzbHVnID0gdG9TbHVnKG5hbWUpXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlOYW1lW25hbWVdIHx8IHRoaXMucXVlc3Rpb25CeU5hbWVbc2x1Z10gIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeUlkID0gKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChpZCldIHx8IG51bGw7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQtdGltZXpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1maW5hbC1mb3JtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmlqc1wiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHtGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VJbXBlcmF0aXZlSGFuZGxlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCdcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBEcm9wZG93biBmcm9tICcuLi9pbnB1dHMvZHJvcGRvd24nXG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4uL2lucHV0cy9yYWRpby1saXN0J1xuaW1wb3J0IENoZWNrYm94TGlzdCBmcm9tICcuLi9pbnB1dHMvY2hlY2tib3gtbGlzdCdcbmltcG9ydCBRdWVzdGlvbnNTZXQgZnJvbSAnLi4vLi4vdXRpbHMvcXVlc3Rpb25zLXNldCc7XG5pbXBvcnQge0ZpZWxkLCBGb3JtfSBmcm9tIFwicmVhY3QtZmluYWwtZm9ybVwiO1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnO1xuaW1wb3J0IHt0b1NsdWd9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmNvbnN0IElucHV0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgY2xhc3NOYW1lLCBpc0Rpc2FibGVkLCBpc1JlcXVpcmVkLCAuLi5yZXN0IH0pID0+IHtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBjb250YWluZXJDbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXQudmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2lucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3F1ZXN0aW9uLnBsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgIClcbn1cblxuY29uc3QgUmFkaW9CdXR0b25MaXN0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKX07XG5cbmNvbnN0IERyb3Bkb3duQWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKDxEcm9wZG93blxuICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBuYW1lPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgaWQ9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgLz4pXG59XG5cbmNvbnN0IENoZWNrQm94TGlzdEFkYXB0ZXIgPSAoeyBpbnB1dCwgbWV0YSwgcXVlc3Rpb24sIGlzRGlzYWJsZWQsIGlzUmVxdWlyZWQsIG1heFZhbHVlcywgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBzaG91bGRDaGFuZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25fYW5zd2VycyA9IGV2LnRhcmdldC52YWx1ZTtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIG1heCB2YWx1ZSBvZiBvcHRpb25zIGNoZWNrZWQgYW5kIHRoZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4LCBkb24ndCBjaGFuZ2UgdGhlIHZhbHVlXG4gICAgICAgIGlmIChtYXhWYWx1ZXMgPiAwICYmIHF1ZXN0aW9uX2Fuc3dlcnMubGVuZ3RoID4gbWF4VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5vbkNoYW5nZShldilcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBpZD17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgbmFtZT17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnk9e2Ake3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX0gbGFiZWxgfVxuICAgICAgICAgICAgdmFsdWU9e2lucHV0LnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzaG91bGRDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKVxufVxuXG5jb25zdCBnZXRWYWxpZGF0b3IgPSBpc1JlcXVpcmVkID0+XG4gICAgaXNSZXF1aXJlZCA/IHZhbHVlID0+ICh2YWx1ZSA/IHVuZGVmaW5lZCA6IFwiUmVxdWlyZWRcIikgOiAoKSA9PiB7fTtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gUmVhY3QuZm9yd2FyZFJlZigoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQW5zd2VyQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAncXVlc3Rpb25zLWZvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSA9ICdxdWVzdGlvbi1sYWJlbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZT0gJ3F1ZXN0aW9uLWNvbnRyb2wtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkT25seSA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJ1JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWUgPSAnZXh0cmEtcXVlc3Rpb24tZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RXh0cmFRdWVzdGlvbnNFZGl0ID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yID0gKGUpID0+IGNvbnNvbGUubG9nKCdmb3JtIGVycm9yczogJywgZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWYpID0+IHtcblxuICAgIGxldCBzdWJtaXQgPSBudWxsO1xuXG4gICAgY29uc3QgcXVlc3Rpb25SZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGZvcm1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG5cbiAgICAvLyBAc2VlIGh0dHBzOi8vYmV0YS5yZWFjdGpzLm9yZy9yZWZlcmVuY2UvcmVhY3QvdXNlSW1wZXJhdGl2ZUhhbmRsZVxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBkb1N1Ym1pdCgpIHtcbiAgICAgICAgICAgIGZvcm1SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInN1Ym1pdFwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7IG5hbWUgfSkgPT4gKFxuICAgICAgICA8RmllbGQgbmFtZT17bmFtZX0gc3Vic2NyaXB0aW9uPXt7IGVycm9yOiB0cnVlLCB0b3VjaGVkOiB0cnVlIH19PlxuICAgICAgICAgICAgeyh7IG1ldGE6IHsgZXJyb3IsIHRvdWNoZWQgfSB9KSA9PlxuICAgICAgICAgICAgICAgIGVycm9yICYmIHRvdWNoZWQgPyA8ZGl2IGNsYXNzTmFtZT17VmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lfT57ZXJyb3J9PC9kaXY+IDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgIClcblxuICAgIGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWVzID0gcnVsZS5hbnN3ZXJfdmFsdWVzO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCByZXMgPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHZhbHVlLmluY2x1ZGVzKHBhcnNlSW50KHYpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBPclxuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgICAgICBpZihydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb24gRXF1YWxcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KXtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRMYWJlbCA9IChxKSA9PiB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGxhc3Qgd29yZCBhbmQgdGhlIHJlcXVpcmVkIGFzdGVyaXNrIG9uIHRoZSBzYW1lIGxpbmVcbiAgICAgICAgY29uc3Qgbm9uQnJlYWtpbmdTcGFjZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTsgLy8gZXF1YWxzIHRvICZuYnNwO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNpbmcgYnJvd3NlciBwYXJzZXIgaXNudGVhZCBvZiByZWdleCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXNcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHEubGFiZWw7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gZGl2LnRleHRDb250ZW50IHx8IGRpdi5pbm5lclRleHQgfHwgXCJcIjtcblxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBxLm1hbmRhdG9yeSA/IGAke2xhYmVsfSR7bm9uQnJlYWtpbmdTcGFjZX08Yj4qPC9iPmAgOiBsYWJlbFxuICAgICAgICBjb25zdCBsYWJlbEhUTUwgPSBgPGxhYmVsIGlkPVwiJHt0b1NsdWcocS5uYW1lKX0gbGFiZWxcIiBodG1sRm9yPVwiJHt0b1NsdWcocS5uYW1lKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPmBcblxuICAgICAgICByZXR1cm4gbGFiZWxIVE1MO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQW5zd2VyZWQgPSAocSwgYW5zd2VycykgPT4ge1xuICAgICAgICBjb25zdCBzbHVnID0gdG9TbHVnKHEubmFtZSk7XG4gICAgICAgIGlmKCFhbnN3ZXJzLmhhc093blByb3BlcnR5KHNsdWcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnNbc2x1Z107XG4gICAgICAgIC8vIGNoZWNrIHR5cGVcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShhbnN3ZXIpKSByZXR1cm4gYW5zd2VyLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJykgcmV0dXJuIGFuc3dlci5sZW5ndGggPiAwO1xuICAgICAgICBpZih0eXBlb2YgYW5zd2VyID09PSAnbnVtYmVyJykgcmV0dXJuIGFuc3dlciA+IDA7XG4gICAgICAgIGlmKHR5cGVvZiBhbnN3ZXIgPT09ICdib29sZWFuJykgcmV0dXJuIGFuc3dlcjtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlclF1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgbGV0IHF1ZXN0aW9uVmFsdWVzID0gcS52YWx1ZXM7XG4gICAgICAgIC8vIGRpc2FibGUgZmllbGQgaWYgZWRpdCBpc24ndCBhbGxvd2VkIGFuZCB0aGUgcXVlc3Rpb25zIGlzIGFuc3dlcmVkXG4gICAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAhYWxsb3dFeHRyYVF1ZXN0aW9uc0VkaXQgJiYgaXNBbnN3ZXJlZChxLCBhbnN3ZXJzKTtcbiAgICAgICAgLy8gQHNlZSBodHRwczovL2NvZGVzYW5kYm94LmlvL3MvdmcwNXk/ZmlsZT0vaW5kZXguanNcbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJUZXh0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e2dldExhYmVsKHEpfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtJbnB1dEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiVGV4dEFyZWFcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57Z2V0TGFiZWwocSl9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3RvU2x1ZyhxLm5hbWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9XCJ0ZXh0YXJlYVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17YGVxLWNoZWNrYm94LWxhYmVsICR7cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWwocSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwiaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXt0b1NsdWcocS5uYW1lKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24ga2V5PXtyLmlkfSB3aGVuPXt0b1NsdWcocS5uYW1lKX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJSYWRpb0J1dHRvbkxpc3RcIikge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHtsYWJlbCA6IHZhbC5sYWJlbCwgdmFsdWUgOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e3RvU2x1ZyhxLm5hbWUpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3RvU2x1ZyhxLm5hbWUpfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkPXtxLm1hbmRhdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtSYWRpb0J1dHRvbkxpc3RBZGFwdGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXt0b1NsdWcocS5uYW1lKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24ga2V5PXtyLmlkfSB3aGVuPXt0b1NsdWcocS5uYW1lKX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDb21ib0JveFwiKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoe2xhYmVsIDogdmFsLmxhYmVsLCB2YWx1ZSA6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsKHEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9e2dldFZhbGlkYXRvcihxLm1hbmRhdG9yeSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e0Ryb3Bkb3duQWRhcHRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXt0b1NsdWcocS5uYW1lKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24ga2V5PXtyLmlkfSB3aGVuPXt0b1NsdWcocS5uYW1lKX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveExpc3RcIikge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHtsYWJlbCA6IHZhbC5sYWJlbCwgdmFsdWUgOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e3RvU2x1ZyhxLm5hbWUpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWVzPXtxLm1heF9zZWxlY3RlZF92YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e0NoZWNrQm94TGlzdEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Zpc2libGUgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9uID0gKHEsIHZhbHVlcywgZXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChxLm1hbmRhdG9yeSAmJiBpc1Zpc2libGUocSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocS5uYW1lKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHRvU2x1ZyhzbHVnKSkgfHwgdmFsdWVzW3RvU2x1ZyhzbHVnKV0gPT09IFwiXCIgfHwgdmFsdWVzW3NsdWddLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yc1tzbHVnXSA9IFJlcXVpcmVkRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIHN1YiBydWxlc1xuICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcz8uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbiwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgIG9uQW5zd2VyQ2hhbmdlcyh2YWx1ZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCggcSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVF1ZXN0aW9uKHEsIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYoIU9iamVjdC5rZXlzKGFuc3dlcnMpLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBnZXRFcnJvckZpZWxkcyA9IChxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmluY2x1ZGVzKHRvU2x1ZyhxLm5hbWUpKSkge1xuICAgICAgICAgICAgZXJyb3JGaWVsZHMucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGVycm9ycyBvbiBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIGdldEVycm9yRmllbGRzKHIuc3ViX3F1ZXN0aW9uLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGaXJzdEVycm9yID0gKGludmFsaWRGb3JtRmllbGRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRmllbGRzID0gW107XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBnZXRFcnJvckZpZWxkcyhxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yRmllbGRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0ZpcnN0RXJyb3IgPSAoaW52YWxpZEZvcm1GaWVsZHMpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IGdldEZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGlmICghT2JqZWN0LmtleXMoYW5zd2VycykubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgPEZvcm1cbiAgICAgICAgICAgICAgICB2YWxpZGF0ZT17dmFsaWRhdGV9XG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9PlxuXG4gICAgICAgICAgICAgICAgeyh7aGFuZGxlU3VibWl0LCBmb3JtLCBzdWJtaXR0aW5nLCBwcmlzdGluZSwgdmFsdWVzfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQgPSBoYW5kbGVTdWJtaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEZvcm1GaWVsZHMgPSBmb3JtLmdldFJlZ2lzdGVyZWRGaWVsZHMoKS5maWx0ZXIoZmllbGQgPT4gZm9ybS5nZXRGaWVsZFN0YXRlKGZpZWxkKS5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBnZXRGaXJzdEVycm9yKGludmFsaWRGb3JtRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoaW52YWxpZEZvcm1GaWVsZHMsIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzaG91bGRTY3JvbGwyRmlyc3RFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0ZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFyZWYgJiZcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgKVxufSk7XG5cbkV4dHJhUXVlc3Rpb25zRm9ybS5wcm9wVHlwZXMgPSB7XG4gICAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHVzZXJBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvbkFuc3dlckNoYW5nZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFZhbGlkYXRpb25FcnJvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhbGxvd0V4dHJhUXVlc3Rpb25zRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3I6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXh0cmFRdWVzdGlvbnNGb3JtO1xuIl0sIm5hbWVzIjpbIlByb3BUeXBlcyIsIlJlYWN0IiwiVCIsIlJhd0hUTUwiLCJDaGVja2JveExpc3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwib3RoZXJWYWx1ZSIsInZhbHVlIiwiZmluZCIsInYiLCJvcHRpb25zIiwibWFwIiwib3AiLCJpbmNsdWRlcyIsInN0YXRlIiwib3RoZXJDaGVja2VkIiwiaGFuZGxlQ2hhbmdlIiwiYmluZCIsImhhbmRsZU90aGVyQ0JDaGFuZ2UiLCJldmVudCIsIm9wdGlvblZhbHVlcyIsInRhcmdldCIsInR5cGUiLCJjaGVja2VkIiwidGhlVmFsIiwiaXNOYU4iLCJwYXJzZUludCIsInB1c2giLCJmaWx0ZXIiLCJldiIsImlkIiwib25DaGFuZ2UiLCJzZXRTdGF0ZSIsInJlbmRlciIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwiZXJyb3IiLCJkaXNhYmxlZCIsIm5hbWUiLCJhcmlhTGFiZWxsZWRCeSIsInJlc3QiLCJpbmxpbmUiLCJoYXNPd25Qcm9wZXJ0eSIsImh0bWwiLCJhbGxvd090aGVyIiwiaGFzX2Vycm9yIiwiaXNEaXNhYmxlZCIsInN0eWxlIiwibGFiZWwiLCJwYWRkaW5nTGVmdCIsIm1hcmdpbkxlZnQiLCJmbG9hdCIsIm1hcmdpblRvcCIsInRyYW5zbGF0ZSIsIndpZHRoIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIlNlbGVjdCIsIkRyb3Bkb3duIiwic2VsZWN0aW9uIiwiaXNNdWx0aSIsInZhbCIsImNsZWFyYWJsZSIsIm92ZXJyaWRlQ1NTIiwiaXNDbGVhcmFibGUiLCJ0aGVWYWx1ZSIsInNlbGVjdENsYXNzTmFtZSIsIk9iamVjdCIsIm9wdCIsInNlbGVjdFN0eWxlcyIsIm1lbnUiLCJzdHlsZXMiLCJ6SW5kZXgiLCJSYWRpb0xpc3QiLCJnZXRMYWJlbCIsIm9wdGlvbiIsInNpbXBsZSIsImRpc3BsYXkiLCJkZXNjcmlwdGlvbiIsIklucHV0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwic25hcHNob3QiLCJpbnB1dCIsImNvbnRhaW5lckNsYXNzTmFtZSIsImNsYXNzX25hbWUiLCJjb250YWluZXJfY2xhc3NfbmFtZSIsIm5vZGUiLCJyZXBsYWNlTmV3TGluZSIsIl9faHRtbCIsInJlcGxhY2UiLCJtb21lbnQiLCJVUkkiLCJmaW5kRWxlbWVudFBvcyIsIm9iaiIsImN1cnRvcCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFRvcCIsImVwb2NoVG9Nb21lbnQiLCJhdGltZSIsImVwb2NoVG9Nb21lbnRUaW1lWm9uZSIsInRpbWVfem9uZSIsInR6IiwiZm9ybWF0RXBvY2giLCJmb3JtYXQiLCJvYmplY3RUb1F1ZXJ5U3RyaW5nIiwic3RyIiwia2V5IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0QmFja1VSTCIsInVybCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInF1ZXJ5Iiwic2VhcmNoIiwiZnJhZ21lbnQiLCJiYWNrVXJsIiwidG9TbHVnIiwidGV4dCIsInRvTG93ZXJDYXNlIiwiZ2V0QXV0aENhbGxiYWNrIiwib3JpZ2luIiwiZ2V0Q3VycmVudExvY2F0aW9uIiwidG9wIiwiZ2V0T3JpZ2luIiwiZ2V0Q3VycmVudFBhdGhOYW1lIiwicGF0aG5hbWUiLCJnZXRDdXJyZW50SHJlZiIsImdldEFsbG93ZWRVc2VyR3JvdXBzIiwiQUxMT1dFRF9VU0VSX0dST1VQUyIsImJ1aWxkQVBJQmFzZVVybCIsInJlbGF0aXZlVXJsIiwiQVBJX0JBU0VfVVJMIiwicHV0T25Mb2NhbFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0RnJvbUxvY2FsU3RvcmFnZSIsInJlbW92ZUl0IiwiZ2V0SXRlbSIsImNvbnNvbGUiLCJsb2ciLCJyZW1vdmVGcm9tTG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsImlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUiLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwic2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUiLCJnZXRDdXJyZW50VXNlckxhbmd1YWdlIiwibGFuZ3VhZ2UiLCJuYXZpZ2F0b3IiLCJsYW5ndWFnZXMiLCJ1c2VyTGFuZ3VhZ2UiLCJzY3JvbGxUb0Vycm9yIiwiZXJyb3JzIiwia2V5cyIsImxlbmd0aCIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsVG8iLCJoYXNFcnJvcnMiLCJmaWVsZCIsInNoYWxsb3dFcXVhbCIsIm9iamVjdDEiLCJvYmplY3QyIiwia2V5czEiLCJrZXlzMiIsImFycmF5c0VxdWFsIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImlkeCIsImlzRW1wdHkiLCJiYXNlNjRVUkxFbmNvZGUiLCJ0b1N0cmluZyIsInJldHJ5UHJvbWlzZSIsImNiIiwibWF4TnVtYmVyT2ZSZXRyaWVzIiwiaSIsImdldFRpbWVTZXJ2aWNlVXJsIiwiVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwiLCJwcm9jZXNzIiwiZW52IiwiQ2hlY2tCb3hRdWVzdGlvblR5cGUiLCJDb21ib0JveFF1ZXN0aW9uVHlwZSIsIkNoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSIsIlJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSIsIkFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCIsIlZpc2liaWxpdHlfVmlzaWJsZSIsIk1haW5RdWVzdGlvbkNsYXNzVHlwZSIsIlF1ZXN0aW9uc1NldCIsInF1ZXN0aW9ucyIsImFuc3dlcnMiLCJxIiwicXVlc3Rpb25CeU5hbWUiLCJxdWVzdGlvbkJ5SWQiLCJyIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwicnVsZXMiLCJfcGFyc2VRdWVzdGlvbiIsInN1Yl9xdWVzdGlvbiIsImFuc3dlciIsInNwbGl0IiwiYXYiLCJ2YWx1ZXMiLCJlIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiYSIsInJ1bGUiLCJpbml0aWFsQ29uZGl0aW9uIiwiYW5zd2VyX3ZhbHVlc19vcGVyYXRvciIsInBhcmVudFF1ZXN0aW9uQW5zd2VyIiwiX2dldEFuc3dlckZvciIsInBhcmVudF9xdWVzdGlvbl9pZCIsInZpc2liaWxpdHlfY29uZGl0aW9uIiwiYW5zd2VyVmFsdWUiLCJhbnN3ZXJfdmFsdWVzIiwiX2Fuc3dlckNvbnRhaW5zIiwidmlzaWJpbGl0eSIsImNsYXNzIiwibWFuZGF0b3J5IiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsInJlcyIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJxdWVzdGlvbiIsInNsdWciLCJ1c2VyQW5zd2VyIiwib3JpZ2luYWxBbnN3ZXJzIiwicXVlc3Rpb25faWQiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiZm9yRWFjaCIsIl9wYXJzZVF1ZXN0aW9ucyIsIkZyYWdtZW50IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiRmllbGQiLCJGb3JtIiwiSW5wdXRBZGFwdGVyIiwibWV0YSIsInBsYWNlaG9sZGVyIiwiUmFkaW9CdXR0b25MaXN0QWRhcHRlciIsIkRyb3Bkb3duQWRhcHRlciIsIkNoZWNrQm94TGlzdEFkYXB0ZXIiLCJtYXhWYWx1ZXMiLCJzaG91bGRDaGFuZ2UiLCJxdWVzdGlvbl9hbnN3ZXJzIiwiZ2V0VmFsaWRhdG9yIiwidW5kZWZpbmVkIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZm9yd2FyZFJlZiIsImV4dHJhUXVlc3Rpb25zIiwidXNlckFuc3dlcnMiLCJvbkFuc3dlckNoYW5nZXMiLCJxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUiLCJxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWUiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsIlJlcXVpcmVkRXJyb3JNZXNzYWdlIiwiVmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lIiwiYWxsb3dFeHRyYVF1ZXN0aW9uc0VkaXQiLCJvbkVycm9yIiwic2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IiLCJyZWYiLCJzdWJtaXQiLCJxdWVzdGlvblJlZiIsImZvcm1SZWYiLCJzZXRBbnN3ZXJzIiwiZm9ybWF0VXNlckFuc3dlcnMiLCJkb1N1Ym1pdCIsImN1cnJlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJjYW5jZWxhYmxlIiwiYnViYmxlcyIsInFzIiwiZm9ybWF0QW5zd2VycyIsIkNvbmRpdGlvbiIsIndoZW4iLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsInRvdWNoZWQiLCJBcnJheSIsImlzQXJyYXkiLCJydWxlUmVzdWx0Iiwibm9uQnJlYWtpbmdTcGFjZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImRpdiIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCIsImlubmVyVGV4dCIsImxhYmVsVGV4dCIsImxhYmVsSFRNTCIsImlzQW5zd2VyZWQiLCJyZW5kZXJRdWVzdGlvbiIsInF1ZXN0aW9uVmFsdWVzIiwiZWwiLCJtYXhfc2VsZWN0ZWRfdmFsdWVzIiwiaXNWaXNpYmxlIiwidmFsaWRhdGVRdWVzdGlvbiIsIm9uU3VibWl0IiwidmFsaWRhdGUiLCJnZXRFcnJvckZpZWxkcyIsImludmFsaWRGb3JtRmllbGRzIiwiZXJyb3JGaWVsZHMiLCJnZXRGaXJzdEVycm9yIiwic29ydCIsImIiLCJvcmRlciIsInNjcm9sbFRvRmlyc3RFcnJvciIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsImhhbmRsZVN1Ym1pdCIsImZvcm0iLCJzdWJtaXR0aW5nIiwicHJpc3RpbmUiLCJnZXRSZWdpc3RlcmVkRmllbGRzIiwiZ2V0RmllbGRTdGF0ZSIsImludmFsaWQiLCJKU09OIiwic3RyaW5naWZ5IiwiYXJyYXkiLCJmdW5jIiwiYm9vbCJdLCJzb3VyY2VSb290IjoiIn0=
|