"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["attendance-job_item_amendment-JobItemAmendmentViewController"],{1960:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JobItemAmendmentViewController\": () => (/* binding */ JobItemAmendmentViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass JobItemAmendmentViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#job_item_amendment_view_container',\n\n\n\t\t\tcurrent_default_record: {}\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\t\t//this._super('initialize', options );\n\t\tthis.edit_view_tpl = 'JobItemAmendmentEditView.html';\n\t\tthis.permission_id = 'job_item';\n\t\tthis.viewId = 'JobItemAmendment';\n\t\tthis.script_name = 'JobItemAmendmentView';\n\t\tthis.table_name_key = 'job_item_amendment';\n\t\tthis.context_menu_name = $.i18n._( 'Task Amendments' );\n\t\tthis.navigation_label = $.i18n._( 'Task Amendment' );\n\n\t\tthis.api = TTAPI.APIJobItemAmendment;\n\n\t\tthis.job_api = TTAPI.APIJob;\n\t\tthis.job_item_api = TTAPI.APIJobItem;\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: ['copy'],\n\t\t\tinclude: []\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_task_amendment': { 'label': $.i18n._( 'Task Amendment' ) },\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tthis.navigation.AComboBox( {\n\t\t\tapi_class: TTAPI.APIJobItemAmendment,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_job_item_amendment',\n\t\t\tnavigation_mode: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\n\t\tthis.setNavigation();\n\n\t\t//Tab 0 start\n\n\t\tvar tab_task_amendment = this.edit_view_tab.find( '#tab_task_amendment' );\n\n\t\tvar tab_task_amendment_column1 = tab_task_amendment.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_task_amendment_column1 );\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\n\n\t\t//Job\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIJob,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_job',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: false,\n\t\t\tsetRealValueCallBack: ( function( val ) {\n\n\t\t\t\tif ( val ) {\n\t\t\t\t\tjob_coder.setValue( val.manual_id );\n\t\t\t\t}\n\t\t\t} ),\n\t\t\tfield: 'job_id'\n\t\t} );\n\n\t\twidgetContainer = $( '
' );\n\n\t\tvar job_coder = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tjob_coder.TTextInput( { field: 'job_quick_search', disable_keyup_event: true } );\n\t\tjob_coder.addClass( 'job-coder' );\n\n\t\twidgetContainer.append( job_coder );\n\t\twidgetContainer.append( form_item_input );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Job' ), [form_item_input, job_coder], tab_task_amendment_column1, '', widgetContainer );\n\n\t\t// Task\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIJobItem,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_job_item',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tsetRealValueCallBack: ( function( val ) {\n\n\t\t\t\tif ( val ) {\n\t\t\t\t\tjob_item_coder.setValue( val.manual_id );\n\t\t\t\t}\n\t\t\t} ),\n\t\t\tfield: 'item_id'\n\t\t} );\n\n\t\twidgetContainer = $( '
' );\n\n\t\tvar job_item_coder = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tjob_item_coder.TTextInput( { field: 'job_item_quick_search', disable_keyup_event: true } );\n\t\tjob_item_coder.addClass( 'job-coder' );\n\n\t\twidgetContainer.append( job_item_coder );\n\t\twidgetContainer.append( form_item_input );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Task' ), [form_item_input, job_item_coder], tab_task_amendment_column1, '', widgetContainer );\n\n\t\t//Estimated Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'estimate_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Estimated Time' ), form_item_input, tab_task_amendment_column1, '', null, true, true );\n\n\t\t//Billable Rate\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'billable_rate', width: 86 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Billable Rate' ), form_item_input, tab_task_amendment_column1 );\n\n\t\t//Minimum Time\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'minimum_time', mode: 'time_unit', need_parser_sec: true } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Billable Time' ), form_item_input, tab_task_amendment_column1, '', null );\n\n\t\t//Estimated Quantity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'estimate_quantity', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Estimated Quantity' ), form_item_input, tab_task_amendment_column1 );\n\n\t\t//Estimated Bad Quantity\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'estimate_bad_quantity', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Estimated Bad Quantity' ), form_item_input, tab_task_amendment_column1 );\n\n\t\t//Bad Quantity Rate\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'bad_quantity_rate', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Bad Quantity Rate' ), form_item_input, tab_task_amendment_column1 );\n\t}\n\n\t/* jshint ignore:start */\n\tsetCurrentEditRecordData() {\n\t\t//Set current edit record data to all widgets\n\n\t\tif ( Global.isFalseOrNull( this.current_edit_record['user_id'] ) ) {\n\t\t\tthis.current_edit_record['user_id'] = LocalCacheData.getLoginUser().id;\n\t\t}\n\n\t\tfor ( var key in this.current_edit_record ) {\n\t\t\tvar widget = this.edit_view_ui_dic[key];\n\t\t\tif ( Global.isSet( widget ) ) {\n\t\t\t\tswitch ( key ) {\n\t\t\t\t\tcase 'item_id':\n\t\t\t\t\t\tvar args = {};\n\t\t\t\t\t\targs.filter_data = { job_id: this.current_edit_record.job_id };\n\t\t\t\t\t\twidget.setDefaultArgs( args );\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_quick_search':\n//\t\t\t\t\t\twidget.setValue( this.current_edit_record['job_id'] ? this.current_edit_record['job_id'] : 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_item_quick_search':\n//\t\t\t\t\t\twidget.setValue( this.current_edit_record['item_id'] ? this.current_edit_record['item_id'] : 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif ( Global.isSet( this.current_default_record[key] ) ) {\n\t\t\t\t\t\t\tthis.current_edit_record[key] = this.current_default_record[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tthis.collectUIDataToCurrentEditRecord();\n\t\tthis.setEditViewDataDone();\n\t}\n\n\tsetEditViewDataDone() {\n\t\tthis.current_default_record = {};\n\t\tsuper.setEditViewDataDone();\n\t}\n\n\t/* jshint ignore:start */\n\tonFormItemChange( target, doNotValidate ) {\n\t\tvar $this = this;\n\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\n\t\tthis.current_edit_record[key] = c_value;\n\n\t\tvar amount_arr = false;\n\n\t\tswitch ( key ) {\n\t\t\tcase 'job_id':\n\t\t\t\tthis.edit_view_ui_dic['job_quick_search'].setValue( target.getValue( true ) ? ( target.getValue( true ).manual_id ? target.getValue( true ).manual_id : '' ) : '' );\n\t\t\t\tthis.setJobItemValueWhenJobChanged( target.getValue( true ), 'item_id', { job_id: $this.current_edit_record.job_id } );\n\t\t\t\tthis.edit_view_ui_dic['job_quick_search'].setCheckBox( true );\n\t\t\t\tbreak;\n\t\t\tcase 'item_id':\n\t\t\t\tthis.edit_view_ui_dic['job_item_quick_search'].setValue( target.getValue( true ) ? ( target.getValue( true ).manual_id ? target.getValue( true ).manual_id : '' ) : '' );\n\t\t\t\tthis.setJobItemAmendmentDefaultData();\n\t\t\t\tthis.edit_view_ui_dic['job_item_quick_search'].setCheckBox( true );\n\t\t\t\tbreak;\n\t\t\tcase 'job_quick_search':\n\t\t\tcase 'job_item_quick_search':\n\t\t\t\tthis.onJobQuickSearch( key, c_value, 'job_id', 'item_id' );\n\n\t\t\t\tTTPromise.wait( 'BaseViewController', 'onJobQuickSearch', function() {\n\t\t\t\t\t$this.setJobItemAmendmentDefaultData();\n\t\t\t\t} );\n\n\t\t\t\tTTPromise.wait( 'BaseViewController', 'setJobItemValueWhenJobChanged', function() {\n\t\t\t\t\t$this.setJobItemAmendmentDefaultData();\n\t\t\t\t} );\n\n\t\t\t\t//Don't validate immediately as onJobQuickSearch is doing async API calls, and it would cause a guaranteed validation failure.\n\t\t\t\tvar doNotValidate = true;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tvalidate() {\n\n\t\tvar $this = this;\n\n\t\tvar record = {};\n\n\t\tif ( this.is_mass_editing ) {\n\n\t\t\tif ( $this.sub_view_mode && $this.parent_key ) {\n\t\t\t\trecord[$this.parent_key] = $this.parent_value;\n\t\t\t}\n\n\t\t\tfor ( var key in this.edit_view_ui_dic ) {\n\n\t\t\t\tif ( !this.edit_view_ui_dic.hasOwnProperty( key ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar widget = this.edit_view_ui_dic[key];\n\n\t\t\t\tif ( Global.isSet( widget.isChecked ) ) {\n\t\t\t\t\tif ( widget.isChecked() && widget.getEnabled() ) {\n\t\t\t\t\t\trecord[key] = widget.getValue();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\trecord = this.current_edit_record;\n\t\t}\n\n\t\trecord = this.uniformVariable( record );\n\n\t\tthis.api['validate' + this.api.key_name]( record, {\n\t\t\tonResult: function( result ) {\n\t\t\t\t$this.validateResult( result );\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tsetJobItemAmendmentDefaultData() {\n\t\tvar $this = this;\n\t\tvar job_item_id;\n\t\tif ( TTUUID.isUUID( this.current_edit_record.item_id ) && this.current_edit_record.item_id != TTUUID.zero_id && this.is_add ) {\n\t\t\tjob_item_id = this.current_edit_record.item_id;\n\t\t\tthis.api['get' + this.api.key_name + 'DefaultData']( job_item_id, {\n\t\t\t\tonResult: function( result ) {\n\t\t\t\t\tvar result_data = result.getResult();\n\t\t\t\t\tif ( !result_data ) {\n\t\t\t\t\t\tresult_data = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.current_default_record = result_data;\n\t\t\t\t\t$this.setCurrentEditRecordData();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\t/* jshint ignore:end */\n\n}\n\nJobItemAmendmentViewController.loadSubView = function( container, beforeViewLoadedFun, afterViewLoadedFun ) {\n\n\tGlobal.loadViewSource( 'JobItemAmendment', 'SubJobItemAmendmentView.html', function( result ) {\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tif ( Global.isSet( beforeViewLoadedFun ) ) {\n\t\t\tbeforeViewLoadedFun();\n\t\t}\n\n\t\tif ( Global.isSet( container ) ) {\n\t\t\tcontainer.html( template( args ) );\n\t\t\tif ( Global.isSet( afterViewLoadedFun ) ) {\n\n\t\t\t\tTTPromise.wait( 'BaseViewController', 'initialize', function() {\n\t\t\t\t\tafterViewLoadedFun( sub_job_item_amendment_view_controller );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbnRlcmZhY2UvaHRtbDUvdmlld3MvYXR0ZW5kYW5jZS9qb2JfaXRlbV9hbWVuZG1lbnQvSm9iSXRlbUFtZW5kbWVudFZpZXdDb250cm9sbGVyLmpzP2JlNTUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEpvYkl0ZW1BbWVuZG1lbnRWaWV3Q29udHJvbGxlciBleHRlbmRzIEJhc2VWaWV3Q29udHJvbGxlciB7XG5cdGNvbnN0cnVjdG9yKCBvcHRpb25zID0ge30gKSB7XG5cdFx0Xy5kZWZhdWx0cyggb3B0aW9ucywge1xuXHRcdFx0ZWw6ICcjam9iX2l0ZW1fYW1lbmRtZW50X3ZpZXdfY29udGFpbmVyJyxcblxuXG5cdFx0XHRjdXJyZW50X2RlZmF1bHRfcmVjb3JkOiB7fVxuXHRcdH0gKTtcblxuXHRcdHN1cGVyKCBvcHRpb25zICk7XG5cdH1cblxuXHRpbml0KCBvcHRpb25zICkge1xuXHRcdC8vdGhpcy5fc3VwZXIoJ2luaXRpYWxpemUnLCBvcHRpb25zICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdHBsID0gJ0pvYkl0ZW1BbWVuZG1lbnRFZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAnam9iX2l0ZW0nO1xuXHRcdHRoaXMudmlld0lkID0gJ0pvYkl0ZW1BbWVuZG1lbnQnO1xuXHRcdHRoaXMuc2NyaXB0X25hbWUgPSAnSm9iSXRlbUFtZW5kbWVudFZpZXcnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAnam9iX2l0ZW1fYW1lbmRtZW50Jztcblx0XHR0aGlzLmNvbnRleHRfbWVudV9uYW1lID0gJC5pMThuLl8oICdUYXNrIEFtZW5kbWVudHMnICk7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uX2xhYmVsID0gJC5pMThuLl8oICdUYXNrIEFtZW5kbWVudCcgKTtcblxuXHRcdHRoaXMuYXBpID0gVFRBUEkuQVBJSm9iSXRlbUFtZW5kbWVudDtcblxuXHRcdHRoaXMuam9iX2FwaSA9IFRUQVBJLkFQSUpvYjtcblx0XHR0aGlzLmpvYl9pdGVtX2FwaSA9IFRUQVBJLkFQSUpvYkl0ZW07XG5cblx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdHRoaXMuYnVpbGRDb250ZXh0TWVudSgpO1xuXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xuXHR9XG5cblx0Z2V0Q3VzdG9tQ29udGV4dE1lbnVNb2RlbCgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X21vZGVsID0ge1xuXHRcdFx0ZXhjbHVkZTogWydjb3B5J10sXG5cdFx0XHRpbmNsdWRlOiBbXVxuXHRcdH07XG5cblx0XHRyZXR1cm4gY29udGV4dF9tZW51X21vZGVsO1xuXHR9XG5cblx0YnVpbGRFZGl0Vmlld1VJKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRFZGl0Vmlld1VJKCk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHRhYl9tb2RlbCA9IHtcblx0XHRcdCd0YWJfdGFza19hbWVuZG1lbnQnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnVGFzayBBbWVuZG1lbnQnICkgfSxcblx0XHRcdCd0YWJfYXVkaXQnOiB0cnVlLFxuXHRcdH07XG5cdFx0dGhpcy5zZXRUYWJNb2RlbCggdGFiX21vZGVsICk7XG5cblx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUpvYkl0ZW1BbWVuZG1lbnQsXG5cdFx0XHRpZDogdGhpcy5zY3JpcHRfbmFtZSArICdfbmF2aWdhdGlvbicsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfam9iX2l0ZW1fYW1lbmRtZW50Jyxcblx0XHRcdG5hdmlnYXRpb25fbW9kZTogdHJ1ZSxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuc2V0TmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UYWIgMCBzdGFydFxuXG5cdFx0dmFyIHRhYl90YXNrX2FtZW5kbWVudCA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl90YXNrX2FtZW5kbWVudCcgKTtcblxuXHRcdHZhciB0YWJfdGFza19hbWVuZG1lbnRfY29sdW1uMSA9IHRhYl90YXNrX2FtZW5kbWVudC5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0ucHVzaCggdGFiX3Rhc2tfYW1lbmRtZW50X2NvbHVtbjEgKTtcblxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQ7XG5cdFx0dmFyIHdpZGdldENvbnRhaW5lcjtcblx0XHR2YXIgbGFiZWw7XG5cblx0XHQvL0pvYlxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJSm9iLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2pvYicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IGZhbHNlLFxuXHRcdFx0c2V0UmVhbFZhbHVlQ2FsbEJhY2s6ICggZnVuY3Rpb24oIHZhbCApIHtcblxuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRqb2JfY29kZXIuc2V0VmFsdWUoIHZhbC5tYW51YWxfaWQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApLFxuXHRcdFx0ZmllbGQ6ICdqb2JfaWQnXG5cdFx0fSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdHZhciBqb2JfY29kZXIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRqb2JfY29kZXIuVFRleHRJbnB1dCggeyBmaWVsZDogJ2pvYl9xdWlja19zZWFyY2gnLCBkaXNhYmxlX2tleXVwX2V2ZW50OiB0cnVlIH0gKTtcblx0XHRqb2JfY29kZXIuYWRkQ2xhc3MoICdqb2ItY29kZXInICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBqb2JfY29kZXIgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmb3JtX2l0ZW1faW5wdXQgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0pvYicgKSwgW2Zvcm1faXRlbV9pbnB1dCwgam9iX2NvZGVyXSwgdGFiX3Rhc2tfYW1lbmRtZW50X2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIgKTtcblxuXHRcdC8vIFRhc2tcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUpvYkl0ZW0sXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfam9iX2l0ZW0nLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0c2V0UmVhbFZhbHVlQ2FsbEJhY2s6ICggZnVuY3Rpb24oIHZhbCApIHtcblxuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRqb2JfaXRlbV9jb2Rlci5zZXRWYWx1ZSggdmFsLm1hbnVhbF9pZCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICksXG5cdFx0XHRmaWVsZDogJ2l0ZW1faWQnXG5cdFx0fSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdHZhciBqb2JfaXRlbV9jb2RlciA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGpvYl9pdGVtX2NvZGVyLlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdqb2JfaXRlbV9xdWlja19zZWFyY2gnLCBkaXNhYmxlX2tleXVwX2V2ZW50OiB0cnVlIH0gKTtcblx0XHRqb2JfaXRlbV9jb2Rlci5hZGRDbGFzcyggJ2pvYi1jb2RlcicgKTtcblxuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGpvYl9pdGVtX2NvZGVyICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUYXNrJyApLCBbZm9ybV9pdGVtX2lucHV0LCBqb2JfaXRlbV9jb2Rlcl0sIHRhYl90YXNrX2FtZW5kbWVudF9jb2x1bW4xLCAnJywgd2lkZ2V0Q29udGFpbmVyICk7XG5cblx0XHQvL0VzdGltYXRlZCBUaW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdlc3RpbWF0ZV90aW1lJywgbW9kZTogJ3RpbWVfdW5pdCcsIG5lZWRfcGFyc2VyX3NlYzogdHJ1ZSB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VzdGltYXRlZCBUaW1lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90YXNrX2FtZW5kbWVudF9jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0Ly9CaWxsYWJsZSBSYXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2JpbGxhYmxlX3JhdGUnLCB3aWR0aDogODYgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQmlsbGFibGUgUmF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdGFza19hbWVuZG1lbnRfY29sdW1uMSApO1xuXG5cdFx0Ly9NaW5pbXVtIFRpbWVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21pbmltdW1fdGltZScsIG1vZGU6ICd0aW1lX3VuaXQnLCBuZWVkX3BhcnNlcl9zZWM6IHRydWUgfSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaW5pbXVtIEJpbGxhYmxlIFRpbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3Rhc2tfYW1lbmRtZW50X2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvL0VzdGltYXRlZCBRdWFudGl0eVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdlc3RpbWF0ZV9xdWFudGl0eScsIHdpZHRoOiAxNTAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRXN0aW1hdGVkIFF1YW50aXR5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90YXNrX2FtZW5kbWVudF9jb2x1bW4xICk7XG5cblx0XHQvL0VzdGltYXRlZCBCYWQgUXVhbnRpdHlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnZXN0aW1hdGVfYmFkX3F1YW50aXR5Jywgd2lkdGg6IDE1MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdFc3RpbWF0ZWQgQmFkIFF1YW50aXR5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90YXNrX2FtZW5kbWVudF9jb2x1bW4xICk7XG5cblx0XHQvL0JhZCBRdWFudGl0eSBSYXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2JhZF9xdWFudGl0eV9yYXRlJywgd2lkdGg6IDE1MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdCYWQgUXVhbnRpdHkgUmF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdGFza19hbWVuZG1lbnRfY29sdW1uMSApO1xuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHRzZXRDdXJyZW50RWRpdFJlY29yZERhdGEoKSB7XG5cdFx0Ly9TZXQgY3VycmVudCBlZGl0IHJlY29yZCBkYXRhIHRvIGFsbCB3aWRnZXRzXG5cblx0XHRpZiAoIEdsb2JhbC5pc0ZhbHNlT3JOdWxsKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3VzZXJfaWQnXSApICkge1xuXHRcdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd1c2VyX2lkJ10gPSBMb2NhbENhY2hlRGF0YS5nZXRMb2dpblVzZXIoKS5pZDtcblx0XHR9XG5cblx0XHRmb3IgKCB2YXIga2V5IGluIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCApIHtcblx0XHRcdHZhciB3aWRnZXQgPSB0aGlzLmVkaXRfdmlld191aV9kaWNba2V5XTtcblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCB3aWRnZXQgKSApIHtcblx0XHRcdFx0c3dpdGNoICgga2V5ICkge1xuXHRcdFx0XHRcdGNhc2UgJ2l0ZW1faWQnOlxuXHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHRcdFx0XHRcdGFyZ3MuZmlsdGVyX2RhdGEgPSB7IGpvYl9pZDogdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmpvYl9pZCB9O1xuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldERlZmF1bHRBcmdzKCBhcmdzICk7XG5cdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdqb2JfcXVpY2tfc2VhcmNoJzpcbi8vXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2pvYl9pZCddID8gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydqb2JfaWQnXSA6IDAgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2pvYl9pdGVtX3F1aWNrX3NlYXJjaCc6XG4vL1x0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydpdGVtX2lkJ10gPyB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2l0ZW1faWQnXSA6IDAgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggdGhpcy5jdXJyZW50X2RlZmF1bHRfcmVjb3JkW2tleV0gKSApIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSB0aGlzLmN1cnJlbnRfZGVmYXVsdF9yZWNvcmRba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNvbGxlY3RVSURhdGFUb0N1cnJlbnRFZGl0UmVjb3JkKCk7XG5cdFx0dGhpcy5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdH1cblxuXHRzZXRFZGl0Vmlld0RhdGFEb25lKCkge1xuXHRcdHRoaXMuY3VycmVudF9kZWZhdWx0X3JlY29yZCA9IHt9O1xuXHRcdHN1cGVyLnNldEVkaXRWaWV3RGF0YURvbmUoKTtcblx0fVxuXG5cdC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblx0b25Gb3JtSXRlbUNoYW5nZSggdGFyZ2V0LCBkb05vdFZhbGlkYXRlICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR0aGlzLnNldElzQ2hhbmdlZCggdGFyZ2V0ICk7XG5cdFx0dGhpcy5zZXRNYXNzRWRpdGluZ0ZpZWxkc1doZW5Gb3JtQ2hhbmdlKCB0YXJnZXQgKTtcblxuXHRcdHZhciBrZXkgPSB0YXJnZXQuZ2V0RmllbGQoKTtcblx0XHR2YXIgY192YWx1ZSA9IHRhcmdldC5nZXRWYWx1ZSgpO1xuXG5cdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSBjX3ZhbHVlO1xuXG5cdFx0dmFyIGFtb3VudF9hcnIgPSBmYWxzZTtcblxuXHRcdHN3aXRjaCAoIGtleSApIHtcblx0XHRcdGNhc2UgJ2pvYl9pZCc6XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX3F1aWNrX3NlYXJjaCddLnNldFZhbHVlKCB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKSA/ICggdGFyZ2V0LmdldFZhbHVlKCB0cnVlICkubWFudWFsX2lkID8gdGFyZ2V0LmdldFZhbHVlKCB0cnVlICkubWFudWFsX2lkIDogJycgKSA6ICcnICk7XG5cdFx0XHRcdHRoaXMuc2V0Sm9iSXRlbVZhbHVlV2hlbkpvYkNoYW5nZWQoIHRhcmdldC5nZXRWYWx1ZSggdHJ1ZSApLCAnaXRlbV9pZCcsIHsgam9iX2lkOiAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmpvYl9pZCB9ICk7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX3F1aWNrX3NlYXJjaCddLnNldENoZWNrQm94KCB0cnVlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnaXRlbV9pZCc6XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX2l0ZW1fcXVpY2tfc2VhcmNoJ10uc2V0VmFsdWUoIHRhcmdldC5nZXRWYWx1ZSggdHJ1ZSApID8gKCB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgPyB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgOiAnJyApIDogJycgKTtcblx0XHRcdFx0dGhpcy5zZXRKb2JJdGVtQW1lbmRtZW50RGVmYXVsdERhdGEoKTtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydqb2JfaXRlbV9xdWlja19zZWFyY2gnXS5zZXRDaGVja0JveCggdHJ1ZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2pvYl9xdWlja19zZWFyY2gnOlxuXHRcdFx0Y2FzZSAnam9iX2l0ZW1fcXVpY2tfc2VhcmNoJzpcblx0XHRcdFx0dGhpcy5vbkpvYlF1aWNrU2VhcmNoKCBrZXksIGNfdmFsdWUsICdqb2JfaWQnLCAnaXRlbV9pZCcgKTtcblxuXHRcdFx0XHRUVFByb21pc2Uud2FpdCggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdvbkpvYlF1aWNrU2VhcmNoJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JHRoaXMuc2V0Sm9iSXRlbUFtZW5kbWVudERlZmF1bHREYXRhKCk7XG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRUVFByb21pc2Uud2FpdCggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdzZXRKb2JJdGVtVmFsdWVXaGVuSm9iQ2hhbmdlZCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCR0aGlzLnNldEpvYkl0ZW1BbWVuZG1lbnREZWZhdWx0RGF0YSgpO1xuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly9Eb24ndCB2YWxpZGF0ZSBpbW1lZGlhdGVseSBhcyBvbkpvYlF1aWNrU2VhcmNoIGlzIGRvaW5nIGFzeW5jIEFQSSBjYWxscywgYW5kIGl0IHdvdWxkIGNhdXNlIGEgZ3VhcmFudGVlZCB2YWxpZGF0aW9uIGZhaWx1cmUuXG5cdFx0XHRcdHZhciBkb05vdFZhbGlkYXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdH1cblxuXHRcdGlmICggIWRvTm90VmFsaWRhdGUgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0dmFsaWRhdGUoKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHJlY29yZCA9IHt9O1xuXG5cdFx0aWYgKCB0aGlzLmlzX21hc3NfZWRpdGluZyApIHtcblxuXHRcdFx0aWYgKCAkdGhpcy5zdWJfdmlld19tb2RlICYmICR0aGlzLnBhcmVudF9rZXkgKSB7XG5cdFx0XHRcdHJlY29yZFskdGhpcy5wYXJlbnRfa2V5XSA9ICR0aGlzLnBhcmVudF92YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICggdmFyIGtleSBpbiB0aGlzLmVkaXRfdmlld191aV9kaWMgKSB7XG5cblx0XHRcdFx0aWYgKCAhdGhpcy5lZGl0X3ZpZXdfdWlfZGljLmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aWRnZXQgPSB0aGlzLmVkaXRfdmlld191aV9kaWNba2V5XTtcblxuXHRcdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggd2lkZ2V0LmlzQ2hlY2tlZCApICkge1xuXHRcdFx0XHRcdGlmICggd2lkZ2V0LmlzQ2hlY2tlZCgpICYmIHdpZGdldC5nZXRFbmFibGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRba2V5XSA9IHdpZGdldC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVjb3JkID0gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdH1cblxuXHRcdHJlY29yZCA9IHRoaXMudW5pZm9ybVZhcmlhYmxlKCByZWNvcmQgKTtcblxuXHRcdHRoaXMuYXBpWyd2YWxpZGF0ZScgKyB0aGlzLmFwaS5rZXlfbmFtZV0oIHJlY29yZCwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdCR0aGlzLnZhbGlkYXRlUmVzdWx0KCByZXN1bHQgKTtcblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHNldEpvYkl0ZW1BbWVuZG1lbnREZWZhdWx0RGF0YSgpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBqb2JfaXRlbV9pZDtcblx0XHRpZiAoIFRUVVVJRC5pc1VVSUQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pdGVtX2lkICkgJiYgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLml0ZW1faWQgIT0gVFRVVUlELnplcm9faWQgJiYgdGhpcy5pc19hZGQgKSB7XG5cdFx0XHRqb2JfaXRlbV9pZCA9IHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pdGVtX2lkO1xuXHRcdFx0dGhpcy5hcGlbJ2dldCcgKyB0aGlzLmFwaS5rZXlfbmFtZSArICdEZWZhdWx0RGF0YSddKCBqb2JfaXRlbV9pZCwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0XHRcdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhcmVzdWx0X2RhdGEgKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IFtdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCR0aGlzLmN1cnJlbnRfZGVmYXVsdF9yZWNvcmQgPSByZXN1bHRfZGF0YTtcblx0XHRcdFx0XHQkdGhpcy5zZXRDdXJyZW50RWRpdFJlY29yZERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbn1cblxuSm9iSXRlbUFtZW5kbWVudFZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3ID0gZnVuY3Rpb24oIGNvbnRhaW5lciwgYmVmb3JlVmlld0xvYWRlZEZ1biwgYWZ0ZXJWaWV3TG9hZGVkRnVuICkge1xuXG5cdEdsb2JhbC5sb2FkVmlld1NvdXJjZSggJ0pvYkl0ZW1BbWVuZG1lbnQnLCAnU3ViSm9iSXRlbUFtZW5kbWVudFZpZXcuaHRtbCcsIGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHR2YXIgdGVtcGxhdGUgPSBfLnRlbXBsYXRlKCByZXN1bHQgKTtcblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCBiZWZvcmVWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRiZWZvcmVWaWV3TG9hZGVkRnVuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBHbG9iYWwuaXNTZXQoIGNvbnRhaW5lciApICkge1xuXHRcdFx0Y29udGFpbmVyLmh0bWwoIHRlbXBsYXRlKCBhcmdzICkgKTtcblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCBhZnRlclZpZXdMb2FkZWRGdW4gKSApIHtcblxuXHRcdFx0XHRUVFByb21pc2Uud2FpdCggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdpbml0aWFsaXplJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0YWZ0ZXJWaWV3TG9hZGVkRnVuKCBzdWJfam9iX2l0ZW1fYW1lbmRtZW50X3ZpZXdfY29udHJvbGxlciApO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1960\n")}}]);