1 line
80 KiB
JavaScript
1 line
80 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["hr-recruitment-JobVacancyViewController"],{6191:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JobVacancyViewController\": () => (/* binding */ JobVacancyViewController)\n/* harmony export */ });\n/* harmony import */ var tinymce_tinymce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7575);\n/* harmony import */ var tinymce_tinymce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinymce_tinymce__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var tinymce_icons_default__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6890);\n/* harmony import */ var tinymce_icons_default__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinymce_icons_default__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tinymce_themes_silver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8860);\n/* harmony import */ var tinymce_themes_silver__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinymce_themes_silver__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var tinymce_plugins_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2682);\n/* harmony import */ var tinymce_plugins_link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinymce_plugins_link__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _css_loader_tinymce_skins_ui_oxide_content_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5634);\n/* harmony import */ var _css_loader_tinymce_skins_content_default_content_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5797);\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\n\n // Default icons are required for TinyMCE 5.3 or above\n\n\n\n // https://www.tiny.cloud/docs/advanced/usage-with-module-loaders/webpack/webpack_es6_npm/\n // https://www.tiny.cloud/docs/advanced/usage-with-module-loaders/webpack/webpack_es6_npm/\n\n// #2662 This require.context copies the required tinymce skins folder to our dist directory. See https://www.tiny.cloud/docs-4x/advanced/usage-with-module-loaders/#webpackfile-loader and https://www.tiny.cloud/docs/advanced/usage-with-module-loaders/\n// require.context(\n// \t'!file-loader?name=tinymce-[path][name].[ext]&context=node_modules/tinymce!tinymce/skins',\n// \ttrue,\n// \t/.*/\n// );\n\nclass JobVacancyViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#job_vacancy_view_container',\n\n\t\t\t// _required_files: ['tinymce'],\n\n\t\t\tstatus_array: null,\n\t\t\ttype_array: null,\n\t\t\tlevel_array: null,\n\t\t\temployment_status_array: null,\n\t\t\twage_type_array: null,\n\t\t\tavailability_array: null,\n\n\t\t\tsub_job_vacancy_applicant_view_controller: null,\n\n\t\t\tdocument_object_type_id: null\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 = 'JobVacancyEditView.html';\n\t\tthis.permission_id = 'job_vacancy';\n\t\tthis.viewId = 'JobVacancy';\n\t\tthis.script_name = 'JobVacancyView';\n\t\tthis.table_name_key = 'job_vacancy';\n\t\tthis.context_menu_name = $.i18n._( 'Job Vacancies' );\n\t\tthis.navigation_label = $.i18n._( 'Job Vacancy' );\n\t\tthis.api = TTAPI.APIJobVacancy;\n\t\tthis.document_object_type_id = 150;\n\t\tvar $this = this;\n\t\t$this.render();\n\t\t$this.buildContextMenu();\n\n\t\t$this.initData();\n\t}\n\n\tinitOptions() {\n\t\tvar options = [\n\t\t\t{ option_name: 'status', api: this.api },\n\t\t\t{ option_name: 'type', api: this.api },\n\t\t\t{ option_name: 'level', api: this.api },\n\t\t\t{ option_name: 'employment_status', api: this.api },\n\t\t\t{ option_name: 'wage_type', api: this.api },\n\t\t\t{ option_name: 'availability', api: this.api },\n\t\t];\n\n\t\tthis.initDropDownOptions( options );\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: [],\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Jump To' ),\n\t\t\t\t\tid: 'jump_to_header',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\taction_group_header: true,\n\t\t\t\t\tpermission_result: false // to hide it in legacy context menu and avoid errors in legacy parsers.\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Job Applications' ),\n\t\t\t\t\tid: 'job_application',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\ticon: 'jobapplications-35x35.png',\n\t\t\t\t\tpermission_result: true,\n\t\t\t\t\tpermission: null\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Portal Preview' ),\n\t\t\t\t\tid: 'portal_preview',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\ticon: 'reviews-35x35.png',\n\t\t\t\t\tpermission_result: true,\n\t\t\t\t\tpermission: null\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tonCustomContextClick( id ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'download':\n\t\t\t\tthis.onDownloadClick();\n\t\t\t\tbreak;\n\t\t\tcase 'map':\n\t\t\t\tthis.onMapClick();\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\tcase 'portal_preview':\n\t\t\t\tthis.onNavigationClick( id );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'portal_preview':\n\t\t\t\tthis.setDefaultMenuPortalViewIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\t\tthis.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'job_application' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetDefaultMenuPortalViewIcon( context_btn, grid_selected_length, pId ) {\n\t\tthis.setMenuPortalViewIcon( context_btn );\n\t}\n\n\tsetEditMenuPortalViewIcon( context_btn ) {\n\t\tthis.setMenuPortalViewIcon( context_btn );\n\t}\n\n\tsetErrorMenuPortalViewIcon( context_btn ) {\n\t\tthis.setMenuPortalViewIcon( context_btn );\n\t}\n\n\tsetMenuPortalViewIcon( context_btn ) {\n\t\tvar $this = this;\n\t\t// var select_item = this.getSelectedItem();\n\t\tvar grid_selected_id_array = this.getGridSelectIdArray();\n\t\tvar grid_selected_length = grid_selected_id_array.length;\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tvar select_item = this.getRecordFromGridById( grid_selected_id_array[0] );\n\t\t\tsetIcon( select_item.id );\n\t\t} else if ( ( this.is_viewing || this.is_edit ) && this.current_edit_record && this.current_edit_record.id ) {\n\t\t\tsetIcon( this.current_edit_record.id );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\n\t\tfunction setIcon( id ) {\n\t\t\tvar filter = {};\n\t\t\tfilter.filter_data = {};\n\t\t\tfilter.filter_data.id = [id];\n\t\t\t$this.api['get' + $this.api.key_name]( filter, {\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\t\t\t\t\tresult_data = result_data[0];\n\t\t\t\t\tif ( !result_data ) {\n\t\t\t\t\t\tContextMenuManager.disableMenuItem( $this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( result_data.availability_id == 20 || result_data.availability_id == 30 ) && ( result_data.status_id == 20 || result_data.status_id == 40 ) ) {\n\t\t\t\t\t\tContextMenuManager.disableMenuItem( $this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tContextMenuManager.disableMenuItem( $this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t\t\t\t}\n\t\t\t\t}.bind( $this )\n\t\t\t} );\n\t\t}\n\t}\n\n\tsetErrorMenu() {\n\t\tvar context_menu_array = ContextMenuManager.getMenuModelByMenuId( this.determineContextMenuMountAttributes().id );\n\t\tvar len = context_menu_array.length;\n\n\t\tfor ( var i = 0; i < len; i++ ) {\n\t\t\tlet context_btn = context_menu_array[i];\n\t\t\tlet id = context_menu_array[i].id;\n\t\t\tif ( id !== 'portal_preview' ) {\n\t\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t\t}\n\t\t\tswitch ( id ) {\n\t\t\t\tcase 'cancel':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'portal_preview':\n\t\t\t\t\tthis.setErrorMenuPortalViewIcon( context_btn );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\t}\n\n\n\tsetCustomEditMenuIcon( id, context_btn ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'portal_preview':\n\t\t\t\tthis.setEditMenuPortalViewIcon( context_btn );\n\t\t\t\tbreak;\n\t\t\tcase 'job_application':\n\t\t\t\tthis.setEditMenuNavEditIcon( context_btn, 'job_application' );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonNavigationClick( iconName ) {\n\t\tvar grid_selected_id_array = this.getGridSelectIdArray();\n\t\tvar grid_selected_length = grid_selected_id_array.length;\n\t\tvar select_item = null;\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tselect_item = this.getRecordFromGridById( grid_selected_id_array[0] );\n\t\t} else if ( ( this.is_viewing || this.is_edit ) && this.current_edit_record && this.current_edit_record.id ) {\n\t\t\tselect_item = this.current_edit_record;\n\t\t}\n\t\tswitch ( iconName ) {\n\t\t\tcase 'job_application':\n\t\t\t\tvar filter = { filter_data: {} };\n\t\t\t\t// var select_item = this.getSelectedItem();\n\t\t\t\tif ( select_item != null ) {\n\t\t\t\t\tfilter.filter_data.job_vacancy_id = select_item.id;\n\t\t\t\t\tGlobal.addViewTab( this.viewId, $.i18n._( 'Job Vacancies' ), window.location.href );\n\t\t\t\t\tIndexViewController.goToView( 'JobApplication', filter );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'portal_preview':\n\t\t\t\tvar new_url = Global.getBaseURL( false, false );\n\t\t\t\t// var select_item = this.getSelectedItem();\n\t\t\t\tif ( select_item != null ) {\n\t\t\t\t\tnew_url += 'portal/recruitment/#!m=PortalJobVacancyDetail&id=' + select_item.id;\n\t\t\t\t\tnew_url += '&company_id=' + LocalCacheData.getCurrentCompany().short_name;\n\t\t\t\t\twindow.open( new_url );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\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_vacancy': {\n\t\t\t\t'label': $.i18n._( 'Job Vacancy' ),\n\t\t\t\t'html_template': this.getJobVacancyTabHtml(),\n\t\t\t\t'is_multi_column': true\n\t\t\t},\n\t\t\t'tab_attachment': true,\n\t\t\t'tab_applications': {\n\t\t\t\t'label': $.i18n._( 'Job Applications' ),\n\t\t\t\t'init_callback': 'initSubApplicationView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\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.APIJobVacancy,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_job_vacancy',\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_vacancy = this.edit_view_tab.find( '#tab_vacancy' );\n\n\t\tvar tab_vacancy_column1 = tab_vacancy.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_vacancy_column1 );\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\n\n\t\t// Status\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'status_id' } );\n\t\tform_item_input.setSourceData( $this.status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_vacancy_column1, '' );\n\n\t\t// Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'name', width: '100%' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Name' ), form_item_input, tab_vacancy_column1 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Job Title\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUserTitle,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_user_title',\n\t\t\tfield: 'title_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Title' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Availability\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'availability_id' } );\n\t\tform_item_input.setSourceData( $this.availability_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Availability' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Employee Status\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'employment_status_id' } );\n\t\tform_item_input.setSourceData( $this.employment_status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Employment Status' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'type_id' } );\n\t\tform_item_input.setSourceData( $this.type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Level\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'level_id' } );\n\t\tform_item_input.setSourceData( $this.level_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Level' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Branch\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_branch',\n\t\t\tfield: 'branch_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Branch' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Department\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_department',\n\t\t\tfield: 'department_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Department' ), form_item_input, tab_vacancy_column1 );\n\n\t\t// Hiring Manager\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUser,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_user',\n\t\t\tfield: 'user_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Hiring Manager' ), form_item_input, tab_vacancy_column1, '', null, true );\n\n\t\t// Positions Available\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'positions', width: 50 } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Positions Available' ), form_item_input, tab_vacancy_column1, '', null, true );\n\n\t\tvar tab_vacancy_column2 = tab_vacancy.find( '.second-column' );\n\n\t\tthis.edit_view_tabs[0].push( tab_vacancy_column2 );\n\n\t\t// Position Open Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'position_open_date' } );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'ie' ) + ' : ' + LocalCacheData.getLoginUserPreference().date_format_display + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Position Open Date' ), form_item_input, tab_vacancy_column2, '', widgetContainer );\n\n\t\t// Position Expiry Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'position_expire_date' } );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'ie' ) + ' : ' + LocalCacheData.getLoginUserPreference().date_format_display + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Position Expiry Date' ), form_item_input, tab_vacancy_column2, '', widgetContainer );\n\n\t\t// Wage Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'wage_type_id' } );\n\t\tform_item_input.setSourceData( $this.wage_type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Wage Type' ), form_item_input, tab_vacancy_column2 );\n\n\t\t// Minimum Wage\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'minimum_wage', width: 150 } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Minimum Wage' ), form_item_input, tab_vacancy_column2 );\n\n\t\t// Maximum Wage\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'maximum_wage', width: 150 } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Maximum Wage' ), form_item_input, tab_vacancy_column2 );\n\n\t\t// Keywords\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'keywords', width: 200 } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Keywords' ), form_item_input, tab_vacancy_column2 );\n\n\t\t//Tags\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TAG_INPUT );\n\n\t\tform_item_input.TTagInput( { field: 'tag', object_type_id: 350 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_vacancy_column2, '', null, null, true );\n\n\t\tvar tab_vacancy_column4 = tab_vacancy.find( '.fourth-column' );\n\n\t\tthis.edit_view_tabs[0].push( tab_vacancy_column4 );\n\n\t\t// Summarized description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\t\tform_item_input.TTextArea( { field: 'summary_description', rows: 2 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Summary' ), form_item_input, tab_vacancy_column4, '', null, true );\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Name' ),\n\t\t\t\tfield: 'name',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 1,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Employee' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'user_id',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Status' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'status_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Type' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'type_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Employee Status' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'employee_status_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Availability' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'availability_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Title' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'title_id',\n\t\t\t\tlayout_name: 'global_user_title',\n\t\t\t\tapi_class: TTAPI.APIUserTitle,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Branch' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'branch_id',\n\t\t\t\tlayout_name: 'global_branch',\n\t\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Department' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'department_id',\n\t\t\t\tlayout_name: 'global_department',\n\t\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'created_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'updated_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Tags' ),\n\t\t\t\tfield: 'tag',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\n\t\t\t\tobject_type_id: 350,\n\t\t\t\tform_item_type: FormItemType.TAG_INPUT\n\t\t\t} )\n\n\t\t];\n\t}\n\n\tsetCurrentEditRecordData() {\n\t\t//Set current edit record data to all widgets\n\t\tTTPromise.add( 'job_vacancy', 'setCurrentEditRecordData' );\n\t\tfor ( var key in this.current_edit_record ) {\n\n\t\t\tif ( !this.current_edit_record.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ( key === 'description' ) {\n\t\t\t\tthis.setDescription();\n\t\t\t}\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 'country': //popular case\n\t\t\t\t\t\tthis.eSetProvince( this.current_edit_record[key] );\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 'description':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\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\n\t\tvar $this = this;\n\t\tTTPromise.wait( 'job_vacancy', 'setCurrentEditRecordData', function() {\n\t\t\t$this.setEditViewDataDone();\n\t\t} );\n\t}\n\n\tsetEditViewDataDone() {\n\t\tvar $this = this;\n\t\tthis.moveFields();\n\t\tsuper.setEditViewDataDone();\n\n\t\tthis.resizeSummaryField();\n\t}\n\n\tresizeSummaryField() {\n\t\t//custom sizing for the summary box.\n\t\tvar form_item = this.edit_view_form_item_dic['summary_description'];\n\t\tvar form_item_input = this.edit_view_ui_dic['summary_description'];\n\t\tvar first_column_width = this.edit_view_tab.find( '#tab_vacancy' ).find( '.first-column' ).width();\n\t\tvar second_column_width = this.edit_view_tab.find( '#tab_vacancy' ).find( '.second-column' ).width();\n\t\tvar form_item_label_div = form_item.find( '.edit-view-form-item-label-div' );\n\t\tvar form_item_label_div_width = form_item_label_div.width();\n\n\t\tvar form_item_input_div_width = first_column_width + second_column_width - form_item_label_div_width;\n\n\t\tvar new_width = first_column_width + second_column_width - form_item_label_div_width + 2; // +2 resulted from trial and error. If the +2 gives trouble, remove it alltogether, it'll be a few pixels short, but at least won't get too long for the width. The old -5 no longer needed as we removed the margin-right in CSS.\n\t\tif ( this.is_mass_editing == true ) {\n\t\t\tnew_width -= $( '.mass-edit-checkbox' ).width();\n\t\t}\n\n\t\tform_item_input.width( new_width );\n\t}\n\n\tmoveFields() {\n\t\t// var first_column = this.edit_view_tab.find( '#tab_vacancy' ).find('.first-column');\n\t\tvar second_column = this.edit_view_tab.find( '#tab_vacancy' ).find( '.second-column' );\n\t\tthis.edit_view_form_item_dic['user_id'].appendTo( second_column );\n\t\tthis.edit_view_form_item_dic['positions'].appendTo( second_column );\n\t}\n\n\tsetDescription( el ) {\n\t\tvar $this = this;\n\t\tvar form_item = $( Global.loadWidgetByName( WidgetNamesDic.EDIT_VIEW_FORM_ITEM ) );\n\t\tvar form_item_label_div = form_item.find( '.edit-view-form-item-label-div' );\n\t\tvar form_item_input_div = form_item.find( '.edit-view-form-item-input-div' );\n\t\tvar form_item_label = form_item.find( '.edit-view-form-item-label' );\n\t\tform_item_label.text( $.i18n._( 'Description' ) );\n\t\tform_item_input_div.addClass( 'edit-view-form-item-tinymce-textarea-div' );\n\t\tvar tab_vacancy = this.edit_view_tab.find( '#tab_vacancy' );\n\t\t// var column = tab_vacancy.find( '.third-column' );\n\t\tvar tab_vacancy_column3 = tab_vacancy.find( '.third-column' );\n\t\ttab_vacancy_column3.html( form_item );\n\t\tthis.edit_view_tabs[0].push( tab_vacancy_column3 );\n\t\tthis.editFieldResize( 0 );\n\t\t// var widget = widgets;\n\t\tform_item_label_div.css( 'height', '340px' );\n\t\tform_item_label_div.css( 'width', form_item_label_div.width() + 1 );\n\t\tthis.showDescription();\n\n\t\twindow.onresize = function() {\n\t\t\tif ( this.edit_view ) {\n\t\t\t\t$this.resizeSummaryField();\n\t\t\t\t$this.resizeMCE();\n\t\t\t}\n\t\t};\n\t\treturn form_item;\n\t}\n\n\tresizeMCE() {\n\t\tvar $this = this;\n\t\tvar form_item_input = this.edit_view_ui_dic['summary_description'];\n\n\t\tvar parent_width = form_item_input.width() + 6; // padding 2, border 1 x2 on .job-vacancy-summary-description .t-text-area\n\t\t$this.edit_view_tab.find( '#tab_vacancy' ).find( '.third-column' ).find( '.edit-view-form-item-tinymce-textarea-div' ).width( parent_width );\n\t}\n\n\tshowDescription() {\n\t\tif ( !this.edit_view_tab ) {\n\t\t\treturn;\n\t\t}\n\t\tvar form_item_label_div_width = this.edit_view_tab.find( '#tab_vacancy' ).find( '.third-column' ).find( '.edit-view-form-item-label-div' ).width() + 12;\n\t\tvar el = Global.loadWidgetByName( FormItemType.TINYMCE_TEXT_AREA, true );\n\t\tvar description = this.current_edit_record['description'];\n\n\t\tvar width = $( this.edit_view_tab.find( '.edit-view-tab' )[0] ).width() - form_item_label_div_width;\n\t\tvar options = {\n\t\t\tdescription: description,\n\t\t\twidth: ( width - 3 ) + 'px',\n\t\t\theight: '335px'\n\t\t};\n\n\t\tvar readonly = false;\n\t\tif ( this.is_viewing ) {\n\t\t\treadonly = true;\n\t\t}\n\n\t\tvar tpl = _.template( el )( options );\n\t\ttinymce_tinymce__WEBPACK_IMPORTED_MODULE_0___default().remove();\n\t\tthis.edit_view_tab.find( '#tab_vacancy' ).find( '.third-column' ).find( '.edit-view-form-item-tinymce-textarea-div' ).html( tpl );\n\n\t\t//This property was removed in jQuery 1.9\n\t\t// if ( $.browser.mozilla ) {\n\t\t// } else {\n\t\t// \tvar i;\n\t\t// \tvar t = tinyMCE.editors;\n\t\t// \tfor (i in t){\n\t\t// \t\tif (t.hasOwnProperty(i)){\n\t\t// \t\t\tt[i].remove();\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\t\t(tinymce_tinymce__WEBPACK_IMPORTED_MODULE_0___default().editors) = [];\n\n\t\t// new tinyMCE.init code here\n\t\ttinymce_tinymce__WEBPACK_IMPORTED_MODULE_0___default().init( {\n\t\t\theight: '335px',\n\t\t\twidth: '100%',\n\t\t\tautoresize_min_width: ( width - 3 ),\n\t\t\tselector: '.tinymce-text-area',\n\t\t\treadonly: readonly,\n\t\t\tmenubar: false,\n\t\t\tstatusbar: false,\n\t\t\tplugins: 'link',\n\t\t\t//toolbar: false, //#2589 (showing the default toolbar)\n\t\t\ttheme: 'silver',\n\t\t\tskin: false,\n\t\t\tcontent_css: false,\n\t\t\tcontent_style: _css_loader_tinymce_skins_ui_oxide_content_css__WEBPACK_IMPORTED_MODULE_4__/* [\"default\"].toString */ .Z.toString() + '\\n'\n\t\t\t\t+ _css_loader_tinymce_skins_content_default_content_css__WEBPACK_IMPORTED_MODULE_5__/* [\"default\"].toString */ .Z.toString() + '\\n'\n\t\t\t\t+ 'body { font-size: 14px; margin-top: 0; color: #404042; }', // taken from PortalJobVacancyDetailController.js:showJobVacancy as we want the text here to match what a user will end up seeing.\n\t\t} );\n\n\t\tvar $this = this;\n\t\tvar tinymce_textarea = this.edit_view_tab.find( '#tab_vacancy' ).find( '.third-column' ).find( '.edit-view-form-item-tinymce-textarea-div' );\n\t\ttinymce_textarea.hide();\n\t\tvar search_for_tinymce = setInterval( function() {\n\t\t\tvar body = tinymce_textarea.find( 'iframe' ).contents().find( 'body' );\n\t\t\tif ( !_.isUndefined( body[0] ) ) {\n\t\t\t\tclearInterval( search_for_tinymce );\n\t\t\t\t// body.css({'font-size': '12px', 'background-color': '#fff', 'font-family': 'Lucida Grande, Lucida Sans, Arial, sans-serif'});\n\t\t\t\t$this.resizeSummaryField();\n\t\t\t\t$this.resizeMCE();\n\t\t\t\ttinymce_textarea.show();\n\n\t\t\t\tTTPromise.resolve( 'job_vacancy', 'setCurrentEditRecordData' );\n\t\t\t}\n\t\t}, 50 );\n\t}\n\n\tuniformVariable( records ) {\n\t\tif ( this.is_mass_editing ) {\n\t\t\treturn records;\n\t\t} else {\n\t\t\trecords.description = tinymce_tinymce__WEBPACK_IMPORTED_MODULE_0___default().activeEditor.getContent();\n\t\t}\n\t\treturn records;\n\t}\n\n\tinitSubApplicationView() {\n\t\tvar $this = this;\n\n\t\tif ( !this.current_edit_record.id ) {\n\t\t\tTTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the \"Please Save This Record ...\" message, resolve the promise.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.sub_job_vacancy_applicant_view_controller ) {\n\t\t\tthis.sub_job_vacancy_applicant_view_controller.buildContextMenu( true );\n\t\t\tthis.sub_job_vacancy_applicant_view_controller.setDefaultMenu();\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tTTPromise.add( 'initSubApplicationView', 'loadscript' );\n\t\tGlobal.loadScript( 'views/hr/recruitment/JobApplicationViewController.js', function() {\n\t\t\tvar tab_applications = $this.edit_view_tab.find( '#tab_applications' );\n\t\t\tvar firstColumn = tab_applications.find( '.first-column-sub-view' );\n\t\t\tGlobal.trackView( 'Sub' + 'JobApplication' + 'View' );\n\t\t\tJobApplicationViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );\n\n\t\t} );\n\n\t\tfunction beforeLoadView() {\n\n\t\t}\n\n\t\tfunction afterLoadView( subViewController ) {\n\t\t\t$this.sub_job_vacancy_applicant_view_controller = subViewController;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_key = 'job_vacancy_id';\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_job_vacancy_applicant_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t\tTTPromise.resolve( 'initSubApplicationView', 'loadscript' );\n\t\t\t};\n\t\t}\n\t}\n\n\tremoveEditView() {\n\t\tsuper.removeEditView();\n\t\tthis.sub_job_vacancy_applicant_view_controller = null;\n\t}\n\n\tonTabIndexChange( e, ui ) {\n\t\tthis.resizeSummaryField();\n\t\tthis.resizeMCE();\n\t\tsuper.onTabIndexChange( e, ui );\n\t}\n\n\tgetJobVacancyTabHtml() {\n\t\treturn `<div id=\"tab_vacancy\" class=\"edit-view-tab-outside\">\n\t\t\t\t\t<div class=\"edit-view-tab\" id=\"tab_vacancy_content_div\">\n\t\t\t\t\t\t<div class=\"first-column\"></div>\n\t\t\t\t\t\t<div class=\"second-column\"></div>\n\t\t\t\t\t\t<div class=\"fourth-column job-vacancy-summary-description\"></div>\n\t\t\t\t\t\t<div class=\"third-column full-width-column\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>`;\n\t}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpSEFBcUI7QUFDdkMsTUFBTSx3SEFBbUI7QUFDekIsY0FBYyxpQkFBaUIsZUFBZSxpQkFBaUI7QUFDL0QsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxDQUFDO0FBQ1Y7QUFDQSxpQkFBaUIsZ0hBQWdIO0FBQ2pJO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSix5QkFBeUIsOEVBQStCO0FBQ3hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL2hyL3JlY3J1aXRtZW50L0pvYlZhY2FuY3lWaWV3Q29udHJvbGxlci5qcz80ZjBjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0aW55TUNFIGZyb20gJ3RpbnltY2UvdGlueW1jZSc7XG5pbXBvcnQgJ3RpbnltY2UvaWNvbnMvZGVmYXVsdCc7IC8vIERlZmF1bHQgaWNvbnMgYXJlIHJlcXVpcmVkIGZvciBUaW55TUNFIDUuMyBvciBhYm92ZVxuaW1wb3J0ICd0aW55bWNlL3RoZW1lcy9zaWx2ZXInO1xuaW1wb3J0ICd0aW55bWNlL3NraW5zL3VpL294aWRlL3NraW4uY3NzJztcbmltcG9ydCAndGlueW1jZS9wbHVnaW5zL2xpbmsnO1xuaW1wb3J0IGNvbnRlbnRVaUNzcyBmcm9tICchIWNzcy1sb2FkZXIhdGlueW1jZS9za2lucy91aS9veGlkZS9jb250ZW50LmNzcyc7IC8vIGh0dHBzOi8vd3d3LnRpbnkuY2xvdWQvZG9jcy9hZHZhbmNlZC91c2FnZS13aXRoLW1vZHVsZS1sb2FkZXJzL3dlYnBhY2svd2VicGFja19lczZfbnBtL1xuaW1wb3J0IGNvbnRlbnRDc3MgZnJvbSAnISFjc3MtbG9hZGVyIXRpbnltY2Uvc2tpbnMvY29udGVudC9kZWZhdWx0L2NvbnRlbnQuY3NzJzsgLy8gaHR0cHM6Ly93d3cudGlueS5jbG91ZC9kb2NzL2FkdmFuY2VkL3VzYWdlLXdpdGgtbW9kdWxlLWxvYWRlcnMvd2VicGFjay93ZWJwYWNrX2VzNl9ucG0vXG5cbi8vICMyNjYyIFRoaXMgcmVxdWlyZS5jb250ZXh0IGNvcGllcyB0aGUgcmVxdWlyZWQgdGlueW1jZSBza2lucyBmb2xkZXIgdG8gb3VyIGRpc3QgZGlyZWN0b3J5LiBTZWUgaHR0cHM6Ly93d3cudGlueS5jbG91ZC9kb2NzLTR4L2FkdmFuY2VkL3VzYWdlLXdpdGgtbW9kdWxlLWxvYWRlcnMvI3dlYnBhY2tmaWxlLWxvYWRlciBhbmQgaHR0cHM6Ly93d3cudGlueS5jbG91ZC9kb2NzL2FkdmFuY2VkL3VzYWdlLXdpdGgtbW9kdWxlLWxvYWRlcnMvXG4vLyByZXF1aXJlLmNvbnRleHQoXG4vLyBcdCchZmlsZS1sb2FkZXI/bmFtZT10aW55bWNlLVtwYXRoXVtuYW1lXS5bZXh0XSZjb250ZXh0PW5vZGVfbW9kdWxlcy90aW55bWNlIXRpbnltY2Uvc2tpbnMnLFxuLy8gXHR0cnVlLFxuLy8gXHQvLiovXG4vLyApO1xuXG5leHBvcnQgY2xhc3MgSm9iVmFjYW5jeVZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNqb2JfdmFjYW5jeV92aWV3X2NvbnRhaW5lcicsXG5cblx0XHRcdC8vIF9yZXF1aXJlZF9maWxlczogWyd0aW55bWNlJ10sXG5cblx0XHRcdHN0YXR1c19hcnJheTogbnVsbCxcblx0XHRcdHR5cGVfYXJyYXk6IG51bGwsXG5cdFx0XHRsZXZlbF9hcnJheTogbnVsbCxcblx0XHRcdGVtcGxveW1lbnRfc3RhdHVzX2FycmF5OiBudWxsLFxuXHRcdFx0d2FnZV90eXBlX2FycmF5OiBudWxsLFxuXHRcdFx0YXZhaWxhYmlsaXR5X2FycmF5OiBudWxsLFxuXG5cdFx0XHRzdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblxuXHRcdFx0ZG9jdW1lbnRfb2JqZWN0X3R5cGVfaWQ6IG51bGxcblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdKb2JWYWNhbmN5RWRpdFZpZXcuaHRtbCc7XG5cdFx0dGhpcy5wZXJtaXNzaW9uX2lkID0gJ2pvYl92YWNhbmN5Jztcblx0XHR0aGlzLnZpZXdJZCA9ICdKb2JWYWNhbmN5Jztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ0pvYlZhY2FuY3lWaWV3Jztcblx0XHR0aGlzLnRhYmxlX25hbWVfa2V5ID0gJ2pvYl92YWNhbmN5Jztcblx0XHR0aGlzLmNvbnRleHRfbWVudV9uYW1lID0gJC5pMThuLl8oICdKb2IgVmFjYW5jaWVzJyApO1xuXHRcdHRoaXMubmF2aWdhdGlvbl9sYWJlbCA9ICQuaTE4bi5fKCAnSm9iIFZhY2FuY3knICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElKb2JWYWNhbmN5O1xuXHRcdHRoaXMuZG9jdW1lbnRfb2JqZWN0X3R5cGVfaWQgPSAxNTA7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQkdGhpcy5yZW5kZXIoKTtcblx0XHQkdGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHQkdGhpcy5pbml0RGF0YSgpO1xuXHR9XG5cblx0aW5pdE9wdGlvbnMoKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSBbXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc3RhdHVzJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3R5cGUnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnbGV2ZWwnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnZW1wbG95bWVudF9zdGF0dXMnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnd2FnZV90eXBlJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2F2YWlsYWJpbGl0eScsIGFwaTogdGhpcy5hcGkgfSxcblx0XHRdO1xuXG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb25zKCBvcHRpb25zICk7XG5cdH1cblxuXHRnZXRDdXN0b21Db250ZXh0TWVudU1vZGVsKCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfbW9kZWwgPSB7XG5cdFx0XHRleGNsdWRlOiBbXSxcblx0XHRcdGluY2x1ZGU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0p1bXAgVG8nICksXG5cdFx0XHRcdFx0aWQ6ICdqdW1wX3RvX2hlYWRlcicsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXBfaGVhZGVyOiB0cnVlLFxuXHRcdFx0XHRcdHBlcm1pc3Npb25fcmVzdWx0OiBmYWxzZSAvLyB0byBoaWRlIGl0IGluIGxlZ2FjeSBjb250ZXh0IG1lbnUgYW5kIGF2b2lkIGVycm9ycyBpbiBsZWdhY3kgcGFyc2Vycy5cblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0pvYiBBcHBsaWNhdGlvbnMnICksXG5cdFx0XHRcdFx0aWQ6ICdqb2JfYXBwbGljYXRpb24nLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0Z3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHRpY29uOiAnam9iYXBwbGljYXRpb25zLTM1eDM1LnBuZycsXG5cdFx0XHRcdFx0cGVybWlzc2lvbl9yZXN1bHQ6IHRydWUsXG5cdFx0XHRcdFx0cGVybWlzc2lvbjogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnUG9ydGFsIFByZXZpZXcnICksXG5cdFx0XHRcdFx0aWQ6ICdwb3J0YWxfcHJldmlldycsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRncm91cDogJ25hdmlnYXRpb24nLFxuXHRcdFx0XHRcdGljb246ICdyZXZpZXdzLTM1eDM1LnBuZycsXG5cdFx0XHRcdFx0cGVybWlzc2lvbl9yZXN1bHQ6IHRydWUsXG5cdFx0XHRcdFx0cGVybWlzc2lvbjogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblxuXHRcdHJldHVybiBjb250ZXh0X21lbnVfbW9kZWw7XG5cdH1cblxuXHRvbkN1c3RvbUNvbnRleHRDbGljayggaWQgKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdkb3dubG9hZCc6XG5cdFx0XHRcdHRoaXMub25Eb3dubG9hZENsaWNrKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbWFwJzpcblx0XHRcdFx0dGhpcy5vbk1hcENsaWNrKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnam9iX2FwcGxpY2F0aW9uJzpcblx0XHRcdGNhc2UgJ3BvcnRhbF9wcmV2aWV3Jzpcblx0XHRcdFx0dGhpcy5vbk5hdmlnYXRpb25DbGljayggaWQgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q3VzdG9tRGVmYXVsdE1lbnVJY29uKCBpZCwgY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICkge1xuXHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0Y2FzZSAncG9ydGFsX3ByZXZpZXcnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51UG9ydGFsVmlld0ljb24oIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2pvYl9hcHBsaWNhdGlvbic6XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE1lbnVFZGl0SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoLCAnam9iX2FwcGxpY2F0aW9uJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudVBvcnRhbFZpZXdJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGgsIHBJZCApIHtcblx0XHR0aGlzLnNldE1lbnVQb3J0YWxWaWV3SWNvbiggY29udGV4dF9idG4gKTtcblx0fVxuXG5cdHNldEVkaXRNZW51UG9ydGFsVmlld0ljb24oIGNvbnRleHRfYnRuICkge1xuXHRcdHRoaXMuc2V0TWVudVBvcnRhbFZpZXdJY29uKCBjb250ZXh0X2J0biApO1xuXHR9XG5cblx0c2V0RXJyb3JNZW51UG9ydGFsVmlld0ljb24oIGNvbnRleHRfYnRuICkge1xuXHRcdHRoaXMuc2V0TWVudVBvcnRhbFZpZXdJY29uKCBjb250ZXh0X2J0biApO1xuXHR9XG5cblx0c2V0TWVudVBvcnRhbFZpZXdJY29uKCBjb250ZXh0X2J0biApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdC8vIHZhciBzZWxlY3RfaXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cdFx0dmFyIGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXkgPSB0aGlzLmdldEdyaWRTZWxlY3RJZEFycmF5KCk7XG5cdFx0dmFyIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoID0gZ3JpZF9zZWxlY3RlZF9pZF9hcnJheS5sZW5ndGg7XG5cdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA9PT0gMSApIHtcblx0XHRcdHZhciBzZWxlY3RfaXRlbSA9IHRoaXMuZ2V0UmVjb3JkRnJvbUdyaWRCeUlkKCBncmlkX3NlbGVjdGVkX2lkX2FycmF5WzBdICk7XG5cdFx0XHRzZXRJY29uKCBzZWxlY3RfaXRlbS5pZCApO1xuXHRcdH0gZWxzZSBpZiAoICggdGhpcy5pc192aWV3aW5nIHx8IHRoaXMuaXNfZWRpdCApICYmIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCAmJiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRzZXRJY29uKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZXRJY29uKCBpZCApIHtcblx0XHRcdHZhciBmaWx0ZXIgPSB7fTtcblx0XHRcdGZpbHRlci5maWx0ZXJfZGF0YSA9IHt9O1xuXHRcdFx0ZmlsdGVyLmZpbHRlcl9kYXRhLmlkID0gW2lkXTtcblx0XHRcdCR0aGlzLmFwaVsnZ2V0JyArICR0aGlzLmFwaS5rZXlfbmFtZV0oIGZpbHRlciwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0XHRcdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHQuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhcmVzdWx0X2RhdGEgKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IHJlc3VsdF9kYXRhWzBdO1xuXHRcdFx0XHRcdGlmICggIXJlc3VsdF9kYXRhICkge1xuXHRcdFx0XHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggJHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggKCByZXN1bHRfZGF0YS5hdmFpbGFiaWxpdHlfaWQgPT0gMjAgfHwgcmVzdWx0X2RhdGEuYXZhaWxhYmlsaXR5X2lkID09IDMwICkgJiYgKCByZXN1bHRfZGF0YS5zdGF0dXNfaWQgPT0gMjAgfHwgcmVzdWx0X2RhdGEuc3RhdHVzX2lkID09IDQwICkgKSB7XG5cdFx0XHRcdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCAkdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCAkdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0uYmluZCggJHRoaXMgKVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdHNldEVycm9yTWVudSgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X2FycmF5ID0gQ29udGV4dE1lbnVNYW5hZ2VyLmdldE1lbnVNb2RlbEJ5TWVudUlkKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQgKTtcblx0XHR2YXIgbGVuID0gY29udGV4dF9tZW51X2FycmF5Lmxlbmd0aDtcblxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0bGV0IGNvbnRleHRfYnRuID0gY29udGV4dF9tZW51X2FycmF5W2ldO1xuXHRcdFx0bGV0IGlkID0gY29udGV4dF9tZW51X2FycmF5W2ldLmlkO1xuXHRcdFx0aWYgKCBpZCAhPT0gJ3BvcnRhbF9wcmV2aWV3JyApIHtcblx0XHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3BvcnRhbF9wcmV2aWV3Jzpcblx0XHRcdFx0XHR0aGlzLnNldEVycm9yTWVudVBvcnRhbFZpZXdJY29uKCBjb250ZXh0X2J0biApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXG5cdHNldEN1c3RvbUVkaXRNZW51SWNvbiggaWQsIGNvbnRleHRfYnRuICkge1xuXHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0Y2FzZSAncG9ydGFsX3ByZXZpZXcnOlxuXHRcdFx0XHR0aGlzLnNldEVkaXRNZW51UG9ydGFsVmlld0ljb24oIGNvbnRleHRfYnRuICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnam9iX2FwcGxpY2F0aW9uJzpcblx0XHRcdFx0dGhpcy5zZXRFZGl0TWVudU5hdkVkaXRJY29uKCBjb250ZXh0X2J0biwgJ2pvYl9hcHBsaWNhdGlvbicgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0b25OYXZpZ2F0aW9uQ2xpY2soIGljb25OYW1lICkge1xuXHRcdHZhciBncmlkX3NlbGVjdGVkX2lkX2FycmF5ID0gdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpO1xuXHRcdHZhciBncmlkX3NlbGVjdGVkX2xlbmd0aCA9IGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXkubGVuZ3RoO1xuXHRcdHZhciBzZWxlY3RfaXRlbSA9IG51bGw7XG5cdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA9PT0gMSApIHtcblx0XHRcdHNlbGVjdF9pdGVtID0gdGhpcy5nZXRSZWNvcmRGcm9tR3JpZEJ5SWQoIGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXlbMF0gKTtcblx0XHR9IGVsc2UgaWYgKCAoIHRoaXMuaXNfdmlld2luZyB8fCB0aGlzLmlzX2VkaXQgKSAmJiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQgJiYgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0c2VsZWN0X2l0ZW0gPSB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0fVxuXHRcdHN3aXRjaCAoIGljb25OYW1lICkge1xuXHRcdFx0Y2FzZSAnam9iX2FwcGxpY2F0aW9uJzpcblx0XHRcdFx0dmFyIGZpbHRlciA9IHsgZmlsdGVyX2RhdGE6IHt9IH07XG5cdFx0XHRcdC8vIHZhciBzZWxlY3RfaXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cdFx0XHRcdGlmICggc2VsZWN0X2l0ZW0gIT0gbnVsbCApIHtcblx0XHRcdFx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuam9iX3ZhY2FuY3lfaWQgPSBzZWxlY3RfaXRlbS5pZDtcblx0XHRcdFx0XHRHbG9iYWwuYWRkVmlld1RhYiggdGhpcy52aWV3SWQsICQuaTE4bi5fKCAnSm9iIFZhY2FuY2llcycgKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgKTtcblx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLmdvVG9WaWV3KCAnSm9iQXBwbGljYXRpb24nLCBmaWx0ZXIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3BvcnRhbF9wcmV2aWV3Jzpcblx0XHRcdFx0dmFyIG5ld191cmwgPSBHbG9iYWwuZ2V0QmFzZVVSTCggZmFsc2UsIGZhbHNlICk7XG5cdFx0XHRcdC8vIHZhciBzZWxlY3RfaXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cdFx0XHRcdGlmICggc2VsZWN0X2l0ZW0gIT0gbnVsbCApIHtcblx0XHRcdFx0XHRuZXdfdXJsICs9ICdwb3J0YWwvcmVjcnVpdG1lbnQvIyFtPVBvcnRhbEpvYlZhY2FuY3lEZXRhaWwmaWQ9JyArIHNlbGVjdF9pdGVtLmlkO1xuXHRcdFx0XHRcdG5ld191cmwgKz0gJyZjb21wYW55X2lkPScgKyBMb2NhbENhY2hlRGF0YS5nZXRDdXJyZW50Q29tcGFueSgpLnNob3J0X25hbWU7XG5cdFx0XHRcdFx0d2luZG93Lm9wZW4oIG5ld191cmwgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRidWlsZEVkaXRWaWV3VUkoKSB7XG5cblx0XHRzdXBlci5idWlsZEVkaXRWaWV3VUkoKTtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgdGFiX21vZGVsID0ge1xuXHRcdFx0J3RhYl92YWNhbmN5Jzoge1xuXHRcdFx0XHQnbGFiZWwnOiAkLmkxOG4uXyggJ0pvYiBWYWNhbmN5JyApLFxuXHRcdFx0XHQnaHRtbF90ZW1wbGF0ZSc6IHRoaXMuZ2V0Sm9iVmFjYW5jeVRhYkh0bWwoKSxcblx0XHRcdFx0J2lzX211bHRpX2NvbHVtbic6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQndGFiX2F0dGFjaG1lbnQnOiB0cnVlLFxuXHRcdFx0J3RhYl9hcHBsaWNhdGlvbnMnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnSm9iIEFwcGxpY2F0aW9ucycgKSxcblx0XHRcdFx0J2luaXRfY2FsbGJhY2snOiAnaW5pdFN1YkFwcGxpY2F0aW9uVmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdHRoaXMubmF2aWdhdGlvbi5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJSm9iVmFjYW5jeSxcblx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9qb2JfdmFjYW5jeScsXG5cdFx0XHRuYXZpZ2F0aW9uX21vZGU6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cblx0XHR0aGlzLnNldE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGFiIDAgc3RhcnRcblxuXHRcdHZhciB0YWJfdmFjYW5jeSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl92YWNhbmN5JyApO1xuXG5cdFx0dmFyIHRhYl92YWNhbmN5X2NvbHVtbjEgPSB0YWJfdmFjYW5jeS5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0ucHVzaCggdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dDtcblx0XHR2YXIgd2lkZ2V0Q29udGFpbmVyO1xuXHRcdHZhciBsYWJlbDtcblxuXHRcdC8vIFN0YXR1c1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3N0YXR1c19pZCcgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5zdGF0dXNfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1N0YXR1cycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gTmFtZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICduYW1lJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ05hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnBhcmVudCgpLndpZHRoKCAnNDUlJyApO1xuXG5cdFx0Ly8gSm9iIFRpdGxlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlclRpdGxlLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXJfdGl0bGUnLFxuXHRcdFx0ZmllbGQ6ICd0aXRsZV9pZCcsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUaXRsZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW4xICk7XG5cblx0XHQvLyBBdmFpbGFiaWxpdHlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdhdmFpbGFiaWxpdHlfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuYXZhaWxhYmlsaXR5X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdBdmFpbGFiaWxpdHknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0Ly8gRW1wbG95ZWUgU3RhdHVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnZW1wbG95bWVudF9zdGF0dXNfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuZW1wbG95bWVudF9zdGF0dXNfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VtcGxveW1lbnQgU3RhdHVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl92YWNhbmN5X2NvbHVtbjEgKTtcblxuXHRcdC8vIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICd0eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnR5cGVfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1R5cGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0Ly8gTGV2ZWxcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdsZXZlbF9pZCcgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5sZXZlbF9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTGV2ZWwnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0Ly8gQnJhbmNoXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJQnJhbmNoLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2JyYW5jaCcsXG5cdFx0XHRmaWVsZDogJ2JyYW5jaF9pZCcsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdCcmFuY2gnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSApO1xuXG5cdFx0Ly8gRGVwYXJ0bWVudFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSURlcGFydG1lbnQsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfZGVwYXJ0bWVudCcsXG5cdFx0XHRmaWVsZDogJ2RlcGFydG1lbnRfaWQnLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVwYXJ0bWVudCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW4xICk7XG5cblx0XHQvLyBIaXJpbmcgTWFuYWdlclxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVVzZXIsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRmaWVsZDogJ3VzZXJfaWQnLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnSGlyaW5nIE1hbmFnZXInICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIFBvc2l0aW9ucyBBdmFpbGFibGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAncG9zaXRpb25zJywgd2lkdGg6IDUwIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUG9zaXRpb25zIEF2YWlsYWJsZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0dmFyIHRhYl92YWNhbmN5X2NvbHVtbjIgPSB0YWJfdmFjYW5jeS5maW5kKCAnLnNlY29uZC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl92YWNhbmN5X2NvbHVtbjIgKTtcblxuXHRcdC8vIFBvc2l0aW9uIE9wZW4gRGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5URGF0ZVBpY2tlciggeyBmaWVsZDogJ3Bvc2l0aW9uX29wZW5fZGF0ZScgfSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblx0XHRsYWJlbCA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ2llJyApICsgJyA6ICcgKyBMb2NhbENhY2hlRGF0YS5nZXRMb2dpblVzZXJQcmVmZXJlbmNlKCkuZGF0ZV9mb3JtYXRfZGlzcGxheSArICc8L3NwYW4+JyApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggbGFiZWwgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Bvc2l0aW9uIE9wZW4gRGF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW4yLCAnJywgd2lkZ2V0Q29udGFpbmVyICk7XG5cblx0XHQvLyBQb3NpdGlvbiBFeHBpcnkgRGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVIgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5URGF0ZVBpY2tlciggeyBmaWVsZDogJ3Bvc2l0aW9uX2V4cGlyZV9kYXRlJyB9ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXHRcdGxhYmVsID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC1yaWdodC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnaWUnICkgKyAnIDogJyArIExvY2FsQ2FjaGVEYXRhLmdldExvZ2luVXNlclByZWZlcmVuY2UoKS5kYXRlX2Zvcm1hdF9kaXNwbGF5ICsgJzwvc3Bhbj4nICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmb3JtX2l0ZW1faW5wdXQgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbCApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUG9zaXRpb24gRXhwaXJ5IERhdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMiwgJycsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0Ly8gV2FnZSBUeXBlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnd2FnZV90eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLndhZ2VfdHlwZV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnV2FnZSBUeXBlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl92YWNhbmN5X2NvbHVtbjIgKTtcblxuXHRcdC8vIE1pbmltdW0gV2FnZVxuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21pbmltdW1fd2FnZScsIHdpZHRoOiAxNTAgfSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNaW5pbXVtIFdhZ2UnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMiApO1xuXG5cdFx0Ly8gTWF4aW11bSBXYWdlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ21heGltdW1fd2FnZScsIHdpZHRoOiAxNTAgfSApO1xuXG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdNYXhpbXVtIFdhZ2UnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMiApO1xuXG5cdFx0Ly8gS2V5d29yZHNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAna2V5d29yZHMnLCB3aWR0aDogMjAwIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnS2V5d29yZHMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMiApO1xuXG5cdFx0Ly9UYWdzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5UQUdfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGFnSW5wdXQoIHsgZmllbGQ6ICd0YWcnLCBvYmplY3RfdHlwZV9pZDogMzUwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1RhZ3MnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3ZhY2FuY3lfY29sdW1uMiwgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdHZhciB0YWJfdmFjYW5jeV9jb2x1bW40ID0gdGFiX3ZhY2FuY3kuZmluZCggJy5mb3VydGgtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfdmFjYW5jeV9jb2x1bW40ICk7XG5cblx0XHQvLyBTdW1tYXJpemVkIGRlc2NyaXB0aW9uXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0FSRUEgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRBcmVhKCB7IGZpZWxkOiAnc3VtbWFyeV9kZXNjcmlwdGlvbicsIHJvd3M6IDIgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3VtbWFyeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdmFjYW5jeV9jb2x1bW40LCAnJywgbnVsbCwgdHJ1ZSApO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hGaWVsZHMoKSB7XG5cblx0XHRzdXBlci5idWlsZFNlYXJjaEZpZWxkcygpO1xuXHRcdHRoaXMuc2VhcmNoX2ZpZWxkcyA9IFtcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ05hbWUnICksXG5cdFx0XHRcdGZpZWxkOiAnbmFtZScsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0VtcGxveWVlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAndXNlcl9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXInLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVVzZXIsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1N0YXR1cycgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3N0YXR1c19pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUeXBlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAndHlwZV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFbXBsb3llZSBTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdlbXBsb3llZV9zdGF0dXNfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQXZhaWxhYmlsaXR5JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnYXZhaWxhYmlsaXR5X2lkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1RpdGxlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAndGl0bGVfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyX3RpdGxlJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyVGl0bGUsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdCcmFuY2gnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdicmFuY2hfaWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9icmFuY2gnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUJyYW5jaCxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0RlcGFydG1lbnQnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdkZXBhcnRtZW50X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfZGVwYXJ0bWVudCcsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJRGVwYXJ0bWVudCxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyZWF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjcmVhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1VwZGF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICd1cGRhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1RhZ3MnICksXG5cdFx0XHRcdGZpZWxkOiAndGFnJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdG9iamVjdF90eXBlX2lkOiAzNTAsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEFHX0lOUFVUXG5cdFx0XHR9IClcblxuXHRcdF07XG5cdH1cblxuXHRzZXRDdXJyZW50RWRpdFJlY29yZERhdGEoKSB7XG5cdFx0Ly9TZXQgY3VycmVudCBlZGl0IHJlY29yZCBkYXRhIHRvIGFsbCB3aWRnZXRzXG5cdFx0VFRQcm9taXNlLmFkZCggJ2pvYl92YWNhbmN5JywgJ3NldEN1cnJlbnRFZGl0UmVjb3JkRGF0YScgKTtcblx0XHRmb3IgKCB2YXIga2V5IGluIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCApIHtcblxuXHRcdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGtleSA9PT0gJ2Rlc2NyaXB0aW9uJyApIHtcblx0XHRcdFx0dGhpcy5zZXREZXNjcmlwdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHdpZGdldCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1trZXldO1xuXHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHdpZGdldCApICkge1xuXHRcdFx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRcdFx0Y2FzZSAnY291bnRyeSc6IC8vcG9wdWxhciBjYXNlXG5cdFx0XHRcdFx0XHR0aGlzLmVTZXRQcm92aW5jZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2Rlc2NyaXB0aW9uJzpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsZWN0VUlEYXRhVG9DdXJyZW50RWRpdFJlY29yZCgpO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHRUVFByb21pc2Uud2FpdCggJ2pvYl92YWNhbmN5JywgJ3NldEN1cnJlbnRFZGl0UmVjb3JkRGF0YScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0JHRoaXMuc2V0RWRpdFZpZXdEYXRhRG9uZSgpO1xuXHRcdH0gKTtcblx0fVxuXG5cdHNldEVkaXRWaWV3RGF0YURvbmUoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR0aGlzLm1vdmVGaWVsZHMoKTtcblx0XHRzdXBlci5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cblx0XHR0aGlzLnJlc2l6ZVN1bW1hcnlGaWVsZCgpO1xuXHR9XG5cblx0cmVzaXplU3VtbWFyeUZpZWxkKCkge1xuXHRcdC8vY3VzdG9tIHNpemluZyBmb3IgdGhlIHN1bW1hcnkgYm94LlxuXHRcdHZhciBmb3JtX2l0ZW0gPSB0aGlzLmVkaXRfdmlld19mb3JtX2l0ZW1fZGljWydzdW1tYXJ5X2Rlc2NyaXB0aW9uJ107XG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1snc3VtbWFyeV9kZXNjcmlwdGlvbiddO1xuXHRcdHZhciBmaXJzdF9jb2x1bW5fd2lkdGggPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfdmFjYW5jeScgKS5maW5kKCAnLmZpcnN0LWNvbHVtbicgKS53aWR0aCgpO1xuXHRcdHZhciBzZWNvbmRfY29sdW1uX3dpZHRoID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3ZhY2FuY3knICkuZmluZCggJy5zZWNvbmQtY29sdW1uJyApLndpZHRoKCk7XG5cdFx0dmFyIGZvcm1faXRlbV9sYWJlbF9kaXYgPSBmb3JtX2l0ZW0uZmluZCggJy5lZGl0LXZpZXctZm9ybS1pdGVtLWxhYmVsLWRpdicgKTtcblx0XHR2YXIgZm9ybV9pdGVtX2xhYmVsX2Rpdl93aWR0aCA9IGZvcm1faXRlbV9sYWJlbF9kaXYud2lkdGgoKTtcblxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXRfZGl2X3dpZHRoID0gZmlyc3RfY29sdW1uX3dpZHRoICsgc2Vjb25kX2NvbHVtbl93aWR0aCAtIGZvcm1faXRlbV9sYWJlbF9kaXZfd2lkdGg7XG5cblx0XHR2YXIgbmV3X3dpZHRoID0gZmlyc3RfY29sdW1uX3dpZHRoICsgc2Vjb25kX2NvbHVtbl93aWR0aCAtIGZvcm1faXRlbV9sYWJlbF9kaXZfd2lkdGggKyAyOyAvLyArMiByZXN1bHRlZCBmcm9tIHRyaWFsIGFuZCBlcnJvci4gSWYgdGhlICsyIGdpdmVzIHRyb3VibGUsIHJlbW92ZSBpdCBhbGx0b2dldGhlciwgaXQnbGwgYmUgYSBmZXcgcGl4ZWxzIHNob3J0LCBidXQgYXQgbGVhc3Qgd29uJ3QgZ2V0IHRvbyBsb25nIGZvciB0aGUgd2lkdGguIFRoZSBvbGQgLTUgbm8gbG9uZ2VyIG5lZWRlZCBhcyB3ZSByZW1vdmVkIHRoZSBtYXJnaW4tcmlnaHQgaW4gQ1NTLlxuXHRcdGlmICggdGhpcy5pc19tYXNzX2VkaXRpbmcgPT0gdHJ1ZSApIHtcblx0XHRcdG5ld193aWR0aCAtPSAkKCAnLm1hc3MtZWRpdC1jaGVja2JveCcgKS53aWR0aCgpO1xuXHRcdH1cblxuXHRcdGZvcm1faXRlbV9pbnB1dC53aWR0aCggbmV3X3dpZHRoICk7XG5cdH1cblxuXHRtb3ZlRmllbGRzKCkge1xuXHRcdC8vIHZhciBmaXJzdF9jb2x1bW4gPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfdmFjYW5jeScgKS5maW5kKCcuZmlyc3QtY29sdW1uJyk7XG5cdFx0dmFyIHNlY29uZF9jb2x1bW4gPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfdmFjYW5jeScgKS5maW5kKCAnLnNlY29uZC1jb2x1bW4nICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1sndXNlcl9pZCddLmFwcGVuZFRvKCBzZWNvbmRfY29sdW1uICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfZm9ybV9pdGVtX2RpY1sncG9zaXRpb25zJ10uYXBwZW5kVG8oIHNlY29uZF9jb2x1bW4gKTtcblx0fVxuXG5cdHNldERlc2NyaXB0aW9uKCBlbCApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBmb3JtX2l0ZW0gPSAkKCBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggV2lkZ2V0TmFtZXNEaWMuRURJVF9WSUVXX0ZPUk1fSVRFTSApICk7XG5cdFx0dmFyIGZvcm1faXRlbV9sYWJlbF9kaXYgPSBmb3JtX2l0ZW0uZmluZCggJy5lZGl0LXZpZXctZm9ybS1pdGVtLWxhYmVsLWRpdicgKTtcblx0XHR2YXIgZm9ybV9pdGVtX2lucHV0X2RpdiA9IGZvcm1faXRlbS5maW5kKCAnLmVkaXQtdmlldy1mb3JtLWl0ZW0taW5wdXQtZGl2JyApO1xuXHRcdHZhciBmb3JtX2l0ZW1fbGFiZWwgPSBmb3JtX2l0ZW0uZmluZCggJy5lZGl0LXZpZXctZm9ybS1pdGVtLWxhYmVsJyApO1xuXHRcdGZvcm1faXRlbV9sYWJlbC50ZXh0KCAkLmkxOG4uXyggJ0Rlc2NyaXB0aW9uJyApICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0X2Rpdi5hZGRDbGFzcyggJ2VkaXQtdmlldy1mb3JtLWl0ZW0tdGlueW1jZS10ZXh0YXJlYS1kaXYnICk7XG5cdFx0dmFyIHRhYl92YWNhbmN5ID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3ZhY2FuY3knICk7XG5cdFx0Ly8gdmFyIGNvbHVtbiA9IHRhYl92YWNhbmN5LmZpbmQoICcudGhpcmQtY29sdW1uJyApO1xuXHRcdHZhciB0YWJfdmFjYW5jeV9jb2x1bW4zID0gdGFiX3ZhY2FuY3kuZmluZCggJy50aGlyZC1jb2x1bW4nICk7XG5cdFx0dGFiX3ZhY2FuY3lfY29sdW1uMy5odG1sKCBmb3JtX2l0ZW0gKTtcblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl92YWNhbmN5X2NvbHVtbjMgKTtcblx0XHR0aGlzLmVkaXRGaWVsZFJlc2l6ZSggMCApO1xuXHRcdC8vIHZhciB3aWRnZXQgPSB3aWRnZXRzO1xuXHRcdGZvcm1faXRlbV9sYWJlbF9kaXYuY3NzKCAnaGVpZ2h0JywgJzM0MHB4JyApO1xuXHRcdGZvcm1faXRlbV9sYWJlbF9kaXYuY3NzKCAnd2lkdGgnLCBmb3JtX2l0ZW1fbGFiZWxfZGl2LndpZHRoKCkgKyAxICk7XG5cdFx0dGhpcy5zaG93RGVzY3JpcHRpb24oKTtcblxuXHRcdHdpbmRvdy5vbnJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCB0aGlzLmVkaXRfdmlldyApIHtcblx0XHRcdFx0JHRoaXMucmVzaXplU3VtbWFyeUZpZWxkKCk7XG5cdFx0XHRcdCR0aGlzLnJlc2l6ZU1DRSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIGZvcm1faXRlbTtcblx0fVxuXG5cdHJlc2l6ZU1DRSgpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQgPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ3N1bW1hcnlfZGVzY3JpcHRpb24nXTtcblxuXHRcdHZhciBwYXJlbnRfd2lkdGggPSBmb3JtX2l0ZW1faW5wdXQud2lkdGgoKSArIDY7IC8vIHBhZGRpbmcgMiwgYm9yZGVyIDEgeDIgb24gLmpvYi12YWNhbmN5LXN1bW1hcnktZGVzY3JpcHRpb24gLnQtdGV4dC1hcmVhXG5cdFx0JHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl92YWNhbmN5JyApLmZpbmQoICcudGhpcmQtY29sdW1uJyApLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS10aW55bWNlLXRleHRhcmVhLWRpdicgKS53aWR0aCggcGFyZW50X3dpZHRoICk7XG5cdH1cblxuXHRzaG93RGVzY3JpcHRpb24oKSB7XG5cdFx0aWYgKCAhdGhpcy5lZGl0X3ZpZXdfdGFiICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR2YXIgZm9ybV9pdGVtX2xhYmVsX2Rpdl93aWR0aCA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl92YWNhbmN5JyApLmZpbmQoICcudGhpcmQtY29sdW1uJyApLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS1sYWJlbC1kaXYnICkud2lkdGgoKSArIDEyO1xuXHRcdHZhciBlbCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVElOWU1DRV9URVhUX0FSRUEsIHRydWUgKTtcblx0XHR2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2Rlc2NyaXB0aW9uJ107XG5cblx0XHR2YXIgd2lkdGggPSAkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJy5lZGl0LXZpZXctdGFiJyApWzBdICkud2lkdGgoKSAtIGZvcm1faXRlbV9sYWJlbF9kaXZfd2lkdGg7XG5cdFx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG5cdFx0XHR3aWR0aDogKCB3aWR0aCAtIDMgKSArICdweCcsXG5cdFx0XHRoZWlnaHQ6ICczMzVweCdcblx0XHR9O1xuXG5cdFx0dmFyIHJlYWRvbmx5ID0gZmFsc2U7XG5cdFx0aWYgKCB0aGlzLmlzX3ZpZXdpbmcgKSB7XG5cdFx0XHRyZWFkb25seSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0dmFyIHRwbCA9IF8udGVtcGxhdGUoIGVsICkoIG9wdGlvbnMgKTtcblx0XHR0aW55TUNFLnJlbW92ZSgpO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl92YWNhbmN5JyApLmZpbmQoICcudGhpcmQtY29sdW1uJyApLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS10aW55bWNlLXRleHRhcmVhLWRpdicgKS5odG1sKCB0cGwgKTtcblxuXHRcdC8vVGhpcyBwcm9wZXJ0eSB3YXMgcmVtb3ZlZCBpbiBqUXVlcnkgMS45XG5cdFx0Ly8gaWYgKCAkLmJyb3dzZXIubW96aWxsYSApIHtcblx0XHQvLyB9IGVsc2Uge1xuXHRcdC8vIFx0dmFyIGk7XG5cdFx0Ly8gXHR2YXIgdCA9IHRpbnlNQ0UuZWRpdG9ycztcblx0XHQvLyBcdGZvciAoaSBpbiB0KXtcblx0XHQvLyBcdFx0aWYgKHQuaGFzT3duUHJvcGVydHkoaSkpe1xuXHRcdC8vIFx0XHRcdHRbaV0ucmVtb3ZlKCk7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH1cblx0XHQvLyB9XG5cdFx0dGlueU1DRS5lZGl0b3JzID0gW107XG5cblx0XHQvLyBuZXcgdGlueU1DRS5pbml0IGNvZGUgaGVyZVxuXHRcdHRpbnlNQ0UuaW5pdCgge1xuXHRcdFx0aGVpZ2h0OiAnMzM1cHgnLFxuXHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdGF1dG9yZXNpemVfbWluX3dpZHRoOiAoIHdpZHRoIC0gMyApLFxuXHRcdFx0c2VsZWN0b3I6ICcudGlueW1jZS10ZXh0LWFyZWEnLFxuXHRcdFx0cmVhZG9ubHk6IHJlYWRvbmx5LFxuXHRcdFx0bWVudWJhcjogZmFsc2UsXG5cdFx0XHRzdGF0dXNiYXI6IGZhbHNlLFxuXHRcdFx0cGx1Z2luczogJ2xpbmsnLFxuXHRcdFx0Ly90b29sYmFyOiBmYWxzZSwgLy8jMjU4OSAoc2hvd2luZyB0aGUgZGVmYXVsdCB0b29sYmFyKVxuXHRcdFx0dGhlbWU6ICdzaWx2ZXInLFxuXHRcdFx0c2tpbjogZmFsc2UsXG5cdFx0XHRjb250ZW50X2NzczogZmFsc2UsXG5cdFx0XHRjb250ZW50X3N0eWxlOiBjb250ZW50VWlDc3MudG9TdHJpbmcoKSArICdcXG4nXG5cdFx0XHRcdCsgY29udGVudENzcy50b1N0cmluZygpICsgJ1xcbidcblx0XHRcdFx0KyAnYm9keSB7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogMDsgY29sb3I6ICM0MDQwNDI7IH0nLCAvLyB0YWtlbiBmcm9tIFBvcnRhbEpvYlZhY2FuY3lEZXRhaWxDb250cm9sbGVyLmpzOnNob3dKb2JWYWNhbmN5IGFzIHdlIHdhbnQgdGhlIHRleHQgaGVyZSB0byBtYXRjaCB3aGF0IGEgdXNlciB3aWxsIGVuZCB1cCBzZWVpbmcuXG5cdFx0fSApO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgdGlueW1jZV90ZXh0YXJlYSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl92YWNhbmN5JyApLmZpbmQoICcudGhpcmQtY29sdW1uJyApLmZpbmQoICcuZWRpdC12aWV3LWZvcm0taXRlbS10aW55bWNlLXRleHRhcmVhLWRpdicgKTtcblx0XHR0aW55bWNlX3RleHRhcmVhLmhpZGUoKTtcblx0XHR2YXIgc2VhcmNoX2Zvcl90aW55bWNlID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGJvZHkgPSB0aW55bWNlX3RleHRhcmVhLmZpbmQoICdpZnJhbWUnICkuY29udGVudHMoKS5maW5kKCAnYm9keScgKTtcblx0XHRcdGlmICggIV8uaXNVbmRlZmluZWQoIGJvZHlbMF0gKSApIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCggc2VhcmNoX2Zvcl90aW55bWNlICk7XG5cdFx0XHRcdC8vIGJvZHkuY3NzKHsnZm9udC1zaXplJzogJzEycHgnLCAnYmFja2dyb3VuZC1jb2xvcic6ICcjZmZmJywgJ2ZvbnQtZmFtaWx5JzogJ0x1Y2lkYSBHcmFuZGUsIEx1Y2lkYSBTYW5zLCBBcmlhbCwgc2Fucy1zZXJpZid9KTtcblx0XHRcdFx0JHRoaXMucmVzaXplU3VtbWFyeUZpZWxkKCk7XG5cdFx0XHRcdCR0aGlzLnJlc2l6ZU1DRSgpO1xuXHRcdFx0XHR0aW55bWNlX3RleHRhcmVhLnNob3coKTtcblxuXHRcdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ2pvYl92YWNhbmN5JywgJ3NldEN1cnJlbnRFZGl0UmVjb3JkRGF0YScgKTtcblx0XHRcdH1cblx0XHR9LCA1MCApO1xuXHR9XG5cblx0dW5pZm9ybVZhcmlhYmxlKCByZWNvcmRzICkge1xuXHRcdGlmICggdGhpcy5pc19tYXNzX2VkaXRpbmcgKSB7XG5cdFx0XHRyZXR1cm4gcmVjb3Jkcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVjb3Jkcy5kZXNjcmlwdGlvbiA9IHRpbnlNQ0UuYWN0aXZlRWRpdG9yLmdldENvbnRlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29yZHM7XG5cdH1cblxuXHRpbml0U3ViQXBwbGljYXRpb25WaWV3KCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAoICF0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdvblRhYlNob3cnICk7IC8vU2luY2Ugc2VhcmNoKCkgaXNuJ3QgY2FsbGVkIGluIHRoaXMgY2FzZSwgYW5kIHdlIGp1c3QgZGlzcGxheSB0aGUgXCJQbGVhc2UgU2F2ZSBUaGlzIFJlY29yZCAuLi5cIiBtZXNzYWdlLCByZXNvbHZlIHRoZSBwcm9taXNlLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5zdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlciApIHtcblx0XHRcdHRoaXMuc3ViX2pvYl92YWNhbmN5X2FwcGxpY2FudF92aWV3X2NvbnRyb2xsZXIuYnVpbGRDb250ZXh0TWVudSggdHJ1ZSApO1xuXHRcdFx0dGhpcy5zdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlci5zZXREZWZhdWx0TWVudSgpO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl92YWNhbmN5X2FwcGxpY2FudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfdmFjYW5jeV9hcHBsaWNhbnRfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlci5pbml0RGF0YSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdFRUUHJvbWlzZS5hZGQoICdpbml0U3ViQXBwbGljYXRpb25WaWV3JywgJ2xvYWRzY3JpcHQnICk7XG5cdFx0R2xvYmFsLmxvYWRTY3JpcHQoICd2aWV3cy9oci9yZWNydWl0bWVudC9Kb2JBcHBsaWNhdGlvblZpZXdDb250cm9sbGVyLmpzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFiX2FwcGxpY2F0aW9ucyA9ICR0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfYXBwbGljYXRpb25zJyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX2FwcGxpY2F0aW9ucy5maW5kKCAnLmZpcnN0LWNvbHVtbi1zdWItdmlldycgKTtcblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0pvYkFwcGxpY2F0aW9uJyArICdWaWV3JyApO1xuXHRcdFx0Sm9iQXBwbGljYXRpb25WaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyggZmlyc3RDb2x1bW4sIGJlZm9yZUxvYWRWaWV3LCBhZnRlckxvYWRWaWV3ICk7XG5cblx0XHR9ICk7XG5cblx0XHRmdW5jdGlvbiBiZWZvcmVMb2FkVmlldygpIHtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFmdGVyTG9hZFZpZXcoIHN1YlZpZXdDb250cm9sbGVyICkge1xuXHRcdFx0JHRoaXMuc3ViX2pvYl92YWNhbmN5X2FwcGxpY2FudF92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfdmFjYW5jeV9hcHBsaWNhbnRfdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnam9iX3ZhY2FuY3lfaWQnO1xuXHRcdFx0JHRoaXMuc3ViX2pvYl92YWNhbmN5X2FwcGxpY2FudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9qb2JfdmFjYW5jeV9hcHBsaWNhbnRfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmlld19jb250cm9sbGVyID0gJHRoaXM7XG5cdFx0XHQkdGhpcy5zdWJfam9iX3ZhY2FuY3lfYXBwbGljYW50X3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0XHRcdFRUUHJvbWlzZS5yZXNvbHZlKCAnaW5pdFN1YkFwcGxpY2F0aW9uVmlldycsICdsb2Fkc2NyaXB0JyApO1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRyZW1vdmVFZGl0VmlldygpIHtcblx0XHRzdXBlci5yZW1vdmVFZGl0VmlldygpO1xuXHRcdHRoaXMuc3ViX2pvYl92YWNhbmN5X2FwcGxpY2FudF92aWV3X2NvbnRyb2xsZXIgPSBudWxsO1xuXHR9XG5cblx0b25UYWJJbmRleENoYW5nZSggZSwgdWkgKSB7XG5cdFx0dGhpcy5yZXNpemVTdW1tYXJ5RmllbGQoKTtcblx0XHR0aGlzLnJlc2l6ZU1DRSgpO1xuXHRcdHN1cGVyLm9uVGFiSW5kZXhDaGFuZ2UoIGUsIHVpICk7XG5cdH1cblxuXHRnZXRKb2JWYWNhbmN5VGFiSHRtbCgpIHtcblx0XHRyZXR1cm4gYDxkaXYgaWQ9XCJ0YWJfdmFjYW5jeVwiIGNsYXNzPVwiZWRpdC12aWV3LXRhYi1vdXRzaWRlXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImVkaXQtdmlldy10YWJcIiBpZD1cInRhYl92YWNhbmN5X2NvbnRlbnRfZGl2XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlyc3QtY29sdW1uXCI+PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2Vjb25kLWNvbHVtblwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvdXJ0aC1jb2x1bW4gam9iLXZhY2FuY3ktc3VtbWFyeS1kZXNjcmlwdGlvblwiPjwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRoaXJkLWNvbHVtbiBmdWxsLXdpZHRoLWNvbHVtblwiPjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5gO1xuXHR9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6191\n")}}]); |