TimeTrex/interface/html5/dist/text_input-TTextInput.bundle.js

1 line
36 KiB
JavaScript

(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["text_input-TTextInput"],{9264:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var jQuery = __webpack_require__(9755);\n( function( $ ) {\n\n\t$.fn.TTextInput = function( options ) {\n\t\tvar opts = $.extend( {}, $.fn.TTextInput.defaults, options );\n\t\tvar $this = this;\n\t\tvar field;\n\t\tvar validation_field;\n\t\tvar error_string = '';\n\t\tvar error_tip_box;\n\n\t\tvar mass_edit_mode = false;\n\t\tvar check_box = null;\n\n\t\tvar enabled = true;\n\n\t\tvar hasKeyEvent = null;\n\n\t\t//DONT USE THIS ANY MORE\n\t\tvar need_parser_date = false;\n\n\t\tvar need_parser_sec = false;\n\n\t\tvar parsed_value = false; //work with need_parser_date\n\n\t\tvar api_date = null;\n\n\t\tvar validate_timer = null;\n\n\t\tvar no_validate_timer = null;\n\n\t\tvar no_validate_timer_sec = 0;\n\n\t\tvar password_style = false;\n\n\t\tvar disable_keyup_event = false; //set to not send change event when mouseup\n\n\t\tvar mode;\n\n\t\tvar is_static_width;\n\n\t\tvar static_width;\n\n\t\tvar display_na = true; // Display N/A when no value\n\n\t\t// var cancel_date_parse = false;\n\n\t\tvar do_validate = true;\n\n\t\t// var parseDateAsync = function( callBack ) {\n\t\t// \tparsed_value = -1;\n\t\t// \tif ( !api_date ) {\n\t\t// \t\tapi_date = TTAPI.APITTDate;\n\t\t// \t}\n\t\t// \tapi_date.parseTimeUnit( $this.val(), {\n\t\t// \t\tonResult: function( result ) {\n\t\t// \t\t\tif ( cancel_date_parse ) {\n\t\t// \t\t\t\treturn;\n\t\t// \t\t\t}\n\t\t// \t\t\tparsed_value = result.getResult();\n\t\t// \t\t\tif ( callBack ) {\n\t\t// \t\t\t\tcallBack();\n\t\t// \t\t\t}\n\t\t// \t\t\tProgressBar.closeOverlay();\n\t\t// \t\t}\n\t\t// \t} );\n\t\t//\n\t\t// \t//parsed_value = Global.parseTimeUnit( $this.val() );\n\t\t// };\n\n\t\tthis.setPlaceHolder = function( val ) {\n\t\t\t$this.attr( 'placeholder', val );\n\t\t};\n\n\t\tthis.setNeedParsDate = function( val ) {\n\t\t\tneed_parser_date = val;\n\t\t};\n\n\t\tthis.setNeedParseSec = function( val ) {\n\t\t\tif ( val ) {\n\t\t\t\t//parsed_value = parseDateAsync();\n\t\t\t\tparsed_value = Global.parseTimeUnit( $this.val() );\n\t\t\t}\n\t\t\tneed_parser_sec = val;\n\n\t\t};\n\n\t\tthis.getEnabled = function() {\n\t\t\treturn enabled;\n\t\t};\n\n\t\tthis.setEnabled = function( val ) {\n\t\t\tenabled = val;\n\t\t\tif ( val === false || val === '' ) {\n\t\t\t\t$this.attr( 'readonly', 'true' );\n\t\t\t\t$this.addClass( 't-text-input-readonly' );\n\t\t\t\tif ( check_box ) {\n\t\t\t\t\tcheck_box.hide();\n\t\t\t\t}\n\t\t\t\tif ( !this.getValue() && display_na ) {\n\t\t\t\t\tthis.val( $.i18n._( 'N/A' ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$this.removeAttr( 'readonly' );\n\t\t\t\t$this.removeClass( 't-text-input-readonly' );\n\t\t\t\tif ( check_box ) {\n\t\t\t\t\tcheck_box.show();\n\t\t\t\t}\n\t\t\t\tif ( this.val() === $.i18n._( 'N/A' ) ) {\n\t\t\t\t\tthis.val( '' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReadOnly = function( val ) {\n\t\t\tif ( val ) {\n\t\t\t\t$this.attr( 'disabled', 'true' );\n\t\t\t\t$this.addClass( 't-text-input-readonly-bg' );\n\t\t\t} else {\n\t\t\t\t$this.removeAttr( 'disabled' );\n\t\t\t\t$this.removeClass( 't-text-input-readonly-bg' );\n\t\t\t}\n\t\t};\n\n\t\tthis.setCheckBox = function( val ) {\n\t\t\tif ( check_box ) {\n\t\t\t\tcheck_box.children().eq( 0 )[0].checked = val;\n\t\t\t}\n\t\t};\n\n\t\tthis.isChecked = function() {\n\t\t\tif ( check_box ) {\n\t\t\t\tif ( check_box.children().eq( 0 )[0].checked === true ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.setMassEditMode = function( val ) {\n\n\t\t\tmass_edit_mode = val;\n\n\t\t\tif ( mass_edit_mode ) {\n\t\t\t\tcheck_box = $( ' <div class=\"mass-edit-checkbox-wrapper\"><input type=\"checkbox\" class=\"mass-edit-checkbox\"></input>' +\n\t\t\t\t\t'<label for=\"checkbox-input-1\" class=\"input-helper input-helper--checkbox\"></label></div>' );\n\t\t\t\tcheck_box.insertBefore( $( this ) );\n\t\t\t\tcheck_box.change( function() {\n\t\t\t\t\tif ( need_parser_date || need_parser_sec ) {\n\t\t\t\t\t\tparsed_value = Global.parseTimeUnit( $this.val() );\n\t\t\t\t\t\t// parseDateAsync( function() {\n\t\t\t\t\t\t// \t$this.trigger( 'formItemChange', [$this] );\n\t\t\t\t\t\t// } );\n\t\t\t\t\t}\n\t\t\t\t\t$this.trigger( 'formItemChange', [$this] );\n\t\t\t\t} );\n\n\t\t\t\tif ( is_static_width && static_width.toString().indexOf( '%' ) > 0 ) {\n\t\t\t\t\t$this.css( 'width', 'calc(' + static_width + ' - 25px)' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( check_box ) {\n\t\t\t\t\tcheck_box.remove();\n\t\t\t\t\tcheck_box = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setField = function( val ) {\n\t\t\tfield = val;\n\t\t};\n\n\t\tthis.getField = function() {\n\t\t\treturn field;\n\t\t};\n\n\t\tthis.getValidationField = function() {\n\t\t\treturn validation_field;\n\t\t};\n\n\t\tthis.getInputValue = function() {\n\n\t\t\tvar val = $this.val();\n\t\t\treturn val;\n\n\t\t};\n\t\tthis.getValue = function() {\n\t\t\tvar val = $this.val();\n\t\t\tif ( val === $.i18n._( 'N/A' ) ) {\n\t\t\t\tval = '';\n\t\t\t}\n\t\t\tif ( need_parser_sec || need_parser_date || parsed_value ) {\n\t\t\t\tif ( parsed_value === -1 ) {\n\t\t\t\t\tparsed_value = Global.parseTimeUnit( val );\n\t\t\t\t\t// cancel_date_parse = true; // cancel orginal date parse process\n\t\t\t\t\t// parsed_value = api_date.parseTimeUnit( val, { async: false } ).getResult();\n\t\t\t\t}\n\t\t\t\treturn parsed_value;\n\t\t\t} else {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setValue = function( val ) {\n\t\t\tif ( !val && val !== 0 ) {\n\t\t\t\tval = '';\n\t\t\t}\n\t\t\t$this.val( val );\n\t\t\tif ( need_parser_date ) {\n\t\t\t\t//parseDateAsync();\n\t\t\t\tparsed_value = Global.parseTimeUnit( $this.val() );\n\t\t\t} else if ( need_parser_sec ) {\n\t\t\t\tparsed_value = val;\n\t\t\t\t$this.val( Global.getTimeUnit( val ) );\n\t\t\t}\n\n\t\t\tthis.autoResize();\n\t\t};\n\n\t\tthis.setErrorStyle = function( errStr, show, isWarning ) {\n\t\t\tif ( isWarning ) {\n\t\t\t\t$( this ).addClass( 'warning-tip' );\n\t\t\t} else {\n\t\t\t\t$( this ).addClass( 'error-tip' );\n\t\t\t}\n\t\t\terror_string = errStr;\n\n\t\t\tif ( show ) {\n\t\t\t\tthis.showErrorTip();\n\t\t\t}\n\t\t};\n\n\t\tthis.setWidth = function( val ) {\n\t\t\tif ( val && ( val > 0 || val.indexOf( '%' ) > 0 ) ) {\n\t\t\t\t$this.width( val );\n\t\t\t\tstatic_width = val;\n\t\t\t\tis_static_width = true;\n\t\t\t}\n\t\t};\n\n\t\tthis.showErrorTip = function( sec ) {\n\n\t\t\tif ( !Global.isSet( sec ) ) {\n\t\t\t\tsec = 2;\n\t\t\t}\n\n\t\t\tif ( !error_tip_box ) {\n\t\t\t\terror_tip_box = Global.loadWidgetByName( WidgetNamesDic.ERROR_TOOLTIP );\n\t\t\t\terror_tip_box = error_tip_box.ErrorTipBox();\n\t\t\t}\n\t\t\terror_tip_box.cancelRemove();\n\n\t\t\tif ( $( this ).hasClass( 'warning-tip' ) ) {\n\t\t\t\terror_tip_box.show( this, error_string, sec, true );\n\t\t\t} else {\n\t\t\t\terror_tip_box.show( this, error_string, sec );\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hideErrorTip = function() {\n\n\t\t\tif ( Global.isSet( error_tip_box ) ) {\n\t\t\t\terror_tip_box.remove();\n\t\t\t}\n\n\t\t};\n\n\t\tthis.clearErrorStyle = function() {\n\t\t\t$( this ).removeClass( 'error-tip' );\n\t\t\t$( this ).removeClass( 'warning-tip' );\n\t\t\tthis.hideErrorTip();\n\t\t\terror_string = '';\n\t\t};\n\n\t\tthis.autoResize = function() {\n\t\t\tvar content_width, example_width;\n\t\t\tif ( !is_static_width ) {\n\t\t\t\tif ( mode === 'time' ) {\n\t\t\t\t\texample_width = Global.calculateTextWidth( LocalCacheData.getLoginUserPreference().time_format_display );\n\t\t\t\t} else if ( mode == 'time_unit' ) {\n\t\t\t\t\texample_width = Global.calculateTextWidth( LocalCacheData.getLoginUserPreference().time_unit_format_display );\n\t\t\t\t} else {\n\t\t\t\t\texample_width = 156;\n\t\t\t\t}\n\t\t\t\tcontent_width = Global.calculateTextWidth( $this.getValue(), {\n\t\t\t\t\tmin_width: example_width,\n\t\t\t\t\tmax_width: 200\n\t\t\t\t} );\n\n\t\t\t} else {\n\t\t\t\tif ( static_width.toString().indexOf( '%' ) > 0 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texample_width = static_width;\n\t\t\t\tcontent_width = Global.calculateTextWidth( $this.getValue(), {\n\t\t\t\t\tmin_width: example_width,\n\t\t\t\t\tmax_width: static_width > 200 ? static_width : 200\n\t\t\t\t} );\n\t\t\t}\n\t\t\t$this.width( content_width + 'px' );\n\t\t};\n\n\t\tthis.each( function() {\n\t\t\tvar o = $.meta ? $.extend( {}, opts, $( this ).data() ) : opts;\n\t\t\tfield = o.field;\n\n\t\t\t//Set autocomplete widget option is defined, set it here.\n\t\t\tif ( o.autocomplete ) {\n\t\t\t\t$this.attr( 'autocomplete', o.autocomplete );\n\t\t\t}\n\n\t\t\tif ( o.hasOwnProperty( 'do_validate' ) ) {\n\t\t\t\tdo_validate = o.do_validate;\n\t\t\t}\n\n\t\t\tif ( o.validation_field ) {\n\t\t\t\tvalidation_field = o.validation_field;\n\t\t\t}\n\t\t\tif ( o.hasOwnProperty( 'display_na' ) ) {\n\t\t\t\tdisplay_na = o.display_na;\n\t\t\t}\n\t\t\tif ( o.hasOwnProperty( 'no_validate_timer_sec' ) && o.no_validate_timer_sec > 0 ) {\n\t\t\t\tno_validate_timer_sec = o.no_validate_timer_sec;\n\t\t\t}\n\t\t\thasKeyEvent = o.hasKeyEvent;\n\t\t\tneed_parser_date = o.need_parser_date;\n\t\t\tneed_parser_sec = o.need_parser_sec;\n\n\t\t\tif ( need_parser_date || need_parser_sec ) {\n\t\t\t\tapi_date = TTAPI.APITTDate;\n\t\t\t}\n\n\t\t\tif ( o.mode ) {\n\t\t\t\tmode = o.mode;\n\t\t\t}\n\n\t\t\tif ( o.width && ( o.width > 0 || o.width.indexOf( '%' ) > 0 ) ) {\n\t\t\t\t$this.width( o.width );\n\t\t\t\tstatic_width = o.width;\n\t\t\t\tis_static_width = true;\n\t\t\t}\n\n\t\t\tif ( o.disable_keyup_event ) {\n\t\t\t\tdisable_keyup_event = o.disable_keyup_event;\n\t\t\t}\n\n\t\t\tif ( mode === 'time' ) {\n\t\t\t\t$this.setPlaceHolder( LocalCacheData.getLoginUserPreference().time_format_display );\n\t\t\t} else if ( mode === 'time_unit' ) {\n\t\t\t\t$this.setPlaceHolder( LocalCacheData.getLoginUserPreference().time_unit_format_display );\n\t\t\t}\n\t\t\t$this.autoResize();\n\n\t\t\t$( this ).keydown( function( e ) {\n\t\t\t\t// key is not TAB and ENTER\n\t\t\t\tif ( hasKeyEvent && e.keyCode !== 9 && e.keyCode !== 13 ) {\n\t\t\t\t\t$this.trigger( 'formItemKeyDown', [$this] );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( this ).keyup( function( e ) {\n\t\t\t\tvar validate_sec = 1000;\n\t\t\t\tif ( e.keyCode === 9 || e.keyCode === 13 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar is_valid_input = Global.isValidInputCodes( e.keyCode );\n\t\t\t\tif ( !is_valid_input ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//don't clean event when click tab\n\t\t\t\tif ( validate_timer ) {\n\t\t\t\t\tclearTimeout( validate_timer );\n\t\t\t\t\tvalidate_timer = null;\n\t\t\t\t}\n\n\t\t\t\tif ( no_validate_timer ) {\n\t\t\t\t\tclearTimeout( no_validate_timer );\n\t\t\t\t\tno_validate_timer = null;\n\t\t\t\t}\n\t\t\t\tif ( hasKeyEvent ) {\n\t\t\t\t\t$this.trigger( 'formItemKeyUp', [$this] );\n\t\t\t\t}\n\t\t\t\tif ( error_string && error_string.length > 0 ) {\n\t\t\t\t\tvalidate_sec = 500;\n\t\t\t\t}\n\t\t\t\tif ( do_validate ) {\n\t\t\t\t\tvalidate_timer = setTimeout( function() {\n\t\t\t\t\t\tif ( check_box ) {\n\t\t\t\t\t\t\t$this.setCheckBox( true );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( need_parser_date || need_parser_sec ) {\n\t\t\t\t\t\t\tparsed_value = -1; // parse date when get value\n\t\t\t\t\t\t\tif ( !disable_keyup_event ) {\n\t\t\t\t\t\t\t\t$this.trigger( 'formItemChange', [$this, true] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ( !disable_keyup_event ) {\n\t\t\t\t\t\t\t\t$this.trigger( 'formItemChange', [$this] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, validate_sec );\n\t\t\t\t}\n\n\t\t\t\t// TO make sure the value is set to currentEditRecord when user typing it, but not trigger validate\n\t\t\t\t// Do this immediately instead wait for 300 ms.\n\t\t\t\tno_validate_timer = setTimeout( function() {\n\n\t\t\t\t\tif ( check_box ) {\n\t\t\t\t\t\t$this.setCheckBox( true );\n\t\t\t\t\t}\n\t\t\t\t\tif ( need_parser_date || need_parser_sec ) {\n\t\t\t\t\t\tparsed_value = -1; // parse date when get value\n\t\t\t\t\t\tif ( !disable_keyup_event ) {\n\t\t\t\t\t\t\t$this.trigger( 'formItemChange', [$this, true] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( !disable_keyup_event ) {\n\t\t\t\t\t\t\t$this.trigger( 'formItemChange', [$this, true] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, no_validate_timer_sec );\n\t\t\t} );\n\n\t\t\t$( this ).mouseover( function() {\n\n\t\t\t\tif ( enabled ) {\n\t\t\t\t\tif ( error_string && error_string.length > 0 ) {\n\t\t\t\t\t\t$this.showErrorTip( 20 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( this ).mouseout( function() {\n\t\t\t\tif ( !$( $this ).is( ':focus' ) ) {\n\t\t\t\t\t$this.hideErrorTip();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$( this ).change( function() {\n\t\t\t\t$this.trigger( 'keyup', [$this] );\n\t\t\t\t//#2226 - When datetime or time unit fields specify need_parser_date or need_parser_sec it does not set disable_keyup_event == true. To validate those fields on change we need to check for those values.\n\t\t\t\tif ( disable_keyup_event || need_parser_date || need_parser_sec ) {\n\t\t\t\t\t$this.trigger( 'formItemChange', [$this] );\n\t\t\t\t}\n\t\t\t\tif ( !need_parser_date && !need_parser_sec ) {\n\t\t\t\t\t$this.autoResize();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$( this ).focusin( function() {\n\n\t\t\t\tif ( !enabled ) {\n\n\t\t\t\t\tif ( !check_box ) {\n\t\t\t\t\t\tif ( LocalCacheData.current_open_sub_controller &&\n\t\t\t\t\t\t\tLocalCacheData.current_open_sub_controller.edit_view &&\n\t\t\t\t\t\t\tLocalCacheData.current_open_sub_controller.is_viewing ) {\n\t\t\t\t\t\t\terror_string = LocalCacheData.current_open_sub_controller.getViewModeErrorMessage();\n\t\t\t\t\t\t\t$this.showErrorTip( 10 );\n\t\t\t\t\t\t} else if ( LocalCacheData.current_open_primary_controller &&\n\t\t\t\t\t\t\tLocalCacheData.current_open_primary_controller.edit_view &&\n\t\t\t\t\t\t\tLocalCacheData.current_open_primary_controller.is_viewing ) {\n\t\t\t\t\t\t\terror_string = LocalCacheData.current_open_primary_controller.getViewModeErrorMessage();\n\t\t\t\t\t\t\t$this.showErrorTip( 10 );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tif ( error_string && error_string.length > 0 ) {\n\t\t\t\t\t\t$this.showErrorTip( 20 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( this ).focusout( function() {\n\t\t\t\t$this.hideErrorTip();\n\t\t\t} );\n\n\t\t} );\n\n\t\treturn this;\n\n\t};\n\n\t$.fn.TTextInput.defaults = {};\n\t$.fn.TTextInput.html_template = `<input type=\"text\" class=\"t-text-input\" autocomplete=\"timetrex-no-auto-fill\"/>`;\n\n} )( jQuery );//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI2NC5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCOztBQUU1Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxtQ0FBbUM7O0FBRW5DOztBQUVBOztBQUVBOztBQUVBLHlCQUF5Qjs7QUFFekI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxzREFBc0QsZUFBZTtBQUNyRTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU4sS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEVBQUUsR0FBRyxNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L2dsb2JhbC93aWRnZXRzL3RleHRfaW5wdXQvVFRleHRJbnB1dC5qcz84MmRmIl0sInNvdXJjZXNDb250ZW50IjpbIiggZnVuY3Rpb24oICQgKSB7XG5cblx0JC5mbi5UVGV4dElucHV0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIG9wdHMgPSAkLmV4dGVuZCgge30sICQuZm4uVFRleHRJbnB1dC5kZWZhdWx0cywgb3B0aW9ucyApO1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGZpZWxkO1xuXHRcdHZhciB2YWxpZGF0aW9uX2ZpZWxkO1xuXHRcdHZhciBlcnJvcl9zdHJpbmcgPSAnJztcblx0XHR2YXIgZXJyb3JfdGlwX2JveDtcblxuXHRcdHZhciBtYXNzX2VkaXRfbW9kZSA9IGZhbHNlO1xuXHRcdHZhciBjaGVja19ib3ggPSBudWxsO1xuXG5cdFx0dmFyIGVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0dmFyIGhhc0tleUV2ZW50ID0gbnVsbDtcblxuXHRcdC8vRE9OVCBVU0UgVEhJUyBBTlkgTU9SRVxuXHRcdHZhciBuZWVkX3BhcnNlcl9kYXRlID0gZmFsc2U7XG5cblx0XHR2YXIgbmVlZF9wYXJzZXJfc2VjID0gZmFsc2U7XG5cblx0XHR2YXIgcGFyc2VkX3ZhbHVlID0gZmFsc2U7IC8vd29yayB3aXRoIG5lZWRfcGFyc2VyX2RhdGVcblxuXHRcdHZhciBhcGlfZGF0ZSA9IG51bGw7XG5cblx0XHR2YXIgdmFsaWRhdGVfdGltZXIgPSBudWxsO1xuXG5cdFx0dmFyIG5vX3ZhbGlkYXRlX3RpbWVyID0gbnVsbDtcblxuXHRcdHZhciBub192YWxpZGF0ZV90aW1lcl9zZWMgPSAwO1xuXG5cdFx0dmFyIHBhc3N3b3JkX3N0eWxlID0gZmFsc2U7XG5cblx0XHR2YXIgZGlzYWJsZV9rZXl1cF9ldmVudCA9IGZhbHNlOyAvL3NldCB0byBub3Qgc2VuZCBjaGFuZ2UgZXZlbnQgd2hlbiBtb3VzZXVwXG5cblx0XHR2YXIgbW9kZTtcblxuXHRcdHZhciBpc19zdGF0aWNfd2lkdGg7XG5cblx0XHR2YXIgc3RhdGljX3dpZHRoO1xuXG5cdFx0dmFyIGRpc3BsYXlfbmEgPSB0cnVlOyAvLyBEaXNwbGF5IE4vQSB3aGVuIG5vIHZhbHVlXG5cblx0XHQvLyB2YXIgY2FuY2VsX2RhdGVfcGFyc2UgPSBmYWxzZTtcblxuXHRcdHZhciBkb192YWxpZGF0ZSA9IHRydWU7XG5cblx0XHQvLyB2YXIgcGFyc2VEYXRlQXN5bmMgPSBmdW5jdGlvbiggY2FsbEJhY2sgKSB7XG5cdFx0Ly8gXHRwYXJzZWRfdmFsdWUgPSAtMTtcblx0XHQvLyBcdGlmICggIWFwaV9kYXRlICkge1xuXHRcdC8vIFx0XHRhcGlfZGF0ZSA9IFRUQVBJLkFQSVRURGF0ZTtcblx0XHQvLyBcdH1cblx0XHQvLyBcdGFwaV9kYXRlLnBhcnNlVGltZVVuaXQoICR0aGlzLnZhbCgpLCB7XG5cdFx0Ly8gXHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdC8vIFx0XHRcdGlmICggY2FuY2VsX2RhdGVfcGFyc2UgKSB7XG5cdFx0Ly8gXHRcdFx0XHRyZXR1cm47XG5cdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHRcdHBhcnNlZF92YWx1ZSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblx0XHQvLyBcdFx0XHRpZiAoIGNhbGxCYWNrICkge1xuXHRcdC8vIFx0XHRcdFx0Y2FsbEJhY2soKTtcblx0XHQvLyBcdFx0XHR9XG5cdFx0Ly8gXHRcdFx0UHJvZ3Jlc3NCYXIuY2xvc2VPdmVybGF5KCk7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH0gKTtcblx0XHQvL1xuXHRcdC8vIFx0Ly9wYXJzZWRfdmFsdWUgPSBHbG9iYWwucGFyc2VUaW1lVW5pdCggJHRoaXMudmFsKCkgKTtcblx0XHQvLyB9O1xuXG5cdFx0dGhpcy5zZXRQbGFjZUhvbGRlciA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHQkdGhpcy5hdHRyKCAncGxhY2Vob2xkZXInLCB2YWwgKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXROZWVkUGFyc0RhdGUgPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0bmVlZF9wYXJzZXJfZGF0ZSA9IHZhbDtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXROZWVkUGFyc2VTZWMgPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdC8vcGFyc2VkX3ZhbHVlID0gcGFyc2VEYXRlQXN5bmMoKTtcblx0XHRcdFx0cGFyc2VkX3ZhbHVlID0gR2xvYmFsLnBhcnNlVGltZVVuaXQoICR0aGlzLnZhbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRuZWVkX3BhcnNlcl9zZWMgPSB2YWw7XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRFbmFibGVkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZW5hYmxlZDtcblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRFbmFibGVkID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGVuYWJsZWQgPSB2YWw7XG5cdFx0XHRpZiAoIHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAnJyApIHtcblx0XHRcdFx0JHRoaXMuYXR0ciggJ3JlYWRvbmx5JywgJ3RydWUnICk7XG5cdFx0XHRcdCR0aGlzLmFkZENsYXNzKCAndC10ZXh0LWlucHV0LXJlYWRvbmx5JyApO1xuXHRcdFx0XHRpZiAoIGNoZWNrX2JveCApIHtcblx0XHRcdFx0XHRjaGVja19ib3guaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIXRoaXMuZ2V0VmFsdWUoKSAmJiBkaXNwbGF5X25hICkge1xuXHRcdFx0XHRcdHRoaXMudmFsKCAkLmkxOG4uXyggJ04vQScgKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkdGhpcy5yZW1vdmVBdHRyKCAncmVhZG9ubHknICk7XG5cdFx0XHRcdCR0aGlzLnJlbW92ZUNsYXNzKCAndC10ZXh0LWlucHV0LXJlYWRvbmx5JyApO1xuXHRcdFx0XHRpZiAoIGNoZWNrX2JveCApIHtcblx0XHRcdFx0XHRjaGVja19ib3guc2hvdygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggdGhpcy52YWwoKSA9PT0gJC5pMThuLl8oICdOL0EnICkgKSB7XG5cdFx0XHRcdFx0dGhpcy52YWwoICcnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0aGlzLnNldFJlYWRPbmx5ID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHQkdGhpcy5hdHRyKCAnZGlzYWJsZWQnLCAndHJ1ZScgKTtcblx0XHRcdFx0JHRoaXMuYWRkQ2xhc3MoICd0LXRleHQtaW5wdXQtcmVhZG9ubHktYmcnICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkdGhpcy5yZW1vdmVBdHRyKCAnZGlzYWJsZWQnICk7XG5cdFx0XHRcdCR0aGlzLnJlbW92ZUNsYXNzKCAndC10ZXh0LWlucHV0LXJlYWRvbmx5LWJnJyApO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnNldENoZWNrQm94ID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGlmICggY2hlY2tfYm94ICkge1xuXHRcdFx0XHRjaGVja19ib3guY2hpbGRyZW4oKS5lcSggMCApWzBdLmNoZWNrZWQgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuaXNDaGVja2VkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNoZWNrX2JveCApIHtcblx0XHRcdFx0aWYgKCBjaGVja19ib3guY2hpbGRyZW4oKS5lcSggMCApWzBdLmNoZWNrZWQgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHR0aGlzLnNldE1hc3NFZGl0TW9kZSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cblx0XHRcdG1hc3NfZWRpdF9tb2RlID0gdmFsO1xuXG5cdFx0XHRpZiAoIG1hc3NfZWRpdF9tb2RlICkge1xuXHRcdFx0XHRjaGVja19ib3ggPSAkKCAnIDxkaXYgY2xhc3M9XCJtYXNzLWVkaXQtY2hlY2tib3gtd3JhcHBlclwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm1hc3MtZWRpdC1jaGVja2JveFwiPjwvaW5wdXQ+JyArXG5cdFx0XHRcdFx0JzxsYWJlbCBmb3I9XCJjaGVja2JveC1pbnB1dC0xXCIgY2xhc3M9XCJpbnB1dC1oZWxwZXIgaW5wdXQtaGVscGVyLS1jaGVja2JveFwiPjwvbGFiZWw+PC9kaXY+JyApO1xuXHRcdFx0XHRjaGVja19ib3guaW5zZXJ0QmVmb3JlKCAkKCB0aGlzICkgKTtcblx0XHRcdFx0Y2hlY2tfYm94LmNoYW5nZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCBuZWVkX3BhcnNlcl9kYXRlIHx8IG5lZWRfcGFyc2VyX3NlYyApIHtcblx0XHRcdFx0XHRcdHBhcnNlZF92YWx1ZSA9IEdsb2JhbC5wYXJzZVRpbWVVbml0KCAkdGhpcy52YWwoKSApO1xuXHRcdFx0XHRcdFx0Ly8gcGFyc2VEYXRlQXN5bmMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Ly8gXHQkdGhpcy50cmlnZ2VyKCAnZm9ybUl0ZW1DaGFuZ2UnLCBbJHRoaXNdICk7XG5cdFx0XHRcdFx0XHQvLyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCR0aGlzLnRyaWdnZXIoICdmb3JtSXRlbUNoYW5nZScsIFskdGhpc10gKTtcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdGlmICggaXNfc3RhdGljX3dpZHRoICYmIHN0YXRpY193aWR0aC50b1N0cmluZygpLmluZGV4T2YoICclJyApID4gMCApIHtcblx0XHRcdFx0XHQkdGhpcy5jc3MoICd3aWR0aCcsICdjYWxjKCcgKyBzdGF0aWNfd2lkdGggKyAnIC0gMjVweCknICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICggY2hlY2tfYm94ICkge1xuXHRcdFx0XHRcdGNoZWNrX2JveC5yZW1vdmUoKTtcblx0XHRcdFx0XHRjaGVja19ib3ggPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5zZXRGaWVsZCA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRmaWVsZCA9IHZhbDtcblx0XHR9O1xuXG5cdFx0dGhpcy5nZXRGaWVsZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZpZWxkO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldFZhbGlkYXRpb25GaWVsZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRpb25fZmllbGQ7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0SW5wdXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgdmFsID0gJHRoaXMudmFsKCk7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXG5cdFx0fTtcblx0XHR0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdmFsID0gJHRoaXMudmFsKCk7XG5cdFx0XHRpZiAoIHZhbCA9PT0gJC5pMThuLl8oICdOL0EnICkgKSB7XG5cdFx0XHRcdHZhbCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBuZWVkX3BhcnNlcl9zZWMgfHwgbmVlZF9wYXJzZXJfZGF0ZSB8fCBwYXJzZWRfdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggcGFyc2VkX3ZhbHVlID09PSAtMSApIHtcblx0XHRcdFx0XHRwYXJzZWRfdmFsdWUgPSBHbG9iYWwucGFyc2VUaW1lVW5pdCggdmFsICk7XG5cdFx0XHRcdFx0Ly8gY2FuY2VsX2RhdGVfcGFyc2UgPSB0cnVlOyAvLyBjYW5jZWwgb3JnaW5hbCBkYXRlIHBhcnNlIHByb2Nlc3Ncblx0XHRcdFx0XHQvLyBwYXJzZWRfdmFsdWUgPSBhcGlfZGF0ZS5wYXJzZVRpbWVVbml0KCB2YWwsIHsgYXN5bmM6IGZhbHNlIH0gKS5nZXRSZXN1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGFyc2VkX3ZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHZhbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGlmICggIXZhbCAmJiB2YWwgIT09IDAgKSB7XG5cdFx0XHRcdHZhbCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0JHRoaXMudmFsKCB2YWwgKTtcblx0XHRcdGlmICggbmVlZF9wYXJzZXJfZGF0ZSApIHtcblx0XHRcdFx0Ly9wYXJzZURhdGVBc3luYygpO1xuXHRcdFx0XHRwYXJzZWRfdmFsdWUgPSBHbG9iYWwucGFyc2VUaW1lVW5pdCggJHRoaXMudmFsKCkgKTtcblx0XHRcdH0gZWxzZSBpZiAoIG5lZWRfcGFyc2VyX3NlYyApIHtcblx0XHRcdFx0cGFyc2VkX3ZhbHVlID0gdmFsO1xuXHRcdFx0XHQkdGhpcy52YWwoIEdsb2JhbC5nZXRUaW1lVW5pdCggdmFsICkgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hdXRvUmVzaXplKCk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc2V0RXJyb3JTdHlsZSA9IGZ1bmN0aW9uKCBlcnJTdHIsIHNob3csIGlzV2FybmluZyApIHtcblx0XHRcdGlmICggaXNXYXJuaW5nICkge1xuXHRcdFx0XHQkKCB0aGlzICkuYWRkQ2xhc3MoICd3YXJuaW5nLXRpcCcgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5hZGRDbGFzcyggJ2Vycm9yLXRpcCcgKTtcblx0XHRcdH1cblx0XHRcdGVycm9yX3N0cmluZyA9IGVyclN0cjtcblxuXHRcdFx0aWYgKCBzaG93ICkge1xuXHRcdFx0XHR0aGlzLnNob3dFcnJvclRpcCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnNldFdpZHRoID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdGlmICggdmFsICYmICggdmFsID4gMCB8fCB2YWwuaW5kZXhPZiggJyUnICkgPiAwICkgKSB7XG5cdFx0XHRcdCR0aGlzLndpZHRoKCB2YWwgKTtcblx0XHRcdFx0c3RhdGljX3dpZHRoID0gdmFsO1xuXHRcdFx0XHRpc19zdGF0aWNfd2lkdGggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnNob3dFcnJvclRpcCA9IGZ1bmN0aW9uKCBzZWMgKSB7XG5cblx0XHRcdGlmICggIUdsb2JhbC5pc1NldCggc2VjICkgKSB7XG5cdFx0XHRcdHNlYyA9IDI7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIWVycm9yX3RpcF9ib3ggKSB7XG5cdFx0XHRcdGVycm9yX3RpcF9ib3ggPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggV2lkZ2V0TmFtZXNEaWMuRVJST1JfVE9PTFRJUCApO1xuXHRcdFx0XHRlcnJvcl90aXBfYm94ID0gZXJyb3JfdGlwX2JveC5FcnJvclRpcEJveCgpO1xuXHRcdFx0fVxuXHRcdFx0ZXJyb3JfdGlwX2JveC5jYW5jZWxSZW1vdmUoKTtcblxuXHRcdFx0aWYgKCAkKCB0aGlzICkuaGFzQ2xhc3MoICd3YXJuaW5nLXRpcCcgKSApIHtcblx0XHRcdFx0ZXJyb3JfdGlwX2JveC5zaG93KCB0aGlzLCBlcnJvcl9zdHJpbmcsIHNlYywgdHJ1ZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXJyb3JfdGlwX2JveC5zaG93KCB0aGlzLCBlcnJvcl9zdHJpbmcsIHNlYyApO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHRoaXMuaGlkZUVycm9yVGlwID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCBlcnJvcl90aXBfYm94ICkgKSB7XG5cdFx0XHRcdGVycm9yX3RpcF9ib3gucmVtb3ZlKCk7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dGhpcy5jbGVhckVycm9yU3R5bGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5yZW1vdmVDbGFzcyggJ2Vycm9yLXRpcCcgKTtcblx0XHRcdCQoIHRoaXMgKS5yZW1vdmVDbGFzcyggJ3dhcm5pbmctdGlwJyApO1xuXHRcdFx0dGhpcy5oaWRlRXJyb3JUaXAoKTtcblx0XHRcdGVycm9yX3N0cmluZyA9ICcnO1xuXHRcdH07XG5cblx0XHR0aGlzLmF1dG9SZXNpemUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjb250ZW50X3dpZHRoLCBleGFtcGxlX3dpZHRoO1xuXHRcdFx0aWYgKCAhaXNfc3RhdGljX3dpZHRoICkge1xuXHRcdFx0XHRpZiAoIG1vZGUgPT09ICd0aW1lJyApIHtcblx0XHRcdFx0XHRleGFtcGxlX3dpZHRoID0gR2xvYmFsLmNhbGN1bGF0ZVRleHRXaWR0aCggTG9jYWxDYWNoZURhdGEuZ2V0TG9naW5Vc2VyUHJlZmVyZW5jZSgpLnRpbWVfZm9ybWF0X2Rpc3BsYXkgKTtcblx0XHRcdFx0fSBlbHNlIGlmICggbW9kZSA9PSAndGltZV91bml0JyApIHtcblx0XHRcdFx0XHRleGFtcGxlX3dpZHRoID0gR2xvYmFsLmNhbGN1bGF0ZVRleHRXaWR0aCggTG9jYWxDYWNoZURhdGEuZ2V0TG9naW5Vc2VyUHJlZmVyZW5jZSgpLnRpbWVfdW5pdF9mb3JtYXRfZGlzcGxheSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGV4YW1wbGVfd2lkdGggPSAxNTY7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudF93aWR0aCA9IEdsb2JhbC5jYWxjdWxhdGVUZXh0V2lkdGgoICR0aGlzLmdldFZhbHVlKCksIHtcblx0XHRcdFx0XHRtaW5fd2lkdGg6IGV4YW1wbGVfd2lkdGgsXG5cdFx0XHRcdFx0bWF4X3dpZHRoOiAyMDBcblx0XHRcdFx0fSApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIHN0YXRpY193aWR0aC50b1N0cmluZygpLmluZGV4T2YoICclJyApID4gMCApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZXhhbXBsZV93aWR0aCA9IHN0YXRpY193aWR0aDtcblx0XHRcdFx0Y29udGVudF93aWR0aCA9IEdsb2JhbC5jYWxjdWxhdGVUZXh0V2lkdGgoICR0aGlzLmdldFZhbHVlKCksIHtcblx0XHRcdFx0XHRtaW5fd2lkdGg6IGV4YW1wbGVfd2lkdGgsXG5cdFx0XHRcdFx0bWF4X3dpZHRoOiBzdGF0aWNfd2lkdGggPiAyMDAgPyBzdGF0aWNfd2lkdGggOiAyMDBcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0JHRoaXMud2lkdGgoIGNvbnRlbnRfd2lkdGggKyAncHgnICk7XG5cdFx0fTtcblxuXHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbyA9ICQubWV0YSA/ICQuZXh0ZW5kKCB7fSwgb3B0cywgJCggdGhpcyApLmRhdGEoKSApIDogb3B0cztcblx0XHRcdGZpZWxkID0gby5maWVsZDtcblxuXHRcdFx0Ly9TZXQgYXV0b2NvbXBsZXRlIHdpZGdldCBvcHRpb24gaXMgZGVmaW5lZCwgc2V0IGl0IGhlcmUuXG5cdFx0XHRpZiAoIG8uYXV0b2NvbXBsZXRlICkge1xuXHRcdFx0XHQkdGhpcy5hdHRyKCAnYXV0b2NvbXBsZXRlJywgby5hdXRvY29tcGxldGUgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLmhhc093blByb3BlcnR5KCAnZG9fdmFsaWRhdGUnICkgKSB7XG5cdFx0XHRcdGRvX3ZhbGlkYXRlID0gby5kb192YWxpZGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLnZhbGlkYXRpb25fZmllbGQgKSB7XG5cdFx0XHRcdHZhbGlkYXRpb25fZmllbGQgPSBvLnZhbGlkYXRpb25fZmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG8uaGFzT3duUHJvcGVydHkoICdkaXNwbGF5X25hJyApICkge1xuXHRcdFx0XHRkaXNwbGF5X25hID0gby5kaXNwbGF5X25hO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvLmhhc093blByb3BlcnR5KCAnbm9fdmFsaWRhdGVfdGltZXJfc2VjJyApICYmIG8ubm9fdmFsaWRhdGVfdGltZXJfc2VjID4gMCApIHtcblx0XHRcdFx0bm9fdmFsaWRhdGVfdGltZXJfc2VjID0gby5ub192YWxpZGF0ZV90aW1lcl9zZWM7XG5cdFx0XHR9XG5cdFx0XHRoYXNLZXlFdmVudCA9IG8uaGFzS2V5RXZlbnQ7XG5cdFx0XHRuZWVkX3BhcnNlcl9kYXRlID0gby5uZWVkX3BhcnNlcl9kYXRlO1xuXHRcdFx0bmVlZF9wYXJzZXJfc2VjID0gby5uZWVkX3BhcnNlcl9zZWM7XG5cblx0XHRcdGlmICggbmVlZF9wYXJzZXJfZGF0ZSB8fCBuZWVkX3BhcnNlcl9zZWMgKSB7XG5cdFx0XHRcdGFwaV9kYXRlID0gVFRBUEkuQVBJVFREYXRlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG8ubW9kZSApIHtcblx0XHRcdFx0bW9kZSA9IG8ubW9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLndpZHRoICYmICggby53aWR0aCA+IDAgfHwgby53aWR0aC5pbmRleE9mKCAnJScgKSA+IDAgKSApIHtcblx0XHRcdFx0JHRoaXMud2lkdGgoIG8ud2lkdGggKTtcblx0XHRcdFx0c3RhdGljX3dpZHRoID0gby53aWR0aDtcblx0XHRcdFx0aXNfc3RhdGljX3dpZHRoID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLmRpc2FibGVfa2V5dXBfZXZlbnQgKSB7XG5cdFx0XHRcdGRpc2FibGVfa2V5dXBfZXZlbnQgPSBvLmRpc2FibGVfa2V5dXBfZXZlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggbW9kZSA9PT0gJ3RpbWUnICkge1xuXHRcdFx0XHQkdGhpcy5zZXRQbGFjZUhvbGRlciggTG9jYWxDYWNoZURhdGEuZ2V0TG9naW5Vc2VyUHJlZmVyZW5jZSgpLnRpbWVfZm9ybWF0X2Rpc3BsYXkgKTtcblx0XHRcdH0gZWxzZSBpZiAoIG1vZGUgPT09ICd0aW1lX3VuaXQnICkge1xuXHRcdFx0XHQkdGhpcy5zZXRQbGFjZUhvbGRlciggTG9jYWxDYWNoZURhdGEuZ2V0TG9naW5Vc2VyUHJlZmVyZW5jZSgpLnRpbWVfdW5pdF9mb3JtYXRfZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdFx0JHRoaXMuYXV0b1Jlc2l6ZSgpO1xuXG5cdFx0XHQkKCB0aGlzICkua2V5ZG93biggZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHRcdC8vIGtleSBpcyBub3QgVEFCIGFuZCBFTlRFUlxuXHRcdFx0XHRpZiAoIGhhc0tleUV2ZW50ICYmIGUua2V5Q29kZSAhPT0gOSAmJiBlLmtleUNvZGUgIT09IDEzICkge1xuXHRcdFx0XHRcdCR0aGlzLnRyaWdnZXIoICdmb3JtSXRlbUtleURvd24nLCBbJHRoaXNdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSApO1xuXG5cdFx0XHQkKCB0aGlzICkua2V5dXAoIGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0XHR2YXIgdmFsaWRhdGVfc2VjID0gMTAwMDtcblx0XHRcdFx0aWYgKCBlLmtleUNvZGUgPT09IDkgfHwgZS5rZXlDb2RlID09PSAxMyApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGlzX3ZhbGlkX2lucHV0ID0gR2xvYmFsLmlzVmFsaWRJbnB1dENvZGVzKCBlLmtleUNvZGUgKTtcblx0XHRcdFx0aWYgKCAhaXNfdmFsaWRfaW5wdXQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vZG9uJ3QgY2xlYW4gZXZlbnQgd2hlbiBjbGljayB0YWJcblx0XHRcdFx0aWYgKCB2YWxpZGF0ZV90aW1lciApIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoIHZhbGlkYXRlX3RpbWVyICk7XG5cdFx0XHRcdFx0dmFsaWRhdGVfdGltZXIgPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBub192YWxpZGF0ZV90aW1lciApIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoIG5vX3ZhbGlkYXRlX3RpbWVyICk7XG5cdFx0XHRcdFx0bm9fdmFsaWRhdGVfdGltZXIgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggaGFzS2V5RXZlbnQgKSB7XG5cdFx0XHRcdFx0JHRoaXMudHJpZ2dlciggJ2Zvcm1JdGVtS2V5VXAnLCBbJHRoaXNdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlcnJvcl9zdHJpbmcgJiYgZXJyb3Jfc3RyaW5nLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRcdFx0dmFsaWRhdGVfc2VjID0gNTAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZG9fdmFsaWRhdGUgKSB7XG5cdFx0XHRcdFx0dmFsaWRhdGVfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2hlY2tfYm94ICkge1xuXHRcdFx0XHRcdFx0XHQkdGhpcy5zZXRDaGVja0JveCggdHJ1ZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBuZWVkX3BhcnNlcl9kYXRlIHx8IG5lZWRfcGFyc2VyX3NlYyApIHtcblx0XHRcdFx0XHRcdFx0cGFyc2VkX3ZhbHVlID0gLTE7IC8vIHBhcnNlIGRhdGUgd2hlbiBnZXQgdmFsdWVcblx0XHRcdFx0XHRcdFx0aWYgKCAhZGlzYWJsZV9rZXl1cF9ldmVudCApIHtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy50cmlnZ2VyKCAnZm9ybUl0ZW1DaGFuZ2UnLCBbJHRoaXMsIHRydWVdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmICggIWRpc2FibGVfa2V5dXBfZXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMudHJpZ2dlciggJ2Zvcm1JdGVtQ2hhbmdlJywgWyR0aGlzXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9LCB2YWxpZGF0ZV9zZWMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRPIG1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgc2V0IHRvIGN1cnJlbnRFZGl0UmVjb3JkIHdoZW4gdXNlciB0eXBpbmcgaXQsIGJ1dCBub3QgdHJpZ2dlciB2YWxpZGF0ZVxuXHRcdFx0XHQvLyBEbyB0aGlzIGltbWVkaWF0ZWx5IGluc3RlYWQgd2FpdCBmb3IgMzAwIG1zLlxuXHRcdFx0XHRub192YWxpZGF0ZV90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0aWYgKCBjaGVja19ib3ggKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5zZXRDaGVja0JveCggdHJ1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG5lZWRfcGFyc2VyX2RhdGUgfHwgbmVlZF9wYXJzZXJfc2VjICkge1xuXHRcdFx0XHRcdFx0cGFyc2VkX3ZhbHVlID0gLTE7IC8vIHBhcnNlIGRhdGUgd2hlbiBnZXQgdmFsdWVcblx0XHRcdFx0XHRcdGlmICggIWRpc2FibGVfa2V5dXBfZXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLnRyaWdnZXIoICdmb3JtSXRlbUNoYW5nZScsIFskdGhpcywgdHJ1ZV0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKCAhZGlzYWJsZV9rZXl1cF9ldmVudCApIHtcblx0XHRcdFx0XHRcdFx0JHRoaXMudHJpZ2dlciggJ2Zvcm1JdGVtQ2hhbmdlJywgWyR0aGlzLCB0cnVlXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgbm9fdmFsaWRhdGVfdGltZXJfc2VjICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdCQoIHRoaXMgKS5tb3VzZW92ZXIoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdGlmICggZW5hYmxlZCApIHtcblx0XHRcdFx0XHRpZiAoIGVycm9yX3N0cmluZyAmJiBlcnJvcl9zdHJpbmcubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdCR0aGlzLnNob3dFcnJvclRpcCggMjAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fSApO1xuXG5cdFx0XHQkKCB0aGlzICkubW91c2VvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEkKCAkdGhpcyApLmlzKCAnOmZvY3VzJyApICkge1xuXHRcdFx0XHRcdCR0aGlzLmhpZGVFcnJvclRpcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdCQoIHRoaXMgKS5jaGFuZ2UoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkdGhpcy50cmlnZ2VyKCAna2V5dXAnLCBbJHRoaXNdICk7XG5cdFx0XHRcdC8vIzIyMjYgLSBXaGVuIGRhdGV0aW1lIG9yIHRpbWUgdW5pdCBmaWVsZHMgc3BlY2lmeSBuZWVkX3BhcnNlcl9kYXRlIG9yIG5lZWRfcGFyc2VyX3NlYyBpdCBkb2VzIG5vdCBzZXQgZGlzYWJsZV9rZXl1cF9ldmVudCA9PSB0cnVlLiBUbyB2YWxpZGF0ZSB0aG9zZSBmaWVsZHMgb24gY2hhbmdlIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRob3NlIHZhbHVlcy5cblx0XHRcdFx0aWYgKCBkaXNhYmxlX2tleXVwX2V2ZW50IHx8IG5lZWRfcGFyc2VyX2RhdGUgfHwgbmVlZF9wYXJzZXJfc2VjICkge1xuXHRcdFx0XHRcdCR0aGlzLnRyaWdnZXIoICdmb3JtSXRlbUNoYW5nZScsIFskdGhpc10gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFuZWVkX3BhcnNlcl9kYXRlICYmICFuZWVkX3BhcnNlcl9zZWMgKSB7XG5cdFx0XHRcdFx0JHRoaXMuYXV0b1Jlc2l6ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdCQoIHRoaXMgKS5mb2N1c2luKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRpZiAoICFlbmFibGVkICkge1xuXG5cdFx0XHRcdFx0aWYgKCAhY2hlY2tfYm94ICkge1xuXHRcdFx0XHRcdFx0aWYgKCBMb2NhbENhY2hlRGF0YS5jdXJyZW50X29wZW5fc3ViX2NvbnRyb2xsZXIgJiZcblx0XHRcdFx0XHRcdFx0TG9jYWxDYWNoZURhdGEuY3VycmVudF9vcGVuX3N1Yl9jb250cm9sbGVyLmVkaXRfdmlldyAmJlxuXHRcdFx0XHRcdFx0XHRMb2NhbENhY2hlRGF0YS5jdXJyZW50X29wZW5fc3ViX2NvbnRyb2xsZXIuaXNfdmlld2luZyApIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3Jfc3RyaW5nID0gTG9jYWxDYWNoZURhdGEuY3VycmVudF9vcGVuX3N1Yl9jb250cm9sbGVyLmdldFZpZXdNb2RlRXJyb3JNZXNzYWdlKCk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLnNob3dFcnJvclRpcCggMTAgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIExvY2FsQ2FjaGVEYXRhLmN1cnJlbnRfb3Blbl9wcmltYXJ5X2NvbnRyb2xsZXIgJiZcblx0XHRcdFx0XHRcdFx0TG9jYWxDYWNoZURhdGEuY3VycmVudF9vcGVuX3ByaW1hcnlfY29udHJvbGxlci5lZGl0X3ZpZXcgJiZcblx0XHRcdFx0XHRcdFx0TG9jYWxDYWNoZURhdGEuY3VycmVudF9vcGVuX3ByaW1hcnlfY29udHJvbGxlci5pc192aWV3aW5nICkge1xuXHRcdFx0XHRcdFx0XHRlcnJvcl9zdHJpbmcgPSBMb2NhbENhY2hlRGF0YS5jdXJyZW50X29wZW5fcHJpbWFyeV9jb250cm9sbGVyLmdldFZpZXdNb2RlRXJyb3JNZXNzYWdlKCk7XG5cdFx0XHRcdFx0XHRcdCR0aGlzLnNob3dFcnJvclRpcCggMTAgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIGVycm9yX3N0cmluZyAmJiBlcnJvcl9zdHJpbmcubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdCR0aGlzLnNob3dFcnJvclRpcCggMjAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fSApO1xuXG5cdFx0XHQkKCB0aGlzICkuZm9jdXNvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkdGhpcy5oaWRlRXJyb3JUaXAoKTtcblx0XHRcdH0gKTtcblxuXHRcdH0gKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH07XG5cblx0JC5mbi5UVGV4dElucHV0LmRlZmF1bHRzID0ge307XG5cdCQuZm4uVFRleHRJbnB1dC5odG1sX3RlbXBsYXRlID0gYDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidC10ZXh0LWlucHV0XCIgYXV0b2NvbXBsZXRlPVwidGltZXRyZXgtbm8tYXV0by1maWxsXCIvPmA7XG5cbn0gKSggalF1ZXJ5ICk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9264\n")}}]);