nsc-react-component 4.4.8 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["React","PureComponent","Modal","request","utils","omit","Spin","config","getLocalStore","NscForm","constructor","props","_defineProperty","createRef","formVisible","formModalProps","formDrawerProps","isChange","expand","scope","params","beforeRender","callbackBeforeClose","callback","afterRender","getDerivedStateFromProps","nextProps","prevState","modalProps","drawerProps","showModel","Object","is","newState","visible","undefined","getFieldError","name","_this$formRef$current","formRef","current","getFieldInstance","_this$formRef$current2","getFieldsError","getFieldsValue","_this$formRef","getFieldValue","isFieldsTouched","isFieldTouched","isFieldValidating","resetFields","scrollToField","options","setFields","filds","setFieldsValue","values","_this$formRef$current3","submit","onSubmit","url","msg","propsUrl","encryptFields","encryptPropps","Error","method","requestUrl","requestData","requestEncrypt","requestParam","data","_objectWithoutProperties","_excluded","_objectSpread","toLowerCase","autoPrefix","then","res","code","_message","success","error","catch","console","log","validateFields","hide","e","_this","onCancel","onClose","hideForm","resetValue","arguments","length","setState","showForm","value","option","_this$formRef$current4","cloneElement","item","index","key","children","Array","isArray","Children","map","child","onValuesChange","val","allVal","renderPanel","newChildren","loading","changeValid","state","layout","labelCol","span","wrapperCol","Pane","createElement","_Form","_extends","ref","validateTrigger","bind","preserve","storePrefix","autoType","newModalProps","newDrawerProps","defaultprops","maskClosable","formExpand","valid","change","type","modalprops","newProps","open","spinning","Fragment","render"],"sources":["../../../src/components/base/form/Form.tsx"],"sourcesContent":["/*\r\n * @Descripttion:表单组件\r\n * @version:\r\n * @Author: rxzhu\r\n * @Date: 2021-04-09 09:18:34\r\n * @LastEditors: rxzhu\r\n * @LastEditTime: 2021-04-23 15:23:54\r\n */\r\nimport React, { PureComponent } from \"react\";\r\nimport { Form, FormProps, Drawer, DrawerProps, message } from \"antd\";\r\nimport Modal from \"../modal\";\r\nimport { FormInstance } from \"antd/lib/form\";\r\nimport { request ,utils} from \"@bj-nsc/msn/lib/utils\";\r\nimport omit from \"omit.js\";\r\nimport { NscModalPorps } from \"../modal\";\r\nimport Spin from \"../spin\";\r\nimport config from \"../../config\";\r\nimport {getLocalStore} from '@bj-nsc/functions'\r\nexport interface IFormProps extends FormProps {\r\n showModel?: \"modal\" | \"drawer\" | \"auto\";\r\n modalProps?: NscModalPorps;\r\n drawerProps?: DrawerProps & {\r\n onOk?: any;\r\n okButtonProps?: Object;\r\n formExpand?: Object;\r\n };\r\n url?: string;\r\n encryptFields?: Array<String>;\r\n changeValid?: boolean; //数据修改关闭校验\r\n loading?: boolean; //表单加载状态\r\n}\r\n\r\nclass NscForm extends PureComponent<IFormProps> {\r\n formRef = React.createRef<FormInstance>();\r\n state = {\r\n formVisible: false,\r\n formModalProps: {},\r\n formDrawerProps: {},\r\n isChange: false,\r\n expand: false,\r\n };\r\n option: any = {\r\n //回调作用域\r\n scope: this,\r\n //open传递过来的页面参数\r\n params: {},\r\n //显示之前回调\r\n beforeRender: null,\r\n //关闭之前回调,如果return false,且窗口不关闭\r\n callbackBeforeClose: null,\r\n //关闭后回调,异步操作\r\n callback: null,\r\n //显示之后回调\r\n afterRender: null,\r\n };\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n const { modalProps, drawerProps, showModel } = nextProps;\r\n const { formModalProps, formDrawerProps } = prevState;\r\n if (showModel == \"modal\") {\r\n // JSON.stringify(formModalProps) !== JSON.stringify(modalProps)\r\n if (!Object.is(formModalProps, modalProps)) {\r\n let newState = {\r\n formDrawerProps: modalProps,\r\n } as any;\r\n if (modalProps.visible !== null && modalProps.visible !== undefined) {\r\n newState.formVisible = modalProps.visible;\r\n }\r\n return newState;\r\n }\r\n } else if (showModel == \"drawer\") {\r\n // JSON.stringify(formDrawerProps) !== JSON.stringify(drawerProps)\r\n if (!Object.is(formDrawerProps, drawerProps)) {\r\n let newState = {\r\n formDrawerProps: drawerProps,\r\n } as any;\r\n if (\r\n drawerProps?.visible !== null &&\r\n drawerProps?.visible !== undefined\r\n ) {\r\n newState.formVisible = drawerProps.visible;\r\n }\r\n return newState;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n //获取对应字段名的错误信息\r\n getFieldError(name) {\r\n return this.formRef.current?.getFieldError(name);\r\n }\r\n\r\n //获取对应字段实例\r\n getFieldInstance(name) {\r\n return this.formRef.current?.getFieldInstance(name);\r\n }\r\n\r\n //获取一组字段名对应的错误信息,返回为数组形式\r\n getFieldsError() {\r\n return this.formRef.current.getFieldsError();\r\n }\r\n\r\n //获取一组字段名对应的值,会按照对应结构返回\r\n getFieldsValue() {\r\n return this.formRef?.current?.getFieldsValue();\r\n }\r\n\r\n //获取对应字段名的值\r\n getFieldValue(name) {\r\n return this.formRef.current.getFieldValue(name);\r\n }\r\n\r\n //检查一组字段是否被用户操作过\r\n isFieldsTouched() {\r\n return this.formRef.current.isFieldsTouched();\r\n }\r\n\r\n //检查对应字段是否被用户操作过\r\n isFieldTouched(name) {\r\n return this.formRef.current.isFieldTouched(name);\r\n }\r\n\r\n //检查一组字段是否正在校验\r\n isFieldValidating(name) {\r\n return this.formRef.current.isFieldValidating(name);\r\n }\r\n\r\n //重置一组字段到\r\n resetFields() {\r\n this.formRef.current.resetFields();\r\n }\r\n\r\n scrollToField(name, options) {\r\n this.formRef.current.scrollToField(name, options);\r\n }\r\n\r\n setFields(filds) {\r\n this.formRef.current.setFields(filds);\r\n }\r\n\r\n setFieldsValue(values) {\r\n this.formRef.current?.setFieldsValue(values);\r\n }\r\n\r\n submit() {\r\n this.formRef.current.submit();\r\n }\r\n\r\n onSubmit(\r\n url?: string,\r\n options?: any,\r\n callback?: (res?: any) => void,\r\n msg?: boolean\r\n ) {\r\n const { url: propsUrl, encryptFields: encryptPropps = [] } = this.props;\r\n if (!url && !propsUrl) {\r\n throw new Error(\"没有上传的url!\");\r\n }\r\n const { method = \"post\" } = options;\r\n let requestUrl = url ? url : propsUrl;\r\n let requestData = this.formRef.current.getFieldsValue();\r\n let requestEncrypt = encryptPropps;\r\n let requestParam = { method: method, data: requestData } as { data: any };\r\n if (options) {\r\n const { data, encryptFields, ...params } = options;\r\n requestParam = { ...requestParam, ...params };\r\n if (data) {\r\n delete requestParam.data;\r\n if (method.toLowerCase() == \"get\") {\r\n requestParam = { ...requestParam, ...params, params: data };\r\n } else {\r\n requestParam = { ...requestParam, ...params, data: data };\r\n }\r\n }\r\n if (encryptFields) {\r\n requestEncrypt = encryptFields;\r\n }\r\n }\r\n\r\n request(requestUrl, {\r\n autoPrefix: true,\r\n ...requestParam,\r\n encryptFields: requestEncrypt,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (msg) {\r\n if (code === 200) {\r\n message.success(\"提交成功\");\r\n } else {\r\n message.error(\"提交失败\");\r\n }\r\n }\r\n callback && callback(res);\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n }\r\n\r\n validateFields(name) {\r\n return this.formRef.current.validateFields(name);\r\n }\r\n\r\n hide(e) {\r\n const { showModel, modalProps = {}, drawerProps = {} } = this.props;\r\n let _this = this;\r\n const { onCancel } = modalProps;\r\n const { onClose } = drawerProps;\r\n if (showModel == \"drawer\" && onClose) {\r\n onClose(e);\r\n } else if (showModel == \"modal\" && onCancel) {\r\n onCancel(e);\r\n } else {\r\n _this.hideForm();\r\n }\r\n }\r\n\r\n hideForm(resetValue = true) {\r\n this.setState(\r\n {\r\n formVisible: false,\r\n isChange: false,\r\n },\r\n () => {\r\n if (resetValue) {\r\n this.formRef.current.resetFields();\r\n }\r\n }\r\n );\r\n }\r\n\r\n showForm(value?: any, option: any = {}) {\r\n this.setState(\r\n {\r\n formVisible: true,\r\n isChange: false,\r\n },\r\n () => {\r\n this.formRef.current?.setFieldsValue(value);\r\n const { afterRender } = option;\r\n utils.callback(afterRender, this);\r\n }\r\n );\r\n }\r\n\r\n cloneElement(item, index = 0) {\r\n let _this = this;\r\n if (typeof item == \"string\") return item;\r\n let props = {} as { key: number; children: any };\r\n props.key = index;\r\n try {\r\n if (item.props && item.props.children) {\r\n if (Array.isArray(item.props.children)) {\r\n props.children = React.Children.map(\r\n item.props.children,\r\n function (child, index) {\r\n return _this.cloneElement(child, index);\r\n }\r\n );\r\n } else {\r\n props.children = this.cloneElement(item.props.children, 0);\r\n }\r\n }\r\n return React.cloneElement(item, props);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n onValuesChange(val, allVal) {\r\n const { onValuesChange } = this.props;\r\n this.setState({\r\n isChange: true,\r\n });\r\n onValuesChange && onValuesChange(val, allVal);\r\n }\r\n renderPanel(newChildren, props) {\r\n const {\r\n showModel,\r\n drawerProps = {},\r\n modalProps = {},\r\n loading = false,\r\n changeValid = true,\r\n } = this.props;\r\n const { formVisible } = this.state;\r\n const layout = {\r\n labelCol: { span: this.props.layout == \"vertical\" ? 24 : 4 },\r\n wrapperCol: { span: this.props.layout == \"vertical\" ? 24 : 20 },\r\n };\r\n const Pane = () => {\r\n return (\r\n <Form\r\n ref={this.formRef}\r\n validateTrigger={[\"onBlur\", \"onChange\"]}\r\n // draggable={true}\r\n {...layout}\r\n {...props}\r\n onValuesChange={this.onValuesChange.bind(this)}\r\n preserve={false}\r\n />\r\n );\r\n };\r\n if (showModel) {\r\n const { showModel } = this.props;\r\n const { storePrefix } = config();\r\n let autoType = getLocalStore(\r\n \"formType\",\r\n storePrefix ? storePrefix : \"nsc-home\"\r\n );\r\n autoType = autoType ? autoType : null;\r\n let newModalProps = omit(modalProps, [\"visible\"]);\r\n let newDrawerProps = omit(drawerProps, [\"visible\"]);\r\n let defaultprops = {\r\n maskClosable: !this.state.isChange,\r\n formExpand: {\r\n expand: true,\r\n valid: changeValid,\r\n change: this.state.isChange,\r\n },\r\n type: showModel,\r\n } as any;\r\n let modalprops = { ...defaultprops };\r\n let newProps = {} as any;\r\n if (\r\n showModel == \"drawer\" ||\r\n (showModel == \"auto\" && autoType == \"drawer\")\r\n ) {\r\n newProps = { ...newModalProps, ...newDrawerProps };\r\n } else {\r\n newProps = { ...newDrawerProps, ...newModalProps };\r\n }\r\n modalprops = {\r\n ...defaultprops,\r\n ...newModalProps,\r\n ...newDrawerProps,\r\n ...newProps,\r\n onCancel: this.hide.bind(this),\r\n // onClose: this.hide.bind(this),\r\n };\r\n return (\r\n <Modal open={formVisible} {...modalprops}>\r\n {loading ? <Spin spinning={loading}>{Pane()}</Spin> : Pane()}\r\n </Modal>\r\n );\r\n } else {\r\n return <>{loading ? <Spin spinning={loading}>{Pane()}</Spin> : Pane()}</>;\r\n }\r\n }\r\n render() {\r\n const props = omit(this.props, [\r\n \"form\",\r\n \"showModel\",\r\n \"modalProps\",\r\n \"drawerProps\",\r\n \"url\",\r\n \"encryptFields\",\r\n \"changeValid\",\r\n ]);\r\n return <>{this.renderPanel(props.children, props)}</>;\r\n }\r\n}\r\nexport default NscForm;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","names":["React","PureComponent","Modal","request","utils","omit","Spin","config","getLocalStore","NscForm","constructor","props","_defineProperty","createRef","formVisible","formModalProps","formDrawerProps","isChange","expand","scope","params","beforeRender","callbackBeforeClose","callback","afterRender","getDerivedStateFromProps","nextProps","prevState","modalProps","drawerProps","showModel","Object","is","newState","visible","undefined","getFieldError","name","_this$formRef$current","formRef","current","getFieldInstance","_this$formRef$current2","getFieldsError","getFieldsValue","_this$formRef","getFieldValue","isFieldsTouched","isFieldTouched","isFieldValidating","resetFields","scrollToField","options","setFields","filds","setFieldsValue","values","_this$formRef$current3","submit","onSubmit","url","msg","propsUrl","encryptFields","encryptPropps","Error","method","requestUrl","requestData","requestEncrypt","requestParam","data","_objectWithoutProperties","_excluded","_objectSpread","toLowerCase","autoPrefix","then","res","code","_message","success","error","catch","console","log","validateFields","hide","e","_this","onCancel","onClose","hideForm","resetValue","arguments","length","setState","showForm","value","option","_this$formRef$current4","cloneElement","item","index","key","children","Array","isArray","Children","map","child","onValuesChange","val","allVal","renderPanel","newChildren","loading","changeValid","state","layout","labelCol","span","wrapperCol","Pane","createElement","_Form","_extends","ref","validateTrigger","bind","preserve","storePrefix","autoType","newModalProps","newDrawerProps","defaultprops","maskClosable","formExpand","valid","change","type","modalprops","newProps","open","spinning","Fragment","render"],"sources":["../../../src/components/base/form/Form.tsx"],"sourcesContent":["/*\r\n * @Descripttion:表单组件\r\n * @version:\r\n * @Author: rxzhu\r\n * @Date: 2021-04-09 09:18:34\r\n * @LastEditors: rxzhu\r\n * @LastEditTime: 2021-04-23 15:23:54\r\n */\r\nimport React, { PureComponent } from \"react\";\r\nimport { Form, FormProps, Drawer, DrawerProps, message } from \"antd\";\r\nimport Modal from \"../modal\";\r\nimport { FormInstance } from \"antd/lib/form\";\r\nimport { request ,utils} from \"@bj-nsc/msn/lib/utils\";\r\nimport omit from \"omit.js\";\r\nimport { NscModalPorps } from \"../modal\";\r\nimport Spin from \"../spin\";\r\nimport config from \"../../config\";\r\nimport {getLocalStore} from '@bj-nsc/functions'\r\nexport interface IFormProps extends FormProps {\r\n showModel?: \"modal\" | \"drawer\" | \"auto\";\r\n modalProps?: NscModalPorps;\r\n drawerProps?: DrawerProps & {\r\n onOk?: any;\r\n okButtonProps?: Object;\r\n formExpand?: Object;\r\n };\r\n url?: string;\r\n encryptFields?: Array<String>;\r\n changeValid?: boolean; //数据修改关闭校验\r\n loading?: boolean; //表单加载状态\r\n}\r\n\r\nclass NscForm extends PureComponent<IFormProps> {\r\n formRef = React.createRef<FormInstance>();\r\n state = {\r\n formVisible: false,\r\n formModalProps: {},\r\n formDrawerProps: {},\r\n isChange: false,\r\n expand: false,\r\n };\r\n option: any = {\r\n //回调作用域\r\n scope: this,\r\n //open传递过来的页面参数\r\n params: {},\r\n //显示之前回调\r\n beforeRender: null,\r\n //关闭之前回调,如果return false,且窗口不关闭\r\n callbackBeforeClose: null,\r\n //关闭后回调,异步操作\r\n callback: null,\r\n //显示之后回调\r\n afterRender: null,\r\n };\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n const { modalProps, drawerProps, showModel } = nextProps;\r\n const { formModalProps, formDrawerProps } = prevState;\r\n if (showModel == \"modal\") {\r\n // JSON.stringify(formModalProps) !== JSON.stringify(modalProps)\r\n if (!Object.is(formModalProps, modalProps)) {\r\n let newState = {\r\n formDrawerProps: modalProps,\r\n } as any;\r\n if (modalProps.visible !== null && modalProps.visible !== undefined) {\r\n newState.formVisible = modalProps.visible;\r\n }\r\n return newState;\r\n }\r\n } else if (showModel == \"drawer\") {\r\n // JSON.stringify(formDrawerProps) !== JSON.stringify(drawerProps)\r\n if (!Object.is(formDrawerProps, drawerProps)) {\r\n let newState = {\r\n formDrawerProps: drawerProps,\r\n } as any;\r\n if (\r\n drawerProps?.visible !== null &&\r\n drawerProps?.visible !== undefined\r\n ) {\r\n newState.formVisible = drawerProps.visible;\r\n }\r\n return newState;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n //获取对应字段名的错误信息\r\n getFieldError(name) {\r\n return this.formRef.current?.getFieldError(name);\r\n }\r\n\r\n //获取对应字段实例\r\n getFieldInstance(name) {\r\n return this.formRef.current?.getFieldInstance(name);\r\n }\r\n\r\n //获取一组字段名对应的错误信息,返回为数组形式\r\n getFieldsError() {\r\n return this.formRef.current.getFieldsError();\r\n }\r\n\r\n //获取一组字段名对应的值,会按照对应结构返回\r\n getFieldsValue() {\r\n return this.formRef?.current?.getFieldsValue();\r\n }\r\n\r\n //获取对应字段名的值\r\n getFieldValue(name) {\r\n return this.formRef.current.getFieldValue(name);\r\n }\r\n\r\n //检查一组字段是否被用户操作过\r\n isFieldsTouched() {\r\n return this.formRef.current.isFieldsTouched();\r\n }\r\n\r\n //检查对应字段是否被用户操作过\r\n isFieldTouched(name) {\r\n return this.formRef.current.isFieldTouched(name);\r\n }\r\n\r\n //检查一组字段是否正在校验\r\n isFieldValidating(name) {\r\n return this.formRef.current.isFieldValidating(name);\r\n }\r\n\r\n //重置一组字段到\r\n resetFields() {\r\n this.formRef.current.resetFields();\r\n }\r\n\r\n scrollToField(name, options) {\r\n this.formRef.current.scrollToField(name, options);\r\n }\r\n\r\n setFields(filds) {\r\n this.formRef.current.setFields(filds);\r\n }\r\n\r\n setFieldsValue(values) {\r\n this.formRef.current?.setFieldsValue(values);\r\n }\r\n\r\n submit() {\r\n this.formRef.current.submit();\r\n }\r\n\r\n onSubmit(\r\n url?: string,\r\n options?: any,\r\n callback?: (res?: any) => void,\r\n msg?: boolean\r\n ) {\r\n const { url: propsUrl, encryptFields: encryptPropps = [] } = this.props;\r\n if (!url && !propsUrl) {\r\n throw new Error(\"没有上传的url!\");\r\n }\r\n const { method = \"post\" } = options;\r\n let requestUrl = url ? url : propsUrl;\r\n let requestData = this.formRef.current.getFieldsValue();\r\n let requestEncrypt = encryptPropps;\r\n let requestParam = { method: method, data: requestData } as { data: any };\r\n if (options) {\r\n const { data, encryptFields, ...params } = options;\r\n requestParam = { ...requestParam, ...params };\r\n if (data) {\r\n delete requestParam.data;\r\n if (method.toLowerCase() == \"get\") {\r\n requestParam = { ...requestParam, ...params, params: data };\r\n } else {\r\n requestParam = { ...requestParam, ...params, data: data };\r\n }\r\n }\r\n if (encryptFields) {\r\n requestEncrypt = encryptFields;\r\n }\r\n }\r\n\r\n request(requestUrl, {\r\n autoPrefix: true,\r\n ...requestParam,\r\n encryptFields: requestEncrypt,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (msg) {\r\n if (code === 200) {\r\n message.success(\"提交成功\");\r\n } else {\r\n message.error(\"提交失败\");\r\n }\r\n }\r\n callback && callback(res);\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n }\r\n\r\n validateFields(name) {\r\n return this.formRef.current.validateFields(name);\r\n }\r\n\r\n hide(e) {\r\n const { showModel, modalProps = {}, drawerProps = {} } = this.props;\r\n let _this = this;\r\n const { onCancel } = modalProps;\r\n const { onClose } = drawerProps;\r\n if (showModel == \"drawer\" && onClose) {\r\n onClose(e);\r\n } else if (showModel == \"modal\" && onCancel) {\r\n onCancel(e);\r\n } else {\r\n _this.hideForm();\r\n }\r\n }\r\n\r\n hideForm(resetValue = true) {\r\n this.setState(\r\n {\r\n formVisible: false,\r\n isChange: false,\r\n },\r\n () => {\r\n if (resetValue) {\r\n this.formRef.current.resetFields();\r\n }\r\n }\r\n );\r\n }\r\n\r\n showForm(value?: any, option: any = {}) {\r\n this.setState(\r\n {\r\n formVisible: true,\r\n isChange: false,\r\n },\r\n () => {\r\n this.formRef.current?.setFieldsValue(value);\r\n const { afterRender } = option;\r\n utils.callback(afterRender, this);\r\n }\r\n );\r\n }\r\n\r\n cloneElement(item, index = 0) {\r\n let _this = this;\r\n if (typeof item == \"string\") return item;\r\n let props = {} as { key: number; children: any };\r\n props.key = index;\r\n try {\r\n if (item.props && item.props.children) {\r\n if (Array.isArray(item.props.children)) {\r\n props.children = React.Children.map(\r\n item.props.children,\r\n function (child, index) {\r\n return _this.cloneElement(child, index);\r\n }\r\n );\r\n } else {\r\n props.children = this.cloneElement(item.props.children, 0);\r\n }\r\n }\r\n return React.cloneElement(item, props);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n onValuesChange(val, allVal) {\r\n const { onValuesChange } = this.props;\r\n this.setState({\r\n isChange: true,\r\n });\r\n onValuesChange && onValuesChange(val, allVal);\r\n }\r\n renderPanel(newChildren, props) {\r\n const {\r\n showModel,\r\n drawerProps = {},\r\n modalProps = {},\r\n loading = false,\r\n changeValid = true,\r\n } = this.props;\r\n const { formVisible } = this.state;\r\n const layout = {\r\n labelCol: { span: this.props.layout == \"horizontal\" ? 4 : 24 },\r\n wrapperCol: { span: this.props.layout == \"horizontal\" ? 20 : 24 },\r\n };\r\n const Pane = () => {\r\n return (\r\n <Form\r\n ref={this.formRef}\r\n validateTrigger={[\"onBlur\", \"onChange\"]}\r\n layout=\"vertical\"\r\n {...layout}\r\n {...props}\r\n onValuesChange={this.onValuesChange.bind(this)}\r\n preserve={false}\r\n />\r\n );\r\n };\r\n if (showModel) {\r\n const { showModel } = this.props;\r\n const { storePrefix } = config();\r\n let autoType = getLocalStore(\r\n \"formType\",\r\n storePrefix ? storePrefix : \"nsc-home\"\r\n );\r\n autoType = autoType ? autoType : null;\r\n let newModalProps = omit(modalProps, [\"visible\"]);\r\n let newDrawerProps = omit(drawerProps, [\"visible\"]);\r\n let defaultprops = {\r\n maskClosable: !this.state.isChange,\r\n formExpand: {\r\n expand: true,\r\n valid: changeValid,\r\n change: this.state.isChange,\r\n },\r\n type: showModel,\r\n } as any;\r\n let modalprops = { ...defaultprops };\r\n let newProps = {} as any;\r\n if (\r\n showModel == \"drawer\" ||\r\n (showModel == \"auto\" && autoType == \"drawer\")\r\n ) {\r\n newProps = { ...newModalProps, ...newDrawerProps };\r\n } else {\r\n newProps = { ...newDrawerProps, ...newModalProps };\r\n }\r\n modalprops = {\r\n ...defaultprops,\r\n ...newModalProps,\r\n ...newDrawerProps,\r\n ...newProps,\r\n onCancel: this.hide.bind(this),\r\n // onClose: this.hide.bind(this),\r\n };\r\n return (\r\n <Modal open={formVisible} {...modalprops}>\r\n {loading ? <Spin spinning={loading}>{Pane()}</Spin> : Pane()}\r\n </Modal>\r\n );\r\n } else {\r\n return <>{loading ? <Spin spinning={loading}>{Pane()}</Spin> : Pane()}</>;\r\n }\r\n }\r\n render() {\r\n const props = omit(this.props, [\r\n \"form\",\r\n \"showModel\",\r\n \"modalProps\",\r\n \"drawerProps\",\r\n \"url\",\r\n \"encryptFields\",\r\n \"changeValid\",\r\n ]);\r\n return <>{this.renderPanel(props.children, props)}</>;\r\n }\r\n}\r\nexport default NscForm;\r\n"],"mappings":"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"}
@@ -966,8 +966,6 @@ class NSCTable extends React.Component {
966
966
  tableTool
967
967
  } = config();
