Custom Cap Workshop
[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_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_color=”” link_hover_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=”” 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_color=”” background_image=”” skip_lazy_load=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” 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=”” 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=”” 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=”” 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_subgroup=”regular” z_index=”” z_index_hover=”” overflow=”” background_type=”single” 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_color=”” background_image=”” background_image_id=”” lazy_load=”none” skip_lazy_load=”” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” 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=”” 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]ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKPGRpdiBpZD0ibG9hZGVyQWxpZ24iPgogICAgPGRpdiBjbGFzcz0ibG9hZGVyIj48L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImlmcmFtZWRpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7aGVpZ2h0OiAyOTA1cHg7bWluLWhlaWdodDogNjAwcHg7Ij4KICAgIDxpZnJhbWUgaWQ9Im15SWZyYW1lIiBzY3JvbGxpbmc9Im5vIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIiBzcmM9Imh0dHBzOi8vd3d3LmF1Z3VzdGFzcG9ydHN3ZWFyLmNvbS9mcmVlc3R5bGUtY3VzdG9tLWhlYWR3ZWFyIj4KICAgIDwvaWZyYW1lPgo8L2Rpdj4KPHN0eWxlPgogICAgYm9keSwgaHRtbCB7CiAgICAgICAgb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RvcmUtZnJvbnQgewogICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgfQogICAgI2xvYWRlckFsaWduewogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgfQogICAgLmxvYWRlciB7CiAgICAgICAgYm9yZGVyOiAxNnB4IHNvbGlkICNmM2YzZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlci10b3A6IDE2cHggc29saWQgIzM0OThkYjsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiAxMjBweDsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7IC8qIFNhZmFyaSAqLwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgLyogU2FmYXJpICovCiAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgMTAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgfQoKICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICB9Cjwvc3R5bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIHZhciBhc2JGU1BsdWdpblZlcnNpb24gPSAiMjAyMjAzMTAtMTMwMCI7CiAgICB2YXIgcGFnZVVybCA9IGxvY2F0aW9uLmhyZWY7CiAgICB2YXIgZG9tYWluVXJsID0gZG9jdW1lbnQuZG9tYWluOwogICAgdmFyIHBhZ2VRdWVyeSA9IG51bGw7CiAgICB2YXIgaWZyYW1lSGFzU2FtZURvbWFpblVybCA9IHRydWU7CgoKICAgIHZhciBkZWZhdWx0Q29uZmlnID0gewogICAgICAgICdkaXNjb3VudCcgOiA1LAogICAgICAgICdhZGRsTGVhZFRpbWUnIDogMiwKICAgICAgICAnbW9xJzo2LAogICAgICAgICdtb3FQcmljZSc6NjAKICAgIH07CgogICAgdmFyIGNhdGVnb3J5QXJyYXkgPSBbCiAgICAgICAgeyduYW1lJyA6ICdjdXN0b20taGVhZHdlYXInLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdzdHlsZXMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdydW5uaW5nLWhhdHMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdiZWFuaWVzLWtuaXRzJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnY2Ftby1oYXRzJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnb24tZmllbGQtaGF0cycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ2xpZmVzdHlsZS1vdXRkb29yLWhhdHMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdzaWRlbGluZS1jb2FjaGVzLWhhdHMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICd0cnVja2VyLWhhdHMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICd2aXNvcnMnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdib29uaWUtaGF0cycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ2ZlYXR1cmVzJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnZmxleGZpdC1oYXRzJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnc25hcGJhY2staGF0cycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3N0cnVjdHVyZWQtaGF0cycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3Vuc3RydWN0dXJlZC1oYXRzJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnc2VhcmNoLWRpc3BsYXktdmlldy10YWdzJywgJ3RhZycgOiAnc2VhcmNoLWRpc3BsYXktdmlldy10YWdzJywgICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3NlYXJjaC1kaXNwbGF5LXZpZXctdGVybScsICdzZWFyY2hUZXJtJyA6ICdzZWFyY2gtZGlzcGxheS12aWV3LXRhZ3MnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdmYW53ZWFyJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnbGFjcm9zc2UnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdiYXNlYmFsbCcsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ2Jhc2tldGJhbGwnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdzb2NjZXInLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdmb290YmFsbCcsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ2ZsZWVjZScsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3RyYWNrJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAndHJhaW5pbmcnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdzb2Z0YmFsbCcsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3BvbG8nLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICc1LWRheS10dXJibycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ3ZvbGxleWJhbGwnLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdiYWJlLXJ1dGgtdHVyYm8nLCAnZGlzY291bnQnIDogZGVmYXVsdENvbmZpZy5kaXNjb3VudCwgJ2FkZGxMZWFkVGltZScgOiBkZWZhdWx0Q29uZmlnLmFkZGxMZWFkVGltZSwnbW9xJzpkZWZhdWx0Q29uZmlnLm1vcSwgJ21vcVByaWNlJzpkZWZhdWx0Q29uZmlnLm1vcVByaWNlIH0sCiAgICAgICAgeyduYW1lJyA6ICdhY2Nlc3NvcmllcycsICdkaXNjb3VudCcgOiBkZWZhdWx0Q29uZmlnLmRpc2NvdW50LCAnYWRkbExlYWRUaW1lJyA6IGRlZmF1bHRDb25maWcuYWRkbExlYWRUaW1lLCdtb3EnOmRlZmF1bHRDb25maWcubW9xLCAnbW9xUHJpY2UnOmRlZmF1bHRDb25maWcubW9xUHJpY2UgfSwKICAgICAgICB7J25hbWUnIDogJ2NvbXByZXNzaW9uJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnc2VtaS1zdWJsaW1hdGVkJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9LAogICAgICAgIHsnbmFtZScgOiAnZGVmYXVsdC1wYWdlJywgJ2Rpc2NvdW50JyA6IGRlZmF1bHRDb25maWcuZGlzY291bnQsICdhZGRsTGVhZFRpbWUnIDogZGVmYXVsdENvbmZpZy5hZGRsTGVhZFRpbWUsJ21vcSc6ZGVmYXVsdENvbmZpZy5tb3EsICdtb3FQcmljZSc6ZGVmYXVsdENvbmZpZy5tb3FQcmljZSB9CiAgICBdOwoKICAgIHZhciBjYXRlZ29yeVNoYXJlTWFwcGVyID0gewogICAgICAgICdjdXN0b20gaGVhZHdlYXInOiAnY3VzdG9tLWhlYWR3ZWFyJywKICAgICAgICAnc3R5bGVzJzogJ3N0eWxlcycsCiAgICAgICAgJ2FjdGl2ZS9saWdodHdlaWdodCc6ICdydW5uaW5nLWhhdHMnLAogICAgICAgICdiZWFuaWVzJzogJ2JlYW5pZXMta25pdHMnLAogICAgICAgICdjYW1vJzogJ2NhbW8taGF0cycsCiAgICAgICAgJ29uLWZpZWxkJzogJ29uLWZpZWxkLWhhdHMnLAogICAgICAgICdvdXRkb29yJzogJ2xpZmVzdHlsZS1vdXRkb29yLWhhdHMnLAogICAgICAgICdzaWRlbGluZSc6ICdzaWRlbGluZS1jb2FjaGVzLWhhdHMnLAogICAgICAgICd0cnVja2VycyAvIG1lc2ggYmFjayc6ICd0cnVja2VyLWhhdHMnLAogICAgICAgICd2aXNvcnMnOiAndmlzb3JzJywKICAgICAgICAnd2lkZSBicmltIC8gYm9vbmllJzogJ2Jvb25pZS1oYXRzJywKICAgICAgICAnZmVhdHVyZXMnOiAnZmVhdHVyZXMnLAogICAgICAgICdmbGV4Zml0JzogJ2ZsZXhmaXQtaGF0cycsCiAgICAgICAgJ3NuYXBiYWNrJzogJ3NuYXBiYWNrLWhhdHMnLAogICAgICAgICdzdHJ1Y3R1cmVkJzogJ3N0cnVjdHVyZWQtaGF0cycsCiAgICAgICAgJ3Vuc3RydWN0dXJlZCc6ICd1bnN0cnVjdHVyZWQtaGF0cycsCiAgICAgICAgJ3NlYXJjaC1kaXNwbGF5LXZpZXctdGFncycgOiAnc2VhcmNoLWRpc3BsYXktdmlldy10YWdzJywKICAgICAgICAnc2VhcmNoLWRpc3BsYXktdmlldy10ZXJtJyA6ICdzZWFyY2gtZGlzcGxheS12aWV3LXRlcm0nLAogICAgICAgICdmYW53ZWFyJyA6ICdmYW53ZWFyJywKICAgICAgICAnbGFjcm9zc2UnIDogJ2xhY3Jvc3NlJywKICAgICAgICAnYmFzZWJhbGwnIDogJ2Jhc2ViYWxsJywKICAgICAgICAnYmFza2V0YmFsbCcgOiAnYmFza2V0YmFsbCcsCiAgICAgICAgJ3NvY2NlcicgOiAnc29jY2VyJywKICAgICAgICAnZm9vdGJhbGwnIDogJ2Zvb3RiYWxsJywKICAgICAgICAnZmxlZWNlJyA6ICdmbGVlY2UnLAogICAgICAgICdvdXRlcndlYXInIDogJ2ZsZWVjZScsCiAgICAgICAgJ3RyYWNrJyA6ICd0cmFjaycsCiAgICAgICAgJ3RyYWluaW5nJyA6ICd0cmFpbmluZycsCiAgICAgICAgJ3NvZnRiYWxsJyA6ICdzb2Z0YmFsbCcsCiAgICAgICAgJ3BvbG9zJyA6ICdwb2xvJywKICAgICAgICAndHVyYm8nIDogJzUtZGF5LXR1cmJvJywKICAgICAgICAndm9sbGV5YmFsbCcgOiAndm9sbGV5YmFsbCcsCiAgICAgICAgJ2JhYmUgcnV0aCB0dXJibycgOiAnYmFiZS1ydXRoLXR1cmJvJywKICAgICAgICAnbWFza3MsIGdhaXRlcnMsJyA6ICdhY2Nlc3NvcmllcycsCiAgICAgICAgJ2NvbXByZXNzaW9uJyA6ICdjb21wcmVzc2lvbicsCiAgICAgICAgJ3NlbWktc3VibGltYXRlZCcgOiAnc2VtaS1zdWJsaW1hdGVkJywKICAgICAgICAnZnJlZXN0eWxlIHN1YmxpbWF0aW9uJyA6ICdkZWZhdWx0LXBhZ2UnCiAgICB9OwoKCiAgICB3aW5kb3cub25tZXNzYWdlID0gKGUpID0+IHsKICAgICAgICB2YXIgZGF0YSA9IGUuZGF0YS50b1N0cmluZygpOwoKICAgICAgICBpZihlLmRhdGEuZG9tYWluVXJsKXsKICAgICAgICAgICAgaWZyYW1lSGFzU2FtZURvbWFpblVybCA9IGZhbHNlOwogICAgICAgICAgICBwYWdlVXJsID0gZS5kYXRhLnBhZ2VVcmw7CiAgICAgICAgICAgIHBhZ2VRdWVyeSA9IGUuZGF0YS5wYWdlUXVlcnk7CiAgICAgICAgICAgIHZhciBkb21haW4gPSBlLmRhdGEuZG9tYWluVXJsOwogICAgICAgICAgICBkb21haW5VcmwgPSBkb21haW4ucmVwbGFjZSgvXmh0dHBzPzpcL1wvLywnJyk7CiAgICAgICAgICAgIHNldElmcmFtZVNyYygpOwogICAgICAgICAgICB2YXIgaWZyYW1lU3JjID0gIGdldElmcmFtZVNyYygpOwogICAgICAgIH0KICAgICAgICBpZiAoZGF0YS5pbmRleE9mKCdhc2dJZnJhbWVIZWlnaHQnKSA+IC0xKSB7CiAgICAgICAgICAgIHZhciBpZnJhbWVIZWlnaHQgPSBlLmRhdGEuc3BsaXQoIjoiKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmcmFtZWRpdicpLnN0eWxlLmhlaWdodCA9IGlmcmFtZUhlaWdodFsxXSArICdweCc7CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhLmluZGV4T2YoJ3JlTG9hZElmcmFtZScpID4gLTEpIHsKICAgICAgICAgICAgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2hvd1N1bW1hcnkiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICBzZXRJZnJhbWVTcmMoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGRhdGEuaW5kZXhPZignc2Nyb2xsVG9Ub3AnKSA+IC0xKSB7CiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoZGF0YS5pbmRleE9mKCdhc2dQYWdlTmFtZScpID4gLTEpIHsKICAgICAgICAgICAgdmFyIHBhZ2VOYW1lID0gZS5kYXRhLnNwbGl0KCI6Iik7CiAgICAgICAgICAgIGlmIChwYWdlTmFtZVsxXSA9PSAnY2FwQ29uZmlndXJhdG9yJykKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUlmcmFtZSIpLnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwgInllcyIpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUlmcmFtZSIpLnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwgIm5vIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI215SWZyYW1lJykuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGUgPT4gewogICAgICAgIHNlbmRQYXJlbnRIZWlnaHRUb0NoaWxkKCk7CgogICAgfSkKICAgIGZ1bmN0aW9uIHNlbmRQYXJlbnRIZWlnaHRUb0NoaWxkKCkgewogICAgICAgIHZhciBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUlmcmFtZSIpLmNvbnRlbnRXaW5kb3c7CiAgICAgICAgdmFyIGVsZW1Ub3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lZGl2Iikub2Zmc2V0VG9wOwogICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgdmFyIGNhbGNIZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSBlbGVtVG9wOwogICAgICAgIGlmIChjaGlsZC5wb3N0TWVzc2FnZSkgewogICAgICAgICAgICBjaGlsZC5wb3N0TWVzc2FnZSgicGFyZW50SGVpZ2h0OiIgKyBjYWxjSGVpZ2h0LCAnKicpOwogICAgICAgICAgICBjaGlsZC5wb3N0TWVzc2FnZSgicGFyZW50RG9tYWluOiIgKyBkb21haW5VcmwsICcqJyk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2VuZERhdGFUb0NoaWxkKCkgewogICAgICAgIHZhciBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUlmcmFtZSIpLmNvbnRlbnRXaW5kb3c7CiAgICAgICAgaWYgKGNoaWxkLnBvc3RNZXNzYWdlKSB7CiAgICAgICAgICAgIGNoaWxkLnBvc3RNZXNzYWdlKCJsb2FkTmV4dFBhZ2VJZnJhbWUiLCAnKicpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGdldEZ1bGxVcmwgKCl7CiAgICAgICAgdmFyIHNlYXJjaExvY2F0aW9uID0gZmFsc2U7CiAgICAgICAgaWYod2luZG93LmxvY2F0aW9uKXsKICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCl7CiAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKSl7CiAgICAgICAgICAgICAgICBzZWFyY2hMb2NhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoc2VhcmNoTG9jYXRpb24pewogICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGJhc2VVcmwgPSB3aW5kb3cuZG9jdW1lbnQuYmFzZVVSSTsKICAgICAgICAgICAgdmFyIGJhc2VVcmxEYXRhID0gYmFzZVVybC5zcGxpdCgiPyIpOwogICAgICAgICAgICBpZihiYXNlVXJsRGF0YVsxXSAhPSB1bmRlZmluZWQpewogICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VVcmxEYXRhWzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBnZXRDdXJyZW50VXJsUGFyYW1zICgpIHsKICAgICAgICBpZihpZnJhbWVIYXNTYW1lRG9tYWluVXJsID09PSBmYWxzZSl7CiAgICAgICAgICAgIHJldHVybiBwYWdlUXVlcnk7CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIHZhciBvcGVyYXRvciA9ICcmJzsKICAgICAgICAgICAgdmFyIGdldFVybCA9IGdldEZ1bGxVcmwoKTsKICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gKGZ1bmN0aW9uKHBhcmFtcykgewogICAgICAgICAgICAgICAgaWYgKHBhcmFtcyA9PT0gIiIpIHJldHVybiB7fTsKICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyYW1zW2ldLnNwbGl0KCc9JywgMik7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxKQogICAgICAgICAgICAgICAgICAgIG9ialt2YWx1ZVswXV0gPSAiIjsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBvYmpbdmFsdWVbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdLnJlcGxhY2UoL1wrL2csICIgIikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgICAgfSkoZ2V0VXJsLnNwbGl0KG9wZXJhdG9yKSk7CgogICAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2V0SWZyYW1lU3JjICgpIHsKICAgICAgICB2YXIgdXJsID0gIGdldElmcmFtZVNyYygpOwogICAgICAgIGlmKHVybCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlJZnJhbWUnKS5zcmMgPSB1cmw7CiAgICAgICAgfWVsc2UgewogICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215SWZyYW1lJyk7CiAgICAgICAgICAgIGlmcmFtZS5zcmMgPSBpZnJhbWUuc3JjOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVkaXYiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRlckFsaWduIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICB9LCAxMDAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIHZhbGlkYXRlIChxdWVyeVN0cmluZywgdHlwZSkgewogICAgICAgIGlmKHF1ZXJ5U3RyaW5nKXsKICAgICAgICAgICAgaWYocXVlcnlTdHJpbmdbdHlwZV0pewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRJZnJhbWVTcmMgKCkgewogICAgICAgIHZhciBxdWVyeVN0cmluZyA9IGdldEN1cnJlbnRVcmxQYXJhbXMoKTsKCiAgICAgICAgaWYodmFsaWRhdGUocXVlcnlTdHJpbmcsJ2NhdGVnb3J5TmFtZScpKXsKICAgICAgICAgICAgdmFyIGNhdGVnb3J5TmFtZSA9IHF1ZXJ5U3RyaW5nWydjYXRlZ29yeU5hbWUnXTsKICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVXJsKChjYXRlZ29yeU5hbWUudG9Mb3dlckNhc2UoKSkudHJpbSgpLCB0cnVlKQogICAgICAgIH0gZWxzZSBpZih2YWxpZGF0ZShxdWVyeVN0cmluZywnc2VhcmNoVGVybScpKXsKICAgICAgICAgICAgdmFyIHNlYXJjaFRlcm0gPSBxdWVyeVN0cmluZ1snc2VhcmNoVGVybSddOwogICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVVcmwoJ3NlYXJjaC1kaXNwbGF5LXZpZXctdGVybScsIGZhbHNlKQogICAgICAgIH0gZWxzZSBpZih2YWxpZGF0ZShxdWVyeVN0cmluZywndGFnJykpewogICAgICAgICAgICB2YXIgdGFnID0gcXVlcnlTdHJpbmdbJ3RhZyddOwogICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVVcmwoJ3NlYXJjaC1kaXNwbGF5LXZpZXctdGFncycsIGZhbHNlKQogICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgdmFyIGN1cnJlbnRVUkwgPSBwYWdlVXJsOwogICAgICAgICAgICB2YXIgdXJsID0gY3VycmVudFVSTC5zcGxpdCgiPyIpOwogICAgICAgICAgICB2YXIgdXJsQXJyYXkgPSB1cmxbMF07CiAgICAgICAgICAgIHZhciB1cmxIcmVmQXJyYXkgPSB1cmxBcnJheS5zcGxpdCgnLycpOwogICAgICAgICAgICB2YXIgY2F0ZWdvcnlOYW1lID0gbnVsbDsKICAgICAgICAgICAgdXJsSHJlZkFycmF5LmZvckVhY2goZnVuY3Rpb24odXJsRW50aXR5KSB7CiAgICAgICAgICAgICAgICBjYXRlZ29yeUFycmF5LmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnkpewogICAgICAgICAgICAgICAgaWYoICh1cmxFbnRpdHkudG9Mb3dlckNhc2UoKSkudHJpbSgpID09PSAoKGNhdGVnb3J5Lm5hbWUpLnRvTG93ZXJDYXNlKCkpLnRyaW0oKSApewogICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5TmFtZSA9ICgoY2F0ZWdvcnkubmFtZSkudG9Mb3dlckNhc2UoKSkudHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSkKICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVXJsKGNhdGVnb3J5TmFtZSwgdHJ1ZSk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaXNDYXBDb25maWd1cmF0b3JQYWdlICgpIHsKICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBnZXRDdXJyZW50VXJsUGFyYW1zKCk7CiAgICAgICAgaWYodmFsaWRhdGUocXVlcnlTdHJpbmcsJ2ROdW1iZXInKSl7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBpc0NvbmZpZ3VyYXRvclBhZ2UgKCkgewogICAgICAgIHZhciBxdWVyeVN0cmluZyA9IGdldEN1cnJlbnRVcmxQYXJhbXMoKTsKICAgICAgICBpZih2YWxpZGF0ZShxdWVyeVN0cmluZywnc051bWJlcicpKXsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNoZWNrQ2F0ZWdvcnkgKGNhdGVnb3J5TmFtZSkgewogICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGNhdGVnb3J5QXJyYXkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNhdGVnb3J5TmFtZSk7CiAgICAgICAgICAgIGlmKGNhdGVnb3J5Lmxlbmd0aCl7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgZnVuY3Rpb24gZ2VuZXJhdGVVcmwoY2F0ZWdvcnlOYW1lLCBpc0NhdGVnb3J5TmFtZSl7CiAgICAgICAgICAgIHZhciBjdXJyZW50SWZyYW1lVXJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215SWZyYW1lJykuc3JjOwogICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBnZXRDdXJyZW50VXJsUGFyYW1zKCk7CiAgICAgICAgICAgIHZhciByZXBsYWNlVGV4dCA9ICdmcmVlc3R5bGUtY3VzdG9tLWhlYWR3ZWFyJzsKICAgICAgICAgICAgaWYoY2F0ZWdvcnlOYW1lKXsKICAgICAgICAgICAgICAgIGNhdGVnb3J5TmFtZSA9IGNhdGVnb3J5U2hhcmVNYXBwZXJbY2F0ZWdvcnlOYW1lXTsKICAgICAgICAgICAgICAgIHJlcGxhY2VUZXh0ID0gJ2ZyZWVzdHlsZS1jdXN0b20taGVhZHdlYXItJytjYXRlZ29yeU5hbWU7CiAgICAgICAgICAgICAgICBpZihpc0NhcENvbmZpZ3VyYXRvclBhZ2UoKSl7CiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVRleHQgPSAnQ2FwQ29uZmlndXJhdG9yJzsKICAgICAgICAgICAgICAgIH1lbHNlIGlmKGlzQ29uZmlndXJhdG9yUGFnZSgpKXsKICAgICAgICAgICAgICAgICAgICByZXBsYWNlVGV4dCA9ICdDb25maWd1cmF0b3InOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmKCFpc0NhdGVnb3J5TmFtZSkgewogICAgICAgICAgICAgICAgICAgIHJlcGxhY2VUZXh0ID0gJ1NlYXJjaERpc3BsYXlWaWV3JzsKICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSBjYXRlZ29yeVNoYXJlTWFwcGVyW2NhdGVnb3J5TmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKCFjaGVja0NhdGVnb3J5KGNhdGVnb3J5TmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAnY3VzdG9tLWhlYWR3ZWFyJzsKICAgICAgICAgICAgICAgICAgICByZXBsYWNlVGV4dCA9ICdmcmVlc3R5bGUtY3VzdG9tLWhlYWR3ZWFyJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlewogICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gJ2N1c3RvbS1oZWFkd2Vhcic7CiAgICAgICAgICAgICAgICBpZihpc0NhcENvbmZpZ3VyYXRvclBhZ2UoKSl7CiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVRleHQgPSAnQ2FwQ29uZmlndXJhdG9yJzsKICAgICAgICAgICAgICAgIH1lbHNlIGlmKGlzQ29uZmlndXJhdG9yUGFnZSgpKXsKICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAnZGVmYXVsdC1wYWdlJzsKICAgICAgICAgICAgICAgICAgICByZXBsYWNlVGV4dCA9ICdDb25maWd1cmF0b3InOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgSW5kZXggPSBjYXRlZ29yeUFycmF5LmZpbmRJbmRleCh4ID0+ICgoeC5uYW1lKS50b0xvd2VyQ2FzZSgpKS50cmltKCkgPT09IGNhdGVnb3J5TmFtZSApOwogICAgICAgICAgICB2YXIgY2F0ZWdvcnlPYmogPSBjYXRlZ29yeUFycmF5W0luZGV4XTsKICAgICAgICAgICAgdmFyIHVybCA9IGN1cnJlbnRJZnJhbWVVcmwuc3BsaXQoJz8nKTsKICAgICAgICAgICAgdmFyIHVybEFycmF5ID0gdXJsWzBdOwogICAgICAgICAgICB2YXIgcGFyYW1zQXJyYXkgPSB1cmxbMV07CiAgICAgICAgICAgIHZhciB1cmxIcmVmQXJyYXkgPSB1cmxBcnJheS5zcGxpdCgnLycpOwogICAgICAgICAgICB2YXIgdXJsSHJlZlJlcGxhY2VFbnRpdHkgPSB1cmxIcmVmQXJyYXlbdXJsSHJlZkFycmF5Lmxlbmd0aCAtMV07CiAgICAgICAgICAgIHVybFswXSA9IHVybEFycmF5LnJlcGxhY2UodXJsSHJlZlJlcGxhY2VFbnRpdHksIHJlcGxhY2VUZXh0KTsKICAgICAgICAgICAgdmFyIG5ld1VybCA9IHVybC5qb2luKCc/Jyk7CiAgICAgICAgICAgIHZhciBocmVmID0gbmV3IFVSTChuZXdVcmwpOwogICAgICAgICAgICB2YXIgY2F0ZWdvcnlPYmpMZW5ndGggPSBPYmplY3Qua2V5cyhjYXRlZ29yeU9iaikubGVuZ3RoOwogICAgICAgICAgICBpZihjYXRlZ29yeU9iakxlbmd0aCkgewogICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2F0ZWdvcnlPYmopLmZvckVhY2goZnVuY3Rpb24oa2V5KXsKICAgICAgICAgICAgICAgICAgICBocmVmLnNlYXJjaFBhcmFtcy5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gJ3RhZycpewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHF1ZXJ5U3RyaW5nWyd0YWcnXQogICAgICAgICAgICAgICAgICAgICAgICBocmVmLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoa2V5ID09ICdzZWFyY2hUZXJtJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcXVlcnlTdHJpbmdbJ3NlYXJjaFRlcm0nXQogICAgICAgICAgICAgICAgICAgICAgICBocmVmLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYuc2VhcmNoUGFyYW1zLnNldChrZXksIGNhdGVnb3J5T2JqW2tleV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoaXNDb25maWd1cmF0b3JQYWdlKCkgfHwgaXNDYXBDb25maWd1cmF0b3JQYWdlKCkpewogICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocXVlcnlTdHJpbmcpLmZvckVhY2goZnVuY3Rpb24oa2V5KXsKICAgICAgICAgICAgICAgICAgICBocmVmLnNlYXJjaFBhcmFtcy5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICAgICAgICBocmVmLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBxdWVyeVN0cmluZ1trZXldKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBocmVmLnRvU3RyaW5nKCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Njcm9sbGVkSW50b1ZpZXcoKSB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lZGl2Iik7CiAgICAgICAgdmFyIGRvY1ZpZXdUb3AgPSAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIHx8ICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7CiAgICAgICAgdmFyIGRvY1ZpZXdCb3R0b20gPSBkb2NWaWV3VG9wICsgd2luZG93SGVpZ2h0OwogICAgICAgIHZhciBlbGVtVG9wID0gZWxlbS5vZmZzZXRUb3A7CiAgICAgICAgdmFyIGVsZW1Cb3R0b20gPSBlbGVtVG9wICsgZWxlbS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgcmV0dXJuICgoZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tKSk7CiAgICB9CiAgICBpZiAodHlwZW9mICQgIT09ICJ1bmRlZmluZWQiKXsKICAgICAgICBpZigkKGRvY3VtZW50KS5yZWFkeSkgeyQoZG9jdW1lbnQpLnJlYWR5KHBhZ2VMb2FkLCBmYWxzZSk7fQogICAgICAgIGVsc2UgIHtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcGFnZUxvYWQsIGZhbHNlKTt9CiAgICB9ZWxzZXsKICAgICAgICBpZiAod2luZG93LmF0dGFjaEV2ZW50KSB7d2luZG93LmF0dGFjaEV2ZW50KCdvbmxvYWQnLCBwYWdlTG9hZCk7fQogICAgICAgIGVsc2UgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBwYWdlTG9hZCwgZmFsc2UpO30KICAgICAgICBlbHNlICB7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHBhZ2VMb2FkLCBmYWxzZSk7fQogICAgfQogICAgZnVuY3Rpb24gcGFnZUxvYWQoKSB7CiAgICAgICAgc2V0SWZyYW1lU3JjKCk7CiAgICAgICAgd2luZG93Lm9uc2Nyb2xsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChpc1Njcm9sbGVkSW50b1ZpZXcoKSkgewogICAgICAgICAgICAgICAgc2VuZERhdGFUb0NoaWxkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQo8L3NjcmlwdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA=[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]