[fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” min_height_medium=”” min_height_small=”” min_height=”” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_wrap_medium=”” flex_wrap_small=”” flex_wrap=”wrap” flex_column_spacing=”” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” publish_date=”” class=”” id=”” spacing_medium=”” margin_top_medium=”” margin_bottom_medium=”” spacing_small=”” margin_top_small=”” margin_bottom_small=”” margin_top=”” margin_bottom=”” padding_dimensions_medium=”” padding_top_medium=”” padding_right_medium=”” padding_bottom_medium=”” padding_left_medium=”” padding_dimensions_small=”” padding_top_small=”” padding_right_small=”” padding_bottom_small=”” padding_left_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” link_hover_color=”” link_color=”” border_sizes=”” border_sizes_top=”” border_sizes_right=”” border_sizes_bottom=”” border_sizes_left=”” border_color=”” border_style=”solid” border_radius_top_left=”” border_radius_top_right=”” border_radius_bottom_right=”” border_radius_bottom_left=”” box_shadow=”no” box_shadow_vertical=”” box_shadow_horizontal=”” box_shadow_blur=”0″ box_shadow_spread=”0″ box_shadow_color=”” box_shadow_style=”” z_index=”” overflow=”” background_color_medium=”” background_color_small=”” background_color=”” gradient_start_color=”” gradient_end_color=”” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_image_medium=”” background_image_small=”” background_image=”” skip_lazy_load=”” background_position_medium=”” background_position_small=”” background_position=”center center” background_repeat_medium=”” background_repeat_small=”” background_repeat=”no-repeat” background_size_medium=”” background_size_small=”” background_size=”” background_custom_size=”” background_custom_size_medium=”” background_custom_size_small=”” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode_medium=”” background_blend_mode_small=”” background_blend_mode=”none” background_slider_images=”” background_slider_position=”” background_slider_skip_lazy_loading=”no” background_slider_loop=”yes” background_slider_pause_on_hover=”no” background_slider_slideshow_speed=”5000″ background_slider_animation=”fade” background_slider_direction=”up” background_slider_animation_speed=”800″ background_slider_blend_mode=”” video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” video_preview_image=”” pattern_bg=”none” pattern_custom_bg=”” pattern_bg_color=”” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_size=”” pattern_bg_blend_mode=”normal” mask_bg=”none” mask_custom_bg=”” mask_bg_color=”” mask_bg_accent_color=”” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” render_logics=”” logics=”” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_background_color=”” sticky_height=”” sticky_offset=”” sticky_transition_offset=”0″ scroll_offset=”0″ animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=”” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ align_self=”auto” content_layout=”column” align_content=”flex-start” valign_content=”flex-start” content_wrap=”wrap” spacing=”” center_content=”no” column_tag=”div” link=”” target=”_self” link_description=”” min_height=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” type_medium=”” type_small=”” flex_grow_medium=”” flex_grow_small=”” flex_grow=”” flex_shrink_medium=”” flex_shrink_small=”” flex_shrink=”” order_medium=”0″ order_small=”0″ dimension_spacing_medium=”” dimension_spacing_small=”” dimension_spacing=”” dimension_margin_medium=”” dimension_margin_small=”” margin_top=”” margin_bottom=”” padding_medium=”” padding_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” hover_type=”none” border_sizes=”” border_color_hover=”” border_color=”” border_style=”solid” border_radius=”” box_shadow=”no” dimension_box_shadow=”” box_shadow_blur=”0″ box_shadow_spread=”0″ box_shadow_color=”” box_shadow_style=”” z_index_hover=”” z_index=”” overflow=”” background_type=”single” background_color_medium=”” background_color_small=”” background_color_medium_hover=”” background_color_small_hover=”” background_color_hover=”” background_color=”” gradient_start_color=”” gradient_end_color=”” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_image_medium=”” background_image_small=”” background_image=”” background_image_id_medium=”” background_image_id_small=”” background_image_id=”” lazy_load=”avada” skip_lazy_load=”” background_position_medium=”” background_position_small=”” background_position=”left top” background_repeat_medium=”” background_repeat_small=”” background_repeat=”no-repeat” background_size_medium=”” background_size_small=”” background_size=”” background_custom_size=”” background_custom_size_medium=”” background_custom_size_small=”” background_blend_mode_medium=”” background_blend_mode_small=”” background_blend_mode=”none” background_slider_images=”” background_slider_position=”” background_slider_skip_lazy_loading=”no” background_slider_loop=”yes” background_slider_pause_on_hover=”no” background_slider_slideshow_speed=”5000″ background_slider_animation=”fade” background_slider_direction=”up” background_slider_animation_speed=”800″ background_slider_blend_mode=”” render_logics=”” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_offset=”” absolute=”off” absolute_props=”” filter_type=”regular” filter_hover_element=”self” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″ transform_type=”regular” transform_hover_element=”self” transform_scale_x=”1″ transform_scale_y=”1″ transform_translate_x=”0″ transform_translate_y=”0″ transform_rotate=”0″ transform_skew_x=”0″ transform_skew_y=”0″ transform_scale_x_hover=”1″ transform_scale_y_hover=”1″ transform_translate_x_hover=”0″ transform_translate_y_hover=”0″ transform_rotate_hover=”0″ transform_skew_x_hover=”0″ transform_skew_y_hover=”0″ transform_origin=”” transition_duration=”300″ transition_easing=”ease” transition_custom_easing=”” motion_effects=”” scroll_motion_devices=”small-visibility,medium-visibility,large-visibility” animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=”” last=”true” border_position=”all” first=”true”][fusion_code]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogIDx0aXRsZT5XaWxzb24gUHJvIEFWTCDigKIgVXRpbGl0eSBDYWxjdWxhdG9ycyAmIFdpcmUgR3VpZGVzPC90aXRsZT4KICA8c3R5bGU+CiAgICBib2R5e2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO21hcmdpbjoycmVtO2NvbG9yOiMzMzM7fQogICAgaDF7Zm9udC1zaXplOjJyZW07bWFyZ2luLWJvdHRvbToxLjVyZW07fQogICAgaDJ7Zm9udC1zaXplOjEuNHJlbTttYXJnaW46MS41cmVtIDAgMXJlbTt9CiAgICAuc2VjdGlvbntib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxLjVyZW07bWFyZ2luLWJvdHRvbToyLjVyZW07fQogICAgLnJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbjowLjc1cmVtIDA7fQogICAgLnJvdyBsYWJlbHtmbGV4OjAgMCAyMDBweDtmb250LXdlaWdodDpib2xkO30KICAgIC5yb3cgaW5wdXQsLnJvdyBzZWxlY3R7ZmxleDoxO3BhZGRpbmc6MC41cmVtO2ZvbnQtc2l6ZToxcmVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDt9CiAgICBidXR0b257bWFyZ2luLXRvcDoxLjJyZW07cGFkZGluZzowLjc1cmVtIDEuNXJlbTtmb250LXNpemU6MXJlbTtiYWNrZ3JvdW5kOiMwMDdCRkY7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjt9CiAgICBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojMDA1NmIzO30KICAgIC5yZXN1bHR7bWFyZ2luLXRvcDoxcmVtO2ZvbnQtc2l6ZToxLjE1cmVtO2NvbG9yOiMwMDA7fQogICAgdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luLXRvcDowLjVyZW07fQogICAgdGgsdGR7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO3BhZGRpbmc6MC41cmVtO3RleHQtYWxpZ246bGVmdDtmb250LXNpemU6MC45cmVtO30KICAgIHRoe2JhY2tncm91bmQ6I2U5ZTllOTt9CiAgICAubW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO30KICAgIC5tb2RhbC1jb250ZW50e2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjZweDttYXgtd2lkdGg6NTAwcHg7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47fQogICAgLm1vZGFsLWhlYWRlcntiYWNrZ3JvdW5kOiMwMDA7cGFkZGluZzoxcmVtO3RleHQtYWxpZ246Y2VudGVyO30KICAgIC5tb2RhbC1ib2R5e3BhZGRpbmc6MS41cmVtO30KICAgIC5tb2RhbCBpbWd7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG87fQogICAgLmhpZGRlbntkaXNwbGF5Om5vbmU7fQogICAgLm5vdGV7Zm9udC1zaXplOjAuOXJlbTtjb2xvcjojNTU1O21hcmdpbi10b3A6MXJlbTt9CiAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsKICAgICAgYm9keXttYXJnaW46MXJlbTt9CiAgICAgIC5yb3d7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7fQogICAgICAucm93IGxhYmVse2ZsZXg6bm9uZTttYXJnaW4tYm90dG9tOjAuNHJlbTt9CiAgICAgIGJ1dHRvbnt3aWR0aDoxMDAlO30KICAgIH0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPGgxPldpbHNvbiBQcm8gQVZMIOKAkyBVdGlsaXR5IENhbGN1bGF0b3JzICYgV2lyZSBHdWlkZXM8L2gxPgoKPCEtLSBMaWdodGluZyBXYXR0cyDihpIgQW1wcyAtLT4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgPGgyPkxpZ2h0aW5nIFdhdHRzIOKGkiBBbXBzIENhbGN1bGF0b3I8L2gyPgogIDxkaXYgY2xhc3M9InJvdyI+PGxhYmVsIGZvcj0id2F0dHMiPlBvd2VyIChXYXR0cyk6PC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0id2F0dHMiIHBsYWNlaG9sZGVyPSJlLmcuIDE1MDAiPjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdyI+PGxhYmVsIGZvcj0idm9sdHMiPlZvbHRhZ2UgKFZvbHRzKTo8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2b2x0cyIgdmFsdWU9IjEyMCI+PC9kaXY+CiAgPGJ1dHRvbiBvbmNsaWNrPSJjYWxjV2F0dHNBbXBzKCkiPkNhbGN1bGF0ZSBBbXBzPC9idXR0b24+CiAgPGRpdiBpZD0icmVzdWx0V2F0dHMiIGNsYXNzPSJyZXN1bHQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2Pgo8L2Rpdj4KCjwhLS0gQXVkaW8gRGVsYXkgLS0+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgogIDxoMj5BdWRpbyBEZWxheSDihpQgRGlzdGFuY2U8L2gyPgogIDxkaXYgY2xhc3M9InJvdyI+PGxhYmVsIGZvcj0ibW9kZSI+TW9kZTo8L2xhYmVsPgogICAgPHNlbGVjdCBpZD0ibW9kZSI+CiAgICAgIDxvcHRpb24gdmFsdWU9ImZ0Mm1zIj5GZWV0IOKGkiBNaWxsaXNlY29uZHM8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0ibXMyZnQiPk1pbGxpc2Vjb25kcyDihpIgRmVldDwvb3B0aW9uPgogICAgPC9zZWxlY3Q+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icm93Ij48bGFiZWwgaWQ9ImxhYmVsSW5wdXQiIGZvcj0iZGVsYXlJbnB1dCI+RGlzdGFuY2UgKGZ0KTo8L2xhYmVsPgogICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImRlbGF5SW5wdXQiIHN0ZXA9IjAuMDEiPgogIDwvZGl2PgogIDxidXR0b24gb25jbGljaz0iY2FsY0RlbGF5KCkiPkNhbGN1bGF0ZTwvYnV0dG9uPgogIDxkaXYgaWQ9InJlc3VsdERlbGF5IiBjbGFzcz0icmVzdWx0IiBzdHlsZT0iZGlzcGxheTpub25lIj48L2Rpdj4KPC9kaXY+Cgo8IS0tIENyb3duIEFtcGxpZmllciBDYWxjdWxhdG9yIC0tPgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICA8aDI+Q3Jvd24gQW1wbGlmaWVyIENhbGN1bGF0b3I8L2gyPgogIDxmb3JtIGlkPSJhbXBGb3JtIj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxsYWJlbCBmb3I9InByb2R1Y3RGYW1pbHkiPlNlbGVjdCBQcm9kdWN0IEZhbWlseTo8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJwcm9kdWN0RmFtaWx5IiByZXF1aXJlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiIGRpc2FibGVkIHNlbGVjdGVkPlNlbGVjdCBhIHByb2R1Y3QgZmFtaWx5PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iQ29udHJvbCBDb250cmFjdG9yIDEwIFNlcmllcyI+Q29udHJvbCBDb250cmFjdG9yIDEwIFNlcmllczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IkNvbnRyb2wgQ29udHJhY3RvciAyMCBTZXJpZXMiPkNvbnRyb2wgQ29udHJhY3RvciAyMCBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJDb250cm9sIENvbnRyYWN0b3IgNDAgU2VyaWVzIj5Db250cm9sIENvbnRyYWN0b3IgNDAgU2VyaWVzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iQ29udHJvbCBDb250cmFjdG9yIDYwIFNlcmllcyI+Q29udHJvbCBDb250cmFjdG9yIDYwIFNlcmllczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IkNvbnRyb2wgQ29udHJhY3RvciA4MCBTZXJpZXMiPkNvbnRyb2wgQ29udHJhY3RvciA4MCBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJDb250cm9sIENvbnRyYWN0b3IgMTAwIFNlcmllcyI+Q29udHJvbCBDb250cmFjdG9yIDEwMCBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJDU1MgQ29tbWVyY2lhbCBTZXJpZXMiPkNTUyBDb21tZXJjaWFsIFNlcmllczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IlNMUCBTZXJpZXMiPlNMUCBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJDQlQgU2VyaWVzIj5DQlQgU2VyaWVzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iSW50ZWxsaXZveCBTZXJpZXMiPkludGVsbGl2b3ggU2VyaWVzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iR1NGIFNlcmllcyI+R1NGIFNlcmllczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IkdTQiBTZXJpZXMiPkdTQiBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJBRSBTZXJpZXMiPkFFIFNlcmllczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IkFFIFNlcmllcyBDb21wYWN0Ij5BRSBTZXJpZXMgQ29tcGFjdDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IkFXQyBDb21wYWN0IFNlcmllcyI+QVdDIENvbXBhY3QgU2VyaWVzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iQVcgU2VyaWVzIj5BVyBTZXJpZXM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJBRSBTZXJpZXMgU3Vid29vZmVyIj5BRSBTZXJpZXMgU3Vid29vZmVyPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8bGFiZWwgZm9yPSJzcGVha2VyTW9kZWwiPlNlbGVjdCBTcGVha2VyIE1vZGVsOjwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9InNwZWFrZXJNb2RlbCIgZGlzYWJsZWQgcmVxdWlyZWQ+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIiBkaXNhYmxlZCBzZWxlY3RlZD5TZWxlY3QgYSBwcm9kdWN0IGZhbWlseSBmaXJzdDwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGxhYmVsIGZvcj0ib2htcyI+U3BlYWtlciBJbXBlZGFuY2UgKE9obXMpOjwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9Im9obXMiIHJlcXVpcmVkPgogICAgICAgIDxvcHRpb24gdmFsdWU9IjIiPjIgT2htczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IjQiPjQgT2htczwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9IjgiPjggT2htczwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGxhYmVsIGZvcj0ibnVtU3BlYWtlcnMiPk51bWJlciBvZiBTcGVha2VycyAoMeKAkzQpOjwvbGFiZWw+CiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJudW1TcGVha2VycyIgbWluPSIxIiBtYXg9IjQiIHJlcXVpcmVkPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+Q2FsY3VsYXRlPC9idXR0b24+CiAgPC9mb3JtPgogIDxkaXYgaWQ9InJlc3VsdEFtcCIgY2xhc3M9InJlc3VsdCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9kaXY+CjwvZGl2PgoKPCEtLSBEVlMgTEVEIFZpZGVvIFdhbGwgQ2FsY3VsYXRvciAtLT4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgPGgyPkRWUyBMRUQgVmlkZW8gV2FsbCBDYWxjdWxhdG9yPC9oMj4KICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGxhYmVsIGZvcj0idW5pdCI+VW5pdCBvZiBNZWFzdXJlbWVudDo8L2xhYmVsPgogICAgPHNlbGVjdCBpZD0idW5pdCI+CiAgICAgIDxvcHRpb24gdmFsdWU9ImZlZXQiPkZlZXQ8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0ibWV0ZXJzIj5NZXRlcnM8L29wdGlvbj4KICAgIDwvc2VsZWN0PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8bGFiZWwgZm9yPSJ3aWR0aCI+V2FsbCBXaWR0aCAoPHNwYW4gaWQ9IndpZHRoLXVuaXQiPmZlZXQ8L3NwYW4+KTo8L2xhYmVsPgogICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9IndpZHRoIiBzdGVwPSIwLjEiIG1pbj0iMC4xIiBwbGFjZWhvbGRlcj0iZS5nLiAxMCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxsYWJlbCBmb3I9ImhlaWdodCI+V2FsbCBIZWlnaHQgKDxzcGFuIGlkPSJoZWlnaHQtdW5pdCI+ZmVldDwvc3Bhbj4pOjwvbGFiZWw+CiAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0iaGVpZ2h0IiBzdGVwPSIwLjEiIG1pbj0iMC4xIiBwbGFjZWhvbGRlcj0iZS5nLiA1Ij4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGxhYmVsIGZvcj0ic2VyaWVzIj5Qcm9kdWN0IFNlcmllczo8L2xhYmVsPgogICAgPHNlbGVjdCBpZD0ic2VyaWVzIj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3QgU2VyaWVzPC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IlZpenJhIj5WaXpyYSBTZXJpZXM8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iVml1U2l0ZSI+Vml1U2l0ZSBTZXJpZXM8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iRGlvUGxleCI+RGlvUGxleCBTZXJpZXM8L29wdGlvbj4KICAgIDwvc2VsZWN0PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8bGFiZWwgZm9yPSJtb2RlbCI+TW9kZWw6PC9sYWJlbD4KICAgIDxzZWxlY3QgaWQ9Im1vZGVsIiBkaXNhYmxlZD4KICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3QgYSBzZXJpZXMgZmlyc3Q8L29wdGlvbj4KICAgIDwvc2VsZWN0PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8bGFiZWwgZm9yPSJudW0td2FsbHMiPk51bWJlciBvZiBXYWxsczo8L2xhYmVsPgogICAgPHNlbGVjdCBpZD0ibnVtLXdhbGxzIj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+MTwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSIyIj4yPC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjMiPjM8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iNCI+NDwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSI1Ij41PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjYiPjY8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iNyI+Nzwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSI4Ij44PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjkiPjk8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iMTAiPjEwPC9vcHRpb24+CiAgICA8L3NlbGVjdD4KICA8L2Rpdj4KICA8YnV0dG9uIGlkPSJzaG93LW1vZGVsIiBjbGFzcz0iaGlkZGVuIiBvbmNsaWNrPSJzaG93TW9kZWxJbWFnZSgpIj5TaG93IE1vZGVsPC9idXR0b24+CiAgPGJ1dHRvbiBvbmNsaWNrPSJjYWxjVmlkZW9XYWxsKCkiPkNhbGN1bGF0ZTwvYnV0dG9uPgogIDxkaXYgaWQ9InJlc3VsdHMiIGNsYXNzPSJyZXN1bHQgaGlkZGVuIj4KICAgIDxoMz5SZXN1bHRzPC9oMz4KICAgIDxwPjxzdHJvbmc+U2VyaWVzOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVzdWx0LXNlcmllcyI+PC9zcGFuPjwvcD4KICAgIDxwPjxzdHJvbmc+TW9kZWw6PC9zdHJvbmc+IDxzcGFuIGlkPSJyZXN1bHQtbW9kZWwiPjwvc3Bhbj48L3A+CiAgICA8cD48c3Ryb25nPlBpeGVsIFBpdGNoOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVzdWx0LXBpeGVsLXBpdGNoIj48L3NwYW4+IG1tPC9wPgogICAgPHA+PHN0cm9uZz5QYW5lbCBTaXplOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVzdWx0LXBhbmVsLXNpemUiPjwvc3Bhbj4gKFcgeCBIKTwvcD4KICAgIDxwPjxzdHJvbmc+UGFuZWxzIE5lZWRlZCBwZXIgV2FsbDo8L3N0cm9uZz4gPHNwYW4gaWQ9InJlc3VsdC1wYW5lbHMiPjwvc3Bhbj4gKDxzcGFuIGlkPSJyZXN1bHQtcGFuZWxzLXgiPjwvc3Bhbj4geCA8c3BhbiBpZD0icmVzdWx0LXBhbmVscy15Ij48L3NwYW4+KTwvcD4KICAgIDxwPjxzdHJvbmc+VG90YWwgUGFuZWxzIChBbGwgV2FsbHMpOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVzdWx0LXRvdGFsLXBhbmVscyI+PC9zcGFuPjwvcD4KICAgIDxwPjxzdHJvbmc+TnVtYmVyIG9mIFdhbGxzOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVzdWx0LW51bS13YWxscyI+PC9zcGFuPjwvcD4KICAgIDxwPjxzdHJvbmc+QWN0dWFsIFdhbGwgU2l6ZSAoRWFjaCk6PC9zdHJvbmc+IDxzcGFuIGlkPSJyZXN1bHQtYWN0dWFsLXNpemUiPjwvc3Bhbj4gKFcgeCBIKTwvcD4KICAgIDxwPjxzdHJvbmc+VG90YWwgUmVzb2x1dGlvbiAoRWFjaCBXYWxsKTo8L3N0cm9uZz4gPHNwYW4gaWQ9InJlc3VsdC1yZXNvbHV0aW9uIj48L3NwYW4+IHBpeGVscyAoVyB4IEgpPC9wPgogICAgPHA+PHN0cm9uZz5NYXRlcmlhbCBDb3N0IChBbGwgV2FsbHMpOjwvc3Ryb25nPiAkPHNwYW4gaWQ9InJlc3VsdC1tYXRlcmlhbC1jb3N0Ij48L3NwYW4+PC9wPgogICAgPHAgaWQ9ImxhYm9yLWNvc3QtY29udGFpbmVyIiBjbGFzcz0iaGlkZGVuIj48c3Ryb25nPkxhYm9yIENvc3Q6PC9zdHJvbmc+ICQ8c3BhbiBpZD0icmVzdWx0LWxhYm9yLWNvc3QiPjwvc3Bhbj48L3A+CiAgICA8cD48c3Ryb25nPlByb2plY3QgU3VidG90YWwgKEFsbCBXYWxscyk6PC9zdHJvbmc+ICQ8c3BhbiBpZD0icmVzdWx0LXN1YnRvdGFsIj48L3NwYW4+PC9wPgogICAgPGJ1dHRvbiBpZD0idG9nZ2xlLWxhYm9yIiBvbmNsaWNrPSJ0b2dnbGVMYWJvckNvc3QoKSI+U2hvdyBMYWJvciBDb3N0PC9idXR0b24+CiAgICA8cCBjbGFzcz0ibm90ZSI+Tm90ZTogTGFib3IgY29zdCBpcyBlc3RpbWF0ZWQgYXQgJDI4MSBwZXIgcGFuZWwuIENvc3RzIGFyZSBlc3RpbWF0ZXM7IGNvbnRhY3QgV2lsc29uIFBybyBBVkwgZm9yIGFjY3VyYXRlIHByaWNpbmcgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcD4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIE1vZGFsIGZvciBkaXNwbGF5aW5nIG1vZGVsIGltYWdlIC0tPgo8ZGl2IGlkPSJtb2RlbC1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGRlbiI+CiAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICA8aW1nIHNyYz0iaHR0cHM6Ly93aWxzb25wcm9hdmwuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzEyL0xvZ28tV2hpdGUtU21hbGwtNDAweDEzNi5wbmciIGFsdD0iV2lsc29uUHJvIEFWTCBMb2dvIiBjbGFzcz0ibXgtYXV0byBoLTE2Ij4KICAgICAgPGgyIGlkPSJtb2RlbC10aXRsZSIgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIG10LTIiPjwvaDI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICA8aW1nIGlkPSJtb2RlbC1pbWFnZSIgc3JjPSIiIGFsdD0iTW9kZWwgSW1hZ2UiIGNsYXNzPSJtYi00Ij4KICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJjbG9zZU1vZGVsTW9kYWwoKSI+Q2xvc2U8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gRE1YL1hMUiBHdWlkZSAtLT4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgPGgyPkRNWCAmIFhMUiBQaW5vdXQgUmVmZXJlbmNlPC9oMj4KICA8aDM+RE1YICg1LXBpbik8L2gzPgogIDx0YWJsZT4KICAgIDx0cj48dGg+UGluPC90aD48dGg+RnVuY3Rpb248L3RoPjx0aD5Db2xvcjwvdGg+PC90cj4KICAgIDx0cj48dGQ+MTwvdGQ+PHRkPlNoaWVsZDwvdGQ+PHRkPlNoaWVsZDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+MjwvdGQ+PHRkPkRhdGEg4oCTPC90ZD48dGQ+Qmx1ZTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+MzwvdGQ+PHRkPkRhdGEgKzwvdGQ+PHRkPlJlZDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+NDwvdGQ+PHRkPkRhdGEgMiDigJM8L3RkPjx0ZD5HcmF5PC90ZD48L3RyPgogICAgPHRyPjx0ZD41PC90ZD48dGQ+RGF0YSAyICs8L3RkPjx0ZD5ZZWxsb3c8L3RkPjwvdHI+CiAgPC90YWJsZT4KICA8aDM+WExSICgzLXBpbik8L2gzPgogIDx0YWJsZT4KICAgIDx0cj48dGg+UGluPC90aD48dGg+RnVuY3Rpb248L3RoPjx0aD5Vc2FnZTwvdGg+PC90cj4KICAgIDx0cj48dGQ+MTwvdGQ+PHRkPkdyb3VuZDwvdGQ+PHRkPlNoaWVsZDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+MjwvdGQ+PHRkPkhvdCAvICs8L3RkPjx0ZD5CYWxhbmNlZCArPC90ZD48L3RyPgogICAgPHRyPjx0ZD4zPC90ZD48dGQ+Q29sZCAvIOKAkzwvdGQ+PHRkPkJhbGFuY2VkIOKAkzwvdGQ+PC90cj4KICA8L3RhYmxlPgo8L2Rpdj4KCjxzY3JpcHQ+Ci8qIC0tLS0tLS0tLS0gTGlnaHRpbmcgV2F0dHMg4oaSIEFtcHMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBjYWxjV2F0dHNBbXBzKCkgewogIHRyeSB7CiAgICBjb25zdCB3YXR0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dhdHRzJyk7CiAgICBjb25zdCB2b2x0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZvbHRzJyk7CiAgICBjb25zdCByZXN1bHRXYXR0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRXYXR0cycpOwogICAgaWYgKCF3YXR0c0lucHV0IHx8ICF2b2x0c0lucHV0IHx8ICFyZXN1bHRXYXR0cykgewogICAgICBjb25zb2xlLmVycm9yKCdET00gZWxlbWVudHMgZm9yIHdhdHRzIGNhbGN1bGF0b3Igbm90IGZvdW5kJyk7CiAgICAgIGFsZXJ0KCdJbnRlcm5hbCBlcnJvci4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdyA9IHBhcnNlRmxvYXQod2F0dHNJbnB1dC52YWx1ZSk7CiAgICBjb25zdCB2ID0gcGFyc2VGbG9hdCh2b2x0c0lucHV0LnZhbHVlKTsKICAgIGlmICghdyB8fCAhdikgewogICAgICBhbGVydCgnRW50ZXIgYm90aCB2YWx1ZXMuJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJlc3VsdFdhdHRzLnRleHRDb250ZW50ID0gYEN1cnJlbnQ6ICR7KHcgLyB2KS50b0ZpeGVkKDIpfSBBYDsKICAgIHJlc3VsdFdhdHRzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIH0gY2F0Y2ggKGUpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGNhbGNXYXR0c0FtcHM6JywgZSk7CiAgICBhbGVydCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsY3VsYXRpbmcuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgfQp9CgovKiAtLS0tLS0tLS0tIEF1ZGlvIERlbGF5IC0tLS0tLS0tLS0gKi8KY29uc3QgRlRfUEVSX01TID0gMS4xMzsKdHJ5IHsKICBjb25zdCBtb2RlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKICBjb25zdCBsYWJlbElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsSW5wdXQnKTsKICBpZiAobW9kZVNlbGVjdCAmJiBsYWJlbElucHV0KSB7CiAgICBtb2RlU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsKICAgICAgbGFiZWxJbnB1dC50ZXh0Q29udGVudCA9IG1vZGVTZWxlY3QudmFsdWUgPT09ICdtczJmdCcgPyAnRGVsYXkgKG1zKTonIDogJ0Rpc3RhbmNlIChmdCk6JzsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjb25zb2xlLmVycm9yKCdNb2RlIG9yIGxhYmVsIGlucHV0IG5vdCBmb3VuZCcpOwogIH0KfSBjYXRjaCAoZSkgewogIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNldHRpbmcgdXAgYXVkaW8gZGVsYXkgbW9kZSBsaXN0ZW5lcjonLCBlKTsKfQoKZnVuY3Rpb24gY2FsY0RlbGF5KCkgewogIHRyeSB7CiAgICBjb25zdCBkZWxheUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGF5SW5wdXQnKTsKICAgIGNvbnN0IG1vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgY29uc3QgcmVzdWx0RGVsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0RGVsYXknKTsKICAgIGlmICghZGVsYXlJbnB1dCB8fCAhbW9kZSB8fCAhcmVzdWx0RGVsYXkpIHsKICAgICAgY29uc29sZS5lcnJvcignRE9NIGVsZW1lbnRzIGZvciBkZWxheSBjYWxjdWxhdG9yIG5vdCBmb3VuZCcpOwogICAgICBhbGVydCgnSW50ZXJuYWwgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoZGVsYXlJbnB1dC52YWx1ZSk7CiAgICBpZiAoaXNOYU4odmFsKSkgewogICAgICBhbGVydCgnRW50ZXIgYSB2YWx1ZS4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgcmVzID0gbW9kZS52YWx1ZSA9PT0gJ2Z0Mm1zJwogICAgICA/ICh2YWwgLyBGVF9QRVJfTVMpLnRvRml4ZWQoMikgKyAnIG1zJwogICAgICA6ICh2YWwgKiBGVF9QRVJfTVMpLnRvRml4ZWQoMikgKyAnIGZ0JzsKICAgIHJlc3VsdERlbGF5LnRleHRDb250ZW50ID0gYEVxdWl2YWxlbnQ6ICR7cmVzfWA7CiAgICByZXN1bHREZWxheS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjYWxjRGVsYXk6JywgZSk7CiAgICBhbGVydCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsY3VsYXRpbmcuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgfQp9CgovKiAtLS0tLS0tLS0tIENyb3duIEFtcGxpZmllciBDYWxjdWxhdG9yIC0tLS0tLS0tLS0gKi8KY29uc3QgYW1wbGlmaWVycyA9IFsKICB7IG1vZGVsOiAiQ0RpIDJ8MzAwIiwgc2VyaWVzOiAiQ0RpIERyaXZlQ29yZSIsIHBvd2VyNE9obTogMzAwIH0sCiAgeyBtb2RlbDogIkNEaSAyfDYwMCIsIHNlcmllczogIkNEaSBEcml2ZUNvcmUiLCBwb3dlcjRPaG06IDYwMCB9LAogIHsgbW9kZWw6ICJDRGkgMnwxMjAwIiwgc2VyaWVzOiAiQ0RpIERyaXZlQ29yZSIsIHBvd2VyNE9obTogMTIwMCB9LAogIHsgbW9kZWw6ICJDRGkgMnwyNDAwIiwgc2VyaWVzOiAiQ0RpIERyaXZlQ29yZSIsIHBvd2VyNE9obTogMjQwMCB9LAogIHsgbW9kZWw6ICJDRGkgNHwzMDAiLCBzZXJpZXM6ICJDRGkgRHJpdmVDb3JlIiwgcG93ZXI0T2htOiAzMDAgfSwKICB7IG1vZGVsOiAiQ0RpIDR8NjAwIiwgc2VyaWVzOiAiQ0RpIERyaXZlQ29yZSIsIHBvd2VyNE9obTogNjAwIH0sCiAgeyBtb2RlbDogIkNEaSA0fDEyMDAiLCBzZXJpZXM6ICJDRGkgRHJpdmVDb3JlIiwgcG93ZXI0T2htOiAxMjAwIH0sCiAgeyBtb2RlbDogIkNEaSA0fDI0MDAiLCBzZXJpZXM6ICJDRGkgRHJpdmVDb3JlIiwgcG93ZXI0T2htOiAyNDAwIH0sCiAgeyBtb2RlbDogIkNEaSAxMDAwIiwgc2VyaWVzOiAiQ0RpIiwgcG93ZXI0T2htOiA1MDAgfSwKICB7IG1vZGVsOiAiQ0RpIDIwMDAiLCBzZXJpZXM6ICJDRGkiLCBwb3dlcjRPaG06IDgwMCB9LAogIHsgbW9kZWw6ICJDRGkgNDAwMCIsIHNlcmllczogIkNEaSIsIHBvd2VyNE9obTogMTIwMCB9LAogIHsgbW9kZWw6ICJDRGkgNjAwMCIsIHNlcmllczogIkNEaSIsIHBvd2VyNE9obTogMjEwMCB9LAogIHsgbW9kZWw6ICJDVDQ3NSIsIHNlcmllczogIkNvbVRlY2giLCBwb3dlcjRPaG06IDc1IH0sCiAgeyBtb2RlbDogIkNUNDE1MCIsIHNlcmllczogIkNvbVRlY2giLCBwb3dlcjRPaG06IDE1MCB9LAogIHsgbW9kZWw6ICJDVDg3NSIsIHNlcmllczogIkNvbVRlY2giLCBwb3dlcjRPaG06IDc1IH0sCiAgeyBtb2RlbDogIkNUODE1MCIsIHNlcmllczogIkNvbVRlY2giLCBwb3dlcjRPaG06IDE1MCB9LAogIHsgbW9kZWw6ICJEQ2kgMnwzMDBOIiwgc2VyaWVzOiAiRHJpdmVDb3JlIEluc3RhbGwgTmV0d29yayIsIHBvd2VyNE9obTogMzAwIH0sCiAgeyBtb2RlbDogIkRDaSAyfDYwME4iLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiA2MDAgfSwKICB7IG1vZGVsOiAiRENpIDJ8MTI1ME4iLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAxMjUwIH0sCiAgeyBtb2RlbDogIkRDaSAyfDI0MDBOIiwgc2VyaWVzOiAiRHJpdmVDb3JlIEluc3RhbGwgTmV0d29yayIsIHBvd2VyNE9obTogMjQwMCB9LAogIHsgbW9kZWw6ICJEQ2kgNHwzMDAiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAzMDAgfSwKICB7IG1vZGVsOiAiRENpIDR8NjAwIiwgc2VyaWVzOiAiRHJpdmVDb3JlIEluc3RhbGwgTmV0d29yayIsIHBvd2VyNE9obTogNjAwIH0sCiAgeyBtb2RlbDogIkRDaSA0fDEyNTAiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAxMjUwIH0sCiAgeyBtb2RlbDogIkRDaSA0fDI0MDAiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAyNDAwIH0sCiAgeyBtb2RlbDogIkRDaSA0fDMwME4iLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAzMDAgfSwKICB7IG1vZGVsOiAiRENpIDR8NjAwTiIsIHNlcmllczogIkRyaXZlQ29yZSBJbnN0YWxsIE5ldHdvcmsiLCBwb3dlcjRPaG06IDYwMCB9LAogIHsgbW9kZWw6ICJEQ2kgNHwxMjUwTiIsIHNlcmllczogIkRyaXZlQ29yZSBJbnN0YWxsIE5ldHdvcmsiLCBwb3dlcjRPaG06IDEyNTAgfSwKICB7IG1vZGVsOiAiRENpIDR8MjQwME4iLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiAyNDAwIH0sCiAgeyBtb2RlbDogIkRDaSA4fDMwMCIsIHNlcmllczogIkRyaXZlQ29yZSBJbnN0YWxsIE5ldHdvcmsiLCBwb3dlcjRPaG06IDMwMCB9LAogIHsgbW9kZWw6ICJEQ2kgOHw2MDAiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIiwgcG93ZXI0T2htOiA2MDAgfSwKICB7IG1vZGVsOiAiRENpIDh8MzAwTiIsIHNlcmllczogIkRyaXZlQ29yZSBJbnN0YWxsIE5ldHdvcmsiLCBwb3dlcjRPaG06IDMwMCB9LAogIHsgbW9kZWw6ICJEQ2kgOHw2MDBOIiwgc2VyaWVzOiAiRHJpdmVDb3JlIEluc3RhbGwgTmV0d29yayIsIHBvd2VyNE9obTogNjAwIH0sCiAgeyBtb2RlbDogIkRDaSA0fDMwMERBIiwgc2VyaWVzOiAiRHJpdmVDb3JlIEluc3RhbGwgTmV0d29yayAoRGFudGUpIiwgcG93ZXI0T2htOiAzMDAgfSwKICB7IG1vZGVsOiAiRENpIDR8NjAwREEiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIChEYW50ZSkiLCBwb3dlcjRPaG06IDYwMCB9LAogIHsgbW9kZWw6ICJEQ2kgNHwxMjUwREEiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIChEYW50ZSkiLCBwb3dlcjRPaG06IDEyNTAgfSwKICB7IG1vZGVsOiAiRENpIDh8MzAwREEiLCBzZXJpZXM6ICJEcml2ZUNvcmUgSW5zdGFsbCBOZXR3b3JrIChEYW50ZSkiLCBwb3dlcjRPaG06IDMwMCB9LAogIHsgbW9kZWw6ICJEQ2kgOHw2MDBEQSIsIHNlcmllczogIkRyaXZlQ29yZSBJbnN0YWxsIE5ldHdvcmsgKERhbnRlKSIsIHBvd2VyNE9obTogNjAwIH0sCiAgeyBtb2RlbDogIkktVGVjaCA1MDAwSEQiLCBzZXJpZXM6ICJpLVRlY2ggSEQiLCBwb3dlcjRPaG06IDI1MDAgfSwKICB7IG1vZGVsOiAiSS1UZWNoIDkwMDBIRCIsIHNlcmllczogImktVGVjaCBIRCIsIHBvd2VyNE9obTogMzUwMCB9LAogIHsgbW9kZWw6ICJJLVRlY2ggMTIwMDBIRCIsIHNlcmllczogImktVGVjaCBIRCIsIHBvd2VyNE9obTogNDUwMCB9LAogIHsgbW9kZWw6ICJJLVRlY2ggNHgzNTAwSEQiLCBzZXJpZXM6ICJpLVRlY2ggSEQiLCBwb3dlcjRPaG06IDM1MDAgfSwKICB7IG1vZGVsOiAiWExTIDEwMDIiLCBzZXJpZXM6ICJYTFMgRHJpdmVDb3JlIDIiLCBwb3dlcjRPaG06IDM1MCB9LAogIHsgbW9kZWw6ICJYTFMgMTUwMiIsIHNlcmllczogIlhMUyBEcml2ZUNvcmUgMiIsIHBvd2VyNE9obTogNTI1IH0sCiAgeyBtb2RlbDogIlhMUyAyMDAyIiwgc2VyaWVzOiAiWExTIERyaXZlQ29yZSAyIiwgcG93ZXI0T2htOiA2NTAgfSwKICB7IG1vZGVsOiAiWExTIDI1MDIiLCBzZXJpZXM6ICJYTFMgRHJpdmVDb3JlIDIiLCBwb3dlcjRPaG06IDc3NSB9LAogIHsgbW9kZWw6ICJYTGkgODAwIiwgc2VyaWVzOiAiWExpIiwgcG93ZXI0T2htOiAzMDAgfSwKICB7IG1vZGVsOiAiWExpIDE1MDAiLCBzZXJpZXM6ICJYTGkiLCBwb3dlcjRPaG06IDQ1MCB9LAogIHsgbW9kZWw6ICJYTGkgMjUwMCIsIHNlcmllczogIlhMaSIsIHBvd2VyNE9obTogNzUwIH0sCiAgeyBtb2RlbDogIlhMaSAzNTAwIiwgc2VyaWVzOiAiWExpIiwgcG93ZXI0T2htOiAxMzUwIH0sCiAgeyBtb2RlbDogIlhUaSAxMDAyIiwgc2VyaWVzOiAiWFRpIDIiLCBwb3dlcjRPaG06IDUwMCB9LAogIHsgbW9kZWw6ICJYVGkgMjAwMiIsIHNlcmllczogIlhUaSAyIiwgcG93ZXI0T2htOiA4MDAgfSwKICB7IG1vZGVsOiAiWFRpIDQwMDIiLCBzZXJpZXM6ICJYVGkgMiIsIHBvd2VyNE9obTogMTIwMCB9LAogIHsgbW9kZWw6ICJYVGkgNjAwMiIsIHNlcmllczogIlhUaSAyIiwgcG93ZXI0T2htOiAyMTAwIH0sCiAgeyBtb2RlbDogIk1BIDUwMDBpIiwgc2VyaWVzOiAiTWFjcm8tVGVjaCBpIiwgcG93ZXI0T2htOiAyNTAwIH0sCiAgeyBtb2RlbDogIk1BIDkwMDBpIiwgc2VyaWVzOiAiTWFjcm8tVGVjaCBpIiwgcG93ZXI0T2htOiAzNTAwIH0sCiAgeyBtb2RlbDogIk1BIDEyMDAwaSIsIHNlcmllczogIk1hY3JvLVRlY2ggaSIsIHBvd2VyNE9obTogNDUwMCB9Cl07Cgpjb25zdCBzcGVha2VycyA9IFsKICB7IG1vZGVsOiAiQ29udHJvbCAxMkMvVCIsIHNlcmllczogIkNvbnRyb2wgQ29udHJhY3RvciAxMCBTZXJpZXMiLCBwb3dlcjogMTUsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDb250cm9sIDE0Qy9UIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDEwIFNlcmllcyIsIHBvd2VyOiAyNSwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNvbnRyb2wgMTZDL1QiLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgMTAgU2VyaWVzIiwgcG93ZXI6IDMwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCAyNENUIE1pY3JvIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDIwIFNlcmllcyIsIHBvd2VyOiAxNSwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNvbnRyb2wgMjZDVCIsIHNlcmllczogIkNvbnRyb2wgQ29udHJhY3RvciAyMCBTZXJpZXMiLCBwb3dlcjogNjAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDb250cm9sIDIzLTEiLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgMjAgU2VyaWVzIiwgcG93ZXI6IDUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCAyNS0xIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDIwIFNlcmllcyIsIHBvd2VyOiAxMDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDb250cm9sIDI4LTEiLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgMjAgU2VyaWVzIiwgcG93ZXI6IDEyMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNvbnRyb2wgMjVBViIsIHNlcmllczogIkNvbnRyb2wgQ29udHJhY3RvciAyMCBTZXJpZXMiLCBwb3dlcjogMTAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCBTQi0yIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDIwIFNlcmllcyIsIHBvd2VyOiAxNzUsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDb250cm9sIDQwQ1MvVCIsIHNlcmllczogIkNvbnRyb2wgQ29udHJhY3RvciA0MCBTZXJpZXMiLCBwb3dlcjogODAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDb250cm9sIDY1UC9UIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDYwIFNlcmllcyIsIHBvd2VyOiA2MCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNvbnRyb2wgNjdQL1QiLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgNjAgU2VyaWVzIiwgcG93ZXI6IDc1LCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCA2N0hDL1QiLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgNjAgU2VyaWVzIiwgcG93ZXI6IDc1LCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCA4NU0iLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgODAgU2VyaWVzIiwgcG93ZXI6IDgwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCA4OE0iLCBzZXJpZXM6ICJDb250cm9sIENvbnRyYWN0b3IgODAgU2VyaWVzIiwgcG93ZXI6IDEyMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNvbnRyb2wgMTI2Vy9XVCIsIHNlcmllczogIkNvbnRyb2wgQ29udHJhY3RvciAxMDAgU2VyaWVzIiwgcG93ZXI6IDUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ29udHJvbCAxMjhXL1dUIiwgc2VyaWVzOiAiQ29udHJvbCBDb250cmFjdG9yIDEwMCBTZXJpZXMiLCBwb3dlcjogNjAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDU1MtODAwNCIsIHNlcmllczogIkNTUyBDb21tZXJjaWFsIFNlcmllcyIsIHBvd2VyOiAyMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNTUy04MDA4Iiwgc2VyaWVzOiAiQ1NTIENvbW1lcmNpYWwgU2VyaWVzIiwgcG93ZXI6IDMwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQ1NTLTgwMTgiLCBzZXJpZXM6ICJDU1MgQ29tbWVyY2lhbCBTZXJpZXMiLCBwb3dlcjogNDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDU1MtMVMvVCIsIHNlcmllczogIkNTUyBDb21tZXJjaWFsIFNlcmllcyIsIHBvd2VyOiA2MCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIlNMUDEyL1QiLCBzZXJpZXM6ICJTTFAgU2VyaWVzIiwgcG93ZXI6IDUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiU0xQMTQvVCIsIHNlcmllczogIlNMUCBTZXJpZXMiLCBwb3dlcjogNjAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDQlQgNTBMQS0xIiwgc2VyaWVzOiAiQ0JUIFNlcmllcyIsIHBvd2VyOiAxNTAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDQlQgNzBKLTEiLCBzZXJpZXM6ICJDQlQgU2VyaWVzIiwgcG93ZXI6IDI1MCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkNCVCAxMDBMQS0xIiwgc2VyaWVzOiAiQ0JUIFNlcmllcyIsIHBvd2VyOiAyMDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJDQlQgMjAwTEEtMSIsIHNlcmllczogIkNCVCBTZXJpZXMiLCBwb3dlcjogMzAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiSW50ZWxsaXZveCBEU1gyODAgSEQiLCBzZXJpZXM6ICJJbnRlbGxpdm94IFNlcmllcyIsIHBvd2VyOiAyMDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJJbnRlbGxpdm94IERTWDQzMCBIRCIsIHNlcmllczogIkludGVsbGl2b3ggU2VyaWVzIiwgcG93ZXI6IDMwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkdTRjMiLCBzZXJpZXM6ICJHU0YgU2VyaWVzIiwgcG93ZXI6IDUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiR1NGNiIsIHNlcmllczogIkdTRiBTZXJpZXMiLCBwb3dlcjogODAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJHU0Y4Iiwgc2VyaWVzOiAiR1NGIFNlcmllcyIsIHBvd2VyOiAxMDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJHU0I4Iiwgc2VyaWVzOiAiR1NCIFNlcmllcyIsIHBvd2VyOiAyMDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJHU0IxMiIsIHNlcmllczogIkdTQiBTZXJpZXMiLCBwb3dlcjogMzAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQU01MjEyLzY0Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIiwgcG93ZXI6IDQwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFNNTIxMi85NSIsIHNlcmllczogIkFFIFNlcmllcyIsIHBvd2VyOiA0MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBTTUyMTIvMjYiLCBzZXJpZXM6ICJBRSBTZXJpZXMiLCBwb3dlcjogNDAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQU01MjE1LzY0Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIiwgcG93ZXI6IDUwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFNNTIxNS85NSIsIHNlcmllczogIkFFIFNlcmllcyIsIHBvd2VyOiA1MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBTTcyMTIvNjQiLCBzZXJpZXM6ICJBRSBTZXJpZXMiLCBwb3dlcjogNjAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQU03MjEyLzk1Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIiwgcG93ZXI6IDYwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFNNzIxMi8wMCIsIHNlcmllczogIkFFIFNlcmllcyIsIHBvd2VyOiA2MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBTTcyMTIvMjYiLCBzZXJpZXM6ICJBRSBTZXJpZXMiLCBwb3dlcjogNjAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQU03MjE1LzY0Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIiwgcG93ZXI6IDY1MCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFNNzIxNS85NSIsIHNlcmllczogIkFFIFNlcmllcyIsIHBvd2VyOiA2NTAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBTTczMTUvOTUiLCBzZXJpZXM6ICJBRSBTZXJpZXMiLCBwb3dlcjogODAwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQUMxNiIsIHNlcmllczogIkFFIFNlcmllcyBDb21wYWN0IiwgcG93ZXI6IDIwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFDMTgvOTUiLCBzZXJpZXM6ICJBRSBTZXJpZXMgQ29tcGFjdCIsIHBvd2VyOiAyNTAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBQzE4LzI2Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIENvbXBhY3QiLCBwb3dlcjogMjUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQUMyNiIsIHNlcmllczogIkFFIFNlcmllcyBDb21wYWN0IiwgcG93ZXI6IDMwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFDMjgvOTUiLCBzZXJpZXM6ICJBRSBTZXJpZXMgQ29tcGFjdCIsIHBvd2VyOiAzNTAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBQzI4LzI2Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIENvbXBhY3QiLCBwb3dlcjogMzUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQVdDODIiLCBzZXJpZXM6ICJBV0MgQ29tcGFjdCBTZXJpZXMiLCBwb3dlcjogMjUwLCBpbXBlZGFuY2U6IDggfSwKICB7IG1vZGVsOiAiQVdDMTI5Iiwgc2VyaWVzOiAiQVdDIENvbXBhY3QgU2VyaWVzIiwgcG93ZXI6IDQwMCwgaW1wZWRhbmNlOiA4IH0sCiAgeyBtb2RlbDogIkFXQzE1OSIsIHNlcmllczogIkFXQyBDb21wYWN0IFNlcmllcyIsIHBvd2VyOiA1MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBVzI5NSIsIHNlcmllczogIkFXIFNlcmllcyIsIHBvd2VyOiA1MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBVzU5NSIsIHNlcmllczogIkFXIFNlcmllcyIsIHBvd2VyOiA2MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBU0I2MTE4Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIFN1Yndvb2ZlciIsIHBvd2VyOiA4MDAsIGltcGVkYW5jZTogOCB9LAogIHsgbW9kZWw6ICJBU0I2MTI4Iiwgc2VyaWVzOiAiQUUgU2VyaWVzIFN1Yndvb2ZlciIsIHBvd2VyOiAxMjAwLCBpbXBlZGFuY2U6IDggfQpdOwoKLy8gRHJvcGRvd24gYW5kIE9obXMgTG9naWMKdHJ5IHsKICBjb25zdCBwcm9kdWN0RmFtaWx5U2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3RGYW1pbHknKTsKICBjb25zdCBzcGVha2VyTW9kZWxTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3BlYWtlck1vZGVsJyk7CiAgY29uc3Qgb2htc1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvaG1zJyk7CiAgY29uc3QgbnVtU3BlYWtlcnNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdudW1TcGVha2VycycpOwoKICBmdW5jdGlvbiB1cGRhdGVTcGVha2VyRHJvcGRvd24oZmFtaWx5KSB7CiAgICBpZiAoIXNwZWFrZXJNb2RlbFNlbGVjdCB8fCAhb2htc1NlbGVjdCkgewogICAgICBjb25zb2xlLmVycm9yKCdTcGVha2VyIG1vZGVsIG9yIG9obXMgc2VsZWN0IG5vdCBmb3VuZCcpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzcGVha2VyTW9kZWxTZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9IiIgZGlzYWJsZWQgc2VsZWN0ZWQ+U2VsZWN0IGEgc3BlYWtlciBtb2RlbDwvb3B0aW9uPic7CiAgICBzcGVha2VyTW9kZWxTZWxlY3QuZGlzYWJsZWQgPSAhZmFtaWx5OwogICAgaWYgKGZhbWlseSkgewogICAgICBjb25zdCBmaWx0ZXJlZFNwZWFrZXJzID0gc3BlYWtlcnMuZmlsdGVyKHNwZWFrZXIgPT4gc3BlYWtlci5zZXJpZXMgPT09IGZhbWlseSk7CiAgICAgIGZpbHRlcmVkU3BlYWtlcnMuZm9yRWFjaChzcGVha2VyID0+IHsKICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICBvcHRpb24udmFsdWUgPSBgJHtzcGVha2VyLm1vZGVsfXwke3NwZWFrZXIuc2VyaWVzfXwke3NwZWFrZXIucG93ZXJ9fCR7c3BlYWtlci5pbXBlZGFuY2V9YDsKICAgICAgICBvcHRpb24udGV4dCA9IGAke3NwZWFrZXIubW9kZWx9ICgke3NwZWFrZXIuc2VyaWVzfSwgJHtzcGVha2VyLnBvd2VyfVcsICR7c3BlYWtlci5pbXBlZGFuY2V9zqkpYDsKICAgICAgICBzcGVha2VyTW9kZWxTZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgfSk7CiAgICB9CiAgICBvaG1zU2VsZWN0LnZhbHVlID0gJyc7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVPaG1zKHNwZWFrZXJJbXBlZGFuY2UsIG51bVNwZWFrZXJzKSB7CiAgICBpZiAoIXNwZWFrZXJJbXBlZGFuY2UgfHwgIW51bVNwZWFrZXJzIHx8ICFvaG1zU2VsZWN0KSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgaW1wZWRhbmNlIG9yIG51bVNwZWFrZXJzLCBvciBvaG1zIHNlbGVjdCBub3QgZm91bmQnKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZWZmZWN0aXZlSW1wZWRhbmNlID0gc3BlYWtlckltcGVkYW5jZSAvIG51bVNwZWFrZXJzOwogICAgaWYgKGVmZmVjdGl2ZUltcGVkYW5jZSA+PSA2KSB7CiAgICAgIG9obXNTZWxlY3QudmFsdWUgPSA4OwogICAgfSBlbHNlIGlmIChlZmZlY3RpdmVJbXBlZGFuY2UgPj0gMykgewogICAgICBvaG1zU2VsZWN0LnZhbHVlID0gNDsKICAgIH0gZWxzZSB7CiAgICAgIG9obXNTZWxlY3QudmFsdWUgPSAyOwogICAgfQogIH0KCiAgaWYgKHByb2R1Y3RGYW1pbHlTZWxlY3QpIHsKICAgIHByb2R1Y3RGYW1pbHlTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgdXBkYXRlU3BlYWtlckRyb3Bkb3duKGUudGFyZ2V0LnZhbHVlKTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjb25zb2xlLmVycm9yKCdwcm9kdWN0RmFtaWx5IHNlbGVjdCBub3QgZm91bmQnKTsKICB9CgogIGlmIChzcGVha2VyTW9kZWxTZWxlY3QpIHsKICAgIHNwZWFrZXJNb2RlbFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICBjb25zdCBzcGVha2VyRGF0YSA9IGUudGFyZ2V0LnZhbHVlLnNwbGl0KCd8Jyk7CiAgICAgIGNvbnN0IHNwZWFrZXJJbXBlZGFuY2UgPSBwYXJzZUZsb2F0KHNwZWFrZXJEYXRhWzNdKTsKICAgICAgaWYgKHNwZWFrZXJJbXBlZGFuY2UgJiYgb2htc1NlbGVjdCkgewogICAgICAgIG9obXNTZWxlY3QudmFsdWUgPSBzcGVha2VySW1wZWRhbmNlOwogICAgICAgIGNvbnN0IG51bVNwZWFrZXJzID0gcGFyc2VJbnQobnVtU3BlYWtlcnNJbnB1dCA/IG51bVNwZWFrZXJzSW5wdXQudmFsdWUgOiAwKTsKICAgICAgICBpZiAobnVtU3BlYWtlcnMpIHsKICAgICAgICAgIHVwZGF0ZU9obXMoc3BlYWtlckltcGVkYW5jZSwgbnVtU3BlYWtlcnMpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSBlbHNlIHsKICAgIGNvbnNvbGUuZXJyb3IoJ3NwZWFrZXJNb2RlbCBzZWxlY3Qgbm90IGZvdW5kJyk7CiAgfQoKICBpZiAobnVtU3BlYWtlcnNJbnB1dCkgewogICAgbnVtU3BlYWtlcnNJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHsKICAgICAgY29uc3QgbnVtU3BlYWtlcnMgPSBwYXJzZUludChudW1TcGVha2Vyc0lucHV0LnZhbHVlKTsKICAgICAgaWYgKHNwZWFrZXJNb2RlbFNlbGVjdCAmJiBzcGVha2VyTW9kZWxTZWxlY3QudmFsdWUpIHsKICAgICAgICBjb25zdCBzcGVha2VyRGF0YSA9IHNwZWFrZXJNb2RlbFNlbGVjdC52YWx1ZS5zcGxpdCgnfCcpOwogICAgICAgIGNvbnN0IHNwZWFrZXJJbXBlZGFuY2UgPSBwYXJzZUZsb2F0KHNwZWFrZXJEYXRhWzNdKTsKICAgICAgICBpZiAoc3BlYWtlckltcGVkYW5jZSAmJiBudW1TcGVha2VycykgewogICAgICAgICAgdXBkYXRlT2htcyhzcGVha2VySW1wZWRhbmNlLCBudW1TcGVha2Vycyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9IGVsc2UgewogICAgY29uc29sZS5lcnJvcignbnVtU3BlYWtlcnMgaW5wdXQgbm90IGZvdW5kJyk7CiAgfQp9IGNhdGNoIChlKSB7CiAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZHJvcGRvd24vb2htcyBsb2dpYzonLCBlKTsKfQoKLy8gQ2FsY3VsYXRvciBMb2dpYwpmdW5jdGlvbiBjYWxjdWxhdGVQb3dlckF0T2htcyhiYXNlUG93ZXIsIGJhc2VPaG1zLCB0YXJnZXRPaG1zKSB7CiAgdHJ5IHsKICAgIGlmICghYmFzZVBvd2VyIHx8ICFiYXNlT2htcyB8fCAhdGFyZ2V0T2htcykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycyBmb3IgY2FsY3VsYXRlUG93ZXJBdE9obXMnKTsKICAgIH0KICAgIHJldHVybiBiYXNlUG93ZXIgKiAoYmFzZU9obXMgLyB0YXJnZXRPaG1zKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjYWxjdWxhdGVQb3dlckF0T2htczonLCBlKTsKICAgIHJldHVybiAwOwogIH0KfQoKZnVuY3Rpb24gZmluZEFtcGxpZmllcihzcGVha2VyV2F0dHMsIG9obXMsIG51bVNwZWFrZXJzKSB7CiAgdHJ5IHsKICAgIGNvbnN0IHRvdGFsUG93ZXJOZWVkZWQgPSBzcGVha2VyV2F0dHMgKiBudW1TcGVha2VycyAqIDEuMjU7CiAgICBsZXQgYmVzdEFtcCA9IG51bGw7CiAgICBsZXQgbWluUG93ZXJEaWZmID0gSW5maW5pdHk7CgogICAgYW1wbGlmaWVycy5mb3JFYWNoKGFtcCA9PiB7CiAgICAgIGxldCBhbXBQb3dlciA9IGFtcC5wb3dlcjRPaG07CiAgICAgIGlmIChvaG1zICE9PSA0KSB7CiAgICAgICAgYW1wUG93ZXIgPSBjYWxjdWxhdGVQb3dlckF0T2htcyhhbXAucG93ZXI0T2htLCA0LCBvaG1zKTsKICAgICAgfQogICAgICBjb25zdCBzcGVha2Vyc1BlckNoYW5uZWwgPSBNYXRoLmNlaWwobnVtU3BlYWtlcnMgLyAyKTsKICAgICAgY29uc3QgcG93ZXJQZXJDaGFubmVsTmVlZGVkID0gdG90YWxQb3dlck5lZWRlZCAvIDI7CiAgICAgIGlmIChhbXBQb3dlciA+PSBwb3dlclBlckNoYW5uZWxOZWVkZWQgJiYgKGFtcFBvd2VyIC0gcG93ZXJQZXJDaGFubmVsTmVlZGVkKSA8IG1pblBvd2VyRGlmZikgewogICAgICAgIGJlc3RBbXAgPSBhbXA7CiAgICAgICAgbWluUG93ZXJEaWZmID0gYW1wUG93ZXIgLSBwb3dlclBlckNoYW5uZWxOZWVkZWQ7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBiZXN0QW1wOwogIH0gY2F0Y2ggKGUpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGZpbmRBbXBsaWZpZXI6JywgZSk7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCnRyeSB7CiAgY29uc3QgYW1wRm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbXBGb3JtJyk7CiAgaWYgKGFtcEZvcm0pIHsKICAgIGFtcEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgc3BlYWtlck1vZGVsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWFrZXJNb2RlbCcpOwogICAgICAgIGNvbnN0IG9obXNTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb2htcycpOwogICAgICAgIGNvbnN0IG51bVNwZWFrZXJzSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtU3BlYWtlcnMnKTsKICAgICAgICBjb25zdCByZXN1bHREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0QW1wJyk7CgogICAgICAgIGlmICghc3BlYWtlck1vZGVsU2VsZWN0IHx8ICFvaG1zU2VsZWN0IHx8ICFudW1TcGVha2Vyc0lucHV0IHx8ICFyZXN1bHREaXYpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RPTSBlbGVtZW50cyBmb3IgYW1wIGZvcm0gbm90IGZvdW5kJyk7CiAgICAgICAgICBhbGVydCgnSW50ZXJuYWwgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHNwZWFrZXJNb2RlbFNlbGVjdC5vcHRpb25zW3NwZWFrZXJNb2RlbFNlbGVjdC5zZWxlY3RlZEluZGV4XTsKICAgICAgICBjb25zdCBzcGVha2VyRGF0YSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlID8gc2VsZWN0ZWRPcHRpb24udmFsdWUuc3BsaXQoJ3wnKSA6IG51bGw7CiAgICAgICAgY29uc3Qgc3BlYWtlcldhdHRzID0gc3BlYWtlckRhdGEgPyBwYXJzZUZsb2F0KHNwZWFrZXJEYXRhWzJdKSA6IE5hTjsKICAgICAgICBjb25zdCBvaG1zID0gcGFyc2VGbG9hdChvaG1zU2VsZWN0LnZhbHVlKTsKICAgICAgICBjb25zdCBudW1TcGVha2VycyA9IHBhcnNlSW50KG51bVNwZWFrZXJzSW5wdXQudmFsdWUpOwoKICAgICAgICBpZiAoIXNwZWFrZXJEYXRhIHx8IGlzTmFOKHNwZWFrZXJXYXR0cykgfHwgaXNOYU4ob2htcykgfHwgaXNOYU4obnVtU3BlYWtlcnMpKSB7CiAgICAgICAgICByZXN1bHREaXYudGV4dENvbnRlbnQgPSAnUGxlYXNlIHNlbGVjdCBhIHByb2R1Y3QgZmFtaWx5LCBzcGVha2VyIG1vZGVsLCBpbXBlZGFuY2UsIGFuZCBudW1iZXIgb2Ygc3BlYWtlcnMuJzsKICAgICAgICAgIHJlc3VsdERpdi5zdHlsZS5jb2xvciA9ICcjZGMzNTQ1JzsKICAgICAgICAgIHJlc3VsdERpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChudW1TcGVha2VycyA+IDQgfHwgbnVtU3BlYWtlcnMgPCAxKSB7CiAgICAgICAgICByZXN1bHREaXYudGV4dENvbnRlbnQgPSAnTnVtYmVyIG9mIHNwZWFrZXJzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0Lic7CiAgICAgICAgICByZXN1bHREaXYuc3R5bGUuY29sb3IgPSAnI2RjMzU0NSc7CiAgICAgICAgICByZXN1bHREaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBjb25zdCByZWNvbW1lbmRlZEFtcCA9IGZpbmRBbXBsaWZpZXIoc3BlYWtlcldhdHRzLCBvaG1zLCBudW1TcGVha2Vycyk7CgogICAgICAgIGlmIChyZWNvbW1lbmRlZEFtcCkgewogICAgICAgICAgY29uc3QgcG93ZXJBdE9obXMgPSBjYWxjdWxhdGVQb3dlckF0T2htcyhyZWNvbW1lbmRlZEFtcC5wb3dlcjRPaG0sIDQsIG9obXMpLnRvRml4ZWQoMCk7CiAgICAgICAgICByZXN1bHREaXYuaW5uZXJIVE1MID0gYAogICAgICAgICAgICBSZWNvbW1lbmRlZCBBbXBsaWZpZXIgZm9yICR7c3BlYWtlckRhdGFbMF19Ojxicj4KICAgICAgICAgICAgJHtyZWNvbW1lbmRlZEFtcC5tb2RlbH0gKCR7cmVjb21tZW5kZWRBbXAuc2VyaWVzfSk8YnI+CiAgICAgICAgICAgIFBvd2VyIHBlciBjaGFubmVsIGF0ICR7b2htc33OqTogJHtwb3dlckF0T2htc31XPGJyPgogICAgICAgICAgICBUb3RhbCBwb3dlciBuZWVkZWQ6ICR7KHNwZWFrZXJXYXR0cyAqIG51bVNwZWFrZXJzICogMS4yNSkudG9GaXhlZCgwKX1XCiAgICAgICAgICBgOwogICAgICAgICAgcmVzdWx0RGl2LnN0eWxlLmNvbG9yID0gJyMyOGE3NDUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHREaXYudGV4dENvbnRlbnQgPSAnTm8gc3VpdGFibGUgYW1wbGlmaWVyIGZvdW5kLiBUcnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzcGVha2VycyBvciBhZGp1c3RpbmcgaW1wZWRhbmNlLic7CiAgICAgICAgICByZXN1bHREaXYuc3R5bGUuY29sb3IgPSAnI2RjMzU0NSc7CiAgICAgICAgfQogICAgICAgIHJlc3VsdERpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFtcEZvcm0gc3VibWl0OicsIGUpOwogICAgICAgIGNvbnN0IHJlc3VsdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRBbXAnKTsKICAgICAgICBpZiAocmVzdWx0RGl2KSB7CiAgICAgICAgICByZXN1bHREaXYudGV4dENvbnRlbnQgPSAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsY3VsYXRpbmcuIFBsZWFzZSB0cnkgYWdhaW4uJzsKICAgICAgICAgIHJlc3VsdERpdi5zdHlsZS5jb2xvciA9ICcjZGMzNTQ1JzsKICAgICAgICAgIHJlc3VsdERpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0gZWxzZSB7CiAgICBjb25zb2xlLmVycm9yKCdhbXBGb3JtIG5vdCBmb3VuZCcpOwogIH0KfSBjYXRjaCAoZSkgewogIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNldHRpbmcgdXAgYW1wRm9ybSBsaXN0ZW5lcjonLCBlKTsKfQoKLyogLS0tLS0tLS0tLSBEVlMgTEVEIFZpZGVvIFdhbGwgQ2FsY3VsYXRvciAtLS0tLS0tLS0tICovCmNvbnN0IHBhbmVscyA9IHsKICBWaXpyYTogWwogICAgeyBtb2RlbDogJ1ZpenJhLTInLCBwaXhlbFBpdGNoOiAyLjksIHdpZHRoOiAwLjUsIGhlaWdodDogMC41LCByZXNvbHV0aW9uWDogMTcyLCByZXNvbHV0aW9uWTogMTcyLCBjb3N0OiAxNTAwIH0sCiAgICB7IG1vZGVsOiAnVml6cmEtNElQJywgcGl4ZWxQaXRjaDogNC44LCB3aWR0aDogMC41LCBoZWlnaHQ6IDAuNSwgcmVzb2x1dGlvblg6IDEwNCwgcmVzb2x1dGlvblk6IDEwNCwgY29zdDogMTIwMCB9LAogICAgeyBtb2RlbDogJ1ZpenJhLTIgKDEwMDBtbSknLCBwaXhlbFBpdGNoOiAyLjksIHdpZHRoOiAwLjUsIGhlaWdodDogMS4wLCByZXNvbHV0aW9uWDogMTcyLCByZXNvbHV0aW9uWTogMzQ0LCBjb3N0OiAyNTAwIH0sCiAgICB7IG1vZGVsOiAnVml6cmEtNElQICgxMDAwbW0pJywgcGl4ZWxQaXRjaDogNC44LCB3aWR0aDogMC41LCBoZWlnaHQ6IDEuMCwgcmVzb2x1dGlvblg6IDEwNCwgcmVzb2x1dGlvblk6IDIwOCwgY29zdDogMjAwMCB9CiAgXSwKICBWaXVTaXRlOiBbCiAgICB7IG1vZGVsOiAnVml1U2l0ZS0xWCcsIHBpeGVsUGl0Y2g6IDEuOSwgd2lkdGg6IDAuNDgyNiwgaGVpZ2h0OiAwLjk5MDYsIHJlc29sdXRpb25YOiAyNTYsIHJlc29sdXRpb25ZOiA1MTIsIGNvc3Q6IDExOTkgfSwKICAgIHsgbW9kZWw6ICdWaXVTaXRlLTJYJywgcGl4ZWxQaXRjaDogMi42LCB3aWR0aDogMC40ODI2LCBoZWlnaHQ6IDAuOTkwNiwgcmVzb2x1dGlvblg6IDE5MiwgcmVzb2x1dGlvblk6IDM4NCwgY29zdDogODYzIH0sCiAgICB7IG1vZGVsOiAnVml1U2l0ZS0zWCcsIHBpeGVsUGl0Y2g6IDMuOSwgd2lkdGg6IDAuNDgyNiwgaGVpZ2h0OiAwLjk5MDYsIHJlc29sdXRpb25YOiAxMjgsIHJlc29sdXRpb25ZOiAyNTYsIGNvc3Q6IDc0MyB9CiAgXSwKICBEaW9QbGV4OiBbCiAgICB7IG1vZGVsOiAnRGlvUGxleC02JywgcGl4ZWxQaXRjaDogNi42LCB3aWR0aDogMC45NiwgaGVpZ2h0OiAwLjk2LCByZXNvbHV0aW9uWDogMTQ0LCByZXNvbHV0aW9uWTogMTQ0LCBjb3N0OiAzNTAwIH0sCiAgICB7IG1vZGVsOiAnRGlvUGxleC04JywgcGl4ZWxQaXRjaDogOC4wLCB3aWR0aDogMC45NiwgaGVpZ2h0OiAwLjk2LCByZXNvbHV0aW9uWDogMTIwLCByZXNvbHV0aW9uWTogMTIwLCBjb3N0OiAzMDAwIH0KICBdCn07Cgpjb25zdCBtb2RlbEltYWdlcyA9IHsKICAnVml6cmEtMic6ICdodHRwczovL2R2c2xlZHN5c3RlbXMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA4L1ZpenJhLTItTWFpbi5qcGcnLAogICdWaXpyYS00SVAnOiAnaHR0cHM6Ly9kdnNsZWRzeXN0ZW1zLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMy8wOC9WaXpyYS0yLU1haW4uanBnJywKICAnVml6cmEtMiAoMTAwMG1tKSc6ICdodHRwczovL2R2c2xlZHN5c3RlbXMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA4L1ZpenJhLTJYLU1haW4uanBnJywKICAnVml6cmEtNElQICgxMDAwbW0pJzogJ2h0dHBzOi8vZHZzbGVkc3lzdGVtcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDgvVml6cmEtMlgtTWFpbi5qcGcnLAogICdWaXVTaXRlLTFYJzogJ2h0dHBzOi8vZHZzbGVkc3lzdGVtcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjIvMTIvVml1U2l0ZS01WC1NYWluLnBuZycsCiAgJ1ZpdVNpdGUtMlgnOiAnaHR0cHM6Ly9kdnNsZWRzeXN0ZW1zLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8xMi9WaXVTaXRlLTVYLU1haW4ucG5nJywKICAnVml1U2l0ZS0zWCc6ICdodHRwczovL2R2c2xlZHN5c3RlbXMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzEyL1ZpdVNpdGUtNVgtTWFpbi5wbmcnLAogICdEaW9QbGV4LTYnOiAnaHR0cHM6Ly9kdnNsZWRzeXN0ZW1zLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNC8wMi9kaW9wbGV4LTYtbWFpbi12NC5wbmcnLAogICdEaW9QbGV4LTgnOiAnaHR0cHM6Ly9kdnNsZWRzeXN0ZW1zLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNC8wMi9kaW9wbGV4LTYtbWFpbi12NC5wbmcnCn07Cgpjb25zdCBMQUJPUl9DT1NUX1BFUl9QQU5FTCA9IDI4MTsKCnRyeSB7CiAgY29uc3QgdW5pdFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1bml0Jyk7CiAgY29uc3Qgd2lkdGhVbml0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dpZHRoLXVuaXQnKTsKICBjb25zdCBoZWlnaHRVbml0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlaWdodC11bml0Jyk7CiAgY29uc3Qgc2VyaWVzU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcmllcycpOwogIGNvbnN0IG1vZGVsU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsJyk7CiAgY29uc3QgbnVtV2FsbHNTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtLXdhbGxzJyk7CiAgY29uc3Qgc2hvd01vZGVsQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3ctbW9kZWwnKTsKICBjb25zdCByZXN1bHRzRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKTsKICBjb25zdCB0b2dnbGVMYWJvckJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2dnbGUtbGFib3InKTsKICBjb25zdCBsYWJvckNvc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFib3ItY29zdC1jb250YWluZXInKTsKICBjb25zdCBtb2RlbE1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLW1vZGFsJyk7CiAgY29uc3QgbW9kZWxJbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1pbWFnZScpOwogIGNvbnN0IG1vZGVsVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtdGl0bGUnKTsKCiAgaWYgKHVuaXRTZWxlY3QgJiYgd2lkdGhVbml0ICYmIGhlaWdodFVuaXQpIHsKICAgIHVuaXRTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICB3aWR0aFVuaXQudGV4dENvbnRlbnQgPSB1bml0U2VsZWN0LnZhbHVlOwogICAgICBoZWlnaHRVbml0LnRleHRDb250ZW50ID0gdW5pdFNlbGVjdC52YWx1ZTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjb25zb2xlLmVycm9yKCdVbml0IHNlbGVjdCBvciB1bml0IGxhYmVscyBub3QgZm91bmQnKTsKICB9CgogIGlmIChzZXJpZXNTZWxlY3QgJiYgbW9kZWxTZWxlY3QgJiYgc2hvd01vZGVsQnV0dG9uKSB7CiAgICBzZXJpZXNTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICBjb25zdCBzZXJpZXMgPSBzZXJpZXNTZWxlY3QudmFsdWU7CiAgICAgIG1vZGVsU2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBhIG1vZGVsPC9vcHRpb24+JzsKICAgICAgbW9kZWxTZWxlY3QuZGlzYWJsZWQgPSAhc2VyaWVzOwogICAgICBzaG93TW9kZWxCdXR0b24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgICAgIGlmIChzZXJpZXMpIHsKICAgICAgICBwYW5lbHNbc2VyaWVzXS5mb3JFYWNoKHBhbmVsID0+IHsKICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgb3B0aW9uLnZhbHVlID0gcGFuZWwubW9kZWw7CiAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBwYW5lbC5tb2RlbDsKICAgICAgICAgIG1vZGVsU2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0gZWxzZSB7CiAgICBjb25zb2xlLmVycm9yKCdTZXJpZXMgc2VsZWN0LCBtb2RlbCBzZWxlY3QsIG9yIHNob3cgbW9kZWwgYnV0dG9uIG5vdCBmb3VuZCcpOwogIH0KCiAgaWYgKG1vZGVsU2VsZWN0ICYmIHNob3dNb2RlbEJ1dHRvbikgewogICAgbW9kZWxTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICBjb25zdCBtb2RlbCA9IG1vZGVsU2VsZWN0LnZhbHVlOwogICAgICBzaG93TW9kZWxCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZGVuJywgIW1vZGVsIHx8IG1vZGVsID09PSAnU2VsZWN0IGEgbW9kZWwnKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gc2hvd01vZGVsSW1hZ2UoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBtb2RlbCA9IG1vZGVsU2VsZWN0ID8gbW9kZWxTZWxlY3QudmFsdWUgOiAnJzsKICAgICAgaWYgKG1vZGVsICYmIG1vZGVsSW1hZ2VzW21vZGVsXSAmJiBtb2RlbEltYWdlICYmIG1vZGVsVGl0bGUgJiYgbW9kZWxNb2RhbCkgewogICAgICAgIG1vZGVsSW1hZ2Uuc3JjID0gbW9kZWxJbWFnZXNbbW9kZWxdOwogICAgICAgIG1vZGVsSW1hZ2UuYWx0ID0gYCR7bW9kZWx9IEltYWdlYDsKICAgICAgICBtb2RlbFRpdGxlLnRleHRDb250ZW50ID0gbW9kZWw7CiAgICAgICAgbW9kZWxNb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBzaG93TW9kZWxJbWFnZTonLCBlKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNsb3NlTW9kZWxNb2RhbCgpIHsKICAgIHRyeSB7CiAgICAgIGlmIChtb2RlbE1vZGFsKSB7CiAgICAgICAgbW9kZWxNb2RhbC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjbG9zZU1vZGVsTW9kYWw6JywgZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2dnbGVMYWJvckNvc3QoKSB7CiAgICB0cnkgewogICAgICBpZiAobGFib3JDb3N0Q29udGFpbmVyICYmIHRvZ2dsZUxhYm9yQnV0dG9uKSB7CiAgICAgICAgY29uc3QgaXNIaWRkZW4gPSBsYWJvckNvc3RDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4nKTsKICAgICAgICBsYWJvckNvc3RDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZGVuJywgIWlzSGlkZGVuKTsKICAgICAgICB0b2dnbGVMYWJvckJ1dHRvbi50ZXh0Q29udGVudCA9IGlzSGlkZGVuID8gJ0hpZGUgTGFib3IgQ29zdCcgOiAnU2hvdyBMYWJvciBDb3N0JzsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiB0b2dnbGVMYWJvckNvc3Q6JywgZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjYWxjVmlkZW9XYWxsKCkgewogICAgdHJ5IHsKICAgICAgaWYgKCF1bml0U2VsZWN0IHx8ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2lkdGgnKSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlaWdodCcpIHx8CiAgICAgICAgICAhc2VyaWVzU2VsZWN0IHx8ICFtb2RlbFNlbGVjdCB8fCAhbnVtV2FsbHNTZWxlY3QgfHwgIXJlc3VsdHNEaXYgfHwKICAgICAgICAgICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXNlcmllcycpIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LW1vZGVsJykgfHwKICAgICAgICAgICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXBpeGVsLXBpdGNoJykgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtcGFuZWwtc2l6ZScpIHx8CiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1wYW5lbHMnKSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1wYW5lbHMteCcpIHx8CiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1wYW5lbHMteScpIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXRvdGFsLXBhbmVscycpIHx8CiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1udW0td2FsbHMnKSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1hY3R1YWwtc2l6ZScpIHx8CiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1yZXNvbHV0aW9uJykgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtbWF0ZXJpYWwtY29zdCcpIHx8CiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1sYWJvci1jb3N0JykgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtc3VidG90YWwnKSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RPTSBlbGVtZW50cyBmb3IgdmlkZW8gd2FsbCBjYWxjdWxhdG9yIG5vdCBmb3VuZCcpOwogICAgICAgIGFsZXJ0KCdJbnRlcm5hbCBlcnJvci4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGNvbnN0IHVuaXQgPSB1bml0U2VsZWN0LnZhbHVlOwogICAgICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWR0aCcpLnZhbHVlKTsKICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlaWdodCcpLnZhbHVlKTsKICAgICAgY29uc3Qgc2VyaWVzID0gc2VyaWVzU2VsZWN0LnZhbHVlOwogICAgICBjb25zdCBtb2RlbCA9IG1vZGVsU2VsZWN0LnZhbHVlOwogICAgICBjb25zdCBudW1XYWxscyA9IHBhcnNlSW50KG51bVdhbGxzU2VsZWN0LnZhbHVlKTsKCiAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCB8fCB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7CiAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnRlciB2YWxpZCB3aWR0aCBhbmQgaGVpZ2h0IChncmVhdGVyIHRoYW4gMCkuJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghc2VyaWVzKSB7CiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYSBwcm9kdWN0IHNlcmllcy4nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFtb2RlbCB8fCBtb2RlbCA9PT0gJ1NlbGVjdCBhIG1vZGVsJykgewogICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgbW9kZWwuJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAodW5pdCA9PT0gJ2ZlZXQnKSB7CiAgICAgICAgd2lkdGggKj0gMC4zMDQ4OwogICAgICAgIGhlaWdodCAqPSAwLjMwNDg7CiAgICAgIH0KCiAgICAgIGNvbnN0IHBhbmVsID0gcGFuZWxzW3Nlcmllc10uZmluZChwID0+IHAubW9kZWwgPT09IG1vZGVsKTsKICAgICAgaWYgKCFwYW5lbCkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BhbmVsIG5vdCBmb3VuZCBmb3Igc2VyaWVzOicsIHNlcmllcywgJ21vZGVsOicsIG1vZGVsKTsKICAgICAgICBhbGVydCgnSW52YWxpZCBwYW5lbCBzZWxlY3Rpb24uJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBwYW5lbHNYID0gTWF0aC5jZWlsKHdpZHRoIC8gcGFuZWwud2lkdGgpOwogICAgICBjb25zdCBwYW5lbHNZID0gTWF0aC5jZWlsKGhlaWdodCAvIHBhbmVsLmhlaWdodCk7CiAgICAgIGNvbnN0IHRvdGFsUGFuZWxzUGVyV2FsbCA9IHBhbmVsc1ggKiBwYW5lbHNZOwogICAgICBjb25zdCB0b3RhbFBhbmVscyA9IHRvdGFsUGFuZWxzUGVyV2FsbCAqIG51bVdhbGxzOwogICAgICBjb25zdCB0b3RhbFJlc29sdXRpb25YID0gcGFuZWxzWCAqIHBhbmVsLnJlc29sdXRpb25YOwogICAgICBjb25zdCB0b3RhbFJlc29sdXRpb25ZID0gcGFuZWxzWSAqIHBhbmVsLnJlc29sdXRpb25ZOwogICAgICBjb25zdCBtYXRlcmlhbENvc3QgPSB0b3RhbFBhbmVscyAqIHBhbmVsLmNvc3Q7CiAgICAgIGNvbnN0IGxhYm9yQ29zdCA9IHRvdGFsUGFuZWxzICogTEFCT1JfQ09TVF9QRVJfUEFORUw7CiAgICAgIGNvbnN0IHN1YnRvdGFsID0gbWF0ZXJpYWxDb3N0ICsgbGFib3JDb3N0OwogICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IHBhbmVsc1ggKiBwYW5lbC53aWR0aDsKICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0gcGFuZWxzWSAqIHBhbmVsLmhlaWdodDsKCiAgICAgIGNvbnN0IGRpc3BsYXlXaWR0aCA9IHVuaXQgPT09ICdmZWV0JyA/IChhY3R1YWxXaWR0aCAqIDMuMjgwODQpLnRvRml4ZWQoMikgOiBhY3R1YWxXaWR0aC50b0ZpeGVkKDIpOwogICAgICBjb25zdCBkaXNwbGF5SGVpZ2h0ID0gdW5pdCA9PT0gJ2ZlZXQnID8gKGFjdHVhbEhlaWdodCAqIDMuMjgwODQpLnRvRml4ZWQoMikgOiBhY3R1YWxIZWlnaHQudG9GaXhlZCgyKTsKICAgICAgY29uc3QgZGlzcGxheVBhbmVsV2lkdGggPSB1bml0ID09PSAnZmVldCcgPyAocGFuZWwud2lkdGggKiAzLjI4MDg0KS50b0ZpeGVkKDIpIDogcGFuZWwud2lkdGgudG9GaXhlZCgyKTsKICAgICAgY29uc3QgZGlzcGxheVBhbmVsSGVpZ2h0ID0gdW5pdCA9PT0gJ2ZlZXQnID8gKHBhbmVsLmhlaWdodCAqIDMuMjgwODQpLnRvRml4ZWQoMikgOiBwYW5lbC5oZWlnaHQudG9GaXhlZCgyKTsKICAgICAgY29uc3QgdW5pdExhYmVsID0gdW5pdCA9PT0gJ2ZlZXQnID8gJ2Z0JyA6ICdtJzsKCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtc2VyaWVzJykudGV4dENvbnRlbnQgPSBzZXJpZXM7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtbW9kZWwnKS50ZXh0Q29udGVudCA9IG1vZGVsOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXBpeGVsLXBpdGNoJykudGV4dENvbnRlbnQgPSBwYW5lbC5waXhlbFBpdGNoOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LXBhbmVsLXNpemUnKS50ZXh0Q29udGVudCA9IGAke2Rpc3BsYXlQYW5lbFdpZHRofSR7dW5pdExhYmVsfSB4ICR7ZGlzcGxheVBhbmVsSGVpZ2h0fSR7dW5pdExhYmVsfWA7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtcGFuZWxzJykudGV4dENvbnRlbnQgPSB0b3RhbFBhbmVsc1BlcldhbGw7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtcGFuZWxzLXgnKS50ZXh0Q29udGVudCA9IHBhbmVsc1g7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtcGFuZWxzLXknKS50ZXh0Q29udGVudCA9IHBhbmVsc1k7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtdG90YWwtcGFuZWxzJykudGV4dENvbnRlbnQgPSB0b3RhbFBhbmVsczsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1udW0td2FsbHMnKS50ZXh0Q29udGVudCA9IG51bVdhbGxzOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LWFjdHVhbC1zaXplJykudGV4dENvbnRlbnQgPSBgJHtkaXNwbGF5V2lkdGh9JHt1bml0TGFiZWx9IHggJHtkaXNwbGF5SGVpZ2h0fSR7dW5pdExhYmVsfWA7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtcmVzb2x1dGlvbicpLnRleHRDb250ZW50ID0gYCR7dG90YWxSZXNvbHV0aW9uWH0geCAke3RvdGFsUmVzb2x1dGlvbll9YDsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1tYXRlcmlhbC1jb3N0JykudGV4dENvbnRlbnQgPSBtYXRlcmlhbENvc3QudG9Mb2NhbGVTdHJpbmcoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1sYWJvci1jb3N0JykudGV4dENvbnRlbnQgPSBsYWJvckNvc3QudG9Mb2NhbGVTdHJpbmcoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1zdWJ0b3RhbCcpLnRleHRDb250ZW50ID0gc3VidG90YWwudG9Mb2NhbGVTdHJpbmcoKTsKCiAgICAgIHJlc3VsdHNEaXYuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7CiAgICAgIGxhYm9yQ29zdENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgICAgdG9nZ2xlTGFib3JCdXR0b24udGV4dENvbnRlbnQgPSAnU2hvdyBMYWJvciBDb3N0JzsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gY2FsY1ZpZGVvV2FsbDonLCBlKTsKICAgICAgYWxlcnQoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNhbGN1bGF0aW5nLiBQbGVhc2UgdHJ5IGFnYWluLicpOwogICAgfQogIH0KfSBjYXRjaCAoZSkgewogIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHZpZGVvIHdhbGwgY2FsY3VsYXRvciBzZXR1cDonLCBlKTsKfQo8L3NjcmlwdD4KCjwvYm9keT4KPC9odG1sPg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]