TimeTrex/interface/html5/dist/payroll-pay_periods-PayPeriodsViewController.bundle.js

1 line
49 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["payroll-pay_periods-PayPeriodsViewController"],{505:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PayPeriodsViewController\": () => (/* binding */ PayPeriodsViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass PayPeriodsViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#pay_periods_view_container',\n\n\t\t\tstatus_array: null,\n\t\t\ttype_array: null,\n\t\t\tpay_period_schedule_api: null\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\n\t\t//this._super('initialize', options );\n\t\tthis.edit_view_tpl = 'PayPeriodsEditView.html';\n\t\tthis.permission_id = 'pay_period_schedule';\n\t\tthis.script_name = 'PayPeriodsView';\n\t\tthis.viewId = 'PayPeriods';\n\t\tthis.table_name_key = 'pay_period';\n\t\tthis.context_menu_name = $.i18n._( 'Pay Period' );\n\t\tthis.navigation_label = $.i18n._( 'Pay Period' );\n\t\tthis.api = TTAPI.APIPayPeriod;\n\t\tthis.pay_period_schedule_api = TTAPI.APIPayPeriodSchedule;\n\n\t\tthis.render();\n\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu( true );\n\t\t} else {\n\t\t\tthis.buildContextMenu();\n\t\t}\n\n\t\t//call init data in parent view\n\n\t\tif ( !this.sub_view_mode ) {\n\t\t\tthis.initData();\n\t\t}\n\t}\n\n\tremoveEditView( is_cancel ) {\n\n\t\tsuper.removeEditView();\n\n\t\tif ( this.parent_view_controller &&\n\t\t\t( this.parent_view_controller.viewId === 'TimeSheet' || this.parent_view_controller.viewId === 'PayStub' ) ) {\n\t\t\tthis.parent_view_controller.onSubViewRemoved( is_cancel );\n\t\t}\n\t}\n\n\tinitOptions( callBack ) {\n\t\tvar $this = this;\n\n\t\tvar options = [\n\t\t\t{ option_name: 'status', field_name: null, api: null },\n\t\t\t{ option_name: 'type', field_name: 'type_id', api: this.pay_period_schedule_api }\n\t\t];\n\n\t\tthis.initDropDownOptions( options, function( result ) {\n\n\t\t\tif ( callBack ) {\n\t\t\t\tcallBack( result ); // First to initialize drop down options, and then to initialize edit view UI.\n\t\t\t}\n\n\t\t} );\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: ['copy'],\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: '', //Empty label. vue_icon is displayed instead of text.\n\t\t\t\t\tid: 'other_header',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'other',\n\t\t\t\t\taction_group_header: true,\n\t\t\t\t\tvue_icon: 'tticon tticon-more_vert_black_24dp',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Delete Data' ),\n\t\t\t\t\tid: 'delete_data',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'other'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Import Data' ),\n\t\t\t\t\tid: 'import_icon',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'other'\n\t\t\t\t},\n\t\t\t]\n\t\t};\n\n\t\tif ( this.edit_only_mode ) {\n\t\t\tcontext_menu_model.exclude.push( 'import_icon', 'delete_data' );\n\t\t}\n\n\t\treturn context_menu_model;\n\t}\n\n\tonEditClick( record_id, noRefreshUI ) {\n\t\t//If a dynamic future pay period is selected (zero id) do not allow it to be interacted with.\n\t\tif ( this.getGridSelectIdArray().includes( TTUUID.zero_id ) ) {\n\t\t\tProgressBar.closeOverlay();\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.onEditClick( record_id, noRefreshUI );\n\t}\n\n\topenEditView( id ) {\n\n\t\tvar $this = this;\n\n\t\tif ( $this.edit_only_mode ) {\n\n\t\t\t$this.initOptions( function( result ) {\n\n\t\t\t\tif ( !$this.edit_view ) {\n\t\t\t\t\t$this.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t\t}\n\n\t\t\t\t$this.getPayPeriodData( id, function( result ) {\n\t\t\t\t\t// Waiting for the TTAPI.API returns data to set the current edit record.\n\t\t\t\t\t$this.current_edit_record = result;\n\n\t\t\t\t\t$this.initEditView();\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} else {\n\t\t\tif ( !this.edit_view ) {\n\t\t\t\tthis.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t}\n\n\t\t}\n\t}\n\n\tsetCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'login':\n\t\t\t\tthis.setDefaultMenuLoginIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'cancel':\n\t\t\t\tthis.setDefaultMenuCancelIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'import_icon':\n\t\t\t\tthis.setDefaultMenuImportIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'delete_data':\n\t\t\t\tthis.setDefaultMenuDeleteDataIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetDefaultMenu( doNotSetFocus ) {\n\n\t\t//Overloads setDefaultMenu due to custom logic where if a dynamic future pay period is selected do not allow it to be interacted with.\n\t\t//Still calls super below if did not click a dynamic future pay period.\n\t\tvar context_menu_array = ContextMenuManager.getMenuModelByMenuId( this.determineContextMenuMountAttributes().id );\n\t\tif ( this.getSelectedItems().some( select_item => select_item && select_item.status_id == 50 ) ) {\n\t\t\tfor ( var i = 0; i < context_menu_array.length; i++ ) {\n\t\t\t\tlet context_btn = context_menu_array[i];\n\t\t\t\tlet id = context_menu_array[i].id;\n\n\t\t\t\tif ( id === 'add' ) {\n\t\t\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t\t\t} else {\n\t\t\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.setDefaultMenu( doNotSetFocus );\n\t}\n\n\t/* jshint ignore:end */\n\tsetDefaultMenuImportIcon( context_btn, grid_selected_length ) {\n\n\t\tif ( !this.importValidate() ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( grid_selected_length >= 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\timportValidate( selected_item ) {\n\t\tvar p_id = this.permission_id;\n\n\t\tif ( !Global.isSet( selected_item ) ) {\n\t\t\tselected_item = this.getSelectedItem();\n\t\t}\n\n\t\tif ( p_id === 'report' ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( this.editPermissionValidate( p_id, selected_item ) || this.addPermissionValidate( p_id, selected_item ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tsetDefaultMenuDeleteDataIcon( context_btn, grid_selected_length ) {\n\n\t\tif ( !this.importValidate() ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( grid_selected_length >= 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetCustomEditMenuIcon( id, context_btn ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'delete_data':\n\t\t\t\tthis.setEditMenuImportIcon( context_btn );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetEditMenuImportIcon( context_btn, pId ) {\n\t\tif ( !this.importValidate() || this.is_viewing || this.is_edit || this.is_add ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tonCustomContextClick( context_btn ) {\n\t\tvar $this = this;\n\n\t\tvar grid_selected_id_array;\n\n\t\tvar ids = [];\n\n\t\tif ( $this.edit_view && $this.current_edit_record.id ) {\n\t\t\tids.push( $this.current_edit_record.id );\n\t\t} else {\n\t\t\tgrid_selected_id_array = this.getGridSelectIdArray();\n\t\t\t$.each( grid_selected_id_array, function( index, value ) {\n\t\t\t\tvar grid_selected_row = $this.getRecordFromGridById( value );\n\t\t\t\tids.push( grid_selected_row.id );\n\t\t\t} );\n\t\t}\n\n\t\tif ( ids.length > 0 ) {\n\n\t\t\tswitch ( context_btn ) {\n\n\t\t\t\tcase 'import_icon':\n\t\t\t\t\tTAlertManager.showConfirmAlert( $.i18n._( 'This will import employee attendance data from other pay periods into this pay period.Are you sure you wish to continue?' ), null, function( result ) {\n\n\t\t\t\t\t\tif ( result ) {\n\t\t\t\t\t\t\tProgressBar.showOverlay();\n\t\t\t\t\t\t\t$this.api.importData( ids, {\n\t\t\t\t\t\t\t\tonResult: function( res ) {\n\t\t\t\t\t\t\t\t\tProgressBar.closeOverlay();\n\t\t\t\t\t\t\t\t\tif ( res.isValid() ) {\n\t\t\t\t\t\t\t\t\t\t$this.search( false );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tTAlertManager.showErrorAlert( res );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tProgressBar.closeOverlay();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'delete_data':\n\n\t\t\t\t\tTAlertManager.showConfirmAlert( $.i18n._( 'This will delete all attendance data assigned to this pay period. Are you sure you wish to continue?' ), null, function( result ) {\n\n\t\t\t\t\t\tif ( result ) {\n\t\t\t\t\t\t\tProgressBar.showOverlay();\n\t\t\t\t\t\t\t$this.api.deleteData( ids, {\n\t\t\t\t\t\t\t\tonResult: function( res ) {\n\t\t\t\t\t\t\t\t\tProgressBar.closeOverlay();\n\t\t\t\t\t\t\t\t\tif ( res.isValid() ) {\n\t\t\t\t\t\t\t\t\t\t$this.search( false );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tTAlertManager.showErrorAlert( res );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tProgressBar.closeOverlay();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'export_excel':\n\t\t\t\t\tthis.onExportClick( 'export' + this.api.key_name );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\t}\n\n\tgetPayPeriodData( id, callBack ) {\n\t\tvar filter = {};\n\t\tfilter.filter_data = {};\n\t\tfilter.filter_data.id = [id];\n\n\t\tthis.api['get' + this.api.key_name]( filter, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = result.getResult();\n\n\t\t\t\tif ( !result_data ) {\n\t\t\t\t\tresult_data = [];\n\t\t\t\t}\n\t\t\t\tresult_data = result_data[0];\n\n\t\t\t\tcallBack( result_data );\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tbuildSearchFields() {\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Pay Period Schedule' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'pay_period_schedule_id',\n\t\t\t\tlayout_name: 'global_pay_period_schedule',\n\t\t\t\tapi_class: TTAPI.APIPayPeriodSchedule,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tscript_name: 'PayPeriodScheduleView',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\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\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\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Start Date' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'start_date',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'End Date' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'end_date',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Transaction Start Date' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'transaction_start_date',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Transaction End Date' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'transaction_end_date',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Show Future Pay Periods' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'show_future_pay_periods',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.CHECKBOX\n\t\t\t} ),\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: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tscript_name: 'EmployeeView',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\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: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tscript_name: 'EmployeeView',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\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_pay_period': { 'label': $.i18n._( 'Pay Period' ) },\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tif ( !this.edit_only_mode ) {\n\t\t\tthis.navigation.AComboBox( {\n\t\t\t\tid: this.script_name + '_navigation',\n\t\t\t\tapi_class: TTAPI.APIPayPeriod,\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_Pay_period',\n\t\t\t\tnavigation_mode: true,\n\t\t\t\tshow_search_inputs: true\n\t\t\t} );\n\n\t\t\tthis.setNavigation();\n\t\t}\n\n\t\t//Tab 0 start\n\n\t\tvar tab_pay_period = this.edit_view_tab.find( '#tab_pay_period' );\n\n\t\tvar tab_pay_period_column1 = tab_pay_period.find( '.first-column' );\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_pay_period_column1 );\n\n\t\t// Status\n\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'status_id', set_empty: false } );\n\t\tform_item_input.setSourceData( $this.status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_pay_period_column1, '' );\n\n\t\t// Pay Period Schedule\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT );\n\t\tform_item_input.TText( { field: 'pay_period_schedule' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Pay Period Schedule' ), form_item_input, tab_pay_period_column1, '', null, true );\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIPayPeriodSchedule,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_pay_period_schedule',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'pay_period_schedule_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Pay Period Schedule' ), form_item_input, tab_pay_period_column1, '', null, true );\n\n\t\t// Start date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'start_date', mode: 'date_time' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Start Date' ), form_item_input, tab_pay_period_column1, '', null, true );\n\n\t\t// End date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'end_date', mode: 'date_time' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'End Date' ), form_item_input, tab_pay_period_column1, '', null, true );\n\n\t\t// Transaction date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'transaction_date', mode: 'date_time' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Transaction Date' ), form_item_input, tab_pay_period_column1, '', null, true );\n\t}\n\n\tonFormItemChange( target, doNotValidate ) {\n\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\n\t\tif ( !this.current_edit_record ) {\n\t\t\tthis.current_edit_record = {};\n\t\t}\n\n\t\tthis.current_edit_record[key] = c_value;\n\n\t\tif ( key === 'status_id' ) {\n\t\t\tthis.onStatusChange();\n\t\t}\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tsetDateColumnStatus( value, disabled ) {\n\t\tif ( this.edit_view_ui_dic[value] ) {\n\t\t\tif ( disabled ) {\n\t\t\t\tthis.edit_view_ui_dic[value].find( 'input' ).attr( 'disabled', 'disabled' );\n\t\t\t\tthis.edit_view_ui_dic[value].find( 'img' ).unbind( 'click' );\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic[value].find( 'input' ).removeAttr( 'disabled' );\n\t\t\t\tthis.edit_view_ui_dic[value].find( 'img' ).bind( 'click' );\n\t\t\t}\n\t\t}\n\t}\n\n\tonStatusChange() {\n\t\t//TypeError: Cannot read property 'status_id' of undefined\n\t\tif ( this.current_edit_record && this.current_edit_record['status_id'] == 20 ) {\n\t\t\tthis.setDateColumnStatus( 'start_date', true );\n\t\t\tthis.setDateColumnStatus( 'end_date', true );\n\t\t\tthis.setDateColumnStatus( 'transaction_date', true );\n\t\t} else {\n\t\t\tthis.setDateColumnStatus( 'start_date', false );\n\t\t\tthis.setDateColumnStatus( 'end_date', false );\n\t\t\tthis.setDateColumnStatus( 'transaction_date', false );\n\t\t}\n\t}\n\n\tisEditChange() {\n\t\tif ( this.current_edit_record && this.current_edit_record.id ) {\n\t\t\tthis.attachElement( 'pay_period_schedule' );\n\t\t\tthis.detachElement( 'pay_period_schedule_id' );\n\t\t} else if ( this.is_mass_editing ) {\n\t\t\tthis.detachElement( 'pay_period_schedule' );\n\t\t\tthis.detachElement( 'pay_period_schedule_id' );\n\t\t} else {\n\t\t\tthis.detachElement( 'pay_period_schedule' );\n\t\t\tthis.attachElement( 'pay_period_schedule_id' );\n\n\t\t}\n\n\t\tthis.editFieldResize();\n\t}\n\n\tsetEditViewDataDone() {\n\t\tsuper.setEditViewDataDone();\n\t\tthis.onStatusChange();\n\t\tthis.isEditChange();\n\t}\n\n\tgetValidSearchFilter() {\n\t\tvar validFilterData = super.getValidSearchFilter();\n\n\t\tif ( Global.isSet( validFilterData.show_future_pay_periods ) && validFilterData.show_future_pay_periods.value === false ) {\n\t\t\tdelete validFilterData.show_future_pay_periods;\n\t\t}\n\n\t\treturn validFilterData;\n\t}\n\n}\n\nPayPeriodsViewController.loadSubView = function( container, beforeViewLoadedFun, afterViewLoadedFun ) {\n\n\tGlobal.loadViewSource( 'PayPeriods', 'SubPayPeriodsView.html', function( result ) {\n\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tif ( Global.isSet( beforeViewLoadedFun ) ) {\n\t\t\tbeforeViewLoadedFun();\n\t\t}\n\n\t\tif ( Global.isSet( container ) ) {\n\t\t\tcontainer.html( template( args ) );\n\n\t\t\tif ( Global.isSet( afterViewLoadedFun ) ) {\n\t\t\t\tTTPromise.wait( 'BaseViewController', 'initialize', function() {\n\t\t\t\t\tafterViewLoadedFun( sub_pay_periods_view_controller );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA1LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPO0FBQ1AsMkJBQTJCO0FBQzNCLEVBQUUsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsQ0FBQztBQUM1QiwwQkFBMEIsQ0FBQztBQUMzQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLG9EQUFvRDtBQUN6RCxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUEsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU07O0FBRU4sS0FBSzs7QUFFTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsK0JBQStCO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDLENBQUM7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQsUUFBUTtBQUNSO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxxQ0FBcUMsQ0FBQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLFNBQVMsQ0FBQyx5QkFBeUI7QUFDMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSwrQkFBK0IsdUNBQXVDO0FBQ3RFO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwyQkFBMkIsK0JBQStCO0FBQzFELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGlDQUFpQyx5Q0FBeUM7QUFDMUUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsaUNBQWlDLHVDQUF1QztBQUN4RSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxpQ0FBaUMsK0NBQStDO0FBQ2hGLDZCQUE2QixDQUFDO0FBQzlCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlCQUFpQixDQUFDOztBQUVsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUEsR0FBRzs7QUFFSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2ludGVyZmFjZS9odG1sNS92aWV3cy9wYXlyb2xsL3BheV9wZXJpb2RzL1BheVBlcmlvZHNWaWV3Q29udHJvbGxlci5qcz84NDM5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQYXlQZXJpb2RzVmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlVmlld0NvbnRyb2xsZXIge1xuXHRjb25zdHJ1Y3Rvciggb3B0aW9ucyA9IHt9ICkge1xuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGVsOiAnI3BheV9wZXJpb2RzX3ZpZXdfY29udGFpbmVyJyxcblxuXHRcdFx0c3RhdHVzX2FycmF5OiBudWxsLFxuXHRcdFx0dHlwZV9hcnJheTogbnVsbCxcblx0XHRcdHBheV9wZXJpb2Rfc2NoZWR1bGVfYXBpOiBudWxsXG5cdFx0fSApO1xuXG5cdFx0c3VwZXIoIG9wdGlvbnMgKTtcblx0fVxuXG5cdGluaXQoIG9wdGlvbnMgKSB7XG5cblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdQYXlQZXJpb2RzRWRpdFZpZXcuaHRtbCc7XG5cdFx0dGhpcy5wZXJtaXNzaW9uX2lkID0gJ3BheV9wZXJpb2Rfc2NoZWR1bGUnO1xuXHRcdHRoaXMuc2NyaXB0X25hbWUgPSAnUGF5UGVyaW9kc1ZpZXcnO1xuXHRcdHRoaXMudmlld0lkID0gJ1BheVBlcmlvZHMnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAncGF5X3BlcmlvZCc7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnUGF5IFBlcmlvZCcgKTtcblx0XHR0aGlzLm5hdmlnYXRpb25fbGFiZWwgPSAkLmkxOG4uXyggJ1BheSBQZXJpb2QnICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElQYXlQZXJpb2Q7XG5cdFx0dGhpcy5wYXlfcGVyaW9kX3NjaGVkdWxlX2FwaSA9IFRUQVBJLkFQSVBheVBlcmlvZFNjaGVkdWxlO1xuXG5cdFx0dGhpcy5yZW5kZXIoKTtcblxuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYnVpbGRDb250ZXh0TWVudSgpO1xuXHRcdH1cblxuXHRcdC8vY2FsbCBpbml0IGRhdGEgaW4gcGFyZW50IHZpZXdcblxuXHRcdGlmICggIXRoaXMuc3ViX3ZpZXdfbW9kZSApIHtcblx0XHRcdHRoaXMuaW5pdERhdGEoKTtcblx0XHR9XG5cdH1cblxuXHRyZW1vdmVFZGl0VmlldyggaXNfY2FuY2VsICkge1xuXG5cdFx0c3VwZXIucmVtb3ZlRWRpdFZpZXcoKTtcblxuXHRcdGlmICggdGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyICYmXG5cdFx0XHQoIHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci52aWV3SWQgPT09ICdUaW1lU2hlZXQnIHx8IHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci52aWV3SWQgPT09ICdQYXlTdHViJyApICkge1xuXHRcdFx0dGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLm9uU3ViVmlld1JlbW92ZWQoIGlzX2NhbmNlbCApO1xuXHRcdH1cblx0fVxuXG5cdGluaXRPcHRpb25zKCBjYWxsQmFjayApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIG9wdGlvbnMgPSBbXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc3RhdHVzJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAndHlwZScsIGZpZWxkX25hbWU6ICd0eXBlX2lkJywgYXBpOiB0aGlzLnBheV9wZXJpb2Rfc2NoZWR1bGVfYXBpIH1cblx0XHRdO1xuXG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb25zKCBvcHRpb25zLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXG5cdFx0XHRpZiAoIGNhbGxCYWNrICkge1xuXHRcdFx0XHRjYWxsQmFjayggcmVzdWx0ICk7IC8vIEZpcnN0IHRvIGluaXRpYWxpemUgZHJvcCBkb3duIG9wdGlvbnMsIGFuZCB0aGVuIHRvIGluaXRpYWxpemUgZWRpdCB2aWV3IFVJLlxuXHRcdFx0fVxuXG5cdFx0fSApO1xuXHR9XG5cblx0Z2V0Q3VzdG9tQ29udGV4dE1lbnVNb2RlbCgpIHtcblx0XHR2YXIgY29udGV4dF9tZW51X21vZGVsID0ge1xuXHRcdFx0ZXhjbHVkZTogWydjb3B5J10sXG5cdFx0XHRpbmNsdWRlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJycsIC8vRW1wdHkgbGFiZWwuIHZ1ZV9pY29uIGlzIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRleHQuXG5cdFx0XHRcdFx0aWQ6ICdvdGhlcl9oZWFkZXInLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnb3RoZXInLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cF9oZWFkZXI6IHRydWUsXG5cdFx0XHRcdFx0dnVlX2ljb246ICd0dGljb24gdHRpY29uLW1vcmVfdmVydF9ibGFja18yNGRwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0RlbGV0ZSBEYXRhJyApLFxuXHRcdFx0XHRcdGlkOiAnZGVsZXRlX2RhdGEnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnb3RoZXInXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdJbXBvcnQgRGF0YScgKSxcblx0XHRcdFx0XHRpZDogJ2ltcG9ydF9pY29uJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ290aGVyJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH07XG5cblx0XHRpZiAoIHRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHRjb250ZXh0X21lbnVfbW9kZWwuZXhjbHVkZS5wdXNoKCAnaW1wb3J0X2ljb24nLCAnZGVsZXRlX2RhdGEnICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRleHRfbWVudV9tb2RlbDtcblx0fVxuXG5cdG9uRWRpdENsaWNrKCByZWNvcmRfaWQsIG5vUmVmcmVzaFVJICkge1xuXHRcdC8vSWYgYSBkeW5hbWljIGZ1dHVyZSBwYXkgcGVyaW9kIGlzIHNlbGVjdGVkICh6ZXJvIGlkKSBkbyBub3QgYWxsb3cgaXQgdG8gYmUgaW50ZXJhY3RlZCB3aXRoLlxuXHRcdGlmICggdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpLmluY2x1ZGVzKCBUVFVVSUQuemVyb19pZCApICkge1xuXHRcdFx0UHJvZ3Jlc3NCYXIuY2xvc2VPdmVybGF5KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3VwZXIub25FZGl0Q2xpY2soIHJlY29yZF9pZCwgbm9SZWZyZXNoVUkgKTtcblx0fVxuXG5cdG9wZW5FZGl0VmlldyggaWQgKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0aWYgKCAkdGhpcy5lZGl0X29ubHlfbW9kZSApIHtcblxuXHRcdFx0JHRoaXMuaW5pdE9wdGlvbnMoIGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cblx0XHRcdFx0aWYgKCAhJHRoaXMuZWRpdF92aWV3ICkge1xuXHRcdFx0XHRcdCR0aGlzLmluaXRFZGl0Vmlld1VJKCAkdGhpcy52aWV3SWQsICR0aGlzLmVkaXRfdmlld190cGwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR0aGlzLmdldFBheVBlcmlvZERhdGEoIGlkLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHRcdC8vIFdhaXRpbmcgZm9yIHRoZSBUVEFQSS5BUEkgcmV0dXJucyBkYXRhIHRvIHNldCB0aGUgY3VycmVudCBlZGl0IHJlY29yZC5cblx0XHRcdFx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkID0gcmVzdWx0O1xuXG5cdFx0XHRcdFx0JHRoaXMuaW5pdEVkaXRWaWV3KCk7XG5cblx0XHRcdFx0fSApO1xuXG5cdFx0XHR9ICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCAhdGhpcy5lZGl0X3ZpZXcgKSB7XG5cdFx0XHRcdHRoaXMuaW5pdEVkaXRWaWV3VUkoICR0aGlzLnZpZXdJZCwgJHRoaXMuZWRpdF92aWV3X3RwbCApO1xuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG5cblx0c2V0Q3VzdG9tRGVmYXVsdE1lbnVJY29uKCBpZCwgY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICkge1xuXHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0Y2FzZSAnbG9naW4nOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51TG9naW5JY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdjYW5jZWwnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51Q2FuY2VsSWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnaW1wb3J0X2ljb24nOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51SW1wb3J0SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZGVsZXRlX2RhdGEnOlxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRNZW51RGVsZXRlRGF0YUljb24oIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudSggZG9Ob3RTZXRGb2N1cyApIHtcblxuXHRcdC8vT3ZlcmxvYWRzIHNldERlZmF1bHRNZW51IGR1ZSB0byBjdXN0b20gbG9naWMgd2hlcmUgaWYgYSBkeW5hbWljIGZ1dHVyZSBwYXkgcGVyaW9kIGlzIHNlbGVjdGVkIGRvIG5vdCBhbGxvdyBpdCB0byBiZSBpbnRlcmFjdGVkIHdpdGguXG5cdFx0Ly9TdGlsbCBjYWxscyBzdXBlciBiZWxvdyBpZiBkaWQgbm90IGNsaWNrIGEgZHluYW1pYyBmdXR1cmUgcGF5IHBlcmlvZC5cblx0XHR2YXIgY29udGV4dF9tZW51X2FycmF5ID0gQ29udGV4dE1lbnVNYW5hZ2VyLmdldE1lbnVNb2RlbEJ5TWVudUlkKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQgKTtcblx0XHRpZiAoIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpLnNvbWUoIHNlbGVjdF9pdGVtID0+IHNlbGVjdF9pdGVtICYmIHNlbGVjdF9pdGVtLnN0YXR1c19pZCA9PSA1MCApICkge1xuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgY29udGV4dF9tZW51X2FycmF5Lmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRsZXQgY29udGV4dF9idG4gPSBjb250ZXh0X21lbnVfYXJyYXlbaV07XG5cdFx0XHRcdGxldCBpZCA9IGNvbnRleHRfbWVudV9hcnJheVtpXS5pZDtcblxuXHRcdFx0XHRpZiAoIGlkID09PSAnYWRkJyApIHtcblx0XHRcdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cdFx0XHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmhpZGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzdXBlci5zZXREZWZhdWx0TWVudSggZG9Ob3RTZXRGb2N1cyApO1xuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0c2V0RGVmYXVsdE1lbnVJbXBvcnRJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKSB7XG5cblx0XHRpZiAoICF0aGlzLmltcG9ydFZhbGlkYXRlKCkgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuaGlkZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApXG5cdFx0fVxuXG5cdFx0aWYgKCBncmlkX3NlbGVjdGVkX2xlbmd0aCA+PSAxICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApO1xuXHRcdH1cblx0fVxuXG5cdGltcG9ydFZhbGlkYXRlKCBzZWxlY3RlZF9pdGVtICkge1xuXHRcdHZhciBwX2lkID0gdGhpcy5wZXJtaXNzaW9uX2lkO1xuXG5cdFx0aWYgKCAhR2xvYmFsLmlzU2V0KCBzZWxlY3RlZF9pdGVtICkgKSB7XG5cdFx0XHRzZWxlY3RlZF9pdGVtID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtcblx0XHR9XG5cblx0XHRpZiAoIHBfaWQgPT09ICdyZXBvcnQnICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmVkaXRQZXJtaXNzaW9uVmFsaWRhdGUoIHBfaWQsIHNlbGVjdGVkX2l0ZW0gKSB8fCB0aGlzLmFkZFBlcm1pc3Npb25WYWxpZGF0ZSggcF9pZCwgc2VsZWN0ZWRfaXRlbSApICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0c2V0RGVmYXVsdE1lbnVEZWxldGVEYXRhSWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICkge1xuXG5cdFx0aWYgKCAhdGhpcy5pbXBvcnRWYWxpZGF0ZSgpICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmhpZGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKVxuXHRcdH1cblxuXHRcdGlmICggZ3JpZF9zZWxlY3RlZF9sZW5ndGggPj0gMSApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIHRydWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRzZXRDdXN0b21FZGl0TWVudUljb24oIGlkLCBjb250ZXh0X2J0biApIHtcblx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdGNhc2UgJ2RlbGV0ZV9kYXRhJzpcblx0XHRcdFx0dGhpcy5zZXRFZGl0TWVudUltcG9ydEljb24oIGNvbnRleHRfYnRuICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNldEVkaXRNZW51SW1wb3J0SWNvbiggY29udGV4dF9idG4sIHBJZCApIHtcblx0XHRpZiAoICF0aGlzLmltcG9ydFZhbGlkYXRlKCkgfHwgdGhpcy5pc192aWV3aW5nIHx8IHRoaXMuaXNfZWRpdCB8fCB0aGlzLmlzX2FkZCApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5oaWRlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApO1xuXHRcdH1cblx0fVxuXG5cdG9uQ3VzdG9tQ29udGV4dENsaWNrKCBjb250ZXh0X2J0biApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXk7XG5cblx0XHR2YXIgaWRzID0gW107XG5cblx0XHRpZiAoICR0aGlzLmVkaXRfdmlldyAmJiAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0aWRzLnB1c2goICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Z3JpZF9zZWxlY3RlZF9pZF9hcnJheSA9IHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKTtcblx0XHRcdCQuZWFjaCggZ3JpZF9zZWxlY3RlZF9pZF9hcnJheSwgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGdyaWRfc2VsZWN0ZWRfcm93ID0gJHRoaXMuZ2V0UmVjb3JkRnJvbUdyaWRCeUlkKCB2YWx1ZSApO1xuXHRcdFx0XHRpZHMucHVzaCggZ3JpZF9zZWxlY3RlZF9yb3cuaWQgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIGlkcy5sZW5ndGggPiAwICkge1xuXG5cdFx0XHRzd2l0Y2ggKCBjb250ZXh0X2J0biApIHtcblxuXHRcdFx0XHRjYXNlICdpbXBvcnRfaWNvbic6XG5cdFx0XHRcdFx0VEFsZXJ0TWFuYWdlci5zaG93Q29uZmlybUFsZXJ0KCAkLmkxOG4uXyggJ1RoaXMgd2lsbCBpbXBvcnQgZW1wbG95ZWUgYXR0ZW5kYW5jZSBkYXRhIGZyb20gb3RoZXIgcGF5IHBlcmlvZHMgaW50byB0aGlzIHBheSBwZXJpb2QuQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgKSwgbnVsbCwgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRcdFx0XHRcdFByb2dyZXNzQmFyLnNob3dPdmVybGF5KCk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmFwaS5pbXBvcnREYXRhKCBpZHMsIHtcblx0XHRcdFx0XHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFByb2dyZXNzQmFyLmNsb3NlT3ZlcmxheSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXMuaXNWYWxpZCgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZWFyY2goIGZhbHNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRUQWxlcnRNYW5hZ2VyLnNob3dFcnJvckFsZXJ0KCByZXMgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0UHJvZ3Jlc3NCYXIuY2xvc2VPdmVybGF5KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkZWxldGVfZGF0YSc6XG5cblx0XHRcdFx0XHRUQWxlcnRNYW5hZ2VyLnNob3dDb25maXJtQWxlcnQoICQuaTE4bi5fKCAnVGhpcyB3aWxsIGRlbGV0ZSBhbGwgYXR0ZW5kYW5jZSBkYXRhIGFzc2lnbmVkIHRvIHRoaXMgcGF5IHBlcmlvZC4gQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgKSwgbnVsbCwgZnVuY3Rpb24oIHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRcdFx0XHRcdFByb2dyZXNzQmFyLnNob3dPdmVybGF5KCk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLmFwaS5kZWxldGVEYXRhKCBpZHMsIHtcblx0XHRcdFx0XHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFByb2dyZXNzQmFyLmNsb3NlT3ZlcmxheSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXMuaXNWYWxpZCgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZWFyY2goIGZhbHNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRUQWxlcnRNYW5hZ2VyLnNob3dFcnJvckFsZXJ0KCByZXMgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0UHJvZ3Jlc3NCYXIuY2xvc2VPdmVybGF5KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdleHBvcnRfZXhjZWwnOlxuXHRcdFx0XHRcdHRoaXMub25FeHBvcnRDbGljayggJ2V4cG9ydCcgKyB0aGlzLmFwaS5rZXlfbmFtZSApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG5cblx0Z2V0UGF5UGVyaW9kRGF0YSggaWQsIGNhbGxCYWNrICkge1xuXHRcdHZhciBmaWx0ZXIgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuaWQgPSBbaWRdO1xuXG5cdFx0dGhpcy5hcGlbJ2dldCcgKyB0aGlzLmFwaS5rZXlfbmFtZV0oIGZpbHRlciwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblxuXHRcdFx0XHRpZiAoICFyZXN1bHRfZGF0YSApIHtcblx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdF9kYXRhID0gcmVzdWx0X2RhdGFbMF07XG5cblx0XHRcdFx0Y2FsbEJhY2soIHJlc3VsdF9kYXRhICk7XG5cblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHRidWlsZFNlYXJjaEZpZWxkcygpIHtcblx0XHRzdXBlci5idWlsZFNlYXJjaEZpZWxkcygpO1xuXHRcdHRoaXMuc2VhcmNoX2ZpZWxkcyA9IFtcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdQYXkgUGVyaW9kIFNjaGVkdWxlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAncGF5X3BlcmlvZF9zY2hlZHVsZV9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3BheV9wZXJpb2Rfc2NoZWR1bGUnLFxuXHRcdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVBheVBlcmlvZFNjaGVkdWxlLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRzY3JpcHRfbmFtZTogJ1BheVBlcmlvZFNjaGVkdWxlVmlldycsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzdGF0dXNfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1R5cGUnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICd0eXBlX2lkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTdGFydCBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnc3RhcnRfZGF0ZScsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5EQVRFX1BJQ0tFUlxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0VuZCBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnZW5kX2RhdGUnLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVJcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUcmFuc2FjdGlvbiBTdGFydCBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAndHJhbnNhY3Rpb25fc3RhcnRfZGF0ZScsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5EQVRFX1BJQ0tFUlxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1RyYW5zYWN0aW9uIEVuZCBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAndHJhbnNhY3Rpb25fZW5kX2RhdGUnLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVJcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTaG93IEZ1dHVyZSBQYXkgUGVyaW9kcycgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3Nob3dfZnV0dXJlX3BheV9wZXJpb2RzJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5DSEVDS0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyZWF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjcmVhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0c2NyaXB0X25hbWU6ICdFbXBsb3llZVZpZXcnLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRzY3JpcHRfbmFtZTogJ0VtcGxveWVlVmlldycsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKVxuXG5cdFx0XTtcblx0fVxuXG5cdGJ1aWxkRWRpdFZpZXdVSSgpIHtcblxuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHZhciB0YWJfbW9kZWwgPSB7XG5cdFx0XHQndGFiX3BheV9wZXJpb2QnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnUGF5IFBlcmlvZCcgKSB9LFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdGlmICggIXRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElQYXlQZXJpb2QsXG5cdFx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX1BheV9wZXJpb2QnLFxuXHRcdFx0XHRuYXZpZ2F0aW9uX21vZGU6IHRydWUsXG5cdFx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZVxuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLnNldE5hdmlnYXRpb24oKTtcblx0XHR9XG5cblx0XHQvL1RhYiAwIHN0YXJ0XG5cblx0XHR2YXIgdGFiX3BheV9wZXJpb2QgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcGF5X3BlcmlvZCcgKTtcblxuXHRcdHZhciB0YWJfcGF5X3BlcmlvZF9jb2x1bW4xID0gdGFiX3BheV9wZXJpb2QuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfcGF5X3BlcmlvZF9jb2x1bW4xICk7XG5cblx0XHQvLyBTdGF0dXNcblxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3N0YXR1c19pZCcsIHNldF9lbXB0eTogZmFsc2UgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5zdGF0dXNfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1N0YXR1cycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcGF5X3BlcmlvZF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gUGF5IFBlcmlvZCBTY2hlZHVsZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dCggeyBmaWVsZDogJ3BheV9wZXJpb2Rfc2NoZWR1bGUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1BheSBQZXJpb2QgU2NoZWR1bGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BheV9wZXJpb2RfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVBheVBlcmlvZFNjaGVkdWxlLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3BheV9wZXJpb2Rfc2NoZWR1bGUnLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdwYXlfcGVyaW9kX3NjaGVkdWxlX2lkJ1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1BheSBQZXJpb2QgU2NoZWR1bGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BheV9wZXJpb2RfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIFN0YXJ0IGRhdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdzdGFydF9kYXRlJywgbW9kZTogJ2RhdGVfdGltZScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhcnQgRGF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcGF5X3BlcmlvZF9jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Ly8gRW5kIGRhdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdlbmRfZGF0ZScsIG1vZGU6ICdkYXRlX3RpbWUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VuZCBEYXRlJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wYXlfcGVyaW9kX2NvbHVtbjEsICcnLCBudWxsLCB0cnVlICk7XG5cblx0XHQvLyBUcmFuc2FjdGlvbiBkYXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5EQVRFX1BJQ0tFUiApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlREYXRlUGlja2VyKCB7IGZpZWxkOiAndHJhbnNhY3Rpb25fZGF0ZScsIG1vZGU6ICdkYXRlX3RpbWUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1RyYW5zYWN0aW9uIERhdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BheV9wZXJpb2RfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblx0fVxuXG5cdG9uRm9ybUl0ZW1DaGFuZ2UoIHRhcmdldCwgZG9Ob3RWYWxpZGF0ZSApIHtcblxuXHRcdHRoaXMuc2V0SXNDaGFuZ2VkKCB0YXJnZXQgKTtcblx0XHR0aGlzLnNldE1hc3NFZGl0aW5nRmllbGRzV2hlbkZvcm1DaGFuZ2UoIHRhcmdldCApO1xuXHRcdHZhciBrZXkgPSB0YXJnZXQuZ2V0RmllbGQoKTtcblx0XHR2YXIgY192YWx1ZSA9IHRhcmdldC5nZXRWYWx1ZSgpO1xuXG5cdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICkge1xuXHRcdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkID0ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSBjX3ZhbHVlO1xuXG5cdFx0aWYgKCBrZXkgPT09ICdzdGF0dXNfaWQnICkge1xuXHRcdFx0dGhpcy5vblN0YXR1c0NoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGlmICggIWRvTm90VmFsaWRhdGUgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RGF0ZUNvbHVtblN0YXR1cyggdmFsdWUsIGRpc2FibGVkICkge1xuXHRcdGlmICggdGhpcy5lZGl0X3ZpZXdfdWlfZGljW3ZhbHVlXSApIHtcblx0XHRcdGlmICggZGlzYWJsZWQgKSB7XG5cdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1t2YWx1ZV0uZmluZCggJ2lucHV0JyApLmF0dHIoICdkaXNhYmxlZCcsICdkaXNhYmxlZCcgKTtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljW3ZhbHVlXS5maW5kKCAnaW1nJyApLnVuYmluZCggJ2NsaWNrJyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljW3ZhbHVlXS5maW5kKCAnaW5wdXQnICkucmVtb3ZlQXR0ciggJ2Rpc2FibGVkJyApO1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbdmFsdWVdLmZpbmQoICdpbWcnICkuYmluZCggJ2NsaWNrJyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uU3RhdHVzQ2hhbmdlKCkge1xuXHRcdC8vVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0eSAnc3RhdHVzX2lkJyBvZiB1bmRlZmluZWRcblx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCAmJiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3N0YXR1c19pZCddID09IDIwICkge1xuXHRcdFx0dGhpcy5zZXREYXRlQ29sdW1uU3RhdHVzKCAnc3RhcnRfZGF0ZScsIHRydWUgKTtcblx0XHRcdHRoaXMuc2V0RGF0ZUNvbHVtblN0YXR1cyggJ2VuZF9kYXRlJywgdHJ1ZSApO1xuXHRcdFx0dGhpcy5zZXREYXRlQ29sdW1uU3RhdHVzKCAndHJhbnNhY3Rpb25fZGF0ZScsIHRydWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXREYXRlQ29sdW1uU3RhdHVzKCAnc3RhcnRfZGF0ZScsIGZhbHNlICk7XG5cdFx0XHR0aGlzLnNldERhdGVDb2x1bW5TdGF0dXMoICdlbmRfZGF0ZScsIGZhbHNlICk7XG5cdFx0XHR0aGlzLnNldERhdGVDb2x1bW5TdGF0dXMoICd0cmFuc2FjdGlvbl9kYXRlJywgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRpc0VkaXRDaGFuZ2UoKSB7XG5cdFx0aWYgKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQgJiYgdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0dGhpcy5hdHRhY2hFbGVtZW50KCAncGF5X3BlcmlvZF9zY2hlZHVsZScgKTtcblx0XHRcdHRoaXMuZGV0YWNoRWxlbWVudCggJ3BheV9wZXJpb2Rfc2NoZWR1bGVfaWQnICk7XG5cdFx0fSBlbHNlIGlmICggdGhpcy5pc19tYXNzX2VkaXRpbmcgKSB7XG5cdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdwYXlfcGVyaW9kX3NjaGVkdWxlJyApO1xuXHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAncGF5X3BlcmlvZF9zY2hlZHVsZV9pZCcgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAncGF5X3BlcmlvZF9zY2hlZHVsZScgKTtcblx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ3BheV9wZXJpb2Rfc2NoZWR1bGVfaWQnICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLmVkaXRGaWVsZFJlc2l6ZSgpO1xuXHR9XG5cblx0c2V0RWRpdFZpZXdEYXRhRG9uZSgpIHtcblx0XHRzdXBlci5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdFx0dGhpcy5vblN0YXR1c0NoYW5nZSgpO1xuXHRcdHRoaXMuaXNFZGl0Q2hhbmdlKCk7XG5cdH1cblxuXHRnZXRWYWxpZFNlYXJjaEZpbHRlcigpIHtcblx0XHR2YXIgdmFsaWRGaWx0ZXJEYXRhID0gc3VwZXIuZ2V0VmFsaWRTZWFyY2hGaWx0ZXIoKTtcblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCB2YWxpZEZpbHRlckRhdGEuc2hvd19mdXR1cmVfcGF5X3BlcmlvZHMgKSAmJiB2YWxpZEZpbHRlckRhdGEuc2hvd19mdXR1cmVfcGF5X3BlcmlvZHMudmFsdWUgPT09IGZhbHNlICkge1xuXHRcdFx0ZGVsZXRlIHZhbGlkRmlsdGVyRGF0YS5zaG93X2Z1dHVyZV9wYXlfcGVyaW9kcztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsaWRGaWx0ZXJEYXRhO1xuXHR9XG5cbn1cblxuUGF5UGVyaW9kc1ZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3ID0gZnVuY3Rpb24oIGNvbnRhaW5lciwgYmVmb3JlVmlld0xvYWRlZEZ1biwgYWZ0ZXJWaWV3TG9hZGVkRnVuICkge1xuXG5cdEdsb2JhbC5sb2FkVmlld1NvdXJjZSggJ1BheVBlcmlvZHMnLCAnU3ViUGF5UGVyaW9kc1ZpZXcuaHRtbCcsIGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cblx0XHR2YXIgYXJncyA9IHt9O1xuXHRcdHZhciB0ZW1wbGF0ZSA9IF8udGVtcGxhdGUoIHJlc3VsdCApO1xuXG5cdFx0aWYgKCBHbG9iYWwuaXNTZXQoIGJlZm9yZVZpZXdMb2FkZWRGdW4gKSApIHtcblx0XHRcdGJlZm9yZVZpZXdMb2FkZWRGdW4oKTtcblx0XHR9XG5cblx0XHRpZiAoIEdsb2JhbC5pc1NldCggY29udGFpbmVyICkgKSB7XG5cdFx0XHRjb250YWluZXIuaHRtbCggdGVtcGxhdGUoIGFyZ3MgKSApO1xuXG5cdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggYWZ0ZXJWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRcdFRUUHJvbWlzZS53YWl0KCAnQmFzZVZpZXdDb250cm9sbGVyJywgJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRhZnRlclZpZXdMb2FkZWRGdW4oIHN1Yl9wYXlfcGVyaW9kc192aWV3X2NvbnRyb2xsZXIgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH0gKTtcblxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///505\n")}}]);