968
968
  let toolFlag = false;
969
- // console.log('tableTool',tableTool)
970
-
971
969
  if (tableTool.show === true) {
972
970
  toolFlag = true;
973
971
  }
@@ -1055,4 +1053,4 @@ _defineProperty(NSCTable, "defaultProps", {
1055
1053
  }
1056
1054
  });
1057
1055
  export default withZhLocale(NSCTable);
1058
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImNsZWFyU2VsZWN0Q29sb3IiLCJnZXRQYWdpbmF0aW9uQnlTdG9yZSIsIm9uQ2hhbmdlIiwiZmlsdGVycyIsImF1dG9PbkNoYW5nZSIsImF1dG9Tb3J0IiwiYXV0b1BhZ2luYXRpb24iLCJpc011bHRpcGxlIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlUGFnaW5hdGlvbiIsInAiLCJjdXJyZW50S2V5IiwicGFnZVNpemVLZXkiLCJwYWdlU2l6ZSIsImFzY1BhcmFtcyIsImdldFNvcnRQYXJhbSIsIm9uQ2hhbmdlRm4iLCJnZXRTdG9yZSIsImdldE1vZGVsIiwiaGFuZGxlU2VhcmNoIiwidmFsIiwiZmlsdGVyQ29sdW1uIiwiY2hlY2tlZFZhbHVlIiwibGVuZ3RoIiwiX21lc3NhZ2UiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsIm5ld0NvbCIsImluY2x1ZGVzIiwiZGF0YUluZGV4IiwiaW5pdFNob3ciLCJzb3J0U3RhdGUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzb3J0U2VhcmNoIiwib3JkZXJJdGVtcyIsImZpZWxkIiwiYXNjIiwib3JkZXIiLCJmb3JFYWNoIiwidiIsInN0cmluZ2lmeSIsImlzQmV5b25kIiwiZXZlbnQiLCJ0ZXh0UmFuZ2UiLCJlbCIsInRleHRDb250ZW50IiwidGFyZ2V0VyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJhbmdlIiwiZG9jdW1lbnQiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwiY2hpbGROb2RlcyIsInJhbmdlV2lkdGgiLCJzZXRTZWxlY3RlZFJvd0tleXMiLCJzZXRTZWxlY3RlZFJvd0RhdGFzIiwic29ydEZpZWxkcyIsImRlZmF1bHRTaG93Q29scyIsImVsbGlwc2lzIiwicmVuZGVyIiwic2hvd1RpdGxlIiwidGV4dCIsIl90aGlzJHN0YXRlJGNvbHMiLCJjdXJyZW50Q29sIiwiZmluZCIsImMiLCJhY3R1YWxXaWR0aCIsImNvbFdpZHRoIiwiY29sV2lkdGhPYmoiLCJzbWFsbCIsIm1pZGRsZSIsImRlZmF1bHQiLCJsYXJnZSIsInBhZGRpbmdXaWR0aCIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsInJlbW92ZUF0dHJpYnV0ZSIsInNjcm9sbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc05hbWUiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJpbmRleE9mIiwic29ydE9yZGVyIiwibXVsdGlwbGUiLCJpdGVtIiwiZmlsdGVyUHJvcHMiLCJvYmoiLCJzZWFyY2hLZXkiLCJEaXYiLCJ0aXRsZSIsInBsYWNlaG9sZGVyIiwiY29uY2F0IiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsIl9yZWYzIiwic2V0U2VsZWN0ZWRLZXlzIiwic2VsZWN0ZWRLZXlzIiwiY29uZmlybSIsImNsZWFyRmlsdGVycyIsIl9TcGFjZSIsIl9CdXR0b24iLCJvbkNsaWNrIiwiX3RoaXMkdGFibGVTZWFyY2hSZWYkIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwicmVuZGVyVG9vbEJhciIsImNvbExpc3RzIiwidG9vbGJhciIsInRhYmxlVG9vbCIsInN0b3JlUmVxdWVzdENvbmZpZyIsInRvb2xzIiwidG9vbHNDbGljayIsIm9uVG9vbENsaWNrIiwic2l6ZUl0ZW0iLCJzb3J0SXRlbSIsInNvcnRDb250ZW50IiwiRnJhZ21lbnQiLCJjdXJzb3IiLCJjb2xvciIsInNpemVDb250ZW50IiwiX0NoZWNrYm94IiwiR3JvdXAiLCJiaW5kIiwibGFiZWwiLCJ2YWx1ZSIsImRpc2FibGVkIiwiZm9udFNpemUiLCJfUG9wb3ZlciIsInBsYWNlbWVudCIsInRyaWdnZXIiLCJvdmVybGF5U3R5bGUiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwibWFyZ2luUmlnaHQiLCJvblJlZnJlc2giLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJyb3dTZWxlY3Rpb25PblNlbGVjdCIsInNlbGVjdGVkIiwicm93S2V5IiwibmV3U2VsZWN0ZWRSb3dLZXlzIiwibmV3U2VsZWN0ZWRSb3dEYXRhcyIsInNwbGljZSIsInJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiX3JlZjQiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJyb3dDbGFzc05hbWUiLCJuZXdEYXRhU291cmNlIiwiZ2V0U2VhcmNoTWVudURhdGFzIiwidHJlZURhdGFzIiwiZXhwYW5kZWRSb3dLZXlzIiwib3BlbktleXMiLCJkcmFnYWJsZSIsImRyYWdhYmxlUHJvcHMiLCJjb21wb25lbnRzIiwicmVzaXplUHJvcHMiLCJ0b29sRmxhZyIsInNob3ciLCJzaG93Um93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uIiwib25TZWxlY3QiLCJvblNlbGVjdEFsbCIsImNvbHVtbldpZHRoIiwidGFibGVQcm9wcyIsImNvbmZpZ1RhYmxlUHJvcHMiLCJEZWZhdWx0VGFibGUiLCJfVGFibGUiLCJfZXh0ZW5kcyIsImNoaWxkcmVuQ29sdW1uTmFtZSIsInNoZWl0ZW0iLCJsb2NhbGUiLCJlbXB0eVRleHQiLCJzY3JvbGwiLCJ4IiwiX1BhZ2luYXRpb24iLCJwYWdlIiwiYWN0aW9uIiwiX3JlZjUiLCJiYWNrZW5kIiwiZHJhZ1VybCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXhfb2xkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBARGVzY3JpcHR0aW9uOlxyXG4gKiBAdmVyc2lvbjpcclxuICogQEF1dGhvcjogcnh6aHVcclxuICogQERhdGU6IDIwMjEtMDMtMjMgMDg6NDY6MjBcclxuICogQExhc3RFZGl0b3JzOiByeHpodVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIxLTAzLTIzIDEwOjMwOjQyXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gIEFwcHN0b3JlT3V0bGluZWQsXHJcbiAgQ2hlY2tPdXRsaW5lZCxcclxuICBDb2x1bW5IZWlnaHRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxuICBTb3J0QXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgU29ydERlc2NlbmRpbmdPdXRsaW5lZCxcclxuICBSZWRvT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIE1lbnUsXHJcbiAgbWVzc2FnZSxcclxuICBQYWdpbmF0aW9uLFxyXG4gIFBvcG92ZXIsXHJcbiAgU3BhY2UsXHJcbiAgVGFibGUsXHJcbiAgVGFibGVQcm9wcyxcclxuICBUb29sdGlwLFxyXG59IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IENvbHVtblR5cGUsIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCJhbnRkL2xpYi90YWJsZVwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtZG5kXCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCB0cmVlVXRpbHMgZnJvbSBcIi4uLy4uL3RyZWVVdGlsc1wiO1xyXG5pbXBvcnQgXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmNvbnN0IHsgQm9keVJvd0NvbXBvbmVudCwgSFRNTDVCYWNrZW5kIH0gPSBCb2R5Um93O1xyXG5pbXBvcnQgd2l0aFpoTG9jYWxlIGZyb20gXCIuLi9jb21tb24vd2l0aFpoTG9jYWxlXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSwgc2ltcGxpZnlDb2x1bW5zIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCBOb0RhdGEgZnJvbSBcIi4uL2NvbW1vbi9Ob0RhdGFcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IEVsbGlwc2VDZWxsIGZyb20gXCIuLi9jb21tb24vRWxsaXBzZUNlbGxcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuY29uc3Qgc3R5bGVzID0gbnVsbDtcclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9vbEJhclByb3BzIHtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHRvb2xzPzogQXJyYXk8c3RyaW5nPjtcclxuICBvblRvb2xDbGljaz86IHsgb25SZWZyZXNoPzogYW55OyBvblNvcnQ/OiBhbnkgfTtcclxufVxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG4gIHNvcnRGaWVsZHM/OiBBcnJheTxzdHJpbmc+OyAvL+mcgOimgeaOkuW6j+eahOWtl+autUluZGV4XHJcbiAgdG9vbGJhcj86IFRvb2xCYXJQcm9wcyB8IGJvb2xlYW47XHJcbiAgYXV0b1NpemU/OiBib29sZWFuO1xyXG4gIHNvcnRTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpua3u+WKoOaOkuW6j+afpeivoizpu5jorqR0cnVlXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47XHJcbiAgcm93S2V5Pzogc3RyaW5nO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSU5TQ1RhYmxlUHJvcHMgPSB0eXBlb2YgTlNDVGFibGUuZGVmYXVsdFByb3BzICYgTlNDVGFibGVQcm9wcztcclxuZXhwb3J0IHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfTtcclxuXHJcbmNvbnN0IFJlc2l6ZWFibGVUaXRsZSA9IChwcm9wczogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc2l6ZSwgd2lkdGgsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHM7XHJcbiAgcmV0dXJuIChcclxuICAgIDxSZXNpemFibGVcclxuICAgICAgd2lkdGg9e3dpZHRoIHx8IDE1MH1cclxuICAgICAgaGVpZ2h0PXswfVxyXG4gICAgICBvblJlc2l6ZT17b25SZXNpemV9XHJcbiAgICAgIGRyYWdnYWJsZU9wdHM9e3sgZW5hYmxlVXNlclNlbGVjdEhhY2s6IGZhbHNlIH19XHJcbiAgICA+XHJcbiAgICAgIDx0aCB7Li4ucmVzdFByb3BzfSAvPlxyXG4gICAgPC9SZXNpemFibGU+XHJcbiAgKTtcclxufTtcclxuY2xhc3MgTlNDVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SU5TQ1RhYmxlUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IHRydWUsXHJcbiAgICBkcmFnVXJsOiBcIlwiLFxyXG4gICAgYXV0b1BhZ2luYXRpb246IHRydWUsXHJcbiAgICBhdXRvU29ydDogdHJ1ZSxcclxuICAgIGF1dG9PbkNoYW5nZTogdHJ1ZSxcclxuICAgIHJlc2l6ZUNvbHVtbjogdHJ1ZSxcclxuICAgIHRvb2xiYXI6IHtcclxuICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgIG9uVG9vbENsaWNrOiB7fSBhcyBhbnksXHJcbiAgICAgIHRvb2xzOiBbXSBhcyBhbnksXHJcbiAgICB9IGFzIGFueSxcclxuICB9O1xyXG5cclxuICBzdG9yZSA9IHt9IGFzIFN0b3JlUHJvcHM7XHJcbiAgdGhJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG4gIHRhYmxlU2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuXHJcbiAgbGlzdGVuZXJzID0ge1xyXG4gICAgb25CZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgbG9hZDogbnVsbCxcclxuICB9O1xyXG5cclxuICBjb21wb25lbnRzID0ge1xyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIGNlbGw6IFJlc2l6ZWFibGVUaXRsZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCBtb2RhbCA9IHByb3BzLnR5cGUgfHwgXCJhdXRvXCI7XHJcbiAgICBsZXQgc3RvcmVQcmVmaXggPSBnZXRTdG9yYWdlKFwic3RvcmUtcHJlLWtleVwiKTtcclxuICAgIGxldCBhdXRvVHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIGF1dG9UeXBlID0gYXV0b1R5cGU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkYXRhU291cmNlOiBbXSxcclxuICAgICAgY29sdW1uczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAvL+aQnOe0ouaWh+acrFxyXG4gICAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogbnVsbCxcclxuICAgICAgc2VhcmNoQ29sb3I6IG51bGwsXHJcbiAgICAgIGNvbHM6IFtdLFxyXG4gICAgICBzb3J0czogW10sXHJcbiAgICAgIGZpbHRlclBhcmFtczoge30sXHJcbiAgICAgIHRhYmxlU2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8IGF1dG9UeXBlIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICBzb3J0VHlwZTogXCJzaW5nbGVcIixcclxuICAgICAgc29ydGVyOiBbXSwgLy/orrDlvZXlvZPliY3mjpLluo/lrZfmrrVcclxuICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgY2hlY2tDb2x1bW46IFtdLFxyXG4gICAgICBkZWZhdWx0Q2hlY2s6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICBmaWx0ZXI6IFtdLFxyXG4gICAgICBleHRyYToge30sXHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLnN0b3JlIGluc3RhbmNlb2YgU3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZSA9IHByb3BzLnN0b3JlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeyBsaXN0ZW5lcnM6IGxpc3RlbmVyc1Byb3BzID0ge30sIC4uLnJlc3RTdG9yZSB9ID1cclxuICAgICAgICBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgICAgY29uc3Qgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICBtb2RlbDogXCJtb2RlbFwiLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIG9uQmVmb3JlTG9hZDogKHN0b3JlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkJlZm9yZUxvYWQsIHRoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFnaW5nID0gISh0aGlzLnByb3BzLnBhZ2luYXRpb24gPT09IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFBhZ2VTdG9yZShcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdG9yZVByb3BzLCB7XHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IGN1cnJlbnQ6IDEsIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbiB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgbmV4dENvbHVtbnMgPSBbLi4uY29sc107XHJcbiAgICAgIG5leHRDb2x1bW5zW2luZGV4XSA9IHtcclxuICAgICAgICAuLi5uZXh0Q29sdW1uc1tpbmRleF0sXHJcbiAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAvLyDlnKjnirbmgIHmm7TmlrDlkI7ph43mlrDojrflj5bliJfphY3nva5cclxuICAgICAgICAgIHRoaXMuZ2V0Q29sdW1ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgbGlzdGVuTWVzc2FnZSA9IChldikgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBldi5kYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShldi5kYXRhKSA6IGV2LmRhdGE7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKGRhdGEuZXZlbnRUeXBlID09IFwiY2hhbmdlVGFibGVTaXplXCIpIHtcclxuICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkYXRhO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwiZGVmYXVsdFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwic21hbGxcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcIm1pZGRsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiBwYXlsb2FkLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmVTdGF0ZSkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zICE9PSBwcmV2UHJvcHMuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmVTdGF0ZS5jb2xzICE9PSB0aGlzLnN0YXRlLmNvbHMpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGNvbHM6IHRoaXMucHJvcHMuY29sdW1ucyxcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJldlByb3BzLnNpemUgIT09IHRoaXMucHJvcHMuc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldENvbHVtbigpIHtcclxuICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IG5ld0NvbHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbHNzID0gY29scyB8fCBbXTtcclxuICAgIGNvbHNzLm1hcCgoY29sOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIG9uSGVhZGVyQ2VsbDogKGNvbHVtbjogeyB3aWR0aDogYW55IH0pID0+ICh7XHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gICAgICAgICAgb25SZXNpemU6IHRoaXMuaGFuZGxlUmVzaXplKGluZGV4KSxcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuICAgICAgbmV3Q29scy5wdXNoKHRlbXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgY29sdW1uczogbmV3Q29scyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk6YCJ5Lit6aKc6ImyXHJcbiAgICovXHJcbiAgY2xlYXJTZWxlY3RDb2xvcigpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVJbmRleDogLTEgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGdldFBhZ2luYXRpb25CeVN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0UGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvT25DaGFuZ2UgPSB0cnVlLFxyXG4gICAgICBhdXRvU29ydCxcclxuICAgICAgYXV0b1BhZ2luYXRpb24sXHJcbiAgICAgIG9uQ2hhbmdlLFxyXG4gICAgICBzdG9yZSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgaWYgKGF1dG9PbkNoYW5nZSA9PT0gZmFsc2UgfHwgIXN0b3JlKSB7XHJcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYW5kbGVQYWdpbmF0aW9uID0gKCkgPT4ge1xyXG4gICAgICBsZXQgcGFyYW1zID0ge30gYXMge1xyXG4gICAgICAgIHNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgcGFnZVNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgYXNjcz86IHN0cmluZztcclxuICAgICAgICBkZXNjcz86IHN0cmluZztcclxuICAgICAgICBbcHJvcE5hbWU6IHN0cmluZ106IHN0cmluZztcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHx8IHt9O1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmoocGFnaW5hdGlvbikpIHtcclxuICAgICAgICBjb25zdCBwID0ge1xyXG4gICAgICAgICAgW3BhZ2luZy5jdXJyZW50S2V5IHx8IFwiY3VycmVudFwiXTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgW3BhZ2luZy5wYWdlU2l6ZUtleSB8fCBcInNpemVcIl06IHBhZ2luYXRpb24ucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgcCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFzY1BhcmFtcyA9IHRoaXMuZ2V0U29ydFBhcmFtKHNvcnRlciwgdHJ1ZSk7XHJcbiAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlciB9KTtcclxuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSAmJiAhaXNFbXB0eU9iaihzb3J0ZXIpKSB7XHJcbiAgICAgICAgc29ydGVyLmNvbHVtbiAmJlxyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW3NvcnRlcl0sIGRlZmF1bHRTb3J0OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbXSB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgIGV4dHJhLFxyXG4gICAgICB9KTtcclxuICAgICAgcGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMsIC4uLnBhcmFtcywgLi4uYXNjUGFyYW1zIH07XHJcbiAgICAgIGF1dG9Tb3J0ICYmIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNoYW5nZUZuID0gdGhpcy5wcm9wcy5vbkNoYW5nZTtcclxuXHJcbiAgICBhdXRvUGFnaW5hdGlvbiAmJiBoYW5kbGVQYWdpbmF0aW9uKCk7XHJcbiAgICAvLyDnlKjmiLfkvKDkuoZvbkNoYW5nZeS/neeVmeeUqOaIt+iHquS4u+WkhOeQhuihqOagvOWPmOWMlueahOadg+WKm1xyXG4gICAgaWYgKG9uQ2hhbmdlRm4pIHtcclxuICAgICAgdXRpbHMuY2FsbGJhY2sob25DaGFuZ2VGbiwgdGhpcywgW3BhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmFdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5bmlbDmja7mqKHlnovlr7nosaFcclxuICAgKi9cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDoj5zljZXmkJzntKLov4fmu6TmmL7npLpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgaGFuZGxlU2VhcmNoKHZhbCwgZmllbGRPcHRpb24sIHNlYXJjaENvbG9yKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VhcmNoVGV4dDogdmFsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogZmllbGRPcHRpb24sXHJcbiAgICAgIHNlYXJjaENvbG9yOiBzZWFyY2hDb2xvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qih5Z2X5YiX6KGo56e75Yqo5o6S5bqPXHJcbiAgICovXHJcbiAgbW92ZVJvdyA9IChkcmFnSW5kZXgsIGhvdmVySW5kZXgsIGRyYWcsIHRhcmdldCkgPT4ge1xyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgbGV0IGRyYWdOb2RlID0gZHJhZy5yZWNvcmQ7XHJcbiAgICBsZXQgdGFyZ2V0Tm9kZSA9IHRhcmdldC5yZWNvcmQ7XHJcbiAgICBkcmFnTm9kZS5tb3ZlQXJyYXkoZHJhZ05vZGUsIHRhcmdldE5vZGUpO1xyXG4gICAgbGV0IGlkcyA9IGRyYWdOb2RlLnBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlSWRzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBpZDogZHJhZ05vZGUuaWQsXHJcbiAgICAgIHBhcmVudElkOiBkcmFnTm9kZS5hdHRyaWJ1dGUucGFyZW50SWQsXHJcbiAgICAgIGlkczogaWRzLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wcy5tb3ZlUm93KSB7XHJcbiAgICAgIHRoaXMucHJvcHMubW92ZVJvdyhwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmaWx0ZXJDb2x1bW4oY2hlY2tlZFZhbHVlKSB7XHJcbiAgICBpZiAoY2hlY2tlZFZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIG1lc3NhZ2Uud2FybmluZyhcIuiHs+WwkeaYvuekuuS4gOWIl++8gVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoKGNvbDogQ29sdW1uVHlwZTx7fT4pID0+IHtcclxuICAgICAgY29uc3QgbmV3Q29sID0geyAuLi5jb2wgfSBhcyBDb2x1bW5UeXBlPHt9PiAmIHsgaW5pdFNob3c6IGJvb2xlYW4gfTtcclxuICAgICAgaWYgKGNoZWNrZWRWYWx1ZS5pbmNsdWRlcyhjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Q29sLmluaXRTaG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld0NvbDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2x1bW5zOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFNvcnRQYXJhbShzb3J0ZXIsIHNvcnRTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgY29uc3QgeyBzb3J0U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghc29ydFNlYXJjaCkge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBsZXQgc29ydEluZm8gPSB7fTtcclxuICAgIGxldCBvcmRlckl0ZW1zID0gW107XHJcbiAgICBpZiAoIWlzRW1wdHlPYmooc29ydGVyKSAmJiAhaXNNdWx0aXBsZSAmJiBzb3J0ZXIuY29sdW1uKSB7XHJcbiAgICAgIG9yZGVySXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sdW1uOiBzb3J0ZXIuY29sdW1uLmZpZWxkIHx8IHNvcnRlci5jb2x1bW4uZGF0YUluZGV4LFxyXG4gICAgICAgICAgYXNjOiBzb3J0ZXIub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoc29ydGVyLmNvbHVtbikgc29ydEluZm9bc29ydGVyLmNvbHVtbi5kYXRhSW5kZXhdID0gc29ydGVyLm9yZGVyO1xyXG4gICAgfSBlbHNlIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgIHNvcnRlci5mb3JFYWNoKCh2KSA9PiB7XHJcbiAgICAgICAgc29ydEluZm9bdi5jb2x1bW4uZGF0YUluZGV4XSA9IHYub3JkZXI7XHJcbiAgICAgICAgbGV0IGZpZWxkID0gdi5jb2x1bW4uZmllbGQgfHwgdi5jb2x1bW4uZGF0YUluZGV4O1xyXG4gICAgICAgIG9yZGVySXRlbXMucHVzaCh7XHJcbiAgICAgICAgICBjb2x1bW46IGZpZWxkLFxyXG4gICAgICAgICAgYXNjOiB2Lm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBzb3J0SW5mbzogc29ydEluZm8sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgb3JkZXJJdGVtczogSlNPTi5zdHJpbmdpZnkob3JkZXJJdGVtcykgfTtcclxuICB9XHJcbiAgaXNCZXlvbmQoZSkge1xyXG4gICAgY29uc3QgZXYgPSB3aW5kb3cuZXZlbnQgfHwgZTsgLy8g5rWP6KeI5Zmo5YW85a6577yM5pyA5aW95YaZ5LiA5LiLXHJcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSAoZWwpID0+IHtcclxuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBlbDtcclxuICAgICAgY29uc3QgdGFyZ2V0VyA9IHRleHRDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHRDb250ZW50LCAwKTtcclxuICAgICAgcmFuZ2Uuc2V0RW5kKHRleHRDb250ZW50LCB0ZXh0Q29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlV2lkdGggPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICAgICAgcmV0dXJuIHJhbmdlV2lkdGggPiB0YXJnZXRXO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAhdGV4dFJhbmdlKGV2LnRhcmdldCk7IC8vIHRhcmdldOWPr+S7peS/neivgeW9k+WJjeWIkui/h+eahGRvbeiKgueCueS4gOebtOS/neaMgeaYrzplbC10b29sdGlwX190cmlnZ2VyXHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhOiBBcnJheTxTdHJpbmcgfCBOdW1iZXI+KSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YTogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IGRhdGEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0Q29sdW1ucygpIHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgc29ydFR5cGUsIHNvcnRJbmZvIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBzb3J0RmllbGRzID0gW10sIHNpemUgPSBcImxhcmdlXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkZWZhdWx0U2hvd0NvbHMgPSBjb2x1bW5zLmZpbHRlcigoY29scykgPT4gY29scy5pbml0U2hvdyAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3QgY29scyA9IGRlZmF1bHRTaG93Q29scy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8g5pu/5o2iIGdldENvbHVtbnMg5pa55rOV5Lit5Y6f5p2l55qEIGVsbGlwc2lzIOWkhOeQhumDqOWIhlxyXG4gICAgICBpZiAoY29sLmVsbGlwc2lzICYmICFjb2wucmVuZGVyKSB7XHJcbiAgICAgICAgY29sLmVsbGlwc2lzID0ge1xyXG4gICAgICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbC5yZW5kZXIgPSAodGV4dCwgcmVjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgLy8g6I635Y+W5b2T5YmN5YiX55qE5a6e5pe25a695bqmXHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50Q29sID0gdGhpcy5zdGF0ZS5jb2xzPy5maW5kKChjKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOWkhOeQhiBkYXRhSW5kZXgg5Y+v6IO95piv5a2X56ym5Liy5oiW5pWw57uE55qE5oOF5Ya1XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGMuZGF0YUluZGV4KSAmJiBBcnJheS5pc0FycmF5KGNvbC5kYXRhSW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGMuZGF0YUluZGV4KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sLmRhdGFJbmRleClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGFJbmRleCA9PT0gY29sLmRhdGFJbmRleDtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFjdHVhbFdpZHRoID0gY3VycmVudENvbD8ud2lkdGggfHwgY29sLndpZHRoO1xyXG4gICAgICAgICAgbGV0IGNvbFdpZHRoOiBhbnkgPSBcIjEwMCVcIjtcclxuXHJcbiAgICAgICAgICBpZiAoYWN0dWFsV2lkdGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc3RhdGUudGFibGVTaXplIHx8IHRoaXMucHJvcHMuc2l6ZSB8fCBcImRlZmF1bHRcIjtcclxuICAgICAgICAgICAgY29uc3QgY29sV2lkdGhPYmogPSB7XHJcbiAgICAgICAgICAgICAgc21hbGw6IDE2LFxyXG4gICAgICAgICAgICAgIG1pZGRsZTogMTYsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDogMTYsXHJcbiAgICAgICAgICAgICAgbGFyZ2U6IDMyLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nV2lkdGggPSBjb2xXaWR0aE9ialtzaXplXSB8fCAxNjtcclxuXHJcbiAgICAgICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IHBhZGRpbmdXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGNvbFdpZHRoID0gYWN0dWFsV2lkdGggLSBwYWRkaW5nV2lkdGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29sV2lkdGggPSBhY3R1YWxXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJpbmxpbmUtdGFibGVcIiwgd2lkdGg6IFwiMTAwJVwiIH19PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIHJlZj17KGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa4hemZpOS5i+WJjeeahHRpdGxlXHJcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwidGl0bGVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeaWh+acrOaYr+WQpua6ouWHulxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10ZXh0XCIpfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcclxuICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiBcImVsbGlwc2lzXCIsXHJcbiAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc29ydEZpZWxkcy5pbmRleE9mKGNvbC5kYXRhSW5kZXgpID4gLTEpIHtcclxuICAgICAgICBpZiAoc29ydFR5cGUgPT0gXCJzaW5nbGVcIikge1xyXG4gICAgICAgICAgY29sLnNvcnRlciA9IHRydWU7XHJcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgPyBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0VHlwZSA9PSBcIm11bHRpcGxlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB7IG11bHRpcGxlOiBpbmRleCB9O1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcbiAgICBjb2xzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKGl0ZW0uZmlsdGVyUHJvcHMpKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHNlYXJjaEtleSB9ID0gaXRlbS5maWx0ZXJQcm9wcztcclxuICAgICAgICBsZXQgRGl2ID0gbnVsbDtcclxuICAgICAgICBsZXQgdGV4dCA9IGl0ZW0udGl0bGU7XHJcbiAgICAgICAgRGl2ID0gZ2V0Tm9kZSh0eXBlLCB7XHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogYOaQnOe0oiR7dGV4dH1gLFxyXG4gICAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgICByZWY6IHRoaXMudGFibGVTZWFyY2hSZWYsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgZmlsdGVyRHJvcGRvd246ICh7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBjb25maXJtLFxyXG4gICAgICAgICAgICBjbGVhckZpbHRlcnMsXHJcbiAgICAgICAgICB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2hcIil9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2gtc3BhY2VcIil9PlxyXG4gICAgICAgICAgICAgICAgICB7RGl2fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3BhY2U+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RmlsdGVyUGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBpdGVtLmZpZWxkIHx8IGl0ZW0uZGF0YUluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3RmlsdGVyUGFyYW1zW2tleV0gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2VhcmNoUmVmLmN1cnJlbnQ/LmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0UGFyYW0gPSB0aGlzLmdldFNvcnRQYXJhbSh0aGlzLnN0YXRlLnNvcnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zLCAuLi5zb3J0UGFyYW0gfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2gtYnV0dG9uXCIpfVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg5p+l6K+iXHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9TcGFjZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmaWx0ZXJJY29uOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8U2VhcmNoT3V0bGluZWQgLz47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ub2JqLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sc1tpbmRleF0gPSBvYmo7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHM7XHJcbiAgfVxyXG4gIHJlbmRlclRvb2xCYXIoKSB7XHJcbiAgICBsZXQgeyB0YWJsZVNpemUsIGNvbHVtbnMsIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgZmlsdGVyQ29sdW1uLCBjb2x1bW5zOiBjb2xMaXN0cywgdG9vbGJhciB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgdGFibGVUb29sLCBzdG9yZVJlcXVlc3RDb25maWcgPSB7fSB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbHMgPSBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICBsZXQgdG9vbHNDbGljayA9IHt9IGFzIGFueTtcclxuICAgIGlmICh0b29sYmFyID09IHRydWUpIHtcclxuICAgICAgdG9vbHMgPSBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0b29scyA9IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA/IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA6IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgID8gdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgOiB0b29scztcclxuICAgICAgdG9vbHNDbGljayA9IHRvb2xiYXIub25Ub29sQ2xpY2sgPyB0b29sYmFyLm9uVG9vbENsaWNrIDoge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBzaXplSXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLlrr3mnb5cIiwga2V5OiBcImRlZmF1bHRcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuS4reetiVwiLCBrZXk6IFwibWlkZGxlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLntKflh5FcIiwga2V5OiBcInNtYWxsXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0SXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLljZXlrZfmrrXmjpLluo9cIiwga2V5OiBcInNpbmdsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5aSa5a2X5q615o6S5bqPXCIsIGtleTogXCJtdWx0aXBsZVwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydENvbnRlbnQgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgY3Vyc29yOiB0aGlzLnN0YXRlLmRlZmF1bHRTb3J0ID8gXCJub3QtYWxsb3dlZFwiIDogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnN0YXRlLmRlZmF1bHRTb3J0ICYmIFwicmdiYSgwLDAsMCwuNDUpXCIsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0U29ydCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbXSwgc29ydEluZm86IHt9LCBkZWZhdWx0U29ydDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5oGi5aSN6buY6K6k5o6S5bqPXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge3NvcnRJdGVtLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICBzb3J0ZXI6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBzb3J0SW5mbzoge30sXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRUeXBlOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3NvcnRUeXBlID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb3RlbnQtdGl0bGVcIil9XHJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IFwicmdiYSgwLDAsMCwuNDUpXCIgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOW9k+WJjeaOkuW6j1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3RoaXMuc3RhdGUuc29ydGVyLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIHtpdGVtLm9yZGVyID09IFwiYXNjZW5kXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydEFzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgIDxTb3J0RGVzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLmNvbHVtbi50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPC8+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2l6ZUNvbnRlbnQgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb3RlbnQtdGl0bGVcIil9PlxyXG4gICAgICAgICAg6KGo5qC85a+G5bqmXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge3NpemVJdGVtLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICB0YWJsZVNpemU6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgPyAoXHJcbiAgICAgICAgICAgICAgICA8YT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gKFxyXG4gICAgICA8Q2hlY2tib3guR3JvdXBcclxuICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJDb2x1bW4uYmluZCh0aGlzKX1cclxuICAgICAgICBvcHRpb25zPXtjb2xMaXN0cy5tYXAoXHJcbiAgICAgICAgICAoY29sOiBDb2x1bW5UeXBlPHt9PiAmIHsgZmlsdGVyQ29sdW1uOiBib29sZWFuOyBkYXRhSW5kZXg6IGFueSB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY29sLmRhdGFJbmRleCkge1xyXG4gICAgICAgICAgICAgIGNvbC5kYXRhSW5kZXggPSBjb2wudGl0bGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBsYWJlbDogY29sLnRpdGxlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBjb2wuZGF0YUluZGV4LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjb2wuZmlsdGVyQ29sdW1uID09PSBmYWxzZSxcclxuICAgICAgICAgICAgfSBhcyBDaGVja2JveE9wdGlvblR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKX1cclxuICAgICAgICAvLyBkZWZhdWx0VmFsdWU9e2RlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleCl9XHJcbiAgICAgICAgdmFsdWU9e1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5kZWZhdWx0Q2hlY2tcclxuICAgICAgICAgICAgPyBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgIDogdGhpcy5zdGF0ZS5jaGVja0NvbHVtblxyXG4gICAgICAgIH1cclxuICAgICAgPjwvQ2hlY2tib3guR3JvdXA+XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10b29sLWJhclwiKX0+XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJjb2x1bW5cIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICB0aXRsZT1cIumAieaLqeaYvuekuueahOWIl1wiXHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcclxuICAgICAgICAgICAgICBvdmVybGF5U3R5bGU9e3sgbWluV2lkdGg6IDQxMCwgbWF4V2lkdGg6IDQ1MCB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEFwcHN0b3JlT3V0bGluZWRcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRoLWFwcC1zdG9yZS1pY29uXCIpfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzb3J0XCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzb3J0Q29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic2l6ZVwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c2l6ZUNvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxDb2x1bW5IZWlnaHRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwicmVmcmVzaFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgIGlmICh0b29sc0NsaWNrLm9uUmVmcmVzaCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHNDbGljay5vblJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFJlZG9PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dLZXlzLCByZWNvcmRbcm93S2V5XV07XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dEYXRhcywgcmVjb3JkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtW3Jvd0tleV0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IG5ld1NlbGVjdGVkUm93S2V5cyxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogbmV3U2VsZWN0ZWRSb3dEYXRhcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdEFsbChzZWxlY3RlZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueSwgY2hhbmdlUm93czogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBsZXQgbmV3ZGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKGNoYW5nZVJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hhbmdlSWRzID0gY2hhbmdlUm93cy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtyb3dLZXldKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzLCAuLi5jaGFuZ2VSb3dzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbVtyb3dLZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdkYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogWy4uLm5ld2RhdGFzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICAgIHRhYmxlU2l6ZSxcclxuICAgICAgfSA9IHRoaXMuc3RhdGUsXHJcbiAgICAgIHByb3BzID0gdXRpbHMub21pdChcclxuICAgICAgICB0aGlzLnByb3BzLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwic3RvcmVcIixcclxuICAgICAgICAgIFwib25DaGFuZ2VcIixcclxuICAgICAgICAgIFwiY29sdW1uc1wiLFxyXG4gICAgICAgICAgXCJyZXNldENvbHVtblwiLFxyXG4gICAgICAgICAgXCJ0b29sYmFyXCIsXHJcbiAgICAgICAgICBcInNvcnRGaWVsZHNcIixcclxuICAgICAgICAgIFwiZmlsdGVyQ29sdW1uXCIsXHJcbiAgICAgICAgICBcInNvcnRTZWFyY2hcIixcclxuICAgICAgICAgIFwic2hvd1Jvd1NlbGVjdGlvblwiLFxyXG4gICAgICAgICAgXCJwYWdlVHlwZVwiLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93S2V5OiBcImlkXCIsXHJcbiAgICAgICAgICBjbGlja0NoYW5nZUNvbG9yOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKF90aGlzLnN0YXRlLnBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gXCJuc2MtdGFibGUtY2xpY2tSb3dTdHlsZVwiXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3RGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRyZWVVdGlscy5nZXRTZWFyY2hNZW51RGF0YXMoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yXHJcbiAgICAgICk7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhLnRyZWVEYXRhcztcclxuICAgICAgcHJvcHMuZXhwYW5kZWRSb3dLZXlzID0gZGF0YS5vcGVuS2V5cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgfVxyXG4gICAgcHJvcHMuc3RvcmUgPSBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgIHByb3BzLnN0b3JlLmF1dG9Mb2FkID0gcHJvcHMuc3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgY29uc3QgeyBkcmFnYWJsZSB9ID0gX3RoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkcmFnYWJsZVByb3BzID1cclxuICAgICAgZHJhZ2FibGUgPT09IHRydWVcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgY29tcG9uZW50czogQm9keVJvd0NvbXBvbmVudCxcclxuICAgICAgICAgICAgb25Sb3c6IChyZWNvcmQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICBtb3ZlUm93OiB0aGlzLm1vdmVSb3csXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge307XHJcbiAgICBsZXQgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3QgcmVzaXplUHJvcHMgPVxyXG4gICAgICByZXNpemVDb2x1bW4gPT09IHRydWUgPyB7IGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50cyB9IDogbnVsbDtcclxuICAgIGNvbnN0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IGZhbHNlO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3RhYmxlVG9vbCcsdGFibGVUb29sKVxyXG5cclxuICAgIGlmICh0YWJsZVRvb2wuc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0b29sRmxhZz10cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMudG9vbGJhciAmJiB0aGlzLnByb3BzLnRvb2xiYXIuc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0b29sRmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93Um93U2VsZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHsgcm93U2VsZWN0aW9uID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgIHByb3BzID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cyxcclxuICAgICAgICAgIG9uU2VsZWN0OiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0LmJpbmQodGhpcyksXHJcbiAgICAgICAgICBvblNlbGVjdEFsbDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdEFsbC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgY29sdW1uV2lkdGg6IDQwLFxyXG4gICAgICAgICAgLi4ucm93U2VsZWN0aW9uLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHM6IGNvbmZpZ1RhYmxlUHJvcHMgfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgRGVmYXVsdFRhYmxlID0gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlXCIpfT5cclxuICAgICAgICB7dG9vbEZsYWcgJiYgdGhpcy5yZW5kZXJUb29sQmFyKCl9XHJcbiAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWU9XCJjaGlsZE5vZGVzXCJcclxuICAgICAgICAgIHNoZWl0ZW1cclxuICAgICAgICAgIGRhdGFTb3VyY2U9e25ld0RhdGFTb3VyY2V9XHJcbiAgICAgICAgICBjb2x1bW5zPXt0aGlzLmdldENvbHVtbnMoKX1cclxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudFwiKSwgcHJvcHMuY2xhc3NOYW1lKX1cclxuICAgICAgICAgIGxvY2FsZT17e1xyXG4gICAgICAgICAgICBlbXB0eVRleHQ6IChcclxuICAgICAgICAgICAgICA8Tm9EYXRhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLW5vZGF0YVwiKX0gLz5cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBzY3JvbGw9e3sgeDogXCJtYXgtY29udGVudFwiIH19XHJcbiAgICAgICAgICB7Li4uY29uZmlnVGFibGVQcm9wc31cclxuICAgICAgICAgIHsuLi5yZXNpemVQcm9wc31cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICAgIHsuLi5kcmFnYWJsZVByb3BzfVxyXG4gICAgICAgICAgc2l6ZT17dGFibGVTaXplfVxyXG4gICAgICAgICAgcGFnaW5hdGlvbj17ZmFsc2V9XHJcbiAgICAgICAgICAvLyBzdHlsZT17eyBoZWlnaHQ6IDYwMCB9fVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAge3Byb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtcGFnaW5hdGlvblwiKX0+XHJcbiAgICAgICAgICAgIDxQYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgey4uLnByb3BzLnBhZ2luYXRpb259XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdlLCBwYWdlU2l6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmEgPSB0aGlzLnN0YXRlLmV4dHJhO1xyXG4gICAgICAgICAgICAgICAgZXh0cmEuYWN0aW9uID0gXCJwYWdpbmF0ZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoeyBwYWdpbmF0aW9uID0ge30gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHsgLi4ucGFnaW5hdGlvbiwgY3VycmVudDogcGFnZSwgcGFnZVNpemUgfSxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShcclxuICAgICAgICAgICAgICAgICAgeyBjdXJyZW50OiBwYWdlLCBwYWdlU2l6ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zb3J0ZXIsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdhYmxlID09PSB0cnVlID8gKFxyXG4gICAgICA8RG5kUHJvdmlkZXIgYmFja2VuZD17SFRNTDVCYWNrZW5kfT57RGVmYXVsdFRhYmxlfTwvRG5kUHJvdmlkZXI+XHJcbiAgICApIDogKFxyXG4gICAgICBEZWZhdWx0VGFibGVcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoWmhMb2NhbGUoTlNDVGFibGUpO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLGdCQUFnQixFQUNoQkMsYUFBYSxFQUNiQyxvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLFlBQVksUUFDUCxtQkFBbUI7QUFDMUIsU0FBU0MsVUFBVSxRQUFRLG1CQUFtQjtBQUM5QyxPQUFPQyxLQUFLLElBQUlDLFNBQVMsUUFBb0IsYUFBYTtBQUMxRCxTQUFTQyxLQUFLLFFBQVEsdUJBQXVCO0FBZTdDLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsV0FBVyxRQUFRLFdBQVc7QUFDdkMsT0FBT0MsT0FBTyxJQUFJQyxjQUFjLEVBQUVDLGFBQWEsUUFBUSxtQkFBbUI7QUFDMUUsT0FBT0MsU0FBUyxNQUFNLGlCQUFpQjtBQUN2QyxPQUFPLHFCQUFxQjtBQUM1QixNQUFNO0VBQUVDLGdCQUFnQjtFQUFFQztBQUFhLENBQUMsR0FBR0wsT0FBTztBQUNsRCxPQUFPTSxZQUFZLE1BQU0sd0JBQXdCO0FBQ2pELFNBQVNDLFNBQVMsUUFBUSxpQkFBaUI7QUFDM0MsT0FBTyxzQkFBc0I7QUFDN0IsU0FBU0MsT0FBTyxFQUFFQyxPQUFPLFFBQXlCLGFBQWE7QUFDL0QsT0FBT0MsTUFBTSxNQUFNLGtCQUFrQjtBQUNyQyxTQUFTQyxVQUFVLFFBQVEsbUJBQW1CO0FBQzlDLE9BQU9DLE1BQU0sTUFBTSxjQUFjO0FBRWpDLE9BQU9DLEdBQUcsTUFBTSxZQUFZO0FBRTVCLE1BQU1DLE1BQU0sR0FBRyxJ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
1056
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImNsZWFyU2VsZWN0Q29sb3IiLCJnZXRQYWdpbmF0aW9uQnlTdG9yZSIsIm9uQ2hhbmdlIiwiZmlsdGVycyIsImF1dG9PbkNoYW5nZSIsImF1dG9Tb3J0IiwiYXV0b1BhZ2luYXRpb24iLCJpc011bHRpcGxlIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlUGFnaW5hdGlvbiIsInAiLCJjdXJyZW50S2V5IiwicGFnZVNpemVLZXkiLCJwYWdlU2l6ZSIsImFzY1BhcmFtcyIsImdldFNvcnRQYXJhbSIsIm9uQ2hhbmdlRm4iLCJnZXRTdG9yZSIsImdldE1vZGVsIiwiaGFuZGxlU2VhcmNoIiwidmFsIiwiZmlsdGVyQ29sdW1uIiwiY2hlY2tlZFZhbHVlIiwibGVuZ3RoIiwiX21lc3NhZ2UiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsIm5ld0NvbCIsImluY2x1ZGVzIiwiZGF0YUluZGV4IiwiaW5pdFNob3ciLCJzb3J0U3RhdGUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzb3J0U2VhcmNoIiwib3JkZXJJdGVtcyIsImZpZWxkIiwiYXNjIiwib3JkZXIiLCJmb3JFYWNoIiwidiIsInN0cmluZ2lmeSIsImlzQmV5b25kIiwiZXZlbnQiLCJ0ZXh0UmFuZ2UiLCJlbCIsInRleHRDb250ZW50IiwidGFyZ2V0VyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJhbmdlIiwiZG9jdW1lbnQiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwiY2hpbGROb2RlcyIsInJhbmdlV2lkdGgiLCJzZXRTZWxlY3RlZFJvd0tleXMiLCJzZXRTZWxlY3RlZFJvd0RhdGFzIiwic29ydEZpZWxkcyIsImRlZmF1bHRTaG93Q29scyIsImVsbGlwc2lzIiwicmVuZGVyIiwic2hvd1RpdGxlIiwidGV4dCIsIl90aGlzJHN0YXRlJGNvbHMiLCJjdXJyZW50Q29sIiwiZmluZCIsImMiLCJhY3R1YWxXaWR0aCIsImNvbFdpZHRoIiwiY29sV2lkdGhPYmoiLCJzbWFsbCIsIm1pZGRsZSIsImRlZmF1bHQiLCJsYXJnZSIsInBhZGRpbmdXaWR0aCIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsInJlbW92ZUF0dHJpYnV0ZSIsInNjcm9sbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc05hbWUiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJpbmRleE9mIiwic29ydE9yZGVyIiwibXVsdGlwbGUiLCJpdGVtIiwiZmlsdGVyUHJvcHMiLCJvYmoiLCJzZWFyY2hLZXkiLCJEaXYiLCJ0aXRsZSIsInBsYWNlaG9sZGVyIiwiY29uY2F0IiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsIl9yZWYzIiwic2V0U2VsZWN0ZWRLZXlzIiwic2VsZWN0ZWRLZXlzIiwiY29uZmlybSIsImNsZWFyRmlsdGVycyIsIl9TcGFjZSIsIl9CdXR0b24iLCJvbkNsaWNrIiwiX3RoaXMkdGFibGVTZWFyY2hSZWYkIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwicmVuZGVyVG9vbEJhciIsImNvbExpc3RzIiwidG9vbGJhciIsInRhYmxlVG9vbCIsInN0b3JlUmVxdWVzdENvbmZpZyIsInRvb2xzIiwidG9vbHNDbGljayIsIm9uVG9vbENsaWNrIiwic2l6ZUl0ZW0iLCJzb3J0SXRlbSIsInNvcnRDb250ZW50IiwiRnJhZ21lbnQiLCJjdXJzb3IiLCJjb2xvciIsInNpemVDb250ZW50IiwiX0NoZWNrYm94IiwiR3JvdXAiLCJiaW5kIiwibGFiZWwiLCJ2YWx1ZSIsImRpc2FibGVkIiwiZm9udFNpemUiLCJfUG9wb3ZlciIsInBsYWNlbWVudCIsInRyaWdnZXIiLCJvdmVybGF5U3R5bGUiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwibWFyZ2luUmlnaHQiLCJvblJlZnJlc2giLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJyb3dTZWxlY3Rpb25PblNlbGVjdCIsInNlbGVjdGVkIiwicm93S2V5IiwibmV3U2VsZWN0ZWRSb3dLZXlzIiwibmV3U2VsZWN0ZWRSb3dEYXRhcyIsInNwbGljZSIsInJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiX3JlZjQiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJyb3dDbGFzc05hbWUiLCJuZXdEYXRhU291cmNlIiwiZ2V0U2VhcmNoTWVudURhdGFzIiwidHJlZURhdGFzIiwiZXhwYW5kZWRSb3dLZXlzIiwib3BlbktleXMiLCJkcmFnYWJsZSIsImRyYWdhYmxlUHJvcHMiLCJjb21wb25lbnRzIiwicmVzaXplUHJvcHMiLCJ0b29sRmxhZyIsInNob3ciLCJzaG93Um93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uIiwib25TZWxlY3QiLCJvblNlbGVjdEFsbCIsImNvbHVtbldpZHRoIiwidGFibGVQcm9wcyIsImNvbmZpZ1RhYmxlUHJvcHMiLCJEZWZhdWx0VGFibGUiLCJfVGFibGUiLCJfZXh0ZW5kcyIsImNoaWxkcmVuQ29sdW1uTmFtZSIsInNoZWl0ZW0iLCJsb2NhbGUiLCJlbXB0eVRleHQiLCJzY3JvbGwiLCJ4IiwiX1BhZ2luYXRpb24iLCJwYWdlIiwiYWN0aW9uIiwiX3JlZjUiLCJiYWNrZW5kIiwiZHJhZ1VybCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXhfb2xkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBARGVzY3JpcHR0aW9uOlxyXG4gKiBAdmVyc2lvbjpcclxuICogQEF1dGhvcjogcnh6aHVcclxuICogQERhdGU6IDIwMjEtMDMtMjMgMDg6NDY6MjBcclxuICogQExhc3RFZGl0b3JzOiByeHpodVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIxLTAzLTIzIDEwOjMwOjQyXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gIEFwcHN0b3JlT3V0bGluZWQsXHJcbiAgQ2hlY2tPdXRsaW5lZCxcclxuICBDb2x1bW5IZWlnaHRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxuICBTb3J0QXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgU29ydERlc2NlbmRpbmdPdXRsaW5lZCxcclxuICBSZWRvT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIE1lbnUsXHJcbiAgbWVzc2FnZSxcclxuICBQYWdpbmF0aW9uLFxyXG4gIFBvcG92ZXIsXHJcbiAgU3BhY2UsXHJcbiAgVGFibGUsXHJcbiAgVGFibGVQcm9wcyxcclxuICBUb29sdGlwLFxyXG59IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IENvbHVtblR5cGUsIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCJhbnRkL2xpYi90YWJsZVwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtZG5kXCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCB0cmVlVXRpbHMgZnJvbSBcIi4uLy4uL3RyZWVVdGlsc1wiO1xyXG5pbXBvcnQgXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmNvbnN0IHsgQm9keVJvd0NvbXBvbmVudCwgSFRNTDVCYWNrZW5kIH0gPSBCb2R5Um93O1xyXG5pbXBvcnQgd2l0aFpoTG9jYWxlIGZyb20gXCIuLi9jb21tb24vd2l0aFpoTG9jYWxlXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSwgc2ltcGxpZnlDb2x1bW5zIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCBOb0RhdGEgZnJvbSBcIi4uL2NvbW1vbi9Ob0RhdGFcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IEVsbGlwc2VDZWxsIGZyb20gXCIuLi9jb21tb24vRWxsaXBzZUNlbGxcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuY29uc3Qgc3R5bGVzID0gbnVsbDtcclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9vbEJhclByb3BzIHtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHRvb2xzPzogQXJyYXk8c3RyaW5nPjtcclxuICBvblRvb2xDbGljaz86IHsgb25SZWZyZXNoPzogYW55OyBvblNvcnQ/OiBhbnkgfTtcclxufVxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG4gIHNvcnRGaWVsZHM/OiBBcnJheTxzdHJpbmc+OyAvL+mcgOimgeaOkuW6j+eahOWtl+autUluZGV4XHJcbiAgdG9vbGJhcj86IFRvb2xCYXJQcm9wcyB8IGJvb2xlYW47XHJcbiAgYXV0b1NpemU/OiBib29sZWFuO1xyXG4gIHNvcnRTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpua3u+WKoOaOkuW6j+afpeivoizpu5jorqR0cnVlXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47XHJcbiAgcm93S2V5Pzogc3RyaW5nO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSU5TQ1RhYmxlUHJvcHMgPSB0eXBlb2YgTlNDVGFibGUuZGVmYXVsdFByb3BzICYgTlNDVGFibGVQcm9wcztcclxuZXhwb3J0IHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfTtcclxuXHJcbmNvbnN0IFJlc2l6ZWFibGVUaXRsZSA9IChwcm9wczogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc2l6ZSwgd2lkdGgsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHM7XHJcbiAgcmV0dXJuIChcclxuICAgIDxSZXNpemFibGVcclxuICAgICAgd2lkdGg9e3dpZHRoIHx8IDE1MH1cclxuICAgICAgaGVpZ2h0PXswfVxyXG4gICAgICBvblJlc2l6ZT17b25SZXNpemV9XHJcbiAgICAgIGRyYWdnYWJsZU9wdHM9e3sgZW5hYmxlVXNlclNlbGVjdEhhY2s6IGZhbHNlIH19XHJcbiAgICA+XHJcbiAgICAgIDx0aCB7Li4ucmVzdFByb3BzfSAvPlxyXG4gICAgPC9SZXNpemFibGU+XHJcbiAgKTtcclxufTtcclxuY2xhc3MgTlNDVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SU5TQ1RhYmxlUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IHRydWUsXHJcbiAgICBkcmFnVXJsOiBcIlwiLFxyXG4gICAgYXV0b1BhZ2luYXRpb246IHRydWUsXHJcbiAgICBhdXRvU29ydDogdHJ1ZSxcclxuICAgIGF1dG9PbkNoYW5nZTogdHJ1ZSxcclxuICAgIHJlc2l6ZUNvbHVtbjogdHJ1ZSxcclxuICAgIHRvb2xiYXI6IHtcclxuICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgIG9uVG9vbENsaWNrOiB7fSBhcyBhbnksXHJcbiAgICAgIHRvb2xzOiBbXSBhcyBhbnksXHJcbiAgICB9IGFzIGFueSxcclxuICB9O1xyXG5cclxuICBzdG9yZSA9IHt9IGFzIFN0b3JlUHJvcHM7XHJcbiAgdGhJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG4gIHRhYmxlU2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuXHJcbiAgbGlzdGVuZXJzID0ge1xyXG4gICAgb25CZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgbG9hZDogbnVsbCxcclxuICB9O1xyXG5cclxuICBjb21wb25lbnRzID0ge1xyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIGNlbGw6IFJlc2l6ZWFibGVUaXRsZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCBtb2RhbCA9IHByb3BzLnR5cGUgfHwgXCJhdXRvXCI7XHJcbiAgICBsZXQgc3RvcmVQcmVmaXggPSBnZXRTdG9yYWdlKFwic3RvcmUtcHJlLWtleVwiKTtcclxuICAgIGxldCBhdXRvVHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIGF1dG9UeXBlID0gYXV0b1R5cGU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkYXRhU291cmNlOiBbXSxcclxuICAgICAgY29sdW1uczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAvL+aQnOe0ouaWh+acrFxyXG4gICAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogbnVsbCxcclxuICAgICAgc2VhcmNoQ29sb3I6IG51bGwsXHJcbiAgICAgIGNvbHM6IFtdLFxyXG4gICAgICBzb3J0czogW10sXHJcbiAgICAgIGZpbHRlclBhcmFtczoge30sXHJcbiAgICAgIHRhYmxlU2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8IGF1dG9UeXBlIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICBzb3J0VHlwZTogXCJzaW5nbGVcIixcclxuICAgICAgc29ydGVyOiBbXSwgLy/orrDlvZXlvZPliY3mjpLluo/lrZfmrrVcclxuICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgY2hlY2tDb2x1bW46IFtdLFxyXG4gICAgICBkZWZhdWx0Q2hlY2s6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICBmaWx0ZXI6IFtdLFxyXG4gICAgICBleHRyYToge30sXHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLnN0b3JlIGluc3RhbmNlb2YgU3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZSA9IHByb3BzLnN0b3JlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeyBsaXN0ZW5lcnM6IGxpc3RlbmVyc1Byb3BzID0ge30sIC4uLnJlc3RTdG9yZSB9ID1cclxuICAgICAgICBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgICAgY29uc3Qgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICBtb2RlbDogXCJtb2RlbFwiLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIG9uQmVmb3JlTG9hZDogKHN0b3JlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkJlZm9yZUxvYWQsIHRoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFnaW5nID0gISh0aGlzLnByb3BzLnBhZ2luYXRpb24gPT09IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFBhZ2VTdG9yZShcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdG9yZVByb3BzLCB7XHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IGN1cnJlbnQ6IDEsIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbiB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgbmV4dENvbHVtbnMgPSBbLi4uY29sc107XHJcbiAgICAgIG5leHRDb2x1bW5zW2luZGV4XSA9IHtcclxuICAgICAgICAuLi5uZXh0Q29sdW1uc1tpbmRleF0sXHJcbiAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAvLyDlnKjnirbmgIHmm7TmlrDlkI7ph43mlrDojrflj5bliJfphY3nva5cclxuICAgICAgICAgIHRoaXMuZ2V0Q29sdW1ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgbGlzdGVuTWVzc2FnZSA9IChldikgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBldi5kYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShldi5kYXRhKSA6IGV2LmRhdGE7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKGRhdGEuZXZlbnRUeXBlID09IFwiY2hhbmdlVGFibGVTaXplXCIpIHtcclxuICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkYXRhO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwiZGVmYXVsdFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwic21hbGxcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcIm1pZGRsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiBwYXlsb2FkLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmVTdGF0ZSkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zICE9PSBwcmV2UHJvcHMuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmVTdGF0ZS5jb2xzICE9PSB0aGlzLnN0YXRlLmNvbHMpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGNvbHM6IHRoaXMucHJvcHMuY29sdW1ucyxcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJldlByb3BzLnNpemUgIT09IHRoaXMucHJvcHMuc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldENvbHVtbigpIHtcclxuICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IG5ld0NvbHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbHNzID0gY29scyB8fCBbXTtcclxuICAgIGNvbHNzLm1hcCgoY29sOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIG9uSGVhZGVyQ2VsbDogKGNvbHVtbjogeyB3aWR0aDogYW55IH0pID0+ICh7XHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gICAgICAgICAgb25SZXNpemU6IHRoaXMuaGFuZGxlUmVzaXplKGluZGV4KSxcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuICAgICAgbmV3Q29scy5wdXNoKHRlbXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgY29sdW1uczogbmV3Q29scyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk6YCJ5Lit6aKc6ImyXHJcbiAgICovXHJcbiAgY2xlYXJTZWxlY3RDb2xvcigpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVJbmRleDogLTEgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGdldFBhZ2luYXRpb25CeVN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0UGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvT25DaGFuZ2UgPSB0cnVlLFxyXG4gICAgICBhdXRvU29ydCxcclxuICAgICAgYXV0b1BhZ2luYXRpb24sXHJcbiAgICAgIG9uQ2hhbmdlLFxyXG4gICAgICBzdG9yZSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgaWYgKGF1dG9PbkNoYW5nZSA9PT0gZmFsc2UgfHwgIXN0b3JlKSB7XHJcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYW5kbGVQYWdpbmF0aW9uID0gKCkgPT4ge1xyXG4gICAgICBsZXQgcGFyYW1zID0ge30gYXMge1xyXG4gICAgICAgIHNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgcGFnZVNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgYXNjcz86IHN0cmluZztcclxuICAgICAgICBkZXNjcz86IHN0cmluZztcclxuICAgICAgICBbcHJvcE5hbWU6IHN0cmluZ106IHN0cmluZztcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHx8IHt9O1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmoocGFnaW5hdGlvbikpIHtcclxuICAgICAgICBjb25zdCBwID0ge1xyXG4gICAgICAgICAgW3BhZ2luZy5jdXJyZW50S2V5IHx8IFwiY3VycmVudFwiXTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgW3BhZ2luZy5wYWdlU2l6ZUtleSB8fCBcInNpemVcIl06IHBhZ2luYXRpb24ucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgcCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFzY1BhcmFtcyA9IHRoaXMuZ2V0U29ydFBhcmFtKHNvcnRlciwgdHJ1ZSk7XHJcbiAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlciB9KTtcclxuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSAmJiAhaXNFbXB0eU9iaihzb3J0ZXIpKSB7XHJcbiAgICAgICAgc29ydGVyLmNvbHVtbiAmJlxyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW3NvcnRlcl0sIGRlZmF1bHRTb3J0OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbXSB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgIGV4dHJhLFxyXG4gICAgICB9KTtcclxuICAgICAgcGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMsIC4uLnBhcmFtcywgLi4uYXNjUGFyYW1zIH07XHJcbiAgICAgIGF1dG9Tb3J0ICYmIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNoYW5nZUZuID0gdGhpcy5wcm9wcy5vbkNoYW5nZTtcclxuXHJcbiAgICBhdXRvUGFnaW5hdGlvbiAmJiBoYW5kbGVQYWdpbmF0aW9uKCk7XHJcbiAgICAvLyDnlKjmiLfkvKDkuoZvbkNoYW5nZeS/neeVmeeUqOaIt+iHquS4u+WkhOeQhuihqOagvOWPmOWMlueahOadg+WKm1xyXG4gICAgaWYgKG9uQ2hhbmdlRm4pIHtcclxuICAgICAgdXRpbHMuY2FsbGJhY2sob25DaGFuZ2VGbiwgdGhpcywgW3BhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmFdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5bmlbDmja7mqKHlnovlr7nosaFcclxuICAgKi9cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDoj5zljZXmkJzntKLov4fmu6TmmL7npLpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgaGFuZGxlU2VhcmNoKHZhbCwgZmllbGRPcHRpb24sIHNlYXJjaENvbG9yKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VhcmNoVGV4dDogdmFsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogZmllbGRPcHRpb24sXHJcbiAgICAgIHNlYXJjaENvbG9yOiBzZWFyY2hDb2xvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qih5Z2X5YiX6KGo56e75Yqo5o6S5bqPXHJcbiAgICovXHJcbiAgbW92ZVJvdyA9IChkcmFnSW5kZXgsIGhvdmVySW5kZXgsIGRyYWcsIHRhcmdldCkgPT4ge1xyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgbGV0IGRyYWdOb2RlID0gZHJhZy5yZWNvcmQ7XHJcbiAgICBsZXQgdGFyZ2V0Tm9kZSA9IHRhcmdldC5yZWNvcmQ7XHJcbiAgICBkcmFnTm9kZS5tb3ZlQXJyYXkoZHJhZ05vZGUsIHRhcmdldE5vZGUpO1xyXG4gICAgbGV0IGlkcyA9IGRyYWdOb2RlLnBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlSWRzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBpZDogZHJhZ05vZGUuaWQsXHJcbiAgICAgIHBhcmVudElkOiBkcmFnTm9kZS5hdHRyaWJ1dGUucGFyZW50SWQsXHJcbiAgICAgIGlkczogaWRzLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wcy5tb3ZlUm93KSB7XHJcbiAgICAgIHRoaXMucHJvcHMubW92ZVJvdyhwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmaWx0ZXJDb2x1bW4oY2hlY2tlZFZhbHVlKSB7XHJcbiAgICBpZiAoY2hlY2tlZFZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIG1lc3NhZ2Uud2FybmluZyhcIuiHs+WwkeaYvuekuuS4gOWIl++8gVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoKGNvbDogQ29sdW1uVHlwZTx7fT4pID0+IHtcclxuICAgICAgY29uc3QgbmV3Q29sID0geyAuLi5jb2wgfSBhcyBDb2x1bW5UeXBlPHt9PiAmIHsgaW5pdFNob3c6IGJvb2xlYW4gfTtcclxuICAgICAgaWYgKGNoZWNrZWRWYWx1ZS5pbmNsdWRlcyhjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Q29sLmluaXRTaG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld0NvbDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2x1bW5zOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFNvcnRQYXJhbShzb3J0ZXIsIHNvcnRTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgY29uc3QgeyBzb3J0U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghc29ydFNlYXJjaCkge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBsZXQgc29ydEluZm8gPSB7fTtcclxuICAgIGxldCBvcmRlckl0ZW1zID0gW107XHJcbiAgICBpZiAoIWlzRW1wdHlPYmooc29ydGVyKSAmJiAhaXNNdWx0aXBsZSAmJiBzb3J0ZXIuY29sdW1uKSB7XHJcbiAgICAgIG9yZGVySXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sdW1uOiBzb3J0ZXIuY29sdW1uLmZpZWxkIHx8IHNvcnRlci5jb2x1bW4uZGF0YUluZGV4LFxyXG4gICAgICAgICAgYXNjOiBzb3J0ZXIub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoc29ydGVyLmNvbHVtbikgc29ydEluZm9bc29ydGVyLmNvbHVtbi5kYXRhSW5kZXhdID0gc29ydGVyLm9yZGVyO1xyXG4gICAgfSBlbHNlIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgIHNvcnRlci5mb3JFYWNoKCh2KSA9PiB7XHJcbiAgICAgICAgc29ydEluZm9bdi5jb2x1bW4uZGF0YUluZGV4XSA9IHYub3JkZXI7XHJcbiAgICAgICAgbGV0IGZpZWxkID0gdi5jb2x1bW4uZmllbGQgfHwgdi5jb2x1bW4uZGF0YUluZGV4O1xyXG4gICAgICAgIG9yZGVySXRlbXMucHVzaCh7XHJcbiAgICAgICAgICBjb2x1bW46IGZpZWxkLFxyXG4gICAgICAgICAgYXNjOiB2Lm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBzb3J0SW5mbzogc29ydEluZm8sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgb3JkZXJJdGVtczogSlNPTi5zdHJpbmdpZnkob3JkZXJJdGVtcykgfTtcclxuICB9XHJcbiAgaXNCZXlvbmQoZSkge1xyXG4gICAgY29uc3QgZXYgPSB3aW5kb3cuZXZlbnQgfHwgZTsgLy8g5rWP6KeI5Zmo5YW85a6577yM5pyA5aW95YaZ5LiA5LiLXHJcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSAoZWwpID0+IHtcclxuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBlbDtcclxuICAgICAgY29uc3QgdGFyZ2V0VyA9IHRleHRDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHRDb250ZW50LCAwKTtcclxuICAgICAgcmFuZ2Uuc2V0RW5kKHRleHRDb250ZW50LCB0ZXh0Q29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlV2lkdGggPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICAgICAgcmV0dXJuIHJhbmdlV2lkdGggPiB0YXJnZXRXO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAhdGV4dFJhbmdlKGV2LnRhcmdldCk7IC8vIHRhcmdldOWPr+S7peS/neivgeW9k+WJjeWIkui/h+eahGRvbeiKgueCueS4gOebtOS/neaMgeaYrzplbC10b29sdGlwX190cmlnZ2VyXHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhOiBBcnJheTxTdHJpbmcgfCBOdW1iZXI+KSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YTogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IGRhdGEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0Q29sdW1ucygpIHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgc29ydFR5cGUsIHNvcnRJbmZvIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBzb3J0RmllbGRzID0gW10sIHNpemUgPSBcImxhcmdlXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkZWZhdWx0U2hvd0NvbHMgPSBjb2x1bW5zLmZpbHRlcigoY29scykgPT4gY29scy5pbml0U2hvdyAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3QgY29scyA9IGRlZmF1bHRTaG93Q29scy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8g5pu/5o2iIGdldENvbHVtbnMg5pa55rOV5Lit5Y6f5p2l55qEIGVsbGlwc2lzIOWkhOeQhumDqOWIhlxyXG4gICAgICBpZiAoY29sLmVsbGlwc2lzICYmICFjb2wucmVuZGVyKSB7XHJcbiAgICAgICAgY29sLmVsbGlwc2lzID0ge1xyXG4gICAgICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbC5yZW5kZXIgPSAodGV4dCwgcmVjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgLy8g6I635Y+W5b2T5YmN5YiX55qE5a6e5pe25a695bqmXHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50Q29sID0gdGhpcy5zdGF0ZS5jb2xzPy5maW5kKChjKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOWkhOeQhiBkYXRhSW5kZXgg5Y+v6IO95piv5a2X56ym5Liy5oiW5pWw57uE55qE5oOF5Ya1XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGMuZGF0YUluZGV4KSAmJiBBcnJheS5pc0FycmF5KGNvbC5kYXRhSW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGMuZGF0YUluZGV4KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sLmRhdGFJbmRleClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGFJbmRleCA9PT0gY29sLmRhdGFJbmRleDtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFjdHVhbFdpZHRoID0gY3VycmVudENvbD8ud2lkdGggfHwgY29sLndpZHRoO1xyXG4gICAgICAgICAgbGV0IGNvbFdpZHRoOiBhbnkgPSBcIjEwMCVcIjtcclxuXHJcbiAgICAgICAgICBpZiAoYWN0dWFsV2lkdGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc3RhdGUudGFibGVTaXplIHx8IHRoaXMucHJvcHMuc2l6ZSB8fCBcImRlZmF1bHRcIjtcclxuICAgICAgICAgICAgY29uc3QgY29sV2lkdGhPYmogPSB7XHJcbiAgICAgICAgICAgICAgc21hbGw6IDE2LFxyXG4gICAgICAgICAgICAgIG1pZGRsZTogMTYsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDogMTYsXHJcbiAgICAgICAgICAgICAgbGFyZ2U6IDMyLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nV2lkdGggPSBjb2xXaWR0aE9ialtzaXplXSB8fCAxNjtcclxuXHJcbiAgICAgICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IHBhZGRpbmdXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGNvbFdpZHRoID0gYWN0dWFsV2lkdGggLSBwYWRkaW5nV2lkdGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29sV2lkdGggPSBhY3R1YWxXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJpbmxpbmUtdGFibGVcIiwgd2lkdGg6IFwiMTAwJVwiIH19PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIHJlZj17KGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa4hemZpOS5i+WJjeeahHRpdGxlXHJcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwidGl0bGVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeaWh+acrOaYr+WQpua6ouWHulxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10ZXh0XCIpfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcclxuICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiBcImVsbGlwc2lzXCIsXHJcbiAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc29ydEZpZWxkcy5pbmRleE9mKGNvbC5kYXRhSW5kZXgpID4gLTEpIHtcclxuICAgICAgICBpZiAoc29ydFR5cGUgPT0gXCJzaW5nbGVcIikge1xyXG4gICAgICAgICAgY29sLnNvcnRlciA9IHRydWU7XHJcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgPyBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0VHlwZSA9PSBcIm11bHRpcGxlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB7IG11bHRpcGxlOiBpbmRleCB9O1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcbiAgICBjb2xzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKGl0ZW0uZmlsdGVyUHJvcHMpKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHNlYXJjaEtleSB9ID0gaXRlbS5maWx0ZXJQcm9wcztcclxuICAgICAgICBsZXQgRGl2ID0gbnVsbDtcclxuICAgICAgICBsZXQgdGV4dCA9IGl0ZW0udGl0bGU7XHJcbiAgICAgICAgRGl2ID0gZ2V0Tm9kZSh0eXBlLCB7XHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogYOaQnOe0oiR7dGV4dH1gLFxyXG4gICAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgICByZWY6IHRoaXMudGFibGVTZWFyY2hSZWYsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgZmlsdGVyRHJvcGRvd246ICh7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBjb25maXJtLFxyXG4gICAgICAgICAgICBjbGVhckZpbHRlcnMsXHJcbiAgICAgICAgICB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2hcIil9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2gtc3BhY2VcIil9PlxyXG4gICAgICAgICAgICAgICAgICB7RGl2fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3BhY2U+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RmlsdGVyUGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBpdGVtLmZpZWxkIHx8IGl0ZW0uZGF0YUluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3RmlsdGVyUGFyYW1zW2tleV0gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2VhcmNoUmVmLmN1cnJlbnQ/LmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0UGFyYW0gPSB0aGlzLmdldFNvcnRQYXJhbSh0aGlzLnN0YXRlLnNvcnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zLCAuLi5zb3J0UGFyYW0gfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1zZWFyY2gtYnV0dG9uXCIpfVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg5p+l6K+iXHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9TcGFjZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmaWx0ZXJJY29uOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8U2VhcmNoT3V0bGluZWQgLz47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ub2JqLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sc1tpbmRleF0gPSBvYmo7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHM7XHJcbiAgfVxyXG4gIHJlbmRlclRvb2xCYXIoKSB7XHJcbiAgICBsZXQgeyB0YWJsZVNpemUsIGNvbHVtbnMsIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgZmlsdGVyQ29sdW1uLCBjb2x1bW5zOiBjb2xMaXN0cywgdG9vbGJhciB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgdGFibGVUb29sLCBzdG9yZVJlcXVlc3RDb25maWcgPSB7fSB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbHMgPSBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICBsZXQgdG9vbHNDbGljayA9IHt9IGFzIGFueTtcclxuICAgIGlmICh0b29sYmFyID09IHRydWUpIHtcclxuICAgICAgdG9vbHMgPSBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0b29scyA9IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA/IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA6IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgID8gdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgOiB0b29scztcclxuICAgICAgdG9vbHNDbGljayA9IHRvb2xiYXIub25Ub29sQ2xpY2sgPyB0b29sYmFyLm9uVG9vbENsaWNrIDoge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBzaXplSXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLlrr3mnb5cIiwga2V5OiBcImRlZmF1bHRcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuS4reetiVwiLCBrZXk6IFwibWlkZGxlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLntKflh5FcIiwga2V5OiBcInNtYWxsXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0SXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLljZXlrZfmrrXmjpLluo9cIiwga2V5OiBcInNpbmdsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5aSa5a2X5q615o6S5bqPXCIsIGtleTogXCJtdWx0aXBsZVwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydENvbnRlbnQgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgY3Vyc29yOiB0aGlzLnN0YXRlLmRlZmF1bHRTb3J0ID8gXCJub3QtYWxsb3dlZFwiIDogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnN0YXRlLmRlZmF1bHRTb3J0ICYmIFwicmdiYSgwLDAsMCwuNDUpXCIsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0U29ydCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbXSwgc29ydEluZm86IHt9LCBkZWZhdWx0U29ydDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5oGi5aSN6buY6K6k5o6S5bqPXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge3NvcnRJdGVtLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICBzb3J0ZXI6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBzb3J0SW5mbzoge30sXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRUeXBlOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3NvcnRUeXBlID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb3RlbnQtdGl0bGVcIil9XHJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IFwicmdiYSgwLDAsMCwuNDUpXCIgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOW9k+WJjeaOkuW6j1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3RoaXMuc3RhdGUuc29ydGVyLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIHtpdGVtLm9yZGVyID09IFwiYXNjZW5kXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydEFzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgIDxTb3J0RGVzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLmNvbHVtbi50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPC8+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2l6ZUNvbnRlbnQgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb3RlbnQtdGl0bGVcIil9PlxyXG4gICAgICAgICAg6KGo5qC85a+G5bqmXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge3NpemVJdGVtLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICB0YWJsZVNpemU6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgPyAoXHJcbiAgICAgICAgICAgICAgICA8YT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gKFxyXG4gICAgICA8Q2hlY2tib3guR3JvdXBcclxuICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJDb2x1bW4uYmluZCh0aGlzKX1cclxuICAgICAgICBvcHRpb25zPXtjb2xMaXN0cy5tYXAoXHJcbiAgICAgICAgICAoY29sOiBDb2x1bW5UeXBlPHt9PiAmIHsgZmlsdGVyQ29sdW1uOiBib29sZWFuOyBkYXRhSW5kZXg6IGFueSB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY29sLmRhdGFJbmRleCkge1xyXG4gICAgICAgICAgICAgIGNvbC5kYXRhSW5kZXggPSBjb2wudGl0bGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBsYWJlbDogY29sLnRpdGxlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBjb2wuZGF0YUluZGV4LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjb2wuZmlsdGVyQ29sdW1uID09PSBmYWxzZSxcclxuICAgICAgICAgICAgfSBhcyBDaGVja2JveE9wdGlvblR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKX1cclxuICAgICAgICAvLyBkZWZhdWx0VmFsdWU9e2RlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleCl9XHJcbiAgICAgICAgdmFsdWU9e1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5kZWZhdWx0Q2hlY2tcclxuICAgICAgICAgICAgPyBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgIDogdGhpcy5zdGF0ZS5jaGVja0NvbHVtblxyXG4gICAgICAgIH1cclxuICAgICAgPjwvQ2hlY2tib3guR3JvdXA+XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10b29sLWJhclwiKX0+XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJjb2x1bW5cIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICB0aXRsZT1cIumAieaLqeaYvuekuueahOWIl1wiXHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcclxuICAgICAgICAgICAgICBvdmVybGF5U3R5bGU9e3sgbWluV2lkdGg6IDQxMCwgbWF4V2lkdGg6IDQ1MCB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEFwcHN0b3JlT3V0bGluZWRcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRoLWFwcC1zdG9yZS1pY29uXCIpfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzb3J0XCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzb3J0Q29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic2l6ZVwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c2l6ZUNvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxDb2x1bW5IZWlnaHRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwicmVmcmVzaFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgIGlmICh0b29sc0NsaWNrLm9uUmVmcmVzaCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHNDbGljay5vblJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFJlZG9PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dLZXlzLCByZWNvcmRbcm93S2V5XV07XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dEYXRhcywgcmVjb3JkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtW3Jvd0tleV0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IG5ld1NlbGVjdGVkUm93S2V5cyxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogbmV3U2VsZWN0ZWRSb3dEYXRhcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdEFsbChzZWxlY3RlZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueSwgY2hhbmdlUm93czogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBsZXQgbmV3ZGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKGNoYW5nZVJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hhbmdlSWRzID0gY2hhbmdlUm93cy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtyb3dLZXldKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzLCAuLi5jaGFuZ2VSb3dzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbVtyb3dLZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdkYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogWy4uLm5ld2RhdGFzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICAgIHRhYmxlU2l6ZSxcclxuICAgICAgfSA9IHRoaXMuc3RhdGUsXHJcbiAgICAgIHByb3BzID0gdXRpbHMub21pdChcclxuICAgICAgICB0aGlzLnByb3BzLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwic3RvcmVcIixcclxuICAgICAgICAgIFwib25DaGFuZ2VcIixcclxuICAgICAgICAgIFwiY29sdW1uc1wiLFxyXG4gICAgICAgICAgXCJyZXNldENvbHVtblwiLFxyXG4gICAgICAgICAgXCJ0b29sYmFyXCIsXHJcbiAgICAgICAgICBcInNvcnRGaWVsZHNcIixcclxuICAgICAgICAgIFwiZmlsdGVyQ29sdW1uXCIsXHJcbiAgICAgICAgICBcInNvcnRTZWFyY2hcIixcclxuICAgICAgICAgIFwic2hvd1Jvd1NlbGVjdGlvblwiLFxyXG4gICAgICAgICAgXCJwYWdlVHlwZVwiLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93S2V5OiBcImlkXCIsXHJcbiAgICAgICAgICBjbGlja0NoYW5nZUNvbG9yOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKF90aGlzLnN0YXRlLnBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gXCJuc2MtdGFibGUtY2xpY2tSb3dTdHlsZVwiXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3RGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRyZWVVdGlscy5nZXRTZWFyY2hNZW51RGF0YXMoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yXHJcbiAgICAgICk7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhLnRyZWVEYXRhcztcclxuICAgICAgcHJvcHMuZXhwYW5kZWRSb3dLZXlzID0gZGF0YS5vcGVuS2V5cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgfVxyXG4gICAgcHJvcHMuc3RvcmUgPSBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgIHByb3BzLnN0b3JlLmF1dG9Mb2FkID0gcHJvcHMuc3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgY29uc3QgeyBkcmFnYWJsZSB9ID0gX3RoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkcmFnYWJsZVByb3BzID1cclxuICAgICAgZHJhZ2FibGUgPT09IHRydWVcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgY29tcG9uZW50czogQm9keVJvd0NvbXBvbmVudCxcclxuICAgICAgICAgICAgb25Sb3c6IChyZWNvcmQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICBtb3ZlUm93OiB0aGlzLm1vdmVSb3csXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge307XHJcbiAgICBsZXQgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3QgcmVzaXplUHJvcHMgPVxyXG4gICAgICByZXNpemVDb2x1bW4gPT09IHRydWUgPyB7IGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50cyB9IDogbnVsbDtcclxuICAgIGNvbnN0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IGZhbHNlO1xyXG4gICAgaWYgKHRhYmxlVG9vbC5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xGbGFnPXRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy50b29sYmFyICYmIHRoaXMucHJvcHMudG9vbGJhci5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLnNob3dSb3dTZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgeyByb3dTZWxlY3Rpb24gPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgICAuLi5yb3dTZWxlY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFibGVQcm9wczogY29uZmlnVGFibGVQcm9wcyB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBEZWZhdWx0VGFibGUgPSAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGVcIil9PlxyXG4gICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCYXIoKX1cclxuICAgICAgICA8VGFibGVcclxuICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZT1cImNoaWxkTm9kZXNcIlxyXG4gICAgICAgICAgc2hlaXRlbVxyXG4gICAgICAgICAgZGF0YVNvdXJjZT17bmV3RGF0YVNvdXJjZX1cclxuICAgICAgICAgIGNvbHVtbnM9e3RoaXMuZ2V0Q29sdW1ucygpfVxyXG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50XCIpLCBwcm9wcy5jbGFzc05hbWUpfVxyXG4gICAgICAgICAgbG9jYWxlPXt7XHJcbiAgICAgICAgICAgIGVtcHR5VGV4dDogKFxyXG4gICAgICAgICAgICAgIDxOb0RhdGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtbm9kYXRhXCIpfSAvPlxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHNjcm9sbD17eyB4OiBcIm1heC1jb250ZW50XCIgfX1cclxuICAgICAgICAgIHsuLi5jb25maWdUYWJsZVByb3BzfVxyXG4gICAgICAgICAgey4uLnJlc2l6ZVByb3BzfVxyXG4gICAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAgICAgey4uLmRyYWdhYmxlUHJvcHN9XHJcbiAgICAgICAgICBzaXplPXt0YWJsZVNpemV9XHJcbiAgICAgICAgICBwYWdpbmF0aW9uPXtmYWxzZX1cclxuICAgICAgICAgIC8vIHN0eWxlPXt7IGhlaWdodDogNjAwIH19XHJcbiAgICAgICAgLz5cclxuICAgICAgICB7cHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1wYWdpbmF0aW9uXCIpfT5cclxuICAgICAgICAgICAgPFBhZ2luYXRpb25cclxuICAgICAgICAgICAgICB7Li4ucHJvcHMucGFnaW5hdGlvbn1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17KHBhZ2UsIHBhZ2VTaXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IHRoaXMuc3RhdGUuZXh0cmE7XHJcbiAgICAgICAgICAgICAgICBleHRyYS5hY3Rpb24gPSBcInBhZ2luYXRlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCh7IHBhZ2luYXRpb24gPSB7fSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogeyAuLi5wYWdpbmF0aW9uLCBjdXJyZW50OiBwYWdlLCBwYWdlU2l6ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKFxyXG4gICAgICAgICAgICAgICAgICB7IGN1cnJlbnQ6IHBhZ2UsIHBhZ2VTaXplIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNvcnRlcixcclxuICAgICAgICAgICAgICAgICAgZXh0cmFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZHJhZ2FibGUgPT09IHRydWUgPyAoXHJcbiAgICAgIDxEbmRQcm92aWRlciBiYWNrZW5kPXtIVE1MNUJhY2tlbmR9PntEZWZhdWx0VGFibGV9PC9EbmRQcm92aWRlcj5cclxuICAgICkgOiAoXHJcbiAgICAgIERlZmF1bHRUYWJsZVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOU0NUYWJsZSk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDRUEsZ0JBQWdCLEVBQ2hCQyxhQUFhLEVBQ2JDLG9CQUFvQixFQUNwQkMsY0FBYyxFQUNkQyxxQkFBcUIsRUFDckJDLHNCQUFzQixFQUN0QkMsWUFBWSxRQUNQLG1CQUFtQjtBQUMxQixTQUFTQyxVQUFVLFFBQVEsbUJBQW1CO0FBQzlDLE9BQU9DLEtBQUssSUFBSUMsU0FBUyxRQUFvQixhQUFhO0FBQzFELFNBQVNDLEtBQUssUUFBUSx1QkFBdUI7QUFlN0MsT0FBTyxLQUFLQyxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxXQUFXLFFBQVEsV0FBVztBQUN2QyxPQUFPQyxPQUFPLElBQUlDLGNBQWMsRUFBRUMsYUFBYSxRQUFRLG1CQUFtQjtBQUMxRSxPQUFPQyxTQUFTLE1BQU0saUJBQWlCO0FBQ3ZDLE9BQU8scUJBQXFCO0FBQzVCLE1BQU07RUFBRUMsZ0JBQWdCO0VBQUVDO0FBQWEsQ0FBQyxHQUFHTCxPQUFPO0FBQ2xELE9BQU9NLFlBQVksTUFBTSx3QkFBd0I7QUFDakQsU0FBU0MsU0FBUyxRQUFRLGlCQUFpQjtBQUMzQyxPQUFPLHNCQUFzQjtBQUM3QixTQUFTQyxPQUFPLEVBQUVDLE9BQU8sUUFBeUIsYUFBYTtBQUMvRCxPQUFPQyxNQUFNLE1BQU0sa0JBQWtCO0FBQ3JDLFNBQVNDLFVBQVUsUUFBUSxtQkFBbUI7QUFDOUMsT0FBT0MsTUFBTSxNQUFNLGNBQWM7QUFFakMsT0FBT0MsR0FBRyxNQUFNLFlBQVk7QUFFNUIsTUFBTUMsTUFBTSxHQUFHLElBQUk7O0FBTW5COztBQXFDQSxTQUFTYixjQUFjLEVBQUVDLGFBQWE7QUFFdEMsTUFB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