TimeTrex/interface/html5/dist/invoice-client-ClientViewController.bundle.js

1 line
64 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["invoice-client-ClientViewController"],{1475:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ClientViewController\": () => (/* binding */ ClientViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass ClientViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#client_view_container',\n\n\t\t\tstatus_array: null,\n\t\t\tindustry_array: null,\n\t\t\tclient_group_array: null,\n\t\t\tclient_group_api: null,\n\n\t\t\tsub_client_contact_view_controller: null,\n\t\t\tsub_client_payment_view_controller: null,\n\t\t\tsub_document_view_controller: null,\n\t\t\tsub_transaction_view_controller: null,\n\t\t\tsub_invoice_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 = 'ClientEditView.html';\n\t\tthis.permission_id = 'client';\n\t\tthis.viewId = 'Client';\n\t\tthis.script_name = 'ClientView';\n\t\tthis.table_name_key = 'client';\n\t\tthis.context_menu_name = $.i18n._( 'Clients' );\n\t\tthis.navigation_label = $.i18n._( 'Client' );\n\t\tthis.document_object_type_id = 80;\n\t\tthis.api = TTAPI.APIClient;\n\t\tthis.client_group_api = TTAPI.APIClientGroup;\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tremoveEditView() {\n\t\tsuper.removeEditView();\n\t\tthis.sub_client_contact_view_controller = null;\n\t\tthis.sub_invoice_view_controller = null;\n\t\tthis.sub_client_payment_view_controller = null;\n\t\tthis.sub_transaction_view_controller = null;\n\t}\n\n\tinitOptions( callBack ) {\n\t\tvar $this = this;\n\t\tvar filter = {};\n\t\tfilter.filter_columns = { id: true, company_name: true };\n\n\t\tthis.initDropDownOption( 'industry' );\n\t\tthis.initDropDownOption( 'status', 'status_id', this.api, function() {\n\n\t\t\t$this.client_group_api.getClientGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\n\t\t\t\t\tif ( !$this.edit_only_mode ) {\n\t\t\t\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {\n\t\t\t\t\t\t\t$this.basic_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t\t\t\t$this.adv_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.client_group_array = res;\n\n\t\t\t\t\tif ( callBack ) {\n\t\t\t\t\t\tcallBack();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t} );\n\t}\n\n\tgetClientData( id, callBack ) {\n\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\topenEditView( id ) {\n\t\tGlobal.setUINotready();\n\t\tTTPromise.add( 'init', 'init' );\n\t\tTTPromise.wait();\n\n\t\tvar $this = this;\n\n\t\tif ( $this.edit_only_mode ) {\n\n\t\t\t$this.initOptions(\n\t\t\t\tfunction( result ) {\n\t\t\t\t\tif ( !$this.edit_view ) {\n\t\t\t\t\t\t$this.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.getClientData( id, function( result ) {\n\t\t\t\t\t\t$this.current_edit_record = result;\n\n\t\t\t\t\t\t$this.initEditView();\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t);\n\n\t\t} else {\n\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\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: $.i18n._( 'Login' ),\n\t\t\t\t\tid: 'login',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\t//action_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\tvue_icon: 'tticon tticon-login_black_24dp',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Import' ),\n\t\t\t\t\tid: 'import_icon',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'import_export',\n\t\t\t\t\tgroup: 'other',\n\t\t\t\t\tvue_icon: 'tticon tticon-file_download_black_24dp',\n\t\t\t\t\tsort_order: 9001\n\t\t\t\t},\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\tsort_order: 9050\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Client Contacts' ),\n\t\t\t\t\tid: 'client_contact',\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\tsort_order: 9050\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Invoices' ),\n\t\t\t\t\tid: 'invoice',\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\tsort_order: 9050\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Transactions' ),\n\t\t\t\t\tid: 'transaction',\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\tsort_order: 9050\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Payment Methods' ),\n\t\t\t\t\tid: 'payment_method',\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\tsort_order: 9050\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 'import_icon':\n\t\t\t\tIndexViewController.openWizard( 'ImportCSVWizard', 'Client', function() {\n\t\t\t\t\t$this.search();\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\tcase 'client_contact':\n\t\t\tcase 'invoice':\n\t\t\tcase 'transaction':\n\t\t\tcase 'payment_method':\n\t\t\tcase 'in_out':\n\t\t\t\tthis.onNavigationClick( id );\n\t\t\t\tbreak;\n\t\t\tcase 'login':\n\t\t\t\tthis.onLoginClick();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonLoginClick() {\n\n\t\tvar $this = this;\n\t\tvar args = {};\n\n\t\targs.client_id = this.getGridSelectIdArray()[0];\n\n\t\tLocalCacheData.extra_filter_for_next_open_view = {};\n\t\tLocalCacheData.extra_filter_for_next_open_view.filter_data = args;\n\n\t\tIndexViewController.openWizard( 'LoginUserWizard', $this.viewId, function( user_id ) {\n\t\t\tGlobal.NewSession( user_id, $this.getGridSelectIdArray()[0] );\n\t\t} );\n\t}\n\n\tonNavigationClick( iconName ) {\n\t\tvar $this = this;\n\t\tvar filter = {};\n\t\tfilter.filter_data = {};\n\t\tfilter.filter_data.client_id = [];\n\t\tif ( $this.edit_view && $this.current_edit_record.id ) {\n\t\t\tfilter.filter_data.client_id.push( $this.current_edit_record.id );\n\t\t} else {\n\t\t\tvar grid_selected_id_array = this.getGridSelectIdArray();\n\t\t\t$.each( grid_selected_id_array, function( index, value ) {\n\t\t\t\tfilter.filter_data.client_id.push( value );\n\t\t\t} );\n\t\t}\n\n\t\tif ( iconName != 'in_out' ) { //Don't show minimized window when clicking In/Out since once they save/cancel it takes them back to the original page anyways.\n\t\t\tGlobal.addViewTab( $this.viewId, $.i18n._( 'Clients' ), window.location.href );\n\t\t}\n\n\t\tswitch ( iconName ) {\n\t\t\tcase 'in_out':\n\t\t\t\tIndexViewController.openEditView( LocalCacheData.current_open_primary_controller, 'InOut' );\n\t\t\t\tbreak;\n\t\t\tcase 'client_contact':\n\t\t\t\tIndexViewController.goToView( 'ClientContact', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'invoice':\n\t\t\t\tIndexViewController.goToView( 'Invoice', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'transaction':\n\t\t\t\tIndexViewController.goToView( 'InvoiceTransaction', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'payment_method':\n\t\t\t\tIndexViewController.goToView( 'ClientPayment', filter );\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_client': { 'label': $.i18n._( 'Client' ) },\n\t\t\t'tab_client_contacts': {\n\t\t\t\t'label': $.i18n._( 'Client Contacts' ),\n\t\t\t\t'init_callback': 'initSubClientContactView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\n\t\t\t'tab_payment_methods': {\n\t\t\t\t'label': $.i18n._( 'Payment Methods' ),\n\t\t\t\t'init_callback': 'initSubClientPaymentView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\n\t\t\t'tab_invoices': {\n\t\t\t\t'label': $.i18n._( 'Invoices' ),\n\t\t\t\t'init_callback': 'initSubInvoiceView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\n\t\t\t'tab_transactions': {\n\t\t\t\t'label': $.i18n._( 'Transactions' ),\n\t\t\t\t'init_callback': 'initSubTransactionView',\n\t\t\t\t'display_on_mass_edit': false\n\t\t\t},\n\t\t\t'tab_attachment': true,\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\n\t\t\tthis.navigation.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIClient,\n\t\t\t\tid: this.script_name + '_navigation',\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_client',\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_client = this.edit_view_tab.find( '#tab_client' );\n\n\t\tvar tab_client_column1 = tab_client.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_client_column1 );\n\n\t\t// Parent\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIClient,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_client',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'parent_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Parent' ), form_item_input, tab_client_column1, '' );\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_client_column1 );\n\n\t\t// Group\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\ttree_mode: true,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_tree_column',\n\t\t\tset_empty: true,\n\t\t\tfield: 'group_id'\n\t\t} );\n\t\tform_item_input.setSourceData( $this.client_group_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Group' ), form_item_input, tab_client_column1 );\n\n\t\t// Client Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'company_name', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Client Name' ), form_item_input, tab_client_column1 );\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Doing Business As\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'company_dba_name', width: 430 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Doing Business As' ), form_item_input, tab_client_column1 );\n\n\t\t// Industry\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'industry_id' } );\n\t\tform_item_input.setSourceData( $this.industry_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Industry' ), form_item_input, tab_client_column1 );\n\n\t\t// Sales Contact\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\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\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'sales_contact_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Sales Contact' ), form_item_input, tab_client_column1 );\n\n\t\t// Support Contact\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\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\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'support_contact_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Support Contact' ), form_item_input, tab_client_column1 );\n\n\t\t// Website\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'website', width: 360 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Website' ), form_item_input, tab_client_column1 );\n\n\t\t// Note\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\n\t\tform_item_input.TTextArea( { field: 'note', width: '100%' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Note' ), form_item_input, tab_client_column1, '', null, null, true );\n\n\t\tform_item_input.parent().width( '45%' );\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: 800 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_client_column1, 'last', null, 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._( '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._( 'Group' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tmultiple: true,\n\t\t\t\tfield: 'group_id',\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\ttree_mode: 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\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Company Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'company_name',\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.TEXT_INPUT\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Website' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'website',\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.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Note' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'note',\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.TEXT_INPUT\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: 800,\n\t\t\t\tform_item_type: FormItemType.TAG_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Sales Contact' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'sales_contact_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._( 'Support Contact' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'support_contact_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._( '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\t\t];\n\t}\n\n\tsetCustomEditMenuIcon( id, context_btn ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'login':\n\t\t\t\tthis.setEditMenuLoginIcon( context_btn );\n\t\t\t\tbreak;\n\t\t\tcase 'import_icon':\n\t\t\tcase 'client_contact':\n\t\t\tcase 'invoice':\n\t\t\tcase 'transaction':\n\t\t\tcase 'payment_method':\n\t\t\t\tthis.setNavigationMenuIcons( context_btn );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetNavigationMenuIcons( context_btn ) {\n\t\tif ( this.edit_only_mode ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\t}\n\n\tsetEditMenuLoginIcon( context_btn ) {\n\t\tif ( !PermissionManager.validate( 'company', 'login_other_user' ) ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t\treturn;\n\t\t}\n\n\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t}\n\n\tinitSubClientContactView() {\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_client_contact_view_controller ) {\n\t\t\tthis.sub_client_contact_view_controller.buildContextMenu( true );\n\t\t\tthis.sub_client_contact_view_controller.setDefaultMenu();\n//\t\t\t$this.sub_client_contact_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_client_contact_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_client_contact_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_client_contact_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tGlobal.loadScript( 'views/invoice/client_contact/ClientContactViewController.js', function() {\n\t\t\tvar tab_client_contacts = $this.edit_view_tab.find( '#tab_client_contacts' );\n\t\t\tvar firstColumn = tab_client_contacts.find( '.first-column-sub-view' );\n\n\t\t\tGlobal.trackView( 'Sub' + 'ClientContact' + 'View' );\n\t\t\tClientContactViewController.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_client_contact_view_controller = subViewController;\n\t\t\t$this.sub_client_contact_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_client_contact_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_client_contact_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_client_contact_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_client_contact_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\t}\n\n\tinitSubClientPaymentView() {\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_client_payment_view_controller ) {\n\t\t\tthis.sub_client_payment_view_controller.buildContextMenu( true );\n\t\t\tthis.sub_client_payment_view_controller.setDefaultMenu();\n\t\t\t$this.sub_client_payment_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_client_payment_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_client_payment_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tGlobal.loadScript( 'views/invoice/client_payment/ClientPaymentViewController.js', function() {\n\t\t\tvar tab_payment_methods = $this.edit_view_tab.find( '#tab_payment_methods' );\n\t\t\tvar firstColumn = tab_payment_methods.find( '.first-column-sub-view' );\n\n\t\t\tGlobal.trackView( 'Sub' + 'ClientPayment' + 'View' );\n\t\t\tClientPaymentViewController.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_client_payment_view_controller = subViewController;\n\t\t\t$this.sub_client_payment_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_client_payment_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_client_payment_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_client_payment_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_client_payment_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\t}\n\n\tinitSubInvoiceView() {\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_invoice_view_controller ) {\n\t\t\t$this.sub_invoice_view_controller.buildContextMenu( true );\n\t\t\t$this.sub_invoice_view_controller.setDefaultMenu();\n\t\t\t$this.sub_invoice_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_invoice_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_invoice_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_invoice_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tGlobal.loadScript( 'views/invoice/invoice/InvoiceViewController.js', function() {\n\t\t\tvar tab_invoices = $this.edit_view_tab.find( '#tab_invoices' );\n\t\t\tvar firstColumn = tab_invoices.find( '.first-column-sub-view' );\n\n\t\t\tGlobal.trackView( 'Sub' + 'Invoice' + 'View' );\n\t\t\tInvoiceViewController.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_invoice_view_controller = subViewController;\n\t\t\t$this.sub_invoice_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_invoice_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_invoice_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_invoice_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_invoice_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\t}\n\n\tinitSubTransactionView() {\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_transaction_view_controller ) {\n\t\t\tthis.sub_transaction_view_controller.buildContextMenu( true );\n\t\t\tthis.sub_transaction_view_controller.setDefaultMenu();\n\t\t\t$this.sub_transaction_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_transaction_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_transaction_view_controller.getSubViewFilter = function( filter ) {\n\t\t\t\treturn getFilter( filter, this );\n\t\t\t};\n\n\t\t\t$this.sub_transaction_view_controller.initData();\n\t\t\treturn;\n\t\t}\n\n\t\tGlobal.loadScript( 'views/invoice/invoice_transaction/InvoiceTransactionViewController.js', function() {\n\t\t\tvar tab_transactions = $this.edit_view_tab.find( '#tab_transactions' );\n\t\t\tvar firstColumn = tab_transactions.find( '.first-column-sub-view' );\n\n\t\t\tGlobal.trackView( 'Sub' + 'InvoiceTransaction' + 'View' );\n\t\t\tInvoiceTransactionViewController.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_transaction_view_controller = subViewController;\n\t\t\t$this.sub_transaction_view_controller.parent_key = 'client_id';\n\t\t\t$this.sub_transaction_view_controller.parent_value = $this.current_edit_record.id;\n\t\t\t$this.sub_transaction_view_controller.parent_edit_record = $this.current_edit_record;\n\t\t\t$this.sub_transaction_view_controller.getSubViewFilter = function( filter ) {\n\t\t\t\treturn getFilter( filter, this );\n\t\t\t};\n\t\t\t$this.sub_transaction_view_controller.parent_view_controller = $this;\n\t\t\t$this.sub_transaction_view_controller.postInit = function() {\n\t\t\t\tthis.initData();\n\t\t\t};\n\t\t}\n\n\t\tfunction getFilter( filter, target ) {\n\t\t\tfilter.client_id = $this.current_edit_record.id;\n\t\t\tfilter.invoice_status_id = [10, 20, 30, 35, 40, 50, 55, 70, 80, 90, 95, 97, 98, 100];\n\n\t\t\treturn filter;\n\t\t}\n\n\n\t}\n\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL2ludm9pY2UvY2xpZW50L0NsaWVudFZpZXdDb250cm9sbGVyLmpzPzM1ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIENsaWVudFZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNjbGllbnRfdmlld19jb250YWluZXInLFxuXG5cdFx0XHRzdGF0dXNfYXJyYXk6IG51bGwsXG5cdFx0XHRpbmR1c3RyeV9hcnJheTogbnVsbCxcblx0XHRcdGNsaWVudF9ncm91cF9hcnJheTogbnVsbCxcblx0XHRcdGNsaWVudF9ncm91cF9hcGk6IG51bGwsXG5cblx0XHRcdHN1Yl9jbGllbnRfY29udGFjdF92aWV3X2NvbnRyb2xsZXI6IG51bGwsXG5cdFx0XHRzdWJfY2xpZW50X3BheW1lbnRfdmlld19jb250cm9sbGVyOiBudWxsLFxuXHRcdFx0c3ViX2RvY3VtZW50X3ZpZXdfY29udHJvbGxlcjogbnVsbCxcblx0XHRcdHN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXI6IG51bGwsXG5cdFx0XHRzdWJfaW52b2ljZV92aWV3X2NvbnRyb2xsZXI6IG51bGwsXG5cblx0XHRcdGRvY3VtZW50X29iamVjdF90eXBlX2lkOiBudWxsXG5cdFx0fSApO1xuXG5cdFx0c3VwZXIoIG9wdGlvbnMgKTtcblx0fVxuXG5cdGluaXQoIG9wdGlvbnMgKSB7XG5cdFx0Ly90aGlzLl9zdXBlcignaW5pdGlhbGl6ZScsIG9wdGlvbnMgKTtcblx0XHR0aGlzLmVkaXRfdmlld190cGwgPSAnQ2xpZW50RWRpdFZpZXcuaHRtbCc7XG5cdFx0dGhpcy5wZXJtaXNzaW9uX2lkID0gJ2NsaWVudCc7XG5cdFx0dGhpcy52aWV3SWQgPSAnQ2xpZW50Jztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ0NsaWVudFZpZXcnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAnY2xpZW50Jztcblx0XHR0aGlzLmNvbnRleHRfbWVudV9uYW1lID0gJC5pMThuLl8oICdDbGllbnRzJyApO1xuXHRcdHRoaXMubmF2aWdhdGlvbl9sYWJlbCA9ICQuaTE4bi5fKCAnQ2xpZW50JyApO1xuXHRcdHRoaXMuZG9jdW1lbnRfb2JqZWN0X3R5cGVfaWQgPSA4MDtcblx0XHR0aGlzLmFwaSA9IFRUQVBJLkFQSUNsaWVudDtcblx0XHR0aGlzLmNsaWVudF9ncm91cF9hcGkgPSBUVEFQSS5BUElDbGllbnRHcm91cDtcblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRyZW1vdmVFZGl0VmlldygpIHtcblx0XHRzdXBlci5yZW1vdmVFZGl0VmlldygpO1xuXHRcdHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlciA9IG51bGw7XG5cdFx0dGhpcy5zdWJfaW52b2ljZV92aWV3X2NvbnRyb2xsZXIgPSBudWxsO1xuXHRcdHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlciA9IG51bGw7XG5cdFx0dGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyID0gbnVsbDtcblx0fVxuXG5cdGluaXRPcHRpb25zKCBjYWxsQmFjayApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBmaWx0ZXIgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2NvbHVtbnMgPSB7IGlkOiB0cnVlLCBjb21wYW55X25hbWU6IHRydWUgfTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9uKCAnaW5kdXN0cnknICk7XG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb24oICdzdGF0dXMnLCAnc3RhdHVzX2lkJywgdGhpcy5hcGksIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQkdGhpcy5jbGllbnRfZ3JvdXBfYXBpLmdldENsaWVudEdyb3VwKCAnJywgZmFsc2UsIGZhbHNlLCB7XG5cdFx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzICkge1xuXHRcdFx0XHRcdHJlcyA9IHJlcy5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRyZXMgPSBHbG9iYWwuYnVpbGRUcmVlUmVjb3JkKCByZXMgKTtcblxuXHRcdFx0XHRcdGlmICggISR0aGlzLmVkaXRfb25seV9tb2RlICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhJHRoaXMuc3ViX3ZpZXdfbW9kZSAmJiAkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddICkge1xuXHRcdFx0XHRcdFx0XHQkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuXHRcdFx0XHRcdFx0XHQkdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snZ3JvdXBfaWQnXS5zZXRTb3VyY2VEYXRhKCByZXMgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkdGhpcy5jbGllbnRfZ3JvdXBfYXJyYXkgPSByZXM7XG5cblx0XHRcdFx0XHRpZiAoIGNhbGxCYWNrICkge1xuXHRcdFx0XHRcdFx0Y2FsbEJhY2soKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdFx0fSApO1xuXHR9XG5cblx0Z2V0Q2xpZW50RGF0YSggaWQsIGNhbGxCYWNrICkge1xuXG5cdFx0dmFyIGZpbHRlciA9IHt9O1xuXHRcdGZpbHRlci5maWx0ZXJfZGF0YSA9IHt9O1xuXHRcdGZpbHRlci5maWx0ZXJfZGF0YS5pZCA9IFtpZF07XG5cblx0XHR0aGlzLmFwaVsnZ2V0JyArIHRoaXMuYXBpLmtleV9uYW1lXSggZmlsdGVyLCB7XG5cdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdCApIHtcblx0XHRcdFx0dmFyIHJlc3VsdF9kYXRhID0gcmVzdWx0LmdldFJlc3VsdCgpO1xuXG5cdFx0XHRcdGlmICggIXJlc3VsdF9kYXRhICkge1xuXHRcdFx0XHRcdHJlc3VsdF9kYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0X2RhdGEgPSByZXN1bHRfZGF0YVswXTtcblxuXHRcdFx0XHRjYWxsQmFjayggcmVzdWx0X2RhdGEgKTtcblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdG9wZW5FZGl0VmlldyggaWQgKSB7XG5cdFx0R2xvYmFsLnNldFVJTm90cmVhZHkoKTtcblx0XHRUVFByb21pc2UuYWRkKCAnaW5pdCcsICdpbml0JyApO1xuXHRcdFRUUHJvbWlzZS53YWl0KCk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0aWYgKCAkdGhpcy5lZGl0X29ubHlfbW9kZSApIHtcblxuXHRcdFx0JHRoaXMuaW5pdE9wdGlvbnMoXG5cdFx0XHRcdGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdFx0aWYgKCAhJHRoaXMuZWRpdF92aWV3ICkge1xuXHRcdFx0XHRcdFx0JHRoaXMuaW5pdEVkaXRWaWV3VUkoICR0aGlzLnZpZXdJZCwgJHRoaXMuZWRpdF92aWV3X3RwbCApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCR0aGlzLmdldENsaWVudERhdGEoIGlkLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHRcdFx0JHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCA9IHJlc3VsdDtcblxuXHRcdFx0XHRcdFx0JHRoaXMuaW5pdEVkaXRWaWV3KCk7XG5cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0KTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICggIXRoaXMuZWRpdF92aWV3ICkge1xuXHRcdFx0XHR0aGlzLmluaXRFZGl0Vmlld1VJKCB0aGlzLnZpZXdJZCwgdGhpcy5lZGl0X3ZpZXdfdHBsICk7XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRnZXRDdXN0b21Db250ZXh0TWVudU1vZGVsKCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfbW9kZWwgPSB7XG5cdFx0XHRleGNsdWRlOiBbJ2NvcHknXSxcblx0XHRcdGluY2x1ZGU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0xvZ2luJyApLFxuXHRcdFx0XHRcdGlkOiAnbG9naW4nLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0Ly9hY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRncm91cDogJ25hdmlnYXRpb24nLFxuXHRcdFx0XHRcdHZ1ZV9pY29uOiAndHRpY29uIHR0aWNvbi1sb2dpbl9ibGFja18yNGRwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0ltcG9ydCcgKSxcblx0XHRcdFx0XHRpZDogJ2ltcG9ydF9pY29uJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2ltcG9ydF9leHBvcnQnLFxuXHRcdFx0XHRcdGdyb3VwOiAnb3RoZXInLFxuXHRcdFx0XHRcdHZ1ZV9pY29uOiAndHRpY29uIHR0aWNvbi1maWxlX2Rvd25sb2FkX2JsYWNrXzI0ZHAnLFxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDkwMDFcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0p1bXAgVG8nICksXG5cdFx0XHRcdFx0aWQ6ICdqdW1wX3RvX2hlYWRlcicsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXBfaGVhZGVyOiB0cnVlLFxuXHRcdFx0XHRcdHBlcm1pc3Npb25fcmVzdWx0OiBmYWxzZSwgLy8gdG8gaGlkZSBpdCBpbiBsZWdhY3kgY29udGV4dCBtZW51IGFuZCBhdm9pZCBlcnJvcnMgaW4gbGVnYWN5IHBhcnNlcnMuXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ2xpZW50IENvbnRhY3RzJyApLFxuXHRcdFx0XHRcdGlkOiAnY2xpZW50X2NvbnRhY3QnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0Z3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHRzb3J0X29yZGVyOiA5MDUwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdJbnZvaWNlcycgKSxcblx0XHRcdFx0XHRpZDogJ2ludm9pY2UnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0Z3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHRzb3J0X29yZGVyOiA5MDUwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUcmFuc2FjdGlvbnMnICksXG5cdFx0XHRcdFx0aWQ6ICd0cmFuc2FjdGlvbicsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRncm91cDogJ25hdmlnYXRpb24nLFxuXHRcdFx0XHRcdHNvcnRfb3JkZXI6IDkwNTBcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1BheW1lbnQgTWV0aG9kcycgKSxcblx0XHRcdFx0XHRpZDogJ3BheW1lbnRfbWV0aG9kJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblxuXHRcdHJldHVybiBjb250ZXh0X21lbnVfbW9kZWw7XG5cdH1cblxuXHRvbkN1c3RvbUNvbnRleHRDbGljayggaWQgKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdpbXBvcnRfaWNvbic6XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIub3BlbldpemFyZCggJ0ltcG9ydENTVldpemFyZCcsICdDbGllbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkdGhpcy5zZWFyY2goKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2NsaWVudF9jb250YWN0Jzpcblx0XHRcdGNhc2UgJ2ludm9pY2UnOlxuXHRcdFx0Y2FzZSAndHJhbnNhY3Rpb24nOlxuXHRcdFx0Y2FzZSAncGF5bWVudF9tZXRob2QnOlxuXHRcdFx0Y2FzZSAnaW5fb3V0Jzpcblx0XHRcdFx0dGhpcy5vbk5hdmlnYXRpb25DbGljayggaWQgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdsb2dpbic6XG5cdFx0XHRcdHRoaXMub25Mb2dpbkNsaWNrKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdG9uTG9naW5DbGljaygpIHtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSB7fTtcblxuXHRcdGFyZ3MuY2xpZW50X2lkID0gdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpWzBdO1xuXG5cdFx0TG9jYWxDYWNoZURhdGEuZXh0cmFfZmlsdGVyX2Zvcl9uZXh0X29wZW5fdmlldyA9IHt9O1xuXHRcdExvY2FsQ2FjaGVEYXRhLmV4dHJhX2ZpbHRlcl9mb3JfbmV4dF9vcGVuX3ZpZXcuZmlsdGVyX2RhdGEgPSBhcmdzO1xuXG5cdFx0SW5kZXhWaWV3Q29udHJvbGxlci5vcGVuV2l6YXJkKCAnTG9naW5Vc2VyV2l6YXJkJywgJHRoaXMudmlld0lkLCBmdW5jdGlvbiggdXNlcl9pZCApIHtcblx0XHRcdEdsb2JhbC5OZXdTZXNzaW9uKCB1c2VyX2lkLCAkdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpWzBdICk7XG5cdFx0fSApO1xuXHR9XG5cblx0b25OYXZpZ2F0aW9uQ2xpY2soIGljb25OYW1lICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGZpbHRlciA9IHt9O1xuXHRcdGZpbHRlci5maWx0ZXJfZGF0YSA9IHt9O1xuXHRcdGZpbHRlci5maWx0ZXJfZGF0YS5jbGllbnRfaWQgPSBbXTtcblx0XHRpZiAoICR0aGlzLmVkaXRfdmlldyAmJiAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0ZmlsdGVyLmZpbHRlcl9kYXRhLmNsaWVudF9pZC5wdXNoKCAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBncmlkX3NlbGVjdGVkX2lkX2FycmF5ID0gdGhpcy5nZXRHcmlkU2VsZWN0SWRBcnJheSgpO1xuXHRcdFx0JC5lYWNoKCBncmlkX3NlbGVjdGVkX2lkX2FycmF5LCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuY2xpZW50X2lkLnB1c2goIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpY29uTmFtZSAhPSAnaW5fb3V0JyApIHsgLy9Eb24ndCBzaG93IG1pbmltaXplZCB3aW5kb3cgd2hlbiBjbGlja2luZyBJbi9PdXQgc2luY2Ugb25jZSB0aGV5IHNhdmUvY2FuY2VsIGl0IHRha2VzIHRoZW0gYmFjayB0byB0aGUgb3JpZ2luYWwgcGFnZSBhbnl3YXlzLlxuXHRcdFx0R2xvYmFsLmFkZFZpZXdUYWIoICR0aGlzLnZpZXdJZCwgJC5pMThuLl8oICdDbGllbnRzJyApLCB3aW5kb3cubG9jYXRpb24uaHJlZiApO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoIGljb25OYW1lICkge1xuXHRcdFx0Y2FzZSAnaW5fb3V0Jzpcblx0XHRcdFx0SW5kZXhWaWV3Q29udHJvbGxlci5vcGVuRWRpdFZpZXcoIExvY2FsQ2FjaGVEYXRhLmN1cnJlbnRfb3Blbl9wcmltYXJ5X2NvbnRyb2xsZXIsICdJbk91dCcgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdjbGllbnRfY29udGFjdCc6XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIuZ29Ub1ZpZXcoICdDbGllbnRDb250YWN0JywgZmlsdGVyICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnaW52b2ljZSc6XG5cdFx0XHRcdEluZGV4Vmlld0NvbnRyb2xsZXIuZ29Ub1ZpZXcoICdJbnZvaWNlJywgZmlsdGVyICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndHJhbnNhY3Rpb24nOlxuXHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLmdvVG9WaWV3KCAnSW52b2ljZVRyYW5zYWN0aW9uJywgZmlsdGVyICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAncGF5bWVudF9tZXRob2QnOlxuXHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLmdvVG9WaWV3KCAnQ2xpZW50UGF5bWVudCcsIGZpbHRlciApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRidWlsZEVkaXRWaWV3VUkoKSB7XG5cblx0XHRzdXBlci5idWlsZEVkaXRWaWV3VUkoKTtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgdGFiX21vZGVsID0ge1xuXHRcdFx0J3RhYl9jbGllbnQnOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnQ2xpZW50JyApIH0sXG5cdFx0XHQndGFiX2NsaWVudF9jb250YWN0cyc6IHtcblx0XHRcdFx0J2xhYmVsJzogJC5pMThuLl8oICdDbGllbnQgQ29udGFjdHMnICksXG5cdFx0XHRcdCdpbml0X2NhbGxiYWNrJzogJ2luaXRTdWJDbGllbnRDb250YWN0VmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl9wYXltZW50X21ldGhvZHMnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnUGF5bWVudCBNZXRob2RzJyApLFxuXHRcdFx0XHQnaW5pdF9jYWxsYmFjayc6ICdpbml0U3ViQ2xpZW50UGF5bWVudFZpZXcnLFxuXHRcdFx0XHQnZGlzcGxheV9vbl9tYXNzX2VkaXQnOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdCd0YWJfaW52b2ljZXMnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnSW52b2ljZXMnICksXG5cdFx0XHRcdCdpbml0X2NhbGxiYWNrJzogJ2luaXRTdWJJbnZvaWNlVmlldycsXG5cdFx0XHRcdCdkaXNwbGF5X29uX21hc3NfZWRpdCc6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0J3RhYl90cmFuc2FjdGlvbnMnOiB7XG5cdFx0XHRcdCdsYWJlbCc6ICQuaTE4bi5fKCAnVHJhbnNhY3Rpb25zJyApLFxuXHRcdFx0XHQnaW5pdF9jYWxsYmFjayc6ICdpbml0U3ViVHJhbnNhY3Rpb25WaWV3Jyxcblx0XHRcdFx0J2Rpc3BsYXlfb25fbWFzc19lZGl0JzogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHQndGFiX2F0dGFjaG1lbnQnOiB0cnVlLFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdGlmICggIXRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cblx0XHRcdHRoaXMubmF2aWdhdGlvbi5BQ29tYm9Cb3goIHtcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElDbGllbnQsXG5cdFx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY2xpZW50Jyxcblx0XHRcdFx0bmF2aWdhdGlvbl9tb2RlOiB0cnVlLFxuXHRcdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5zZXROYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0Ly9UYWIgMCBzdGFydFxuXG5cdFx0dmFyIHRhYl9jbGllbnQgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfY2xpZW50JyApO1xuXG5cdFx0dmFyIHRhYl9jbGllbnRfY29sdW1uMSA9IHRhYl9jbGllbnQuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl9jbGllbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gUGFyZW50XG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJQ2xpZW50LFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2NsaWVudCcsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ3BhcmVudF9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQYXJlbnQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gU3RhdHVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnc3RhdHVzX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnN0YXR1c19hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhdHVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jbGllbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gR3JvdXBcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdHJlZV9jb2x1bW4nLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdncm91cF9pZCdcblx0XHR9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmNsaWVudF9ncm91cF9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnR3JvdXAnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xICk7XG5cblx0XHQvLyBDbGllbnQgTmFtZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdjb21wYW55X25hbWUnLCB3aWR0aDogJzEwMCUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0NsaWVudCBOYW1lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jbGllbnRfY29sdW1uMSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vIERvaW5nIEJ1c2luZXNzIEFzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2NvbXBhbnlfZGJhX25hbWUnLCB3aWR0aDogNDMwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0RvaW5nIEJ1c2luZXNzIEFzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jbGllbnRfY29sdW1uMSApO1xuXG5cdFx0Ly8gSW5kdXN0cnlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdpbmR1c3RyeV9pZCcgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5pbmR1c3RyeV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnSW5kdXN0cnknICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xICk7XG5cblx0XHQvLyBTYWxlcyBDb250YWN0XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXInLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdzYWxlc19jb250YWN0X2lkJ1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1NhbGVzIENvbnRhY3QnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xICk7XG5cblx0XHQvLyBTdXBwb3J0IENvbnRhY3Rcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVVzZXIsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ3N1cHBvcnRfY29udGFjdF9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdTdXBwb3J0IENvbnRhY3QnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xICk7XG5cblx0XHQvLyBXZWJzaXRlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3dlYnNpdGUnLCB3aWR0aDogMzYwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1dlYnNpdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xICk7XG5cblx0XHQvLyBOb3RlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0FSRUEgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dEFyZWEoIHsgZmllbGQ6ICdub3RlJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ05vdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NsaWVudF9jb2x1bW4xLCAnJywgbnVsbCwgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnBhcmVudCgpLndpZHRoKCAnNDUlJyApO1xuXG5cdFx0Ly8gVGFnc1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEFHX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRhZ0lucHV0KCB7IGZpZWxkOiAndGFnJywgb2JqZWN0X3R5cGVfaWQ6IDgwMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUYWdzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jbGllbnRfY29sdW1uMSwgJ2xhc3QnLCBudWxsLCBudWxsLCB0cnVlICk7XG5cdH1cblxuXHRidWlsZFNlYXJjaEZpZWxkcygpIHtcblxuXHRcdHN1cGVyLmJ1aWxkU2VhcmNoRmllbGRzKCk7XG5cdFx0dGhpcy5zZWFyY2hfZmllbGRzID0gW1xuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU3RhdHVzJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnc3RhdHVzX2lkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdHcm91cCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdncm91cF9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdFx0dHJlZV9tb2RlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdDb21wYW55IE5hbWUnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdjb21wYW55X25hbWUnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdXZWJzaXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnd2Vic2l0ZScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ05vdGUnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdub3RlJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVGFncycgKSxcblx0XHRcdFx0ZmllbGQ6ICd0YWcnLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0b2JqZWN0X3R5cGVfaWQ6IDgwMCxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5UQUdfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1NhbGVzIENvbnRhY3QnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdzYWxlc19jb250YWN0X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnU3VwcG9ydCBDb250YWN0JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAnc3VwcG9ydF9jb250YWN0X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3JlYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2NyZWF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApXG5cdFx0XTtcblx0fVxuXG5cdHNldEN1c3RvbUVkaXRNZW51SWNvbiggaWQsIGNvbnRleHRfYnRuICkge1xuXHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0Y2FzZSAnbG9naW4nOlxuXHRcdFx0XHR0aGlzLnNldEVkaXRNZW51TG9naW5JY29uKCBjb250ZXh0X2J0biApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2ltcG9ydF9pY29uJzpcblx0XHRcdGNhc2UgJ2NsaWVudF9jb250YWN0Jzpcblx0XHRcdGNhc2UgJ2ludm9pY2UnOlxuXHRcdFx0Y2FzZSAndHJhbnNhY3Rpb24nOlxuXHRcdFx0Y2FzZSAncGF5bWVudF9tZXRob2QnOlxuXHRcdFx0XHR0aGlzLnNldE5hdmlnYXRpb25NZW51SWNvbnMoIGNvbnRleHRfYnRuICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNldE5hdmlnYXRpb25NZW51SWNvbnMoIGNvbnRleHRfYnRuICkge1xuXHRcdGlmICggdGhpcy5lZGl0X29ubHlfbW9kZSApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5oaWRlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlIClcblx0XHR9XG5cdH1cblxuXHRzZXRFZGl0TWVudUxvZ2luSWNvbiggY29udGV4dF9idG4gKSB7XG5cdFx0aWYgKCAhUGVybWlzc2lvbk1hbmFnZXIudmFsaWRhdGUoICdjb21wYW55JywgJ2xvZ2luX290aGVyX3VzZXInICkgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuaGlkZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0fVxuXG5cdGluaXRTdWJDbGllbnRDb250YWN0VmlldygpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0VFRQcm9taXNlLnJlc29sdmUoICdCYXNlVmlld0NvbnRyb2xsZXInLCAnb25UYWJTaG93JyApOyAvL1NpbmNlIHNlYXJjaCgpIGlzbid0IGNhbGxlZCBpbiB0aGlzIGNhc2UsIGFuZCB3ZSBqdXN0IGRpc3BsYXkgdGhlIFwiUGxlYXNlIFNhdmUgVGhpcyBSZWNvcmQgLi4uXCIgbWVzc2FnZSwgcmVzb2x2ZSB0aGUgcHJvbWlzZS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlciApIHtcblx0XHRcdHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlci5idWlsZENvbnRleHRNZW51KCB0cnVlICk7XG5cdFx0XHR0aGlzLnN1Yl9jbGllbnRfY29udGFjdF92aWV3X2NvbnRyb2xsZXIuc2V0RGVmYXVsdE1lbnUoKTtcbi8vXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfa2V5ID0gJ2NsaWVudF9pZCc7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X2NvbnRhY3Rfdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X2NvbnRhY3Rfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X2NvbnRhY3Rfdmlld19jb250cm9sbGVyLmluaXREYXRhKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0R2xvYmFsLmxvYWRTY3JpcHQoICd2aWV3cy9pbnZvaWNlL2NsaWVudF9jb250YWN0L0NsaWVudENvbnRhY3RWaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl9jbGllbnRfY29udGFjdHMgPSAkdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX2NsaWVudF9jb250YWN0cycgKTtcblx0XHRcdHZhciBmaXJzdENvbHVtbiA9IHRhYl9jbGllbnRfY29udGFjdHMuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICk7XG5cblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0NsaWVudENvbnRhY3QnICsgJ1ZpZXcnICk7XG5cdFx0XHRDbGllbnRDb250YWN0Vmlld0NvbnRyb2xsZXIubG9hZFN1YlZpZXcoIGZpcnN0Q29sdW1uLCBiZWZvcmVMb2FkVmlldywgYWZ0ZXJMb2FkVmlldyApO1xuXG5cdFx0fSApO1xuXG5cdFx0ZnVuY3Rpb24gYmVmb3JlTG9hZFZpZXcoKSB7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZnRlckxvYWRWaWV3KCBzdWJWaWV3Q29udHJvbGxlciApIHtcblx0XHRcdCR0aGlzLnN1Yl9jbGllbnRfY29udGFjdF92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9jbGllbnRfY29udGFjdF92aWV3X2NvbnRyb2xsZXIucGFyZW50X2tleSA9ICdjbGllbnRfaWQnO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmFsdWUgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmlld19jb250cm9sbGVyID0gJHRoaXM7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X2NvbnRhY3Rfdmlld19jb250cm9sbGVyLnBvc3RJbml0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuaW5pdERhdGEoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0aW5pdFN1YkNsaWVudFBheW1lbnRWaWV3KCkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAoICF0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRUVFByb21pc2UucmVzb2x2ZSggJ0Jhc2VWaWV3Q29udHJvbGxlcicsICdvblRhYlNob3cnICk7IC8vU2luY2Ugc2VhcmNoKCkgaXNuJ3QgY2FsbGVkIGluIHRoaXMgY2FzZSwgYW5kIHdlIGp1c3QgZGlzcGxheSB0aGUgXCJQbGVhc2UgU2F2ZSBUaGlzIFJlY29yZCAuLi5cIiBtZXNzYWdlLCByZXNvbHZlIHRoZSBwcm9taXNlLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5zdWJfY2xpZW50X3BheW1lbnRfdmlld19jb250cm9sbGVyICkge1xuXHRcdFx0dGhpcy5zdWJfY2xpZW50X3BheW1lbnRfdmlld19jb250cm9sbGVyLmJ1aWxkQ29udGV4dE1lbnUoIHRydWUgKTtcblx0XHRcdHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlci5zZXREZWZhdWx0TWVudSgpO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmFsdWUgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlci5pbml0RGF0YSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdEdsb2JhbC5sb2FkU2NyaXB0KCAndmlld3MvaW52b2ljZS9jbGllbnRfcGF5bWVudC9DbGllbnRQYXltZW50Vmlld0NvbnRyb2xsZXIuanMnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJfcGF5bWVudF9tZXRob2RzID0gJHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9wYXltZW50X21ldGhvZHMnICk7XG5cdFx0XHR2YXIgZmlyc3RDb2x1bW4gPSB0YWJfcGF5bWVudF9tZXRob2RzLmZpbmQoICcuZmlyc3QtY29sdW1uLXN1Yi12aWV3JyApO1xuXG5cdFx0XHRHbG9iYWwudHJhY2tWaWV3KCAnU3ViJyArICdDbGllbnRQYXltZW50JyArICdWaWV3JyApO1xuXHRcdFx0Q2xpZW50UGF5bWVudFZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdGZ1bmN0aW9uIGJlZm9yZUxvYWRWaWV3KCkge1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X3BheW1lbnRfdmlld19jb250cm9sbGVyID0gc3ViVmlld0NvbnRyb2xsZXI7XG5cdFx0XHQkdGhpcy5zdWJfY2xpZW50X3BheW1lbnRfdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnY2xpZW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl9jbGllbnRfcGF5bWVudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9jbGllbnRfcGF5bWVudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl9jbGllbnRfcGF5bWVudF92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX2NsaWVudF9wYXltZW50X3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGluaXRTdWJJbnZvaWNlVmlldygpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkICkge1xuXHRcdFx0VFRQcm9taXNlLnJlc29sdmUoICdCYXNlVmlld0NvbnRyb2xsZXInLCAnb25UYWJTaG93JyApOyAvL1NpbmNlIHNlYXJjaCgpIGlzbid0IGNhbGxlZCBpbiB0aGlzIGNhc2UsIGFuZCB3ZSBqdXN0IGRpc3BsYXkgdGhlIFwiUGxlYXNlIFNhdmUgVGhpcyBSZWNvcmQgLi4uXCIgbWVzc2FnZSwgcmVzb2x2ZSB0aGUgcHJvbWlzZS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuc3ViX2ludm9pY2Vfdmlld19jb250cm9sbGVyICkge1xuXHRcdFx0JHRoaXMuc3ViX2ludm9pY2Vfdmlld19jb250cm9sbGVyLmJ1aWxkQ29udGV4dE1lbnUoIHRydWUgKTtcblx0XHRcdCR0aGlzLnN1Yl9pbnZvaWNlX3ZpZXdfY29udHJvbGxlci5zZXREZWZhdWx0TWVudSgpO1xuXHRcdFx0JHRoaXMuc3ViX2ludm9pY2Vfdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnY2xpZW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl9pbnZvaWNlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfdmFsdWUgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdFx0JHRoaXMuc3ViX2ludm9pY2Vfdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfaW52b2ljZV92aWV3X2NvbnRyb2xsZXIuaW5pdERhdGEoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2ludm9pY2UvaW52b2ljZS9JbnZvaWNlVmlld0NvbnRyb2xsZXIuanMnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJfaW52b2ljZXMgPSAkdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX2ludm9pY2VzJyApO1xuXHRcdFx0dmFyIGZpcnN0Q29sdW1uID0gdGFiX2ludm9pY2VzLmZpbmQoICcuZmlyc3QtY29sdW1uLXN1Yi12aWV3JyApO1xuXG5cdFx0XHRHbG9iYWwudHJhY2tWaWV3KCAnU3ViJyArICdJbnZvaWNlJyArICdWaWV3JyApO1xuXHRcdFx0SW52b2ljZVZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdGZ1bmN0aW9uIGJlZm9yZUxvYWRWaWV3KCkge1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkdGhpcy5zdWJfaW52b2ljZV92aWV3X2NvbnRyb2xsZXIgPSBzdWJWaWV3Q29udHJvbGxlcjtcblx0XHRcdCR0aGlzLnN1Yl9pbnZvaWNlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfa2V5ID0gJ2NsaWVudF9pZCc7XG5cdFx0XHQkdGhpcy5zdWJfaW52b2ljZV92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl9pbnZvaWNlX3ZpZXdfY29udHJvbGxlci5wYXJlbnRfZWRpdF9yZWNvcmQgPSAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkO1xuXHRcdFx0JHRoaXMuc3ViX2ludm9pY2Vfdmlld19jb250cm9sbGVyLnBhcmVudF92aWV3X2NvbnRyb2xsZXIgPSAkdGhpcztcblx0XHRcdCR0aGlzLnN1Yl9pbnZvaWNlX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGluaXRTdWJUcmFuc2FjdGlvblZpZXcoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdGlmICggIXRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZCApIHtcblx0XHRcdFRUUHJvbWlzZS5yZXNvbHZlKCAnQmFzZVZpZXdDb250cm9sbGVyJywgJ29uVGFiU2hvdycgKTsgLy9TaW5jZSBzZWFyY2goKSBpc24ndCBjYWxsZWQgaW4gdGhpcyBjYXNlLCBhbmQgd2UganVzdCBkaXNwbGF5IHRoZSBcIlBsZWFzZSBTYXZlIFRoaXMgUmVjb3JkIC4uLlwiIG1lc3NhZ2UsIHJlc29sdmUgdGhlIHByb21pc2UuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIgKSB7XG5cdFx0XHR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIuYnVpbGRDb250ZXh0TWVudSggdHJ1ZSApO1xuXHRcdFx0dGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyLnNldERlZmF1bHRNZW51KCk7XG5cdFx0XHQkdGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyLnBhcmVudF92YWx1ZSA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQ7XG5cdFx0XHQkdGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9lZGl0X3JlY29yZCA9ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQ7XG5cdFx0XHQkdGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyLmdldFN1YlZpZXdGaWx0ZXIgPSBmdW5jdGlvbiggZmlsdGVyICkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RmlsdGVyKCBmaWx0ZXIsIHRoaXMgKTtcblx0XHRcdH07XG5cblx0XHRcdCR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIuaW5pdERhdGEoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRHbG9iYWwubG9hZFNjcmlwdCggJ3ZpZXdzL2ludm9pY2UvaW52b2ljZV90cmFuc2FjdGlvbi9JbnZvaWNlVHJhbnNhY3Rpb25WaWV3Q29udHJvbGxlci5qcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYl90cmFuc2FjdGlvbnMgPSAkdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3RyYW5zYWN0aW9ucycgKTtcblx0XHRcdHZhciBmaXJzdENvbHVtbiA9IHRhYl90cmFuc2FjdGlvbnMuZmluZCggJy5maXJzdC1jb2x1bW4tc3ViLXZpZXcnICk7XG5cblx0XHRcdEdsb2JhbC50cmFja1ZpZXcoICdTdWInICsgJ0ludm9pY2VUcmFuc2FjdGlvbicgKyAnVmlldycgKTtcblx0XHRcdEludm9pY2VUcmFuc2FjdGlvblZpZXdDb250cm9sbGVyLmxvYWRTdWJWaWV3KCBmaXJzdENvbHVtbiwgYmVmb3JlTG9hZFZpZXcsIGFmdGVyTG9hZFZpZXcgKTtcblxuXHRcdH0gKTtcblxuXHRcdGZ1bmN0aW9uIGJlZm9yZUxvYWRWaWV3KCkge1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWZ0ZXJMb2FkVmlldyggc3ViVmlld0NvbnRyb2xsZXIgKSB7XG5cdFx0XHQkdGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyID0gc3ViVmlld0NvbnRyb2xsZXI7XG5cdFx0XHQkdGhpcy5zdWJfdHJhbnNhY3Rpb25fdmlld19jb250cm9sbGVyLnBhcmVudF9rZXkgPSAnY2xpZW50X2lkJztcblx0XHRcdCR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZhbHVlID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdCR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X2VkaXRfcmVjb3JkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZDtcblx0XHRcdCR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIuZ2V0U3ViVmlld0ZpbHRlciA9IGZ1bmN0aW9uKCBmaWx0ZXIgKSB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWx0ZXIoIGZpbHRlciwgdGhpcyApO1xuXHRcdFx0fTtcblx0XHRcdCR0aGlzLnN1Yl90cmFuc2FjdGlvbl92aWV3X2NvbnRyb2xsZXIucGFyZW50X3ZpZXdfY29udHJvbGxlciA9ICR0aGlzO1xuXHRcdFx0JHRoaXMuc3ViX3RyYW5zYWN0aW9uX3ZpZXdfY29udHJvbGxlci5wb3N0SW5pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEZpbHRlciggZmlsdGVyLCB0YXJnZXQgKSB7XG5cdFx0XHRmaWx0ZXIuY2xpZW50X2lkID0gJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5pZDtcblx0XHRcdGZpbHRlci5pbnZvaWNlX3N0YXR1c19pZCA9IFsxMCwgMjAsIDMwLCAzNSwgNDAsIDUwLCA1NSwgNzAsIDgwLCA5MCwgOTUsIDk3LCA5OCwgMTAwXTtcblxuXHRcdFx0cmV0dXJuIGZpbHRlcjtcblx0XHR9XG5cblxuXHR9XG5cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1475\n")}}]);