"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["reports-us_state_unemployment-USStateUnemploymentReportViewController"],{2786:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"USStateUnemploymentReportViewController\": () => (/* binding */ USStateUnemploymentReportViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass USStateUnemploymentReportViewController extends ReportBaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tform_setup_states_array: null,\n\n\t\t\tform_setup_ui_dic: {},\n\t\t\tform_setup_data: {},\n\n\t\t\tsave_form_setup_data: {}\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinitReport( options ) {\n\t\tthis.script_name = 'USStateUnemploymentReport';\n\t\tthis.viewId = 'USStateUnemploymentReport';\n\t\tthis.context_menu_name = $.i18n._( 'US State Unemployment' );\n\t\tthis.navigation_label = $.i18n._( 'Saved Report' );\n\t\tthis.view_file = 'USStateUnemploymentReportView.html';\n\t\tthis.api = TTAPI.APIUSStateUnemploymentReport;\n\t\tthis.include_form_setup = true;\n\t\tthis.form_setup_data = {};\n\t}\n\n\tinitOptions( callBack ) {\n\t\tvar options = [\n\t\t\t{ option_name: 'page_orientation' },\n\t\t\t{ option_name: 'font_size' },\n\t\t\t{ option_name: 'auto_refresh' },\n\t\t\t{ option_name: 'chart_display_mode' },\n\t\t\t{ option_name: 'chart_type' },\n\t\t\t{ option_name: 'templates' },\n\t\t\t{ option_name: 'setup_fields' },\n\t\t\t{ option_name: 'form_setup_states' }\n\t\t];\n\n\t\tthis.initDropDownOptions( options, function( result ) {\n\n\t\t\tcallBack( result ); // First to initialize drop down options, and then to initialize edit view UI.\n\n\t\t} );\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\tgroups: {\n\t\t\t},\n\t\t\texclude: [],\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Save Setup' ),\n\t\t\t\t\tid: 'save_setup',\n\t\t\t\t\tgroup: 'form',\n\t\t\t\t\tvue_icon: 'tticon tticon-settings_black_24dp',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\tsort_order: 3000\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tonContextMenuClick( context_btn, menu_name ) {\n\t\tvar id;\n\t\tif ( Global.isSet( menu_name ) ) {\n\t\t\tid = menu_name;\n\t\t} else {\n\n\t\t\tif ( context_btn.disabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.select_grid_last_row ) {\n\t\t\tthis.export_grid.grid.jqGrid( 'saveRow', this.select_grid_last_row );\n\t\t\tthis.select_grid_last_row = null;\n\t\t}\n\n\t\tvar message_override = $.i18n._( 'Setup data for this report has not been configured yet. Please click on the Form Setup tab to do so now.' );\n\n\t\tswitch ( id ) {\n\t\t\tcase 'view':\n\t\t\t\tProgressBar.showOverlay();\n\t\t\t\tthis.onViewClick( null, false, message_override );\n\t\t\t\tbreak;\n\t\t\tcase 'view_html':\n\t\t\t\tProgressBar.showOverlay();\n\t\t\t\tthis.onViewClick( 'html', false, message_override );\n\t\t\t\tbreak;\n\t\t\tcase 'view_html_new_window':\n\t\t\t\tthis.onViewClick( 'html', false, message_override );\n\t\t\t\tbreak;\n\t\t\tcase 'cancel':\n\t\t\t\tthis.onCancelClick();\n\t\t\t\tbreak;\n\t\t\tcase 'save_existed_report': //All report view\n\t\t\t\tthis.onSaveExistedReportClick();\n\t\t\t\tbreak;\n\t\t\tcase 'save_new_report': //All report view\n\t\t\t\tthis.onSaveNewReportClick();\n\t\t\t\tbreak;\n\t\t\tcase 'save_setup': //All report view\n\t\t\t\tthis.onSaveSetup( $.i18n._( 'Form setup' ) );\n\t\t\t\tbreak;\n\t\t}\n\t\tGlobal.triggerAnalyticsContextMenuClick( context_btn, menu_name );\n\t}\n\n\tbuildEditViewUI() {\n\t\tsuper.buildEditViewUI();\n\n\t\tvar tab_3_label = this.edit_view.find( 'a[ref=tab_form_setup]' );\n\t\ttab_3_label.text( $.i18n._( 'Form Setup' ) );\n\t}\n\n\tbuildFormSetupUI() {\n\n\t\tvar $this = this;\n\n\t\tvar tab3 = this.edit_view_tab.find( '#tab_form_setup' );\n\n\t\tvar tab3_column1 = tab3.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[3] = [];\n\n\t\tthis.edit_view_tabs[3].push( tab3_column1 );\n\n\t\t//Form setup\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'form_setup_type', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.form_setup_states_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'State' ), form_item_input, tab3_column1, '' );\n\n\t\tform_item_input.bind( 'formItemChange', function( e, target ) {\n\t\t\t$this.onFormSetupChange( target.getValue() );\n\t\t} );\n\t}\n\n\tonFormSetupChange( state ) {\n\t\tvar $this = this;\n\n\t\tthis.removeCurrentFormSetupUI();\n\t\tthis.form_setup_ui_dic = {};\n\n\t\tswitch ( state ) {\n\t\t\tcase 'IA':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'reporting_unit_number', $.i18n._( 'Reporting Unit Number' ) );\n\t\t\t\tbreak;\n\t\t\tcase 'CA':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'branch_code', $.i18n._( 'Branch Code' ) );\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'wage_plan_code', $.i18n._( 'Wage Plan Code' ) );\n\t\t\t\tbreak;\n\t\t\tcase 'CO':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'branch_code', $.i18n._( 'Unit / Division / Location / Plant Code' ) );\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'is_seasonal', $.i18n._( 'Seasonal' ) );\n\t\t\t\tbreak;\n\t\t\tcase 'IN':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'occupation_classification_code', $.i18n._( 'Occupation Classification Code' ) );\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'designation', $.i18n._( 'Designation [FT/PT/Seasonal]' ) );\n\t\t\t\tbreak;\n\t\t\tcase 'MI':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'multi_unit_number', $.i18n._( 'Multi-Unit Number' ) );\n\t\t\t\tbreak;\n\t\t\tcase 'TX':\n\t\t\t\t$this.buildAdditionalCustomInputBox( state, 'county_code', $.i18n._( 'County Code' ) );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.edit_view_tab.find( '#tab_form_setup .first-column' ).append( '
'+ $.i18n._( 'No form setup required for this state.' ) +'
' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Overridden to allow stateful form_setup formats. This ensures your changes are put into memory..\n\t *\n\t * @param target\n\t * @param doNotDoValidate\n\t */\n\tonFormItemChange( target, doNotValidate ) {\n\t\tif ( target && target.getField && target.getField() == 'form_setup_type' ) { // cannot read property getField of undefined\n\t\t\tvar other = {};\n\t\t\tother.form_setup_type = this.current_edit_record.form_setup_type;\n\t\t\tother[other.form_setup_type] = {};\n\n\t\t\t// this.save_form_setup_data[other.form_setup_type] = this.getFormSetupData( other );\n\t\t\tthis.form_setup_changed = true;\n\t\t\treturn; //make room for the custom event above\n\t\t}\n\t\tsuper.onFormItemChange( target, doNotValidate );\n\t}\n\n\t/**\n\t * Get the form setup data from the api\n\t * @param res_Data\n\t */\n\tsetFormSetupData( res_data ) {\n\t\tif ( !res_data ) {\n\t\t\tthis.show_empty_message = true;\n\t\t}\n\n\t\tthis.save_form_setup_data = res_data;\n\n\t\tif ( res_data.form_setup_type ) {\n\t\t\tthis.edit_view_ui_dic.form_setup_type.setValue( res_data.form_setup_type );\n\t\t\tthis.onFormSetupChange( res_data.form_setup_type );\n\t\t}\n\t}\n\n\tbuildAdditionalCustomInputBox( state, code, label ) {\n\t\tif ( !this.save_form_setup_data ) {\n\t\t\tthis.save_form_setup_data = {};\n\t\t}\n\n\t\tif ( !this.save_form_setup_data[state] ) {\n\t\t\tthis.save_form_setup_data[state] = {};\n\t\t}\n\n\t\tvar tab3 = this.edit_view_tab.find( '#tab_form_setup' );\n\t\tvar tab3_column1 = tab3.find( '.first-column' );\n\t\tthis.edit_view_tabs[3] = [];\n\t\tthis.edit_view_tabs[3].push( tab3_column1 );\n\n\t\tvar field_name = 'form_setup_' + state + '_' + code;\n\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: field_name } );\n\n\t\tvar h_box = $( '
' );\n\t\tvar text_box = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\ttext_box.css( 'margin-left', '10px' );\n\t\ttext_box.TTextInput( { field: field_name + '_text' } );\n\t\th_box.append( form_item_input );\n\t\th_box.append( text_box );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( label ), [form_item_input, text_box], tab3_column1, '', h_box, true );\n\t\tthis.setWidgetVisible( [form_item_input, text_box] );\n\t\tform_item_input.bind( 'formItemChange', ( e, target ) => {\n\t\t\tif ( target.getValue() === 0 ) {\n\t\t\t\ttext_box.css( 'display', 'inline' );\n\t\t\t\ttext_box.setValue( '' );\n\t\t\t} else {\n\t\t\t\ttext_box.css( 'display', 'none' );\n\t\t\t}\n\t\t} );\n\n\t\tthis.api.getOptions( 'form_setup_state_codes', {\n\t\t\tonResult: ( result ) => {\n\n\t\t\t\tvar result_data = result.getResult();\n\n\t\t\t\tform_item_input.setSourceData( Global.buildRecordArray( result_data ) );\n\n\t\t\t\tif ( this.save_form_setup_data[state] && this.save_form_setup_data[state][code] ) {\n\t\t\t\t\tform_item_input.setValue( this.save_form_setup_data[state][code] );\n\t\t\t\t}\n\t\t\t\tform_item_input.trigger( 'formItemChange', [form_item_input, true] );\n\t\t\t}\n\t\t} );\n\n\t\tthis.form_setup_ui_dic[field_name] = this.edit_view_form_item_dic[field_name];\n\t\tdelete this.edit_view_form_item_dic[field_name];\n\n\t\tthis.editFieldResize( 3 );\n\t}\n\n\tremoveCurrentFormSetupUI() {\n\n\t\tfor ( var key in this.form_setup_ui_dic ) {\n\t\t\tvar html_item = this.form_setup_ui_dic[key];\n\t\t\thtml_item.remove();\n\t\t}\n\n\t\t$( '#no-setup-data' ).remove();\n\n\t\t//Error: Unable to get property 'find' of undefined or null reference in /interface/html5/ line 1033\n\t\tif ( !this.edit_view_tab ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tab3 = this.edit_view_tab.find( '#tab_form_setup' );\n\t\tvar tab3_column1 = tab3.find( '.first-column' );\n\t\tvar clear_both_div = tab3_column1.find( '.clear-both-div' );\n\n\t\tclear_both_div.remove();\n\t}\n\n\t/**\n\t * Gets array of properly configured values for the form_setup setup form.\n\t *\n\t * @param field_list Array\n\t * @returns {{}|*}\n\t */\n\tgetFormSetupFieldValues( state, field_list ) {\n\t\tvar ret_arr = {};\n\n\t\tfor ( var i = 0; i < field_list.length; i++ ) {\n\t\t\tif ( this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i]] && !this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i]].getValue() ) {\n\t\t\t\tret_arr[field_list[i]] = this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i] + '_text'].getValue();\n\t\t\t\tret_arr[field_list[i] + '_value'] = this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i] + '_text'].getValue();\n\t\t\t} else {\n\t\t\t\tif ( !this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i]] ) {\n\t\t\t\t\tret_arr[field_list[i]] = '';\n\t\t\t\t} else {\n\t\t\t\t\tret_arr[field_list[i]] = this.edit_view_ui_dic['form_setup_' + state + '_' + field_list[i]].getValue();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret_arr;\n\t}\n\n\tgetFormData( other, for_display ) {\n\t\tif ( !other || !other.form_setup_type ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tother[other.form_setup_type] = this.getFormSetupFieldValues( other.form_setup_type, this.getFieldList( other.form_setup_type ) );\n\n\t\tif ( !this.save_form_setup_data ) {\n\t\t\tthis.save_form_setup_data = {};\n\t\t}\n\t\tthis.save_form_setup_data[other.form_setup_type] = other[other.form_setup_type];\n\t\tthis.save_form_setup_data['form_setup_type'] = other.form_setup_type;\n\n\t\tif ( for_display ) {\n\t\t\tfor ( var key in this.save_form_setup_data ) {\n\t\t\t\tif ( key !== false && typeof ( this.save_form_setup_data[key] ) !== 'string' ) {\n\t\t\t\t\tthis.save_form_setup_data[key] = this.convertFormSetupValues( this.save_form_setup_data[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.save_form_setup_data;\n\t}\n\n\tgetFieldList( state ) {\n\t\tvar field_list = [];\n\n\t\tswitch ( state ) {\n\t\t\tcase 'IA':\n\t\t\t\tfield_list = ['reporting_unit_number'];\n\t\t\t\tbreak;\n\t\t\tcase 'CA':\n\t\t\t\tfield_list = ['branch_code', 'wage_plan_code'];\n\t\t\t\tbreak;\n\t\t\tcase 'CO':\n\t\t\t\tfield_list = ['branch_code', 'is_seasonal'];\n\t\t\t\tbreak;\n\t\t\tcase 'IN':\n\t\t\t\tfield_list = ['occupation_classification_code', 'occupation_classification_code', 'designation'];\n\t\t\t\tbreak;\n\t\t\tcase 'MI':\n\t\t\t\tfield_list = ['multi_unit_number'];\n\t\t\t\tbreak;\n\t\t\tcase 'TX':\n\t\t\t\tfield_list = ['county_code'];\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn field_list;\n\t}\n\n\t/* jshint ignore:start */\n\tgetFormSetupData( for_view ) {\n\t\tvar other = {};\n\t\tother.form_setup_type = this.edit_view_ui_dic.form_setup_type.getValue();\n\n\t\tother[other.form_setup_type] = {};\n\n\t\tother = this.getFormData( other, true );\n\n\t\t// if ( !for_view && other.form_setup_type ) {\n\t\t// \tvar form_setup_type = other.form_setup_type;\n\t\t// \tother = other[form_setup_type];\n\t\t// \tother.form_setup_type = form_setup_type;\n\t\t// \tother[form_setup_type] = {};\n\t\t// }\n\n\t\treturn other;\n\t}\n\n\t/**\n\t * Backwards compatible function for custom data to be moved from the way the api stores it to the way the form needs it.\n\t *\n\t * the old custom field data was stored in obj[key]\n\t * new custom field data is stored in obj[key+'_value']\n\t *\n\t * ie. obj[company_code] is now obj[company_code_value]\n\t *\n\t * @param data\n\t * @returns {*}\n\t */\n\tconvertFormSetupValues( data ) {\n\t\tfor ( var api_data_key in data ) {\n\t\t\tvar form_data_key = api_data_key.substr( 0, api_data_key.indexOf( '_value' ) );\n\t\t\tif ( api_data_key.search( '_value' ) > 0 ) {\n\t\t\t\tdata[form_data_key] = data[api_data_key];\n\t\t\t}\n\t\t}\n\t\t//conversion for lower form_setup grid data from old format\n\t\tif ( data.form_setup_columns && !data.columns && data.form_setup_type != 0 && data.form_setup_columns[data.form_setup_type] ) {\n\t\t\tdata.columns = {};\n\t\t\tdata.columns = data.form_setup_columns[data.form_setup_type].columns;\n\t\t}\n\n\t\treturn data;\n\t}\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc4Ni5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQLDJCQUEyQjtBQUMzQixFQUFFLENBQUM7QUFDSDs7QUFFQSx3QkFBd0I7QUFDeEIsc0JBQXNCOztBQUV0QjtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsQ0FBQztBQUM1QiwwQkFBMEIsQ0FBQztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLGlDQUFpQztBQUN0QyxLQUFLLDBCQUEwQjtBQUMvQixLQUFLLDZCQUE2QjtBQUNsQyxLQUFLLG1DQUFtQztBQUN4QyxLQUFLLDJCQUEyQjtBQUNoQyxLQUFLLDBCQUEwQjtBQUMvQixLQUFLLDZCQUE2QjtBQUNsQyxLQUFLO0FBQ0w7O0FBRUE7O0FBRUEsdUJBQXVCOztBQUV2QixJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLENBQUM7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixDQUFDO0FBQ3JCOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsNkNBQTZDO0FBQzVFO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5RUFBeUUsQ0FBQztBQUMxRTtBQUNBO0FBQ0EsK0RBQStELENBQUM7QUFDaEUsa0VBQWtFLENBQUM7QUFDbkU7QUFDQTtBQUNBLCtEQUErRCxDQUFDO0FBQ2hFLCtEQUErRCxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSxrRkFBa0YsQ0FBQztBQUNuRiwrREFBK0QsQ0FBQztBQUNoRTtBQUNBO0FBQ0EscUVBQXFFLENBQUM7QUFDdEU7QUFDQTtBQUNBLCtEQUErRCxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSwwSEFBMEgsc0JBQXNCLENBQUM7QUFDako7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFO0FBQy9FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsK0JBQStCLG9CQUFvQjs7QUFFbkQsY0FBYyxDQUFDO0FBQ2Y7QUFDQTtBQUNBLHlCQUF5Qiw4QkFBOEI7QUFDdkQ7QUFDQTs7QUFFQSw2QkFBNkIsQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsQ0FBQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL3JlcG9ydHMvdXNfc3RhdGVfdW5lbXBsb3ltZW50L1VTU3RhdGVVbmVtcGxveW1lbnRSZXBvcnRWaWV3Q29udHJvbGxlci5qcz9mYmM2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBVU1N0YXRlVW5lbXBsb3ltZW50UmVwb3J0Vmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBSZXBvcnRCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGZvcm1fc2V0dXBfc3RhdGVzX2FycmF5OiBudWxsLFxuXG5cdFx0XHRmb3JtX3NldHVwX3VpX2RpYzoge30sXG5cdFx0XHRmb3JtX3NldHVwX2RhdGE6IHt9LFxuXG5cdFx0XHRzYXZlX2Zvcm1fc2V0dXBfZGF0YToge31cblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdFJlcG9ydCggb3B0aW9ucyApIHtcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ1VTU3RhdGVVbmVtcGxveW1lbnRSZXBvcnQnO1xuXHRcdHRoaXMudmlld0lkID0gJ1VTU3RhdGVVbmVtcGxveW1lbnRSZXBvcnQnO1xuXHRcdHRoaXMuY29udGV4dF9tZW51X25hbWUgPSAkLmkxOG4uXyggJ1VTIFN0YXRlIFVuZW1wbG95bWVudCcgKTtcblx0XHR0aGlzLm5hdmlnYXRpb25fbGFiZWwgPSAkLmkxOG4uXyggJ1NhdmVkIFJlcG9ydCcgKTtcblx0XHR0aGlzLnZpZXdfZmlsZSA9ICdVU1N0YXRlVW5lbXBsb3ltZW50UmVwb3J0Vmlldy5odG1sJztcblx0XHR0aGlzLmFwaSA9IFRUQVBJLkFQSVVTU3RhdGVVbmVtcGxveW1lbnRSZXBvcnQ7XG5cdFx0dGhpcy5pbmNsdWRlX2Zvcm1fc2V0dXAgPSB0cnVlO1xuXHRcdHRoaXMuZm9ybV9zZXR1cF9kYXRhID0ge307XG5cdH1cblxuXHRpbml0T3B0aW9ucyggY2FsbEJhY2sgKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSBbXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAncGFnZV9vcmllbnRhdGlvbicgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdmb250X3NpemUnIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnYXV0b19yZWZyZXNoJyB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2NoYXJ0X2Rpc3BsYXlfbW9kZScgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdjaGFydF90eXBlJyB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3RlbXBsYXRlcycgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdzZXR1cF9maWVsZHMnIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnZm9ybV9zZXR1cF9zdGF0ZXMnIH1cblx0XHRdO1xuXG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb25zKCBvcHRpb25zLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXG5cdFx0XHRjYWxsQmFjayggcmVzdWx0ICk7IC8vIEZpcnN0IHRvIGluaXRpYWxpemUgZHJvcCBkb3duIG9wdGlvbnMsIGFuZCB0aGVuIHRvIGluaXRpYWxpemUgZWRpdCB2aWV3IFVJLlxuXG5cdFx0fSApO1xuXHR9XG5cblx0Z2V0Q3VzdG9tQ29udGV4dE1lbnVNb2RlbCgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X21vZGVsID0ge1xuXHRcdFx0Z3JvdXBzOiB7XG5cdFx0XHR9LFxuXHRcdFx0ZXhjbHVkZTogW10sXG5cdFx0XHRpbmNsdWRlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTYXZlIFNldHVwJyApLFxuXHRcdFx0XHRcdGlkOiAnc2F2ZV9zZXR1cCcsXG5cdFx0XHRcdFx0Z3JvdXA6ICdmb3JtJyxcblx0XHRcdFx0XHR2dWVfaWNvbjogJ3R0aWNvbiB0dGljb24tc2V0dGluZ3NfYmxhY2tfMjRkcCcsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRzb3J0X29yZGVyOiAzMDAwXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdG9uQ29udGV4dE1lbnVDbGljayggY29udGV4dF9idG4sIG1lbnVfbmFtZSApIHtcblx0XHR2YXIgaWQ7XG5cdFx0aWYgKCBHbG9iYWwuaXNTZXQoIG1lbnVfbmFtZSApICkge1xuXHRcdFx0aWQgPSBtZW51X25hbWU7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCBjb250ZXh0X2J0bi5kaXNhYmxlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5zZWxlY3RfZ3JpZF9sYXN0X3JvdyApIHtcblx0XHRcdHRoaXMuZXhwb3J0X2dyaWQuZ3JpZC5qcUdyaWQoICdzYXZlUm93JywgdGhpcy5zZWxlY3RfZ3JpZF9sYXN0X3JvdyApO1xuXHRcdFx0dGhpcy5zZWxlY3RfZ3JpZF9sYXN0X3JvdyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIG1lc3NhZ2Vfb3ZlcnJpZGUgPSAkLmkxOG4uXyggJ1NldHVwIGRhdGEgZm9yIHRoaXMgcmVwb3J0IGhhcyBub3QgYmVlbiBjb25maWd1cmVkIHlldC4gUGxlYXNlIGNsaWNrIG9uIHRoZSBGb3JtIFNldHVwIHRhYiB0byBkbyBzbyBub3cuJyApO1xuXG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICd2aWV3Jzpcblx0XHRcdFx0UHJvZ3Jlc3NCYXIuc2hvd092ZXJsYXkoKTtcblx0XHRcdFx0dGhpcy5vblZpZXdDbGljayggbnVsbCwgZmFsc2UsIG1lc3NhZ2Vfb3ZlcnJpZGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd2aWV3X2h0bWwnOlxuXHRcdFx0XHRQcm9ncmVzc0Jhci5zaG93T3ZlcmxheSgpO1xuXHRcdFx0XHR0aGlzLm9uVmlld0NsaWNrKCAnaHRtbCcsIGZhbHNlLCBtZXNzYWdlX292ZXJyaWRlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndmlld19odG1sX25ld193aW5kb3cnOlxuXHRcdFx0XHR0aGlzLm9uVmlld0NsaWNrKCAnaHRtbCcsIGZhbHNlLCBtZXNzYWdlX292ZXJyaWRlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzpcblx0XHRcdFx0dGhpcy5vbkNhbmNlbENsaWNrKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2F2ZV9leGlzdGVkX3JlcG9ydCc6IC8vQWxsIHJlcG9ydCB2aWV3XG5cdFx0XHRcdHRoaXMub25TYXZlRXhpc3RlZFJlcG9ydENsaWNrKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2F2ZV9uZXdfcmVwb3J0JzogLy9BbGwgcmVwb3J0IHZpZXdcblx0XHRcdFx0dGhpcy5vblNhdmVOZXdSZXBvcnRDbGljaygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NhdmVfc2V0dXAnOiAvL0FsbCByZXBvcnQgdmlld1xuXHRcdFx0XHR0aGlzLm9uU2F2ZVNldHVwKCAkLmkxOG4uXyggJ0Zvcm0gc2V0dXAnICkgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdEdsb2JhbC50cmlnZ2VyQW5hbHl0aWNzQ29udGV4dE1lbnVDbGljayggY29udGV4dF9idG4sIG1lbnVfbmFtZSApO1xuXHR9XG5cblx0YnVpbGRFZGl0Vmlld1VJKCkge1xuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXG5cdFx0dmFyIHRhYl8zX2xhYmVsID0gdGhpcy5lZGl0X3ZpZXcuZmluZCggJ2FbcmVmPXRhYl9mb3JtX3NldHVwXScgKTtcblx0XHR0YWJfM19sYWJlbC50ZXh0KCAkLmkxOG4uXyggJ0Zvcm0gU2V0dXAnICkgKTtcblx0fVxuXG5cdGJ1aWxkRm9ybVNldHVwVUkoKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHRhYjMgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfZm9ybV9zZXR1cCcgKTtcblxuXHRcdHZhciB0YWIzX2NvbHVtbjEgPSB0YWIzLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1szXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1szXS5wdXNoKCB0YWIzX2NvbHVtbjEgKTtcblxuXHRcdC8vRm9ybSBzZXR1cFxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdmb3JtX3NldHVwX3R5cGUnLCBzZXRfZW1wdHk6IGZhbHNlIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuZm9ybV9zZXR1cF9zdGF0ZXNfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1N0YXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYjNfY29sdW1uMSwgJycgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5iaW5kKCAnZm9ybUl0ZW1DaGFuZ2UnLCBmdW5jdGlvbiggZSwgdGFyZ2V0ICkge1xuXHRcdFx0JHRoaXMub25Gb3JtU2V0dXBDaGFuZ2UoIHRhcmdldC5nZXRWYWx1ZSgpICk7XG5cdFx0fSApO1xuXHR9XG5cblx0b25Gb3JtU2V0dXBDaGFuZ2UoIHN0YXRlICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR0aGlzLnJlbW92ZUN1cnJlbnRGb3JtU2V0dXBVSSgpO1xuXHRcdHRoaXMuZm9ybV9zZXR1cF91aV9kaWMgPSB7fTtcblxuXHRcdHN3aXRjaCAoIHN0YXRlICkge1xuXHRcdFx0Y2FzZSAnSUEnOlxuXHRcdFx0XHQkdGhpcy5idWlsZEFkZGl0aW9uYWxDdXN0b21JbnB1dEJveCggc3RhdGUsICdyZXBvcnRpbmdfdW5pdF9udW1iZXInLCAkLmkxOG4uXyggJ1JlcG9ydGluZyBVbml0IE51bWJlcicgKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0NBJzpcblx0XHRcdFx0JHRoaXMuYnVpbGRBZGRpdGlvbmFsQ3VzdG9tSW5wdXRCb3goIHN0YXRlLCAnYnJhbmNoX2NvZGUnLCAkLmkxOG4uXyggJ0JyYW5jaCBDb2RlJyApICk7XG5cdFx0XHRcdCR0aGlzLmJ1aWxkQWRkaXRpb25hbEN1c3RvbUlucHV0Qm94KCBzdGF0ZSwgJ3dhZ2VfcGxhbl9jb2RlJywgJC5pMThuLl8oICdXYWdlIFBsYW4gQ29kZScgKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0NPJzpcblx0XHRcdFx0JHRoaXMuYnVpbGRBZGRpdGlvbmFsQ3VzdG9tSW5wdXRCb3goIHN0YXRlLCAnYnJhbmNoX2NvZGUnLCAkLmkxOG4uXyggJ1VuaXQgLyBEaXZpc2lvbiAvIExvY2F0aW9uIC8gUGxhbnQgQ29kZScgKSApO1xuXHRcdFx0XHQkdGhpcy5idWlsZEFkZGl0aW9uYWxDdXN0b21JbnB1dEJveCggc3RhdGUsICdpc19zZWFzb25hbCcsICQuaTE4bi5fKCAnU2Vhc29uYWwnICkgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdJTic6XG5cdFx0XHRcdCR0aGlzLmJ1aWxkQWRkaXRpb25hbEN1c3RvbUlucHV0Qm94KCBzdGF0ZSwgJ29jY3VwYXRpb25fY2xhc3NpZmljYXRpb25fY29kZScsICQuaTE4bi5fKCAnT2NjdXBhdGlvbiBDbGFzc2lmaWNhdGlvbiBDb2RlJyApICk7XG5cdFx0XHRcdCR0aGlzLmJ1aWxkQWRkaXRpb25hbEN1c3RvbUlucHV0Qm94KCBzdGF0ZSwgJ2Rlc2lnbmF0aW9uJywgJC5pMThuLl8oICdEZXNpZ25hdGlvbiBbRlQvUFQvU2Vhc29uYWxdJyApICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnTUknOlxuXHRcdFx0XHQkdGhpcy5idWlsZEFkZGl0aW9uYWxDdXN0b21JbnB1dEJveCggc3RhdGUsICdtdWx0aV91bml0X251bWJlcicsICQuaTE4bi5fKCAnTXVsdGktVW5pdCBOdW1iZXInICkgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdUWCc6XG5cdFx0XHRcdCR0aGlzLmJ1aWxkQWRkaXRpb25hbEN1c3RvbUlucHV0Qm94KCBzdGF0ZSwgJ2NvdW50eV9jb2RlJywgJC5pMThuLl8oICdDb3VudHkgQ29kZScgKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9mb3JtX3NldHVwIC5maXJzdC1jb2x1bW4nICkuYXBwZW5kKCAnPGRpdiBpZD1cIm5vLXNldHVwLWRhdGFcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOmNlbnRlclwiPicrICQuaTE4bi5fKCAnTm8gZm9ybSBzZXR1cCByZXF1aXJlZCBmb3IgdGhpcyBzdGF0ZS4nICkgKyc8L2Rpdj4nICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVycmlkZGVuIHRvIGFsbG93IHN0YXRlZnVsIGZvcm1fc2V0dXAgZm9ybWF0cy4gVGhpcyBlbnN1cmVzIHlvdXIgY2hhbmdlcyBhcmUgcHV0IGludG8gbWVtb3J5Li5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldFxuXHQgKiBAcGFyYW0gZG9Ob3REb1ZhbGlkYXRlXG5cdCAqL1xuXHRvbkZvcm1JdGVtQ2hhbmdlKCB0YXJnZXQsIGRvTm90VmFsaWRhdGUgKSB7XG5cdFx0aWYgKCB0YXJnZXQgJiYgdGFyZ2V0LmdldEZpZWxkICYmIHRhcmdldC5nZXRGaWVsZCgpID09ICdmb3JtX3NldHVwX3R5cGUnICkgeyAvLyBjYW5ub3QgcmVhZCBwcm9wZXJ0eSBnZXRGaWVsZCBvZiB1bmRlZmluZWRcblx0XHRcdHZhciBvdGhlciA9IHt9O1xuXHRcdFx0b3RoZXIuZm9ybV9zZXR1cF90eXBlID0gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmZvcm1fc2V0dXBfdHlwZTtcblx0XHRcdG90aGVyW290aGVyLmZvcm1fc2V0dXBfdHlwZV0gPSB7fTtcblxuXHRcdFx0Ly8gdGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVtvdGhlci5mb3JtX3NldHVwX3R5cGVdID0gdGhpcy5nZXRGb3JtU2V0dXBEYXRhKCBvdGhlciApO1xuXHRcdFx0dGhpcy5mb3JtX3NldHVwX2NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuOyAvL21ha2Ugcm9vbSBmb3IgdGhlIGN1c3RvbSBldmVudCBhYm92ZVxuXHRcdH1cblx0XHRzdXBlci5vbkZvcm1JdGVtQ2hhbmdlKCB0YXJnZXQsIGRvTm90VmFsaWRhdGUgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZvcm0gc2V0dXAgZGF0YSBmcm9tIHRoZSBhcGlcblx0ICogQHBhcmFtIHJlc19EYXRhXG5cdCAqL1xuXHRzZXRGb3JtU2V0dXBEYXRhKCByZXNfZGF0YSApIHtcblx0XHRpZiAoICFyZXNfZGF0YSApIHtcblx0XHRcdHRoaXMuc2hvd19lbXB0eV9tZXNzYWdlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLnNhdmVfZm9ybV9zZXR1cF9kYXRhID0gcmVzX2RhdGE7XG5cblx0XHRpZiAoIHJlc19kYXRhLmZvcm1fc2V0dXBfdHlwZSApIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpYy5mb3JtX3NldHVwX3R5cGUuc2V0VmFsdWUoIHJlc19kYXRhLmZvcm1fc2V0dXBfdHlwZSApO1xuXHRcdFx0dGhpcy5vbkZvcm1TZXR1cENoYW5nZSggcmVzX2RhdGEuZm9ybV9zZXR1cF90eXBlICk7XG5cdFx0fVxuXHR9XG5cblx0YnVpbGRBZGRpdGlvbmFsQ3VzdG9tSW5wdXRCb3goIHN0YXRlLCBjb2RlLCBsYWJlbCApIHtcblx0XHRpZiAoICF0aGlzLnNhdmVfZm9ybV9zZXR1cF9kYXRhICkge1xuXHRcdFx0dGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICggIXRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGFbc3RhdGVdICkge1xuXHRcdFx0dGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVtzdGF0ZV0gPSB7fTtcblx0XHR9XG5cblx0XHR2YXIgdGFiMyA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9mb3JtX3NldHVwJyApO1xuXHRcdHZhciB0YWIzX2NvbHVtbjEgPSB0YWIzLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbM10gPSBbXTtcblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzNdLnB1c2goIHRhYjNfY29sdW1uMSApO1xuXG5cdFx0dmFyIGZpZWxkX25hbWUgPSAnZm9ybV9zZXR1cF8nICsgc3RhdGUgKyAnXycgKyBjb2RlO1xuXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogZmllbGRfbmFtZSB9ICk7XG5cblx0XHR2YXIgaF9ib3ggPSAkKCAnPGRpdiBjbGFzcz1cXCdoLWJveFxcJz48L2Rpdj4nICk7XG5cdFx0dmFyIHRleHRfYm94ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cdFx0dGV4dF9ib3guY3NzKCAnbWFyZ2luLWxlZnQnLCAnMTBweCcgKTtcblx0XHR0ZXh0X2JveC5UVGV4dElucHV0KCB7IGZpZWxkOiBmaWVsZF9uYW1lICsgJ190ZXh0JyB9ICk7XG5cdFx0aF9ib3guYXBwZW5kKCBmb3JtX2l0ZW1faW5wdXQgKTtcblx0XHRoX2JveC5hcHBlbmQoIHRleHRfYm94ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggbGFiZWwgKSwgW2Zvcm1faXRlbV9pbnB1dCwgdGV4dF9ib3hdLCB0YWIzX2NvbHVtbjEsICcnLCBoX2JveCwgdHJ1ZSApO1xuXHRcdHRoaXMuc2V0V2lkZ2V0VmlzaWJsZSggW2Zvcm1faXRlbV9pbnB1dCwgdGV4dF9ib3hdICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LmJpbmQoICdmb3JtSXRlbUNoYW5nZScsICggZSwgdGFyZ2V0ICkgPT4ge1xuXHRcdFx0aWYgKCB0YXJnZXQuZ2V0VmFsdWUoKSA9PT0gMCApIHtcblx0XHRcdFx0dGV4dF9ib3guY3NzKCAnZGlzcGxheScsICdpbmxpbmUnICk7XG5cdFx0XHRcdHRleHRfYm94LnNldFZhbHVlKCAnJyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dF9ib3guY3NzKCAnZGlzcGxheScsICdub25lJyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuYXBpLmdldE9wdGlvbnMoICdmb3JtX3NldHVwX3N0YXRlX2NvZGVzJywge1xuXHRcdFx0b25SZXN1bHQ6ICggcmVzdWx0ICkgPT4ge1xuXG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblxuXHRcdFx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggR2xvYmFsLmJ1aWxkUmVjb3JkQXJyYXkoIHJlc3VsdF9kYXRhICkgKTtcblxuXHRcdFx0XHRpZiAoIHRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGFbc3RhdGVdICYmIHRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGFbc3RhdGVdW2NvZGVdICkge1xuXHRcdFx0XHRcdGZvcm1faXRlbV9pbnB1dC5zZXRWYWx1ZSggdGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVtzdGF0ZV1bY29kZV0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtX2l0ZW1faW5wdXQudHJpZ2dlciggJ2Zvcm1JdGVtQ2hhbmdlJywgW2Zvcm1faXRlbV9pbnB1dCwgdHJ1ZV0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLmZvcm1fc2V0dXBfdWlfZGljW2ZpZWxkX25hbWVdID0gdGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1tmaWVsZF9uYW1lXTtcblx0XHRkZWxldGUgdGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1tmaWVsZF9uYW1lXTtcblxuXHRcdHRoaXMuZWRpdEZpZWxkUmVzaXplKCAzICk7XG5cdH1cblxuXHRyZW1vdmVDdXJyZW50Rm9ybVNldHVwVUkoKSB7XG5cblx0XHRmb3IgKCB2YXIga2V5IGluIHRoaXMuZm9ybV9zZXR1cF91aV9kaWMgKSB7XG5cdFx0XHR2YXIgaHRtbF9pdGVtID0gdGhpcy5mb3JtX3NldHVwX3VpX2RpY1trZXldO1xuXHRcdFx0aHRtbF9pdGVtLnJlbW92ZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjbm8tc2V0dXAtZGF0YScgKS5yZW1vdmUoKTtcblxuXHRcdC8vRXJyb3I6IFVuYWJsZSB0byBnZXQgcHJvcGVydHkgJ2ZpbmQnIG9mIHVuZGVmaW5lZCBvciBudWxsIHJlZmVyZW5jZSBpbiAvaW50ZXJmYWNlL2h0bWw1LyBsaW5lIDEwMzNcblx0XHRpZiAoICF0aGlzLmVkaXRfdmlld190YWIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHRhYjMgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfZm9ybV9zZXR1cCcgKTtcblx0XHR2YXIgdGFiM19jb2x1bW4xID0gdGFiMy5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblx0XHR2YXIgY2xlYXJfYm90aF9kaXYgPSB0YWIzX2NvbHVtbjEuZmluZCggJy5jbGVhci1ib3RoLWRpdicgKTtcblxuXHRcdGNsZWFyX2JvdGhfZGl2LnJlbW92ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYXJyYXkgb2YgcHJvcGVybHkgY29uZmlndXJlZCB2YWx1ZXMgZm9yIHRoZSBmb3JtX3NldHVwIHNldHVwIGZvcm0uXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZF9saXN0IEFycmF5XG5cdCAqIEByZXR1cm5zIHt7fXwqfVxuXHQgKi9cblx0Z2V0Rm9ybVNldHVwRmllbGRWYWx1ZXMoIHN0YXRlLCBmaWVsZF9saXN0ICkge1xuXHRcdHZhciByZXRfYXJyID0ge307XG5cblx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBmaWVsZF9saXN0Lmxlbmd0aDsgaSsrICkge1xuXHRcdFx0aWYgKCB0aGlzLmVkaXRfdmlld191aV9kaWNbJ2Zvcm1fc2V0dXBfJyArIHN0YXRlICsgJ18nICsgZmllbGRfbGlzdFtpXV0gJiYgIXRoaXMuZWRpdF92aWV3X3VpX2RpY1snZm9ybV9zZXR1cF8nICsgc3RhdGUgKyAnXycgKyBmaWVsZF9saXN0W2ldXS5nZXRWYWx1ZSgpICkge1xuXHRcdFx0XHRyZXRfYXJyW2ZpZWxkX2xpc3RbaV1dID0gdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydmb3JtX3NldHVwXycgKyBzdGF0ZSArICdfJyArIGZpZWxkX2xpc3RbaV0gKyAnX3RleHQnXS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRyZXRfYXJyW2ZpZWxkX2xpc3RbaV0gKyAnX3ZhbHVlJ10gPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ2Zvcm1fc2V0dXBfJyArIHN0YXRlICsgJ18nICsgZmllbGRfbGlzdFtpXSArICdfdGV4dCddLmdldFZhbHVlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoICF0aGlzLmVkaXRfdmlld191aV9kaWNbJ2Zvcm1fc2V0dXBfJyArIHN0YXRlICsgJ18nICsgZmllbGRfbGlzdFtpXV0gKSB7XG5cdFx0XHRcdFx0cmV0X2FycltmaWVsZF9saXN0W2ldXSA9ICcnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldF9hcnJbZmllbGRfbGlzdFtpXV0gPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ2Zvcm1fc2V0dXBfJyArIHN0YXRlICsgJ18nICsgZmllbGRfbGlzdFtpXV0uZ2V0VmFsdWUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0X2Fycjtcblx0fVxuXG5cdGdldEZvcm1EYXRhKCBvdGhlciwgZm9yX2Rpc3BsYXkgKSB7XG5cdFx0aWYgKCAhb3RoZXIgfHwgIW90aGVyLmZvcm1fc2V0dXBfdHlwZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvdGhlcltvdGhlci5mb3JtX3NldHVwX3R5cGVdID0gdGhpcy5nZXRGb3JtU2V0dXBGaWVsZFZhbHVlcyggb3RoZXIuZm9ybV9zZXR1cF90eXBlLCB0aGlzLmdldEZpZWxkTGlzdCggb3RoZXIuZm9ybV9zZXR1cF90eXBlICkgKTtcblxuXHRcdGlmICggIXRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGEgKSB7XG5cdFx0XHR0aGlzLnNhdmVfZm9ybV9zZXR1cF9kYXRhID0ge307XG5cdFx0fVxuXHRcdHRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGFbb3RoZXIuZm9ybV9zZXR1cF90eXBlXSA9IG90aGVyW290aGVyLmZvcm1fc2V0dXBfdHlwZV07XG5cdFx0dGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVsnZm9ybV9zZXR1cF90eXBlJ10gPSBvdGhlci5mb3JtX3NldHVwX3R5cGU7XG5cblx0XHRpZiAoIGZvcl9kaXNwbGF5ICkge1xuXHRcdFx0Zm9yICggdmFyIGtleSBpbiB0aGlzLnNhdmVfZm9ybV9zZXR1cF9kYXRhICkge1xuXHRcdFx0XHRpZiAoIGtleSAhPT0gZmFsc2UgJiYgdHlwZW9mICggdGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVtrZXldICkgIT09ICdzdHJpbmcnICkge1xuXHRcdFx0XHRcdHRoaXMuc2F2ZV9mb3JtX3NldHVwX2RhdGFba2V5XSA9IHRoaXMuY29udmVydEZvcm1TZXR1cFZhbHVlcyggdGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YVtrZXldICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zYXZlX2Zvcm1fc2V0dXBfZGF0YTtcblx0fVxuXG5cdGdldEZpZWxkTGlzdCggc3RhdGUgKSB7XG5cdFx0dmFyIGZpZWxkX2xpc3QgPSBbXTtcblxuXHRcdHN3aXRjaCAoIHN0YXRlICkge1xuXHRcdFx0Y2FzZSAnSUEnOlxuXHRcdFx0XHRmaWVsZF9saXN0ID0gWydyZXBvcnRpbmdfdW5pdF9udW1iZXInXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdDQSc6XG5cdFx0XHRcdGZpZWxkX2xpc3QgPSBbJ2JyYW5jaF9jb2RlJywgJ3dhZ2VfcGxhbl9jb2RlJ107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnQ08nOlxuXHRcdFx0XHRmaWVsZF9saXN0ID0gWydicmFuY2hfY29kZScsICdpc19zZWFzb25hbCddO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0lOJzpcblx0XHRcdFx0ZmllbGRfbGlzdCA9IFsnb2NjdXBhdGlvbl9jbGFzc2lmaWNhdGlvbl9jb2RlJywgJ29jY3VwYXRpb25fY2xhc3NpZmljYXRpb25fY29kZScsICdkZXNpZ25hdGlvbiddO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ01JJzpcblx0XHRcdFx0ZmllbGRfbGlzdCA9IFsnbXVsdGlfdW5pdF9udW1iZXInXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdUWCc6XG5cdFx0XHRcdGZpZWxkX2xpc3QgPSBbJ2NvdW50eV9jb2RlJ107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaWVsZF9saXN0O1xuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHRnZXRGb3JtU2V0dXBEYXRhKCBmb3JfdmlldyApIHtcblx0XHR2YXIgb3RoZXIgPSB7fTtcblx0XHRvdGhlci5mb3JtX3NldHVwX3R5cGUgPSB0aGlzLmVkaXRfdmlld191aV9kaWMuZm9ybV9zZXR1cF90eXBlLmdldFZhbHVlKCk7XG5cblx0XHRvdGhlcltvdGhlci5mb3JtX3NldHVwX3R5cGVdID0ge307XG5cblx0XHRvdGhlciA9IHRoaXMuZ2V0Rm9ybURhdGEoIG90aGVyLCB0cnVlICk7XG5cblx0XHQvLyBpZiAoICFmb3JfdmlldyAmJiBvdGhlci5mb3JtX3NldHVwX3R5cGUgKSB7XG5cdFx0Ly8gXHR2YXIgZm9ybV9zZXR1cF90eXBlID0gb3RoZXIuZm9ybV9zZXR1cF90eXBlO1xuXHRcdC8vIFx0b3RoZXIgPSBvdGhlcltmb3JtX3NldHVwX3R5cGVdO1xuXHRcdC8vIFx0b3RoZXIuZm9ybV9zZXR1cF90eXBlID0gZm9ybV9zZXR1cF90eXBlO1xuXHRcdC8vIFx0b3RoZXJbZm9ybV9zZXR1cF90eXBlXSA9IHt9O1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiBvdGhlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBCYWNrd2FyZHMgY29tcGF0aWJsZSBmdW5jdGlvbiBmb3IgY3VzdG9tIGRhdGEgdG8gYmUgbW92ZWQgZnJvbSB0aGUgd2F5IHRoZSBhcGkgc3RvcmVzIGl0IHRvIHRoZSB3YXkgdGhlIGZvcm0gbmVlZHMgaXQuXG5cdCAqXG5cdCAqIHRoZSBvbGQgY3VzdG9tIGZpZWxkIGRhdGEgd2FzIHN0b3JlZCBpbiBvYmpba2V5XVxuXHQgKiBuZXcgY3VzdG9tIGZpZWxkIGRhdGEgaXMgc3RvcmVkIGluIG9ialtrZXkrJ192YWx1ZSddXG5cdCAqXG5cdCAqIGllLiBvYmpbY29tcGFueV9jb2RlXSBpcyBub3cgb2JqW2NvbXBhbnlfY29kZV92YWx1ZV1cblx0ICpcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjb252ZXJ0Rm9ybVNldHVwVmFsdWVzKCBkYXRhICkge1xuXHRcdGZvciAoIHZhciBhcGlfZGF0YV9rZXkgaW4gZGF0YSApIHtcblx0XHRcdHZhciBmb3JtX2RhdGFfa2V5ID0gYXBpX2RhdGFfa2V5LnN1YnN0ciggMCwgYXBpX2RhdGFfa2V5LmluZGV4T2YoICdfdmFsdWUnICkgKTtcblx0XHRcdGlmICggYXBpX2RhdGFfa2V5LnNlYXJjaCggJ192YWx1ZScgKSA+IDAgKSB7XG5cdFx0XHRcdGRhdGFbZm9ybV9kYXRhX2tleV0gPSBkYXRhW2FwaV9kYXRhX2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vY29udmVyc2lvbiBmb3IgbG93ZXIgZm9ybV9zZXR1cCBncmlkIGRhdGEgZnJvbSBvbGQgZm9ybWF0XG5cdFx0aWYgKCBkYXRhLmZvcm1fc2V0dXBfY29sdW1ucyAmJiAhZGF0YS5jb2x1bW5zICYmIGRhdGEuZm9ybV9zZXR1cF90eXBlICE9IDAgJiYgZGF0YS5mb3JtX3NldHVwX2NvbHVtbnNbZGF0YS5mb3JtX3NldHVwX3R5cGVdICkge1xuXHRcdFx0ZGF0YS5jb2x1bW5zID0ge307XG5cdFx0XHRkYXRhLmNvbHVtbnMgPSBkYXRhLmZvcm1fc2V0dXBfY29sdW1uc1tkYXRhLmZvcm1fc2V0dXBfdHlwZV0uY29sdW1ucztcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2786\n")}}]);