[fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_wrap=”wrap” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” hide_on_mobile=”medium-visibility,large-visibility” status=”published” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” 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″ video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” pattern_bg=”none” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_blend_mode=”normal” mask_bg=”none” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_transition_offset=”0″ scroll_offset=”0″ animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ 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″ admin_label=”Website”][fusion_builder_row][fusion_builder_column type=”1_1″ type=”1_1″ layout=”1_1″ align_self=”auto” content_layout=”column” align_content=”flex-start” valign_content=”flex-start” content_wrap=”wrap” center_content=”no” column_tag=”div” target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” order_medium=”0″ order_small=”0″ hover_type=”none” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ background_type=”single” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ lazy_load=”avada” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” 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″ sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” absolute=”off” 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″ transition_duration=”300″ transition_easing=”ease” scroll_motion_devices=”small-visibility,medium-visibility,large-visibility” animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ last=”true” border_position=”all” first=”true” min_height=”” link=””][fusion_code]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KPHRpdGxlPkRNWCBQYXRjaCBQbGFubmVyPC90aXRsZT4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1KZXRCcmFpbnMrTW9ubzp3Z2h0QDQwMDs1MDA7NzAwJmZhbWlseT1TeW5lOndnaHRANjAwOzcwMDs4MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+CiAgOnJvb3QgewogICAgLS1iZzogIzBhMGEwZjsKICAgIC0tYmctMjogIzEyMTIxYTsKICAgIC0tcGFuZWw6ICMxNjE2MWY7CiAgICAtLXBhbmVsLTI6ICMxYzFjMjg7CiAgICAtLWJvcmRlcjogIzJhMmEzYTsKICAgIC0tYm9yZGVyLWhvdDogIzNkM2Q1NTsKICAgIC0tdGV4dDogI2U4ZThmMDsKICAgIC0tdGV4dC1kaW06ICM4YThhYTA7CiAgICAtLXRleHQtZmFpbnQ6ICM1YTVhNzA7CiAgICAtLWFjY2VudDogI2ZmNGQyZTsKICAgIC0tYWNjZW50LTI6ICNmZmM1M2Q7CiAgICAtLWFjY2VudC0zOiAjMDBlNWE4OwogICAgLS1kYW5nZXI6ICNmZjM4NjA7CiAgICAtLXdhcm46ICNmZmM1M2Q7CiAgfQoKICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CgogIGh0bWwsIGJvZHkgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmcpOwogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgYmFja2dyb3VuZC1pbWFnZToKICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxNSUgMTAlLCByZ2JhKDI1NSw3Nyw0NiwwLjA4KSwgdHJhbnNwYXJlbnQgNDAlKSwKICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4NSUgODAlLCByZ2JhKDAsMjI5LDE2OCwwLjA2KSwgdHJhbnNwYXJlbnQgNDUlKTsKICB9CgogIGhlYWRlciB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIHBhZGRpbmc6IDE4cHggMjhweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwxMCwxNSwwLjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDUwOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiAxMnB4OwogIH0KICAuYnJhbmQgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBmb250LXNpemU6IDIycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBiYXNlbGluZTsgZ2FwOiAxMHB4OwogIH0KICAuYnJhbmQgLmRvdCB7CiAgICB3aWR0aDogOXB4OyBoZWlnaHQ6IDlweDsgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYm94LXNoYWRvdzogMCAwIDEycHggdmFyKC0tYWNjZW50KTsKICAgIGFuaW1hdGlvbjogcHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgfQogIEBrZXlmcmFtZXMgcHVsc2UgewogICAgMCUsMTAwJSB7IG9wYWNpdHk6IDE7IH0KICAgIDUwJSB7IG9wYWNpdHk6IDAuNDU7IH0KICB9CiAgLmJyYW5kIHNtYWxsIHsKICAgIGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDExcHg7IGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1kaW0pOyBsZXR0ZXItc3BhY2luZzogMC4xZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIH0KICAuaGVhZGVyLWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDZweDsgZmxleC13cmFwOiB3cmFwOyBhbGlnbi1pdGVtczogY2VudGVyOyB9CiAgLmhlYWRlci1hY3Rpb25zIGJ1dHRvbiB7CiAgICB3aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDdweCAxMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB9CiAgLmhlYWRlci1hY3Rpb25zIGJ1dHRvbi5kYW5nZXItYnRuIHsKICAgIGNvbG9yOiB2YXIoLS1kYW5nZXIpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSw1Niw5NiwwLjMpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsNTYsOTYsMC4wNik7CiAgfQogIC5oZWFkZXItYWN0aW9ucyBidXR0b24uZGFuZ2VyLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSw1Niw5NiwwLjE0KTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGFuZ2VyKTsKICB9CgogIC8qIFB1bHNpbmcgSGVscCBidXR0b24gdG8gZHJhdyBhdHRlbnRpb24gKi8KICAuaGVhZGVyLWFjdGlvbnMgYnV0dG9uLmhlbHAtcHVsc2UgewogICAgY29sb3I6IHZhcigtLWFjY2VudC0yKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LTIpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE5NywgNjEsIDAuMDgpOwogICAgYW5pbWF0aW9uOiBoZWxwUHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgfQogIC5oZWFkZXItYWN0aW9ucyBidXR0b24uaGVscC1wdWxzZTpob3ZlciB7CiAgICBhbmltYXRpb246IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtMik7CiAgICBjb2xvcjogIzBhMGEwZjsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LTIpOwogICAgYm94LXNoYWRvdzogMCAwIDEycHggcmdiYSgyNTUsIDE5NywgNjEsIDAuNSk7CiAgfQogIC5oZWFkZXItYWN0aW9ucyBidXR0b24uaGVscC1wdWxzZS5zZWVuIHsKICAgIGFuaW1hdGlvbjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICB9CiAgLmhlYWRlci1hY3Rpb25zIGJ1dHRvbi5oZWxwLXB1bHNlLnNlZW46aG92ZXIgewogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItaG90KTsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgfQogIEBrZXlmcmFtZXMgaGVscFB1bHNlIHsKICAgIDAlLCAxMDAlIHsKICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDI1NSwgMTk3LCA2MSwgMC40KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgIH0KICAgIDUwJSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDZweCByZ2JhKDI1NSwgMTk3LCA2MSwgMCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7CiAgICB9CiAgfQoKICBtYWluIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDM0MHB4IDFmcjsKICAgIGdhcDogMDsKICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2M3B4KTsKICB9CiAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICBtYWluIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICB9CgogIC5zaWRlYmFyIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy0yKTsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDE4cHg7CiAgfQogIC53b3Jrc3BhY2UgeyBwYWRkaW5nOiAyMHB4IDI4cHg7IH0KCiAgaDIgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7CiAgfQogIGgyOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICB3aWR0aDogMTZweDsgaGVpZ2h0OiAxcHg7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7CiAgfQoKICBsYWJlbCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07CiAgICBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7CiAgICBtYXJnaW4tYm90dG9tOiA2cHg7CiAgfQoKICBpbnB1dCwgc2VsZWN0LCBidXR0b24gewogICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICBwYWRkaW5nOiA5cHggMTFweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHdpZHRoOiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICB9CiAgaW5wdXQ6Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbC0yKTsKICB9CgogIGJ1dHRvbiB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICBmb250LXNpemU6IDExcHg7CiAgfQogIGJ1dHRvbjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXBhbmVsLTIpOyBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1ob3QpOyB9CiAgYnV0dG9uLnByaW1hcnkgewogICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsKICAgIGNvbG9yOiAjMGEwYTBmOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9CiAgYnV0dG9uLnByaW1hcnk6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZmY2ZDUyOyBib3JkZXItY29sb3I6ICNmZjZkNTI7IH0KICBidXR0b24uZ2hvc3QgeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfQogIGJ1dHRvbi5kYW5nZXIgeyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IHdpZHRoOiBhdXRvOyBwYWRkaW5nOiA0cHggOHB4OyB9CiAgYnV0dG9uLmRhbmdlcjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDU2LDk2LDAuMSk7IH0KICBidXR0b24uaWNvbi1idG4gewogICAgd2lkdGg6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgfQogIGJ1dHRvbi5pY29uLWJ0bjpob3ZlciB7IGNvbG9yOiB2YXIoLS10ZXh0KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItaG90KTsgfQoKICAuZm9ybS1yb3cgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ2FwOiAxMHB4OyB9CiAgLmZvcm0tcm93LTIgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciA5MHB4OyBnYXA6IDEwcHg7IH0KCiAgLnN0YXRzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxOHB4OwogIH0KICAuc3RhdCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICB9CiAgLnN0YXQgLmxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTBweDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTsgY29sb3I6IHZhcigtLXRleHQtZmFpbnQpOwogIH0KICAuc3RhdCAudmFsdWUgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMjZweDsgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsgbWFyZ2luLXRvcDogNHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgfQogIC5zdGF0LmhpZ2hsaWdodCAudmFsdWUgeyBjb2xvcjogdmFyKC0tYWNjZW50LTIpOyB9CgogIC51bml2ZXJzZS1ibG9jayB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgfQogIC51bml2ZXJzZS1ibG9jay53YXJuIHsgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwxOTcsNjEsMC41KTsgfQogIC51bml2ZXJzZS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOwogICAgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwtMik7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIGZsZXgtd3JhcDogd3JhcDsgZ2FwOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOwogIH0KICAudW5pdmVyc2UtaGVhZGVyOmhvdmVyIHsgYmFja2dyb3VuZDogIzIzMjMzNDsgfQogIC51bml2ZXJzZS1ibG9jay5jb2xsYXBzZWQgLnVuaXZlcnNlLWhlYWRlciB7IGJvcmRlci1ib3R0b206IG5vbmU7IH0KICAuY29sbGFwc2UtY2hldnJvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1kaW0pOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2lkdGg6IDEycHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXM7CiAgfQogIC51bml2ZXJzZS1oZWFkZXI6aG92ZXIgLmNvbGxhcHNlLWNoZXZyb24geyBjb2xvcjogdmFyKC0tdGV4dCk7IH0KICAuY29sbGFwc2UtY291bnQgewogICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7CiAgICBtYXJnaW4tbGVmdDogNnB4OwogIH0KICAudW5pdmVyc2UtdGl0bGUgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsKICB9CiAgLnVuaXZlcnNlLXRpdGxlIC5jaGlwIHsKICAgIGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDEwcHg7IGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBwYWRkaW5nOiAycHggOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmcpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4xZW07CiAgfQogIC51bml2ZXJzZS10aXRsZSAuY2hpcC53YXJuIHsKICAgIGNvbG9yOiB2YXIoLS13YXJuKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMTk3LDYxLDAuNCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwxOTcsNjEsMC4wOCk7CiAgfQogIC51bml2ZXJzZS1tZXRlciB7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7IGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgfQogIC5tZXRlci1iYXIgewogICAgd2lkdGg6IDE0MHB4OyBoZWlnaHQ6IDZweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiAxcHg7IG92ZXJmbG93OiBoaWRkZW47CiAgfQogIC5tZXRlci1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tYWNjZW50LTMpLCB2YXIoLS1hY2NlbnQtMiksIHZhcigtLWFjY2VudCkpOwogICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlOwogIH0KCiAgdGFibGUgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgZm9udC1zaXplOiAxMnB4OwogIH0KICB0aCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZzogMTBweCAxNHB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWZhaW50KTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICB9CiAgdGQgewogICAgcGFkZGluZzogOXB4IDE0cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgfQogIHRyOmxhc3QtY2hpbGQgdGQgeyBib3JkZXItYm90dG9tOiBub25lOyB9CiAgdHI6aG92ZXIgdGQgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDIpOyB9CiAgdHIuZHJhZ2dpbmcgdGQgeyBvcGFjaXR5OiAwLjQ7IH0KICB0ci5kcm9wLWFib3ZlIHRkIHsgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHZhcigtLWFjY2VudCk7IH0KICB0ci5kcm9wLWJlbG93IHRkIHsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWFjY2VudCk7IH0KICB0ZC5hZGRyIHsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLWFjY2VudC0yKTsgfQogIHRkLmFkZHIubG9ja2VkIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICB0ZC5hZGRyLmxvY2tlZDo6YWZ0ZXIgewogICAgY29udGVudDogJ/CflJInOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgb3BhY2l0eTogMC43OwogIH0KICB0ZC5maXggeyBjb2xvcjogdmFyKC0tdGV4dCk7IH0KICB0ZC5maXggLm1mciB7IGNvbG9yOiB2YXIoLS10ZXh0LWZhaW50KTsgZm9udC1zaXplOiAxMHB4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4wOGVtOyB9CiAgdGQuZml4IC5ncm91cC10YWcgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBwYWRkaW5nOiAxcHggNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDIyOSwxNjgsMC4xKTsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMyk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBtYXJnaW4tbGVmdDogNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgfQogIHRkLmNoIHsgY29sb3I6IHZhcigtLXRleHQtZGltKTsgZm9udC1zaXplOiAxMXB4OyB9CiAgdGQubnVtIHsgdGV4dC1hbGlnbjogcmlnaHQ7IGNvbG9yOiB2YXIoLS1hY2NlbnQtMyk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0KICB0ZC5kcmFnLWhhbmRsZSB7CiAgICB3aWR0aDogMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWZhaW50KTsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcGFkZGluZzogMCA2cHg7CiAgfQogIHRkLmRyYWctaGFuZGxlOmFjdGl2ZSB7IGN1cnNvcjogZ3JhYmJpbmc7IH0KICB0ZC5kcmFnLWhhbmRsZTpob3ZlciB7IGNvbG9yOiB2YXIoLS10ZXh0KTsgfQoKICBpbnB1dC5hZGRyLWVkaXQsIGlucHV0Lm5hbWUtZWRpdCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tYWNjZW50LTIpOwogICAgd2lkdGg6IDcwcHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICB9CiAgaW5wdXQuYWRkci1lZGl0OmhvdmVyLCBpbnB1dC5uYW1lLWVkaXQ6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItaG90KTsKICB9CiAgaW5wdXQuYWRkci1lZGl0OmZvY3VzLCBpbnB1dC5uYW1lLWVkaXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQpOwogICAgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwtMik7CiAgfQogIC5hZGRyLWNvbWJvIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMnB4OwogIH0KICAuYWRkci1zZXAgewogICAgY29sb3I6IHZhcigtLXRleHQtZmFpbnQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbWFyZ2luOiAwIDJweDsKICB9CiAgLmFkZHItZW5kIHsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMik7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgb3BhY2l0eTogMC43OwogIH0KICBpbnB1dC5uYW1lLWVkaXQgewogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiAyMjBweDsKICB9CgogIHNlbGVjdC5tb2RlLWVkaXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgcGFkZGluZy1yaWdodDogMThweDsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzEwJyBoZWlnaHQ9JzEwJyB2aWV3Qm94PScwIDAgMTAgMTAnJTNlJTNjcGF0aCBmaWxsPSclMjM4YThhYTAnIGQ9J001IDdMMSAzaDh6Jy8lM2UlM2Mvc3ZnJTNlIik7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgNHB4IGNlbnRlcjsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cywgYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXM7CiAgfQogIHNlbGVjdC5tb2RlLWVkaXQ6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItaG90KTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhbmVsLTIpOwogIH0KICBzZWxlY3QubW9kZS1lZGl0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYW5lbC0yKTsKICB9CiAgc2VsZWN0Lm1vZGUtZWRpdCBvcHRpb24gewogICAgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwpOwogICAgY29sb3I6IHZhcigtLXRleHQpOwogIH0KCiAgLmVtcHR5IHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDYwcHggMjBweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWZhaW50KTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KICAuZW1wdHkgaDMgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KICAuZW1wdHkga2JkIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsLTIpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICBtYXJnaW46IDAgMnB4OwogIH0KICAuZW1wdHktbm90aWNlIHsKICAgIG1hcmdpbjogMjhweCBhdXRvIDA7CiAgICBtYXgtd2lkdGg6IDUyMHB4OwogICAgcGFkZGluZzogMThweCAyMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE5NywgNjEsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE5NywgNjEsIDAuMjgpOwogICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hY2NlbnQtMik7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgY29sb3I6IHZhcigtLXRleHQtZGltKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQogIC5lbXB0eS1ub3RpY2UtdGl0bGUgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOwogICAgY29sb3I6IHZhcigtLWFjY2VudC0yKTsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgfQogIC5lbXB0eS1ub3RpY2UgcCB7IG1hcmdpbjogMDsgfQogIC5lbXB0eS1ub3RpY2Ugc3Ryb25nIHsgY29sb3I6IHZhcigtLXRleHQpOyB9CiAgLmVtcHR5LW5vdGljZSBlbSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6IHZhcigtLXRleHQpOyB9CgogIC5mbGFzaC13YXJuIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tZGFuZ2VyKTsKICAgIHBhZGRpbmc6IDFweCA3cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSw1Niw5NiwwLjUpOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsNTYsOTYsMC4xKTsKICAgIGFuaW1hdGlvbjogZmxhc2hXYXJuIDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDJweCByZ2JhKDI1NSw1Niw5NiwwLjMpOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogIH0KICBAa2V5ZnJhbWVzIGZsYXNoV2FybiB7CiAgICAwJSwgMTAwJSB7CiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDU2LDk2LDAuMDgpOwogICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDU2LDk2LDAuMzUpOwogICAgICBjb2xvcjogdmFyKC0tZGFuZ2VyKTsKICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDI1NSw1Niw5NiwwLjUpOwogICAgfQogICAgNTAlIHsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsNTYsOTYsMC4yOCk7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGFuZ2VyKTsKICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAxNHB4IDJweCByZ2JhKDI1NSw1Niw5NiwwLjU1KTsKICAgIH0KICB9CgogIC5maWx0ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7IGdhcDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICB9CiAgLmZpbHRlci1yb3cgaW5wdXQsIC5maWx0ZXItcm93IHNlbGVjdCB7IGZsZXg6IDE7IG1pbi13aWR0aDogMTgwcHg7IHdpZHRoOiBhdXRvOyB9CgogIC50b2FzdCB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICBib3R0b206IDI0cHg7IHJpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMTJweCAxOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwtMik7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItaG90KTsKICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYWNjZW50LTMpOwogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICAgIG1heC13aWR0aDogMzYwcHg7CiAgfQogIC50b2FzdC5zaG93IHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9CiAgLnRvYXN0LmVycm9yIHsgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWRhbmdlcik7IH0KICAudG9hc3Qud2FybiB7IGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS13YXJuKTsgfQoKICBpbnB1dFt0eXBlPSJmaWxlIl0geyBkaXNwbGF5OiBub25lOyB9CiAgLmZpbGUtYnRuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogOXB4IDExcHg7CiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tYm9yZGVyLWhvdCk7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgfQogIC5maWxlLWJ0bjpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KCiAgLnNpZGViYXItc2VjdGlvbiB7IHBhZGRpbmctYm90dG9tOiAxNnB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgfQogIC5zaWRlYmFyLXNlY3Rpb246bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH0KCiAgLm1vZGUtcm93IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciA3MHB4IDI4cHg7CiAgICBnYXA6IDZweDsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5tb2RlLXJvdyBpbnB1dCB7IHBhZGRpbmc6IDZweCA4cHg7IGZvbnQtc2l6ZTogMTJweDsgfQogIC5tb2RlLXJvdyAubW9kZS1yZW1vdmUgewogICAgcGFkZGluZzogNHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLXRleHQtZmFpbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAubW9kZS1yb3cgLm1vZGUtcmVtb3ZlOmhvdmVyIHsKICAgIGNvbG9yOiB2YXIoLS1kYW5nZXIpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSw1Niw5NiwwLjMpOwogIH0KICAubW9kZS1hZGQtYnRuIHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tYm9yZGVyLWhvdCk7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1kaW0pOwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgbWFyZ2luLXRvcDogMnB4OwogIH0KICAubW9kZS1hZGQtYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwogIH0KCiAgLmFkZC1wcmV2aWV3IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWFjY2VudC0zKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHBhZGRpbmc6IDlweCAxMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLXRleHQtZGltKTsKICAgIGxpbmUtaGVpZ2h0OiAxLjU1OwogICAgbWluLWhlaWdodDogMzZweDsKICB9CiAgLmFkZC1wcmV2aWV3LmVtcHR5IHsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1ib3JkZXItaG90KTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWZhaW50KTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CiAgLmFkZC1wcmV2aWV3IC5saW5lIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBnYXA6IDhweDsgfQogIC5hZGQtcHJldmlldyAuYWRkci1oaW50IHsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMik7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgZm9udC1zaXplOiAxMnB4OwogIH0KICAuYWRkLXByZXZpZXcgLm1ldGEgewogICAgY29sb3I6IHZhcigtLXRleHQtZmFpbnQpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7CiAgfQogIC5hZGQtcHJldmlldy53YXJuIHsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS13YXJuKTsKICAgIGNvbG9yOiB2YXIoLS13YXJuKTsKICB9CgogIC5zaG9ydGN1dHMtaGludCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7CiAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KICAuc2hvcnRjdXRzLWhpbnQga2JkIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwYWRkaW5nOiAxcHggNXB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgbWFyZ2luOiAwIDFweDsKICB9CgogIDo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyB9CiAgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgfQogIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiAycHg7IH0KICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWhvdCk7IH0KCiAgLyogU21hbGwgbG9nbyBiYWRnZSBpbiBib3R0b20gY29ybmVyICovCiAgLmxvZ28tYmFkZ2UgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYm90dG9tOiAxNHB4OwogICAgbGVmdDogMTRweDsKICAgIHotaW5kZXg6IDQwOwogICAgb3BhY2l0eTogMC41NTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgfQogIC5sb2dvLWJhZGdlOmhvdmVyIHsgb3BhY2l0eTogMTsgfQogIC5sb2dvLWJhZGdlIGltZyB7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICB3aWR0aDogYXV0bzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDFweCAzcHggcmdiYSgwLDAsMCwwLjYpKTsKICB9CiAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubG9nby1iYWRnZSB7IGJvdHRvbTogOHB4OyBsZWZ0OiA4cHg7IH0KICAgIC5sb2dvLWJhZGdlIGltZyB7IGhlaWdodDogMjJweDsgfQogIH0KICBAbWVkaWEgcHJpbnQgewogICAgLmxvZ28tYmFkZ2UgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICB9CgogIC8qID09PT09PT09IE1PREFMID09PT09PT09ICovCiAgLm1vZGFsLW92ZXJsYXkgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIGluc2V0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSg1LCA1LCAxMCwgMC43OCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsKICAgIHotaW5kZXg6IDEwMDA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiA0MHB4IDIwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogIH0KICAubW9kYWwtb3ZlcmxheS5vcGVuIHsgZGlzcGxheTogZmxleDsgfQogIC5tb2RhbC1ib3ggewogICAgYmFja2dyb3VuZDogdmFyKC0tYmctMik7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItaG90KTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG1heC13aWR0aDogNzIwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjYpOwogICAgYW5pbWF0aW9uOiBtb2RhbFNsaWRlIDAuMjJzIGVhc2Utb3V0OwogIH0KICBAa2V5ZnJhbWVzIG1vZGFsU2xpZGUgewogICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7IH0KICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9CiAgfQogIC5tb2RhbC1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxNnB4IDIycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogIH0KICAubW9kYWwtaGVhZGVyIGgzIHsKICAgIGZvbnQtZmFtaWx5OiAnU3luZScsIHNhbnMtc2VyaWY7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgbWFyZ2luOiAwOwogIH0KICAubW9kYWwtYm9keSB7CiAgICBwYWRkaW5nOiAyMnB4IDI4cHggMjhweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgY29sb3I6IHZhcigtLXRleHQtZGltKTsKICB9CiAgLm1vZGFsLWJvZHkgaDQgewogICAgZm9udC1mYW1pbHk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMik7CiAgICBtYXJnaW46IDIycHggMCA4cHg7CiAgICBwYWRkaW5nLWJvdHRvbTogNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCB2YXIoLS1ib3JkZXIpOwogIH0KICAubW9kYWwtYm9keSBoNDpmaXJzdC1vZi10eXBlIHsgbWFyZ2luLXRvcDogMTZweDsgfQogIC5tb2RhbC1ib2R5IHVsIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogIH0KICAubW9kYWwtYm9keSB1bCBsaSB7CiAgICBwYWRkaW5nOiA0cHggMCA0cHggMThweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CiAgLm1vZGFsLWJvZHkgdWwgbGk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAn4oC6JzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDRweDsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMyk7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KICAubW9kYWwtYm9keSB1bC5rYmQtbGlzdCBsaTo6YmVmb3JlIHsgY29udGVudDogJyc7IHBhZGRpbmc6IDA7IH0KICAubW9kYWwtYm9keSB1bC5rYmQtbGlzdCBsaSB7IHBhZGRpbmctbGVmdDogMDsgfQogIC5tb2RhbC1ib2R5IHAgeyBtYXJnaW46IDZweCAwOyB9CiAgLm1vZGFsLWJvZHkgc3Ryb25nIHsgY29sb3I6IHZhcigtLXRleHQpOyB9CiAgLm1vZGFsLWJvZHkgY29kZSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtMik7CiAgfQogIC5tb2RhbC1ib2R5IGtiZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItaG90KTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgYm94LXNoYWRvdzogMCAxcHggMCB2YXIoLS1ib3JkZXIpOwogICAgbWFyZ2luOiAwIDJweDsKICB9CiAgLmhlbHAtYWxlcnQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE5NywgNjEsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE5NywgNjEsIDAuMzUpOwogICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS13YXJuKTsKICAgIHBhZGRpbmc6IDE0cHggMTZweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIG1hcmdpbi1ib3R0b206IDE4cHg7CiAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgfQogIC5oZWxwLWFsZXJ0IHN0cm9uZyB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiB2YXIoLS13YXJuKTsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgIGZvbnQtZmFtaWx5OiAnU3luZScsIHNhbnMtc2VyaWY7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KICAuaGVscC1hbGVydCBwIHsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRpbSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtYXJnaW46IDZweCAwOwogICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgfQogIC5oZWxwLWFsZXJ0IHN0cm9uZyBzdHJvbmcsIC5oZWxwLWFsZXJ0IHAgc3Ryb25nIHsgZGlzcGxheTogaW5saW5lOyBjb2xvcjogdmFyKC0tdGV4dCk7IGZvbnQtc2l6ZTogaW5oZXJpdDsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IG1hcmdpbjogMDsgbGV0dGVyLXNwYWNpbmc6IDA7IH0KCiAgLyogPT09PT09PT0gUFJJTlQgU1RZTEVTID09PT09PT09ICovCiAgQG1lZGlhIHByaW50IHsKICAgIDpyb290IHsKICAgICAgLS1iZzogI2ZmZjsKICAgICAgLS1iZy0yOiAjZmZmOwogICAgICAtLXBhbmVsOiAjZmZmOwogICAgICAtLXBhbmVsLTI6ICNmNmY2ZjY7CiAgICAgIC0tYm9yZGVyOiAjY2NjOwogICAgICAtLWJvcmRlci1ob3Q6ICNhYWE7CiAgICAgIC0tdGV4dDogIzAwMDsKICAgICAgLS10ZXh0LWRpbTogIzQ0NDsKICAgICAgLS10ZXh0LWZhaW50OiAjNzc3OwogICAgICAtLWFjY2VudDogI2MzM2QxZDsKICAgICAgLS1hY2NlbnQtMjogIzhhNWIwMDsKICAgICAgLS1hY2NlbnQtMzogIzAwNjA0MDsKICAgIH0KICAgIGh0bWwsIGJvZHkgeyBiYWNrZ3JvdW5kOiAjZmZmOyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfQogICAgaGVhZGVyLCAuc2lkZWJhciwgLmZpbHRlci1yb3csCiAgICAuaGVhZGVyLWFjdGlvbnMsIC50b2FzdCwgYnV0dG9uLCAuZW1wdHksCiAgICB0ZDpsYXN0LWNoaWxkLCB0aDpsYXN0LWNoaWxkLAogICAgdGQuZHJhZy1oYW5kbGUsIHRoLmRyYWctaGFuZGxlLWNvbCwKICAgIC5jb2xsYXBzZS1jaGV2cm9uLCAuY29sbGFwc2UtY291bnQgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAudW5pdmVyc2UtaGVhZGVyIHsgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7IH0KICAgIG1haW4geyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfQogICAgLndvcmtzcGFjZSB7IHBhZGRpbmc6IDEwcHg7IH0KICAgIC5zdGF0cyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQogICAgLnVuaXZlcnNlLWJsb2NrIHsgcGFnZS1icmVhay1pbnNpZGU6IGF1dG87IGJvcmRlcjogMXB4IHNvbGlkICMwMDA7IG1hcmdpbi1ib3R0b206IDE0cHg7IGJveC1zaGFkb3c6IG5vbmU7IH0KICAgIC51bml2ZXJzZS1oZWFkZXIgeyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzAwMDsgfQogICAgdGFibGUgeyBmb250LXNpemU6IDExcHg7IH0KICAgIHRoIHsgYmFja2dyb3VuZDogI2VlZTsgY29sb3I6ICMwMDA7IH0KICAgIHRkIHsgY29sb3I6ICMwMDA7IH0KICAgIHRkLmFkZHIgeyBjb2xvcjogIzAwMDsgfQogICAgaW5wdXQuYWRkci1lZGl0LCBpbnB1dC5uYW1lLWVkaXQgeyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogIzAwMDsgZm9udC13ZWlnaHQ6IDcwMDsgcGFkZGluZzogMDsgfQogICAgc2VsZWN0Lm1vZGUtZWRpdCB7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogIzAwMDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwOwogICAgICBhcHBlYXJhbmNlOiBub25lOyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgICB9CiAgICBib2R5OjpiZWZvcmUgewogICAgICBjb250ZW50OiAiRE1YIFBhdGNoIFNoZWV0IOKAlCAiIGF0dHIoZGF0YS1wcmludC1kYXRlKTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGZvbnQtZmFtaWx5OiAnU3luZScsIHNhbnMtc2VyaWY7CiAgICAgIGZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgcGFkZGluZzogMTBweDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDA7IG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICB9CiAgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPGhlYWRlcj4KICA8ZGl2IGNsYXNzPSJicmFuZCI+CiAgICA8c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+CiAgICBETVggUEFUQ0ggUExBTk5FUgogICAgPHNtYWxsPnVuaXZlcnNlIGNhbGN1bGF0b3IgwrcgYWRkcmVzcyBtYXBwZXI8L3NtYWxsPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImhlYWRlci1hY3Rpb25zIj4KICAgIDxidXR0b24gb25jbGljaz0icHJpbnRQYXRjaCgpIiB0aXRsZT0iUHJpbnQgcGF0Y2ggc2hlZXQiPvCflqggUHJpbnQ8L2J1dHRvbj4KICAgIDxidXR0b24gb25jbGljaz0iZXhwb3J0UGF0Y2goJ2pzb24nKSIgdGl0bGU9IkRvd25sb2FkIHRoZSBmdWxsIGZpeHR1cmUgbGlicmFyeSBhcyBKU09OIj7irIcgTGlicmFyeTwvYnV0dG9uPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJleHBvcnRQYXRjaCgneGxzeCcpIiB0aXRsZT0iRXhwb3J0IGFzIEV4Y2VsIHNwcmVhZHNoZWV0Ij7irIcgRXhjZWw8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9ImhlbHAtcHVsc2UiIG9uY2xpY2s9Im9wZW5IZWxwKCkiIHRpdGxlPSJIZWxwICYgdGlwcyI+PyBIZWxwPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJkYW5nZXItYnRuIiBvbmNsaWNrPSJjbGVhckFsbCgpIiB0aXRsZT0iUmVtb3ZlIGFsbCBmaXh0dXJlcyI+4pyVIENsZWFyIEFsbDwvYnV0dG9uPgogIDwvZGl2Pgo8L2hlYWRlcj4KCjxtYWluPgogIDxhc2lkZSBjbGFzcz0ic2lkZWJhciI+CgogICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgPGgyPkFkZCBGaXh0dXJlPC9oMj4KICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8bGFiZWw+TWFudWZhY3R1cmVyPC9sYWJlbD4KICAgICAgICAgIDxzZWxlY3QgaWQ9Im1mclNlbGVjdCIgb25jaGFuZ2U9InVwZGF0ZU1vZGVsTGlzdCgpOyB1cGRhdGVQcmV2aWV3KCk7Ij48L3NlbGVjdD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGxhYmVsPk1vZGVsPC9sYWJlbD4KICAgICAgICAgIDxzZWxlY3QgaWQ9Im1vZGVsU2VsZWN0IiBvbmNoYW5nZT0idXBkYXRlTW9kZUxpc3QoKTsgdXBkYXRlUHJldmlldygpOyI+PC9zZWxlY3Q+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxsYWJlbD5ETVggTW9kZTwvbGFiZWw+CiAgICAgICAgICA8c2VsZWN0IGlkPSJtb2RlU2VsZWN0IiBvbmNoYW5nZT0idXBkYXRlUHJldmlldygpIj48L3NlbGVjdD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdy0yIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxsYWJlbD5OYW1lIFByZWZpeCAob3B0aW9uYWwpPC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJjdXN0b21OYW1lIiBwbGFjZWhvbGRlcj0iZS5nLiBTdGFnZSBTcG90Ij4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsPlF0eTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJxdHlJbnB1dCIgdmFsdWU9IjEiIG1pbj0iMSIgbWF4PSI2NCIgb25pbnB1dD0idXBkYXRlUHJldmlldygpIj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93LTIiPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsPkdyb3VwIChvcHRpb25hbCk8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Imdyb3VwSW5wdXQiIHBsYWNlaG9sZGVyPSJlLmcuIEZyb250IFRydXNzIiBsaXN0PSJncm91cFN1Z2dlc3QiPgogICAgICAgICAgICA8ZGF0YWxpc3QgaWQ9Imdyb3VwU3VnZ2VzdCI+PC9kYXRhbGlzdD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsPkF1dG8tIzwvbGFiZWw+CiAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImF1dG9OdW1iZXIiIHN0eWxlPSJmb250LXNpemU6MTFweDsiPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPlllczwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPk5vPC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iYWRkUHJldmlldyIgY2xhc3M9ImFkZC1wcmV2aWV3Ij48L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJwcmltYXJ5IiBvbmNsaWNrPSJhZGRGaXh0dXJlcygpIj7vvIsgUGF0Y2ggRml4dHVyZXMgPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC42O2ZvbnQtc2l6ZToxMHB4OyI+KEVudGVyKTwvc3Bhbj48L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICA8aDI+VW5pdmVyc2UgU2V0dGluZ3M8L2gyPgogICAgICA8ZGl2PgogICAgICAgIDxsYWJlbD5GaXJzdCBVbml2ZXJzZSBOdW1iZXI8L2xhYmVsPgogICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ1bml2ZXJzZVN0YXJ0IiB2YWx1ZT0iMSIgbWluPSIwIiBtYXg9IjEwMDAiIG9uY2hhbmdlPSJyZXJlbmRlcigpOyB1cGRhdGVQcmV2aWV3KCk7Ij4KICAgICAgPC9kaXY+CiAgICAgIDxwIGNsYXNzPSJzaG9ydGN1dHMtaGludCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPgogICAgICAgIFNvbWUgY29uc29sZXMgc3RhcnQgYXQgdW5pdmVyc2UgMCBvciB1c2UgYSBjdXN0b20gYmFzZS4gRml4dHVyZXMgd2lsbCBiZSBudW1iZXJlZCBzdGFydGluZyBmcm9tIHRoaXMgdmFsdWUuCiAgICAgIDwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgIDxoMj5BZGQgdG8gTGlicmFyeTwvaDI+CiAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGxhYmVsPk1hbnVmYWN0dXJlcjwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ld01mciIgcGxhY2Vob2xkZXI9ImUuZy4gQWNtZSBMaWdodGluZyIgbGlzdD0ibWZyU3VnZ2VzdCI+CiAgICAgICAgICA8ZGF0YWxpc3QgaWQ9Im1mclN1Z2dlc3QiPjwvZGF0YWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxsYWJlbD5Nb2RlbDwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ld01vZGVsIiBwbGFjZWhvbGRlcj0iZS5nLiBTdXBlckJlYW0gNTAwIj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGxhYmVsPkRNWCBNb2RlczwvbGFiZWw+CiAgICAgICAgICA8ZGl2IGlkPSJtb2RlUm93cyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGUtcm93Ij4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1vZGUtbmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWUgKGUuZy4gOGNoKSI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1vZGUtY2hhbm5lbHMiIHBsYWNlaG9sZGVyPSJDaCIgbWluPSIxIiBtYXg9IjUxMiI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idG4gbW9kZS1yZW1vdmUiIG9uY2xpY2s9InJlbW92ZU1vZGVSb3codGhpcykiIHRpdGxlPSJSZW1vdmUiPuKclTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9kZS1hZGQtYnRuIiBvbmNsaWNrPSJhZGRNb2RlUm93KCkiPu+8iyBBZGQgTW9kZTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxidXR0b24gY2xhc3M9InByaW1hcnkiIG9uY2xpY2s9ImFkZEZpeHR1cmVUb0xpYnJhcnkoKSI+77yLIFNhdmUgdG8gTGlicmFyeTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgIDxoMj5EZWxldGUgQ3VzdG9tIEZpeHR1cmU8L2gyPgogICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgPHNlbGVjdCBpZD0iZGVsZXRlQ3VzdG9tU2VsZWN0Ij48L3NlbGVjdD4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJkYW5nZXItYnRuIiBvbmNsaWNrPSJkZWxldGVTZWxlY3RlZEN1c3RvbSgpIiBzdHlsZT0icGFkZGluZzogOHB4OyI+8J+XkSBEZWxldGUgZnJvbSBMaWJyYXJ5PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOiAxMHB4OyBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7IG1hcmdpbi10b3A6IDhweDsgbGluZS1oZWlnaHQ6IDEuNTsiPgogICAgICAgIE9ubHkgY3VzdG9tIGZpeHR1cmVzIGNhbiBiZSBkZWxldGVkLiBCdWlsdC1pbiBmaXh0dXJlcyBmcm9tIEFESiwgQ2hhdXZldCwgRWxhdGlvbiwgYW5kIE1hcnRpbiBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgPGgyPkltcG9ydCBMaWJyYXJ5IChKU09OKTwvaDI+CiAgICAgIDxsYWJlbCBjbGFzcz0iZmlsZS1idG4iIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbXBvcnRMaWInKS5jbGljaygpIj4KICAgICAgICDvvIsgTG9hZCAuanNvbiBGaWxlCiAgICAgIDwvbGFiZWw+CiAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iaW1wb3J0TGliIiBhY2NlcHQ9Ii5qc29uIiBvbmNoYW5nZT0iaW1wb3J0Rml4dHVyZXMoZXZlbnQpIj4KICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTogMTBweDsgY29sb3I6IHZhcigtLXRleHQtZmFpbnQpOyBtYXJnaW4tdG9wOiA4cHg7IGxpbmUtaGVpZ2h0OiAxLjU7Ij4KICAgICAgICBXb3JrcyB3aXRoIGxpYnJhcnkgZXhwb3J0cyBmcm9tIHRoaXMgdG9vbC4gQ3VzdG9tIGZpeHR1cmVzIHBlcnNpc3QgaW4gdGhpcyBicm93c2VyIGJldHdlZW4gc2Vzc2lvbnMg4oCUIHVzZSA8c3Ryb25nPuKshyBMaWJyYXJ5PC9zdHJvbmc+IGluIHRoZSBoZWFkZXIgdG8gYmFjayB0aGVtIHVwLgogICAgICA8L3A+CiAgICAgIDxidXR0b24gb25jbGljaz0icmVzZXRMaWJyYXJ5KCkiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZzogNnB4OyBmb250LXNpemU6IDEwcHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7IiB0aXRsZT0iUmVtb3ZlIGFsbCBjdXN0b20gZml4dHVyZXMgYW5kIHJlc2V0IHRvIGJ1aWx0LWlucyI+4oa6IFJlc2V0IHRvIEJ1aWx0LWluIExpYnJhcnk8L2J1dHRvbj4KICAgIDwvZGl2PgoKICA8L2FzaWRlPgoKICA8c2VjdGlvbiBjbGFzcz0id29ya3NwYWNlIj4KICAgIDxkaXYgY2xhc3M9InN0YXRzIj4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPkZpeHR1cmVzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIGlkPSJzdGF0Rml4dHVyZXMiPjA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQiPgogICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj5DaGFubmVscyBVc2VkPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIGlkPSJzdGF0Q2hhbm5lbHMiPjA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQgaGlnaGxpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+VW5pdmVyc2VzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIGlkPSJzdGF0VW5pdmVyc2VzIj4wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+R3JvdXBzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIGlkPSJzdGF0R3JvdXBzIj4wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZmlsdGVyLXJvdyI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZmlsdGVySW5wdXQiIHBsYWNlaG9sZGVyPSJGaWx0ZXIgYnkgbmFtZSwgbW9kZWwsIG1hbnVmYWN0dXJlciwgb3IgZ3JvdXAuLi4iIG9uaW5wdXQ9InJlcmVuZGVyKCkiPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0icGF0Y2hBcmVhIj48L2Rpdj4KICA8L3NlY3Rpb24+CjwvbWFpbj4KCjxkaXYgaWQ9InRvYXN0IiBjbGFzcz0idG9hc3QiPjwvZGl2PgoKPGRpdiBpZD0iaGVscE1vZGFsIiBjbGFzcz0ibW9kYWwtb3ZlcmxheSIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZUhlbHAoKSI+CiAgPGRpdiBjbGFzcz0ibW9kYWwtYm94Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgIDxoMz5ETVggUGF0Y2ggUGxhbm5lciDigJQgSGVscDwvaDM+CiAgICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIiBvbmNsaWNrPSJjbG9zZUhlbHAoKSIgdGl0bGU9IkNsb3NlIj7inJU8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CgogICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFsZXJ0Ij4KICAgICAgICA8c3Ryb25nPuKaoCBTYXZlIHlvdXIgY3VzdG9tIGxpYnJhcnkhPC9zdHJvbmc+CiAgICAgICAgPHA+Q3VzdG9tIGZpeHR1cmVzIHlvdSBhZGQgbGl2ZSBpbiB5b3VyIGJyb3dzZXIncyBsb2NhbCBzdG9yYWdlIOKAlCBpZiB5b3UgY2xlYXIgeW91ciBicm93c2VyIGRhdGEsIHVzZSBhIGRpZmZlcmVudCBicm93c2VyL2RldmljZSwgb3IgdGhlIGJyb3dzZXIgZm9yZ2V0cyAoZS5nLiBwcml2YXRlL2luY29nbml0byksIDxzdHJvbmc+dGhleSdsbCBiZSBnb25lPC9zdHJvbmc+LjwvcD4KICAgICAgICA8cD5DbGljayA8c3Ryb25nPuKshyBMaWJyYXJ5PC9zdHJvbmc+IGluIHRoZSB0b3AgYmFyIGFueXRpbWUgdG8gZG93bmxvYWQgYSBKU09OIGJhY2t1cCBvZiBldmVyeXRoaW5nIChidWlsdC1pbiArIHlvdXIgY3VzdG9tIGFkZGl0aW9ucykuIEtlZXAgdGhhdCBmaWxlIHNvbWV3aGVyZSBzYWZlLiBSZS1pbXBvcnQgaXQgb24gYW55IGRldmljZSB2aWEgdGhlIDxzdHJvbmc+77yLIExvYWQgLmpzb24gRmlsZTwvc3Ryb25nPiBidXR0b24gaW4gdGhlIHNpZGViYXIuPC9wPgogICAgICA8L2Rpdj4KCiAgICAgIDxoND5BZGRpbmcgJiBwYXRjaGluZyBmaXh0dXJlczwvaDQ+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5QaWNrIOKGkiBwYXRjaDo8L3N0cm9uZz4gc2VsZWN0IGEgbWFudWZhY3R1cmVyLCBtb2RlbCwgYW5kIERNWCBtb2RlIGZyb20gdGhlIHNpZGViYXIgZHJvcGRvd25zLiBPcHRpb25hbGx5IGdpdmUgaXQgYSBuYW1lIHByZWZpeCwgYSBncm91cCB0YWcsIGFuZCBhIHF1YW50aXR5LCB0aGVuIGhpdCA8c3Ryb25nPu+8iyBQYXRjaCBGaXh0dXJlczwvc3Ryb25nPiAob3IgcHJlc3MgPGtiZD5FbnRlcjwva2JkPikuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5BdXRvLSM6PC9zdHJvbmc+IHdpdGggcXVhbnRpdHkgJmd0OyAxIGFuZCBhIG5hbWUgcHJlZml4LCBmaXh0dXJlcyBhdXRvLW51bWJlciAoIlNwb3QgMSwgU3BvdCAy4oCmIikuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5MaXZlIHByZXZpZXc6PC9zdHJvbmc+IHRoZSBib3ggYmVsb3cgdGhlIGZvcm0gc2hvd3MgZXhhY3RseSB3aGF0IGFkZHJlc3NlcyB5b3VyIG5leHQgYWRkIHdpbGwgdGFrZSBiZWZvcmUgeW91IGNvbW1pdC48L2xpPgogICAgICA8L3VsPgoKICAgICAgPGg0PkVkaXRpbmcgdGhlIHBhdGNoPC9oND4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPkNoYW5nZSBtb2RlOjwvc3Ryb25nPiBjbGljayB0aGUgbW9kZSBkcm9wZG93biBpbiBhbnkgcm93LiBJdCB1cGRhdGVzIGFsbCBmaXh0dXJlcyBvZiB0aGUgc2FtZSBtb2RlbCB0byB0aGUgbmV3IG1vZGUgYXV0b21hdGljYWxseS48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPlJlbmFtZTo8L3N0cm9uZz4gY2xpY2sgdGhlIGZpeHR1cmUgbmFtZSBjZWxsIGFuZCB0eXBlLjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+TG9jayBhbiBhZGRyZXNzOjwvc3Ryb25nPiBjbGljayB0aGUgYWRkcmVzcyBjZWxsIGFuZCB0eXBlIDxjb2RlPjEyMzwvY29kZT4gb3IgPGNvZGU+VTIvMTIzPC9jb2RlPi4gTG9ja2VkIGZpeHR1cmVzIHNob3cg8J+UkiBhbmQga2VlcCB0aGVpciBhZGRyZXNzOyBvdGhlcnMgYXV0by1wYXRjaCBhcm91bmQgdGhlbS48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPlVubG9jazo8L3N0cm9uZz4gY2xpY2sg8J+UkyBpbiB0aGUgYWN0aW9ucyBjb2x1bW4uPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5SZW9yZGVyOjwvc3Ryb25nPiBkcmFnIHRoZSA8Y29kZT7ii67ii648L2NvZGU+IGhhbmRsZS48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPkR1cGxpY2F0ZTo8L3N0cm9uZz4gY2xpY2sg4o6YIG9yIHByZXNzIDxrYmQ+Q21kL0N0cmwrRDwva2JkPiB3aGlsZSBmb2N1c2VkIG9uIGEgcm93LjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+RGVsZXRlOjwvc3Ryb25nPiBjbGljayDinJUgb3IgcHJlc3MgPGtiZD5EZWw8L2tiZD4vPGtiZD5CYWNrc3BhY2U8L2tiZD4gd2hpbGUgZm9jdXNlZCBvbiBhIHJvdy48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPkNvbGxhcHNlIGEgdW5pdmVyc2U6PC9zdHJvbmc+IGNsaWNrIHRoZSB1bml2ZXJzZSBoZWFkZXIuIFVzZWZ1bCBmb3IgYmlnIHJpZ3MuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxoND5NYW5hZ2luZyB5b3VyIGxpYnJhcnk8L2g0PgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+QWRkIGEgbmV3IGZpeHR1cmU6PC9zdHJvbmc+IGZpbGwgb3V0IHRoZSAiQWRkIHRvIExpYnJhcnkiIGZvcm0gaW4gdGhlIHNpZGViYXIg4oCUIG1hbnVmYWN0dXJlciwgbW9kZWwsIGFuZCBvbmUgb3IgbW9yZSBETVggbW9kZXMgKG5hbWUgKyBjaGFubmVsIGNvdW50KS4gSGl0IDxzdHJvbmc+77yLIFNhdmUgdG8gTGlicmFyeTwvc3Ryb25nPi48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPkRlbGV0ZSBhIGN1c3RvbSBmaXh0dXJlOjwvc3Ryb25nPiBwaWNrIGl0IGZyb20gdGhlICJEZWxldGUgQ3VzdG9tIEZpeHR1cmUiIGRyb3Bkb3duLiBCdWlsdC1pbiBmaXh0dXJlcyAoQURKLCBDaGF1dmV0LCBFbGF0aW9uLCBNYXJ0aW4pIGNhbid0IGJlIGRlbGV0ZWQuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5SZXNldDo8L3N0cm9uZz4gdGhlIDxzdHJvbmc+4oa6IFJlc2V0IHRvIEJ1aWx0LWluIExpYnJhcnk8L3N0cm9uZz4gYnV0dG9uIHdpcGVzIGFsbCBjdXN0b20gYWRkaXRpb25zIGFuZCByZXZlcnRzIHRvIHRoZSAxNTArIGJ1aWx0LWlucy48L2xpPgogICAgICA8L3VsPgoKICAgICAgPGg0PkV4cG9ydGluZzwvaDQ+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz7irIcgTGlicmFyeTwvc3Ryb25nPiDihpIgSlNPTiBvZiB0aGUgZW50aXJlIGZpeHR1cmUgbGlicmFyeSAoYnVpbHQtaW4gKyBjdXN0b20pLiBVc2UgdGhpcyBhcyBhIGJhY2t1cCwgb3IgdG8gc2hhcmUgeW91ciBsaWJyYXJ5IHdpdGggc29tZW9uZSBlbHNlLjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+4qyHIEV4Y2VsPC9zdHJvbmc+IOKGkiBjbGVhbiBmb3JtYXR0ZWQgLnhsc3ggb2YgeW91ciBjdXJyZW50IHBhdGNoLCByZWFkeSB0byBwcmludCBvciBzaGFyZSB3aXRoIGEgY3Jldy48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPvCflqggUHJpbnQ8L3N0cm9uZz4g4oaSIHByaW50LWZyaWVuZGx5IGJsYWNrLW9uLXdoaXRlIHBhdGNoIHNoZWV0LjwvbGk+CiAgICAgIDwvdWw+CgogICAgICA8aDQ+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgPHVsIGNsYXNzPSJrYmQtbGlzdCI+CiAgICAgICAgPGxpPjxrYmQ+RW50ZXI8L2tiZD4g4oCUIHBhdGNoIGZpeHR1cmVzIChmcm9tIHRoZSBhZGQgZm9ybSk8L2xpPgogICAgICAgIDxsaT48a2JkPkRlbDwva2JkPiAvIDxrYmQ+QmFja3NwYWNlPC9rYmQ+IOKAlCByZW1vdmUgZm9jdXNlZCBmaXh0dXJlPC9saT4KICAgICAgICA8bGk+PGtiZD5DbWQvQ3RybDwva2JkPis8a2JkPkQ8L2tiZD4g4oCUIGR1cGxpY2F0ZSBmb2N1c2VkIGZpeHR1cmU8L2xpPgogICAgICAgIDxsaT48a2JkPkNtZC9DdHJsPC9rYmQ+KzxrYmQ+UDwva2JkPiDigJQgcHJpbnQgcGF0Y2ggc2hlZXQ8L2xpPgogICAgICA8L3VsPgoKICAgICAgPGg0PlVuaXZlcnNlczwvaDQ+CiAgICAgIDxwPkVhY2ggRE1YIHVuaXZlcnNlIGhvbGRzIDUxMiBjaGFubmVscy4gSWYgeW91ciByaWcgbmVlZHMgbW9yZSwgZml4dHVyZXMgc3BpbGwgaW50byBhZGRpdGlvbmFsIHVuaXZlcnNlcyBhdXRvbWF0aWNhbGx5LiBBIHVuaXZlcnNlIHNob3dpbmcgPHN0cm9uZz5USUdIVDwvc3Ryb25nPiBtZWFucyBpdCdzIDkwJSsgZnVsbCDigJQgcGxhbiBhaGVhZCBiZWZvcmUgdGhlIG5leHQgZml4dHVyZSB3b24ndCBmaXQuIFVzZSB0aGUgIkZpcnN0IFVuaXZlcnNlIE51bWJlciIgc2V0dGluZyBpZiB5b3VyIGNvbnNvbGUgc3RhcnRzIGNvdW50aW5nIGZyb20gMCBvciBzb21lIGN1c3RvbSBiYXNlLjwvcD4KCiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0Pgpjb25zdCBCVUlMVElOX0xJQlJBUlkgPSB7CiAgIkFESiI6IFsKICAgIC8vIC0tLSBNb3ZpbmcgSGVhZHM6IEZvY3VzIFNlcmllcyAtLS0KICAgIHsgbW9kZWw6ICJGb2N1cyBTcG90IE9uZSIsIG1vZGVzOiBbe25hbWU6IjE1Y2giLGNoYW5uZWxzOjE1fSx7bmFtZToiMTdjaCIsY2hhbm5lbHM6MTd9XSB9LAogICAgeyBtb2RlbDogIkZvY3VzIFNwb3QgMlgiLCBtb2RlczogW3tuYW1lOiIxNmNoIixjaGFubmVsczoxNn0se25hbWU6IjE4Y2giLGNoYW5uZWxzOjE4fV0gfSwKICAgIHsgbW9kZWw6ICJGb2N1cyBTcG90IDRaIiwgbW9kZXM6IFt7bmFtZToiMTVjaCIsY2hhbm5lbHM6MTV9LHtuYW1lOiIxN2NoIixjaGFubmVsczoxN31dIH0sCiAgICB7IG1vZGVsOiAiRm9jdXMgU3BvdCA2WiIsIG1vZGVzOiBbe25hbWU6IjE3Y2giLGNoYW5uZWxzOjE3fSx7bmFtZToiMTljaCIsY2hhbm5lbHM6MTl9XSB9LAogICAgeyBtb2RlbDogIkZvY3VzIFNwb3QgN1oiLCBtb2RlczogW3tuYW1lOiIzMGNoIixjaGFubmVsczozMH0se25hbWU6IjM0Y2giLGNoYW5uZWxzOjM0fSx7bmFtZToiNDVjaCIsY2hhbm5lbHM6NDV9XSB9LAogICAgeyBtb2RlbDogIkZvY3VzIFdhc2ggNDAwIiwgbW9kZXM6IFt7bmFtZToiMTVjaCIsY2hhbm5lbHM6MTV9LHtuYW1lOiIxOWNoIixjaGFubmVsczoxOX1dIH0sCiAgICB7IG1vZGVsOiAiRm9jdXMgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjM0Y2giLGNoYW5uZWxzOjM0fSx7bmFtZToiNDBjaCIsY2hhbm5lbHM6NDB9XSB9LAogICAgLy8gLS0tIE1vdmluZyBIZWFkczogVml6aSBTZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiVml6aSBCZWFtIFJYT05FIiwgbW9kZXM6IFt7bmFtZToiMTRjaCIsY2hhbm5lbHM6MTR9LHtuYW1lOiIxOGNoIixjaGFubmVsczoxOH1dIH0sCiAgICB7IG1vZGVsOiAiVml6aSBCZWFtIDVSWCIsIG1vZGVzOiBbe25hbWU6IjE2Y2giLGNoYW5uZWxzOjE2fSx7bmFtZToiMTljaCIsY2hhbm5lbHM6MTl9XSB9LAogICAgeyBtb2RlbDogIlZpemkgQmVhbSAxMlJYIiwgbW9kZXM6IFt7bmFtZToiMTRjaCIsY2hhbm5lbHM6MTR9LHtuYW1lOiIxNmNoIixjaGFubmVsczoxNn1dIH0sCiAgICB7IG1vZGVsOiAiVml6aSBCZWFtIENNWSIsIG1vZGVzOiBbe25hbWU6IjIxY2giLGNoYW5uZWxzOjIxfSx7bmFtZToiMjRjaCIsY2hhbm5lbHM6MjR9XSB9LAogICAgeyBtb2RlbDogIlZpemkgSHlicmlkIDE2UlgiLCBtb2RlczogW3tuYW1lOiIyMWNoIixjaGFubmVsczoyMX0se25hbWU6IjI0Y2giLGNoYW5uZWxzOjI0fV0gfSwKICAgIHsgbW9kZWw6ICJWaXppIFNwb3QgTEVEIFBybyIsIG1vZGVzOiBbe25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfV0gfSwKICAgIHsgbW9kZWw6ICJWaXppIExFRCBTcG90IiwgbW9kZXM6IFt7bmFtZToiMTFjaCIsY2hhbm5lbHM6MTF9XSB9LAogICAgLy8gLS0tIE1vdmluZyBIZWFkczogSHlkcm8gSVA2NSBTZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiSHlkcm8gSHlicmlkIiwgbW9kZXM6IFt7bmFtZToiMjZjaCIsY2hhbm5lbHM6MjZ9LHtuYW1lOiIzMGNoIixjaGFubmVsczozMH0se25hbWU6IjM4Y2giLGNoYW5uZWxzOjM4fV0gfSwKICAgIHsgbW9kZWw6ICJIeWRybyBQcm9maWxlIiwgbW9kZXM6IFt7bmFtZToiMzZjaCIsY2hhbm5lbHM6MzZ9LHtuYW1lOiI1MGNoIixjaGFubmVsczo1MH0se25hbWU6IjU3Y2giLGNoYW5uZWxzOjU3fV0gfSwKICAgIHsgbW9kZWw6ICJIeWRybyBTcG90IDEiLCBtb2RlczogW3tuYW1lOiIxN2NoIixjaGFubmVsczoxN30se25hbWU6IjIwY2giLGNoYW5uZWxzOjIwfSx7bmFtZToiMjJjaCIsY2hhbm5lbHM6MjJ9XSB9LAogICAgeyBtb2RlbDogIkh5ZHJvIFNwb3QgMiIsIG1vZGVzOiBbe25hbWU6IjI0Y2giLGNoYW5uZWxzOjI0fSx7bmFtZToiMjljaCIsY2hhbm5lbHM6Mjl9LHtuYW1lOiIzNmNoIixjaGFubmVsczozNn1dIH0sCiAgICB7IG1vZGVsOiAiSHlkcm8gQmVhbSBYMSIsIG1vZGVzOiBbe25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiMThjaCIsY2hhbm5lbHM6MTh9XSB9LAogICAgeyBtb2RlbDogIkh5ZHJvIEJlYW0gWDIiLCBtb2RlczogW3tuYW1lOiIxOGNoIixjaGFubmVsczoxOH0se25hbWU6IjIyY2giLGNoYW5uZWxzOjIyfV0gfSwKICAgIHsgbW9kZWw6ICJIeWRybyBXYXNoIFg3IiwgbW9kZXM6IFt7bmFtZToiMjhjaCIsY2hhbm5lbHM6Mjh9LHtuYW1lOiI0MWNoIixjaGFubmVsczo0MX1dIH0sCiAgICB7IG1vZGVsOiAiSHlkcm8gV2FzaCBYMTkiLCBtb2RlczogW3tuYW1lOiIzNGNoIixjaGFubmVsczozNH0se25hbWU6IjY4Y2giLGNoYW5uZWxzOjY4fV0gfSwKICAgIC8vIC0tLSBNb3ZpbmcgSGVhZHM6IElubm8gLyBDb21wYWN0IC0tLQogICAgeyBtb2RlbDogIklubm8gU3BvdCBQcm8iLCBtb2RlczogW3tuYW1lOiIxNGNoIixjaGFubmVsczoxNH1dIH0sCiAgICB7IG1vZGVsOiAiSW5ubyBTcG90IExFRCBXaUZMWSIsIG1vZGVzOiBbe25hbWU6IjEwY2giLGNoYW5uZWxzOjEwfV0gfSwKICAgIHsgbW9kZWw6ICJJbm5vIENvbG9yIEJlYW0gUXVhZDciLCBtb2RlczogW3tuYW1lOiIxY2giLGNoYW5uZWxzOjF9LHtuYW1lOiIxM2NoIixjaGFubmVsczoxM31dIH0sCiAgICAvLyAtLS0gUGFyczogTWVnYSBTZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiTWVnYSBIZXggUGFyIiwgbW9kZXM6IFt7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiOGNoIixjaGFubmVsczo4fSx7bmFtZToiMTFjaCIsY2hhbm5lbHM6MTF9LHtuYW1lOiIxMmNoIixjaGFubmVsczoxMn1dIH0sCiAgICB7IG1vZGVsOiAiTWVnYSBQYXIgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjFjaCIsY2hhbm5lbHM6MX0se25hbWU6IjJjaCIsY2hhbm5lbHM6Mn0se25hbWU6IjNjaCIsY2hhbm5lbHM6M30se25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjVjaCIsY2hhbm5lbHM6NX0se25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjdjaCIsY2hhbm5lbHM6N31dIH0sCiAgICB7IG1vZGVsOiAiTWVnYSBQYXIgUHJvZmlsZSBQbHVzIiwgbW9kZXM6IFt7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiOGNoIixjaGFubmVsczo4fV0gfSwKICAgIHsgbW9kZWw6ICJNZWdhIFRyaSBQYXIgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjFjaCIsY2hhbm5lbHM6MX0se25hbWU6IjJjaCIsY2hhbm5lbHM6Mn0se25hbWU6IjNjaCIsY2hhbm5lbHM6M30se25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjVjaCIsY2hhbm5lbHM6NX0se25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjdjaCIsY2hhbm5lbHM6N31dIH0sCiAgICB7IG1vZGVsOiAiTWVnYSBUcmkgUGFyIFByb2ZpbGUgUGx1cyIsIG1vZGVzOiBbe25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjVjaCIsY2hhbm5lbHM6NX0se25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjdjaCIsY2hhbm5lbHM6N30se25hbWU6IjhjaCIsY2hhbm5lbHM6OH1dIH0sCiAgICB7IG1vZGVsOiAiTWVnYSA2NCBQcm9maWxlIFBsdXMiLCBtb2RlczogW3tuYW1lOiIzY2giLGNoYW5uZWxzOjN9LHtuYW1lOiI0Y2giLGNoYW5uZWxzOjR9LHtuYW1lOiI1Y2giLGNoYW5uZWxzOjV9LHtuYW1lOiI3Y2giLGNoYW5uZWxzOjd9LHtuYW1lOiI4Y2giLGNoYW5uZWxzOjh9XSB9LAogICAgeyBtb2RlbDogIk1lZ2EgRmxhdCBQYWsgOCBQbHVzIiwgbW9kZXM6IFt7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiOGNoIixjaGFubmVsczo4fV0gfSwKICAgIHsgbW9kZWw6ICJNZWdhIEJhciA1MCBSR0IiLCBtb2RlczogW3tuYW1lOiIzY2giLGNoYW5uZWxzOjN9LHtuYW1lOiI1Y2giLGNoYW5uZWxzOjV9LHtuYW1lOiI2Y2giLGNoYW5uZWxzOjZ9XSB9LAogICAgLy8gLS0tIFBhcnM6IFBhciBaIC8gV2lGTFkgLyBWUGFyIC0tLQogICAgeyBtb2RlbDogIlBhciBaNCIsIG1vZGVzOiBbe25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjVjaCIsY2hhbm5lbHM6NX0se25hbWU6IjhjaCIsY2hhbm5lbHM6OH0se25hbWU6IjEyY2giLGNoYW5uZWxzOjEyfV0gfSwKICAgIHsgbW9kZWw6ICJWUGFyIFBhayIsIG1vZGVzOiBbe25hbWU6IjFjaCIsY2hhbm5lbHM6MX0se25hbWU6IjJjaCIsY2hhbm5lbHM6Mn0se25hbWU6IjNjaCIsY2hhbm5lbHM6M30se25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjVjaCIsY2hhbm5lbHM6NX0se25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjdjaCIsY2hhbm5lbHM6N30se25hbWU6IjhjaCIsY2hhbm5lbHM6OH1dIH0sCiAgICB7IG1vZGVsOiAiV2lGTFkgRVhSIEhleCBQYXIiLCBtb2RlczogW3tuYW1lOiI2Y2giLGNoYW5uZWxzOjZ9LHtuYW1lOiI3Y2giLGNoYW5uZWxzOjd9LHtuYW1lOiI4Y2giLGNoYW5uZWxzOjh9LHtuYW1lOiIxMWNoIixjaGFubmVsczoxMX0se25hbWU6IjEyY2giLGNoYW5uZWxzOjEyfV0gfSwKICAgIC8vIC0tLSBTdHJvYmUgLyBFeWUgQ2FuZHkgLyBQYW5lbHMgLS0tCiAgICB7IG1vZGVsOiAiSm9sdCAzMDAiLCBtb2RlczogW3tuYW1lOiI0Y2giLGNoYW5uZWxzOjR9LHtuYW1lOiIyN2NoIixjaGFubmVsczoyN31dIH0sCiAgICB7IG1vZGVsOiAiSm9sdCBQYW5lbCBGWCIsIG1vZGVzOiBbe25hbWU6IjljaCIsY2hhbm5lbHM6OX0se25hbWU6IjU3Y2giLGNoYW5uZWxzOjU3fV0gfSwKICAgIHsgbW9kZWw6ICJKb2x0IFBhbmVsIEZYMiIsIG1vZGVzOiBbe25hbWU6IjljaCIsY2hhbm5lbHM6OX0se25hbWU6IjU3Y2giLGNoYW5uZWxzOjU3fV0gfSwKICAgIHsgbW9kZWw6ICJKb2x0IEJhciBGWCIsIG1vZGVzOiBbe25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjljaCIsY2hhbm5lbHM6OX0se25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfSx7bmFtZToiMTZjaCIsY2hhbm5lbHM6MTZ9LHtuYW1lOiIxOGNoIixjaGFubmVsczoxOH0se25hbWU6IjMyY2giLGNoYW5uZWxzOjMyfSx7bmFtZToiMzhjaCIsY2hhbm5lbHM6Mzh9LHtuYW1lOiI0M2NoIixjaGFubmVsczo0M30se25hbWU6IjY0Y2giLGNoYW5uZWxzOjY0fSx7bmFtZToiNzhjaCIsY2hhbm5lbHM6Nzh9LHtuYW1lOiIxMTJjaCIsY2hhbm5lbHM6MTEyfSx7bmFtZToiMTI3Y2giLGNoYW5uZWxzOjEyN31dIH0sCiAgICB7IG1vZGVsOiAiSm9sdCBCYXIgRlgyIiwgbW9kZXM6IFt7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiOWNoIixjaGFubmVsczo5fSx7bmFtZToiMTNjaCIsY2hhbm5lbHM6MTN9LHtuYW1lOiIxNmNoIixjaGFubmVsczoxNn0se25hbWU6IjE4Y2giLGNoYW5uZWxzOjE4fSx7bmFtZToiMjBjaCIsY2hhbm5lbHM6MjB9LHtuYW1lOiIzMmNoIixjaGFubmVsczozMn0se25hbWU6IjM0Y2giLGNoYW5uZWxzOjM0fSx7bmFtZToiMzhjaCIsY2hhbm5lbHM6Mzh9LHtuYW1lOiI0M2NoIixjaGFubmVsczo0M30se25hbWU6IjY0Y2giLGNoYW5uZWxzOjY0fSx7bmFtZToiNzhjaCIsY2hhbm5lbHM6Nzh9LHtuYW1lOiI4MGNoIixjaGFubmVsczo4MH0se25hbWU6IjExMmNoIixjaGFubmVsczoxMTJ9LHtuYW1lOiIxMjdjaCIsY2hhbm5lbHM6MTI3fV0gfSwKICAgIHsgbW9kZWw6ICJKb2x0IEJhciBGWElQIiwgbW9kZXM6IFt7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiOWNoIixjaGFubmVsczo5fSx7bmFtZToiMTNjaCIsY2hhbm5lbHM6MTN9LHtuYW1lOiIxNmNoIixjaGFubmVsczoxNn0se25hbWU6IjE4Y2giLGNoYW5uZWxzOjE4fSx7bmFtZToiMjBjaCIsY2hhbm5lbHM6MjB9LHtuYW1lOiIzMmNoIixjaGFubmVsczozMn0se25hbWU6IjM0Y2giLGNoYW5uZWxzOjM0fSx7bmFtZToiMzhjaCIsY2hhbm5lbHM6Mzh9LHtuYW1lOiI0M2NoIixjaGFubmVsczo0M30se25hbWU6IjQ1Y2giLGNoYW5uZWxzOjQ1fSx7bmFtZToiNjRjaCIsY2hhbm5lbHM6NjR9LHtuYW1lOiI3OGNoIixjaGFubmVsczo3OH0se25hbWU6IjgwY2giLGNoYW5uZWxzOjgwfSx7bmFtZToiMTEyY2giLGNoYW5uZWxzOjExMn0se25hbWU6IjEyN2NoIixjaGFubmVsczoxMjd9LHtuYW1lOiIxMjljaCIsY2hhbm5lbHM6MTI5fV0gfSwKICAgIC8vIC0tLSBQaXhlbCAvIFR1YmUgLS0tCiAgICB7IG1vZGVsOiAiUGl4aWUgU3RyaXAgNjAiLCBtb2RlczogW3tuYW1lOiIzY2giLGNoYW5uZWxzOjN9LHtuYW1lOiI2Y2giLGNoYW5uZWxzOjZ9LHtuYW1lOiI5NmNoIixjaGFubmVsczo5Nn1dIH0sCiAgICB7IG1vZGVsOiAiVUIgMTJIIiwgbW9kZXM6IFt7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiMTJjaCIsY2hhbm5lbHM6MTJ9LHtuYW1lOiIxNWNoIixjaGFubmVsczoxNX0se25hbWU6IjIwY2giLGNoYW5uZWxzOjIwfSx7bmFtZToiNTFjaCIsY2hhbm5lbHM6NTF9XSB9LAogICAgLy8gLS0tIEVsbGlwc29pZGFscyAvIEZyZXNuZWxzIC0tLQogICAgeyBtb2RlbDogIkVuY29yZSBGUiBQcm8iLCBtb2RlczogW3tuYW1lOiIyY2giLGNoYW5uZWxzOjJ9LHtuYW1lOiI0Y2giLGNoYW5uZWxzOjR9LHtuYW1lOiI1Y2giLGNoYW5uZWxzOjV9XSB9LAogICAgeyBtb2RlbDogIkVuY29yZSBCdXJzdCAyMDAiLCBtb2RlczogW3tuYW1lOiIxY2giLGNoYW5uZWxzOjF9LHtuYW1lOiIyY2giLGNoYW5uZWxzOjJ9XSB9LAogICAgLy8gLS0tIFdhdGVyIC8gRWZmZWN0cyAtLS0KICAgIHsgbW9kZWw6ICJIMk8gRE1YIElSIiwgbW9kZXM6IFt7bmFtZToiM2NoIixjaGFubmVsczozfV0gfSwKICAgIHsgbW9kZWw6ICJIMk8gRE1YIFBybyIsIG1vZGVzOiBbe25hbWU6IjNjaCIsY2hhbm5lbHM6M31dIH0KICBdLAogICJDaGF1dmV0IERKIjogWwogICAgeyBtb2RlbDogIkludGltaWRhdG9yIFNwb3QgMzc1WiBJUkMiLCBtb2RlczogW3tuYW1lOiI5Y2giLGNoYW5uZWxzOjl9LHtuYW1lOiIxNWNoIixjaGFubmVsczoxNX1dIH0sCiAgICB7IG1vZGVsOiAiSW50aW1pZGF0b3IgU3BvdCAzNzVaWCIsIG1vZGVzOiBbe25hbWU6IjljaCIsY2hhbm5lbHM6OX0se25hbWU6IjE1Y2giLGNoYW5uZWxzOjE1fV0gfSwKICAgIHsgbW9kZWw6ICJJbnRpbWlkYXRvciBTcG90IDI2MCIsIG1vZGVzOiBbe25hbWU6IjhjaCIsY2hhbm5lbHM6OH0se25hbWU6IjEyY2giLGNoYW5uZWxzOjEyfV0gfSwKICAgIHsgbW9kZWw6ICJJbnRpbWlkYXRvciBTcG90IDE1NSIsIG1vZGVzOiBbe25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjEwY2giLGNoYW5uZWxzOjEwfV0gfSwKICAgIHsgbW9kZWw6ICJJbnRpbWlkYXRvciBCZWFtIFE2MCIsIG1vZGVzOiBbe25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiMTZjaCIsY2hhbm5lbHM6MTZ9XSB9LAogICAgeyBtb2RlbDogIkludGltaWRhdG9yIFdhdmUgMzYwIElSQyIsIG1vZGVzOiBbe25hbWU6IjEyY2giLGNoYW5uZWxzOjEyfSx7bmFtZToiMTRjaCIsY2hhbm5lbHM6MTR9XSB9LAogICAgeyBtb2RlbDogIlNsaW1QQVIgUHJvIEggVVNCIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiOGNoIixjaGFubmVsczo4fSx7bmFtZToiMTJjaCIsY2hhbm5lbHM6MTJ9XSB9LAogICAgeyBtb2RlbDogIlNsaW1QQVIgUTEyIEJUIiwgbW9kZXM6IFt7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiOGNoIixjaGFubmVsczo4fSx7bmFtZToiMTFjaCIsY2hhbm5lbHM6MTF9XSB9LAogICAgeyBtb2RlbDogIkNPTE9SYmFuZCBQaVgiLCBtb2RlczogW3tuYW1lOiIxMmNoIixjaGFubmVsczoxMn0se25hbWU6IjMyY2giLGNoYW5uZWxzOjMyfSx7bmFtZToiMzRjaCIsY2hhbm5lbHM6MzR9XSB9LAogICAgeyBtb2RlbDogIkdleXNlciBQNyIsIG1vZGVzOiBbe25hbWU6IjdjaCIsY2hhbm5lbHM6N30se25hbWU6IjExY2giLGNoYW5uZWxzOjExfV0gfSwKICAgIHsgbW9kZWw6ICJTaG9ja2VyIDIiLCBtb2RlczogW3tuYW1lOiI0Y2giLGNoYW5uZWxzOjR9XSB9CiAgXSwKICAiQ2hhdXZldCBQcm9mZXNzaW9uYWwiOiBbCiAgICB7IG1vZGVsOiAiUm9ndWUgUjIgV2FzaCIsIG1vZGVzOiBbe25hbWU6IjE4Y2giLGNoYW5uZWxzOjE4fSx7bmFtZToiMjJjaCIsY2hhbm5lbHM6MjJ9XSB9LAogICAgeyBtb2RlbDogIlJvZ3VlIFIyWCBTcG90IiwgbW9kZXM6IFt7bmFtZToiMTZjaCIsY2hhbm5lbHM6MTZ9LHtuYW1lOiIyMGNoIixjaGFubmVsczoyMH1dIH0sCiAgICB7IG1vZGVsOiAiUm9ndWUgUjEgQmVhbSIsIG1vZGVzOiBbe25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiMTZjaCIsY2hhbm5lbHM6MTZ9XSB9LAogICAgeyBtb2RlbDogIlJvZ3VlIFIzIFNwb3QiLCBtb2RlczogW3tuYW1lOiIyM2NoIixjaGFubmVsczoyM30se25hbWU6IjI4Y2giLGNoYW5uZWxzOjI4fV0gfSwKICAgIHsgbW9kZWw6ICJNYXZlcmljayBNSyBQeXhpcyIsIG1vZGVzOiBbe25hbWU6IjQwY2giLGNoYW5uZWxzOjQwfSx7bmFtZToiNzljaCIsY2hhbm5lbHM6Nzl9XSB9LAogICAgeyBtb2RlbDogIk1hdmVyaWNrIE1LMyBTcG90IiwgbW9kZXM6IFt7bmFtZToiMzJjaCIsY2hhbm5lbHM6MzJ9LHtuYW1lOiI0M2NoIixjaGFubmVsczo0M31dIH0sCiAgICB7IG1vZGVsOiAiTWF2ZXJpY2sgTUsyIFdhc2giLCBtb2RlczogW3tuYW1lOiIyOGNoIixjaGFubmVsczoyOH0se25hbWU6IjQxY2giLGNoYW5uZWxzOjQxfV0gfSwKICAgIHsgbW9kZWw6ICJNYXZlcmljayBNSzIgU3BvdCIsIG1vZGVzOiBbe25hbWU6IjI5Y2giLGNoYW5uZWxzOjI5fSx7bmFtZToiMzVjaCIsY2hhbm5lbHM6MzV9XSB9LAogICAgeyBtb2RlbDogIk1hdmVyaWNrIFN0b3JtIDEgV2FzaCIsIG1vZGVzOiBbe25hbWU6IjI0Y2giLGNoYW5uZWxzOjI0fSx7bmFtZToiMzdjaCIsY2hhbm5lbHM6Mzd9XSB9LAogICAgeyBtb2RlbDogIk92YXRpb24gRS05MTBGQyIsIG1vZGVzOiBbe25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjhjaCIsY2hhbm5lbHM6OH0se25hbWU6IjljaCIsY2hhbm5lbHM6OX0se25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfV0gfSwKICAgIHsgbW9kZWw6ICJDT0xPUmFkbyBQYW5lbCBRNDAiLCBtb2RlczogW3tuYW1lOiIxMWNoIixjaGFubmVsczoxMX0se25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiMzFjaCIsY2hhbm5lbHM6MzF9XSB9LAogICAgeyBtb2RlbDogIlN0cmlrZSAxIiwgbW9kZXM6IFt7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiOWNoIixjaGFubmVsczo5fV0gfSwKICAgIHsgbW9kZWw6ICJTdHJpa2UgNCIsIG1vZGVzOiBbe25hbWU6IjRjaCIsY2hhbm5lbHM6NH0se25hbWU6IjhjaCIsY2hhbm5lbHM6OH0se25hbWU6IjExY2giLGNoYW5uZWxzOjExfV0gfSwKICAgIHsgbW9kZWw6ICJOZXh1cyA0eDQiLCBtb2RlczogW3tuYW1lOiIxMmNoIixjaGFubmVsczoxMn0se25hbWU6IjU5Y2giLGNoYW5uZWxzOjU5fV0gfQogIF0sCiAgIkVsYXRpb24iOiBbCiAgICAvLyAtLS0gUHJvdGV1cyBTZXJpZXMgKElQNjUvSVA2NiBvdXRkb29yIG1vdmluZyBoZWFkcykgLS0tCiAgICB7IG1vZGVsOiAiUHJvdGV1cyBNYXhpbXVzIiwgbW9kZXM6IFt7bmFtZToiMzdjaCIsY2hhbm5lbHM6Mzd9LHtuYW1lOiI2MWNoIixjaGFubmVsczo2MX1dIH0sCiAgICB7IG1vZGVsOiAiUHJvdGV1cyBCcnV0dXMiLCBtb2RlczogW3tuYW1lOiIyNWNoIixjaGFubmVsczoyNX0se25hbWU6IjM0Y2giLGNoYW5uZWxzOjM0fSx7bmFtZToiMzZjaCIsY2hhbm5lbHM6MzZ9LHtuYW1lOiI1NmNoIixjaGFubmVsczo1Nn1dIH0sCiAgICB7IG1vZGVsOiAiUHJvdGV1cyBIeWJyaWQiLCBtb2RlczogW3tuYW1lOiIyNGNoIixjaGFubmVsczoyNH0se25hbWU6IjI2Y2giLGNoYW5uZWxzOjI2fSx7bmFtZToiMzdjaCIsY2hhbm5lbHM6Mzd9XSB9LAogICAgeyBtb2RlbDogIlByb3RldXMgSHlicmlkIE1heCIsIG1vZGVzOiBbe25hbWU6IjMyY2giLGNoYW5uZWxzOjMyfSx7bmFtZToiNDNjaCIsY2hhbm5lbHM6NDN9XSB9LAogICAgeyBtb2RlbDogIlByb3RldXMgU21hcnR5IEh5YnJpZCIsIG1vZGVzOiBbe25hbWU6IjIwY2giLGNoYW5uZWxzOjIwfSx7bmFtZToiMzRjaCIsY2hhbm5lbHM6MzR9XSB9LAogICAgeyBtb2RlbDogIlByb3RldXMgQmVhbSIsIG1vZGVzOiBbe25hbWU6IjI4Y2giLGNoYW5uZWxzOjI4fV0gfSwKICAgIHsgbW9kZWw6ICJQcm90ZXVzIFJheXpvciA3NjAiLCBtb2RlczogW3tuYW1lOiIyNWNoIixjaGFubmVsczoyNX0se25hbWU6IjUyY2giLGNoYW5uZWxzOjUyfSx7bmFtZToiODBjaCIsY2hhbm5lbHM6ODB9XSB9LAogICAgeyBtb2RlbDogIlByb3RldXMgUmF5em9yIDc2MCBPUFMiLCBtb2RlczogW3tuYW1lOiIyNWNoIixjaGFubmVsczoyNX0se25hbWU6IjUyY2giLGNoYW5uZWxzOjUyfSx7bmFtZToiODBjaCIsY2hhbm5lbHM6ODB9XSB9LAogICAgeyBtb2RlbDogIlByb3RldXMgUmF5em9yIEJsYWRlIFMiLCBtb2RlczogW3tuYW1lOiIyOGNoIixjaGFubmVsczoyOH0se25hbWU6IjUwY2giLGNoYW5uZWxzOjUwfSx7bmFtZToiNjZjaCIsY2hhbm5lbHM6NjZ9LHtuYW1lOiI3MmNoIixjaGFubmVsczo3Mn0se25hbWU6IjgyY2giLGNoYW5uZWxzOjgyfSx7bmFtZToiMTA2Y2giLGNoYW5uZWxzOjEwNn1dIH0sCiAgICB7IG1vZGVsOiAiUHJvdGV1cyBSYXl6b3IgQmxhZGUgTCIsIG1vZGVzOiBbe25hbWU6IjI4Y2giLGNoYW5uZWxzOjI4fSx7bmFtZToiNzZjaCIsY2hhbm5lbHM6NzZ9LHtuYW1lOiIxMDhjaCIsY2hhbm5lbHM6MTA4fSx7bmFtZToiMTIwY2giLGNoYW5uZWxzOjEyMH0se25hbWU6IjE0MGNoIixjaGFubmVsczoxNDB9LHtuYW1lOiIxODhjaCIsY2hhbm5lbHM6MTg4fV0gfSwKICAgIC8vIC0tLSBBcnRpc3RlIFNlcmllcyAoaGlnaC1lbmQgcHJvZmlsZSBmaXh0dXJlcykgLS0tCiAgICB7IG1vZGVsOiAiQXJ0aXN0ZSBNb25kcmlhbiIsIG1vZGVzOiBbe25hbWU6IjQyY2giLGNoYW5uZWxzOjQyfSx7bmFtZToiNjhjaCIsY2hhbm5lbHM6Njh9XSB9LAogICAgeyBtb2RlbDogIkFydGlzdGUgTW9uZXQiLCBtb2RlczogW3tuYW1lOiI0MmNoIixjaGFubmVsczo0Mn0se25hbWU6IjY4Y2giLGNoYW5uZWxzOjY4fV0gfSwKICAgIHsgbW9kZWw6ICJBcnRpc3RlIFBpY2Fzc28iLCBtb2RlczogW3tuYW1lOiIzM2NoIixjaGFubmVsczozM30se25hbWU6IjU1Y2giLGNoYW5uZWxzOjU1fV0gfSwKICAgIHsgbW9kZWw6ICJBcnRpc3RlIERhVmluY2kiLCBtb2RlczogW3tuYW1lOiIzM2NoIixjaGFubmVsczozM30se25hbWU6IjU1Y2giLGNoYW5uZWxzOjU1fV0gfSwKICAgIC8vIC0tLSBGdXplIFNlcmllcyAodGhlYXRlci9UViBMRUQgbW92ZXJzKSAtLS0KICAgIHsgbW9kZWw6ICJGdXplIE1heCBTcG90IiwgbW9kZXM6IFt7bmFtZToiMzNjaCBSR0JNQSIsY2hhbm5lbHM6MzN9LHtuYW1lOiI0M2NoIFJHQk1BIixjaGFubmVsczo0M30se25hbWU6IjMxY2ggQ01ZIixjaGFubmVsczozMX0se25hbWU6IjM5Y2ggQ01ZIixjaGFubmVsczozOX1dIH0sCiAgICB7IG1vZGVsOiAiRnV6ZSBNYXggUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjM4Y2ggUkdCTUEiLGNoYW5uZWxzOjM4fSx7bmFtZToiNTljaCBSR0JNQSIsY2hhbm5lbHM6NTl9LHtuYW1lOiIzNmNoIENNWSIsY2hhbm5lbHM6MzZ9LHtuYW1lOiI1NWNoIENNWSIsY2hhbm5lbHM6NTV9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgU3BvdCIsIG1vZGVzOiBbe25hbWU6IjMxY2ggUkdCTUEiLGNoYW5uZWxzOjMxfSx7bmFtZToiNDFjaCBSR0JNQSIsY2hhbm5lbHM6NDF9LHtuYW1lOiIyOWNoIENNWSIsY2hhbm5lbHM6Mjl9LHtuYW1lOiIzN2NoIENNWSIsY2hhbm5lbHM6Mzd9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjM4Y2ggUkdCTUEiLGNoYW5uZWxzOjM4fSx7bmFtZToiNTljaCBSR0JNQSIsY2hhbm5lbHM6NTl9LHtuYW1lOiIzNmNoIENNWSIsY2hhbm5lbHM6MzZ9LHtuYW1lOiI1NWNoIENNWSIsY2hhbm5lbHM6NTV9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgV2FzaCBGUiIsIG1vZGVzOiBbe25hbWU6IjI5Y2ggUkdCTUEiLGNoYW5uZWxzOjI5fSx7bmFtZToiNDdjaCBSR0JNQSIsY2hhbm5lbHM6NDd9LHtuYW1lOiIyN2NoIENNWSIsY2hhbm5lbHM6Mjd9LHtuYW1lOiI0M2NoIENNWSIsY2hhbm5lbHM6NDN9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgV2FzaCA1MDAiLCBtb2RlczogW3tuYW1lOiIyMmNoIixjaGFubmVsczoyMn0se25hbWU6IjMwY2giLGNoYW5uZWxzOjMwfV0gfSwKICAgIHsgbW9kZWw6ICJGdXplIFdhc2ggWjEyMCIsIG1vZGVzOiBbe25hbWU6IjE5Y2giLGNoYW5uZWxzOjE5fV0gfSwKICAgIHsgbW9kZWw6ICJGdXplIFdhc2ggWjM1MCIsIG1vZGVzOiBbe25hbWU6IjIyY2giLGNoYW5uZWxzOjIyfSx7bmFtZToiMjhjaCIsY2hhbm5lbHM6Mjh9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgU0ZYIiwgbW9kZXM6IFt7bmFtZToiMzFjaCIsY2hhbm5lbHM6MzF9XSB9LAogICAgeyBtb2RlbDogIkZ1emUgUGFyIFo2MCBJUCIsIG1vZGVzOiBbe25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfV0gfSwKICAgIHsgbW9kZWw6ICJGdXplIFBhciBaMTIwIElQIiwgbW9kZXM6IFt7bmFtZToiMTNjaCIsY2hhbm5lbHM6MTN9XSB9LAogICAgLy8gLS0tIFJheXpvciAvIEFDTCAvIFpDTCBlZmZlY3QgZml4dHVyZXMgLS0tCiAgICB7IG1vZGVsOiAiUmF5em9yIDM2MCIsIG1vZGVzOiBbe25hbWU6IjE3Y2giLGNoYW5uZWxzOjE3fSx7bmFtZToiMzVjaCIsY2hhbm5lbHM6MzV9XSB9LAogICAgeyBtb2RlbDogIlJheXpvciBRNyIsIG1vZGVzOiBbe25hbWU6IjE1Y2giLGNoYW5uZWxzOjE1fSx7bmFtZToiMTdjaCIsY2hhbm5lbHM6MTd9LHtuYW1lOiIyOGNoIixjaGFubmVsczoyOH1dIH0sCiAgICB7IG1vZGVsOiAiQUNMIDM2MCBNYXRyaXgiLCBtb2RlczogW3tuYW1lOiIxN2NoIixjaGFubmVsczoxN30se25hbWU6IjE5Y2giLGNoYW5uZWxzOjE5fSx7bmFtZToiMTE1Y2giLGNoYW5uZWxzOjExNX1dIH0sCiAgICB7IG1vZGVsOiAiWkNMIDM2MGkiLCBtb2RlczogW3tuYW1lOiIyMWNoIixjaGFubmVsczoyMX1dIH0sCiAgICAvLyAtLS0gUGxhdGludW0gc2VyaWVzIChkaXNjaGFyZ2UgbW92aW5nIGhlYWRzKSAtLS0KICAgIHsgbW9kZWw6ICJQbGF0aW51bSBCZWFtIDVSIEV4dHJlbWUiLCBtb2RlczogW3tuYW1lOiIxNmNoIixjaGFubmVsczoxNn1dIH0sCiAgICB7IG1vZGVsOiAiUGxhdGludW0gU3BvdCBMRUQgSUkiLCBtb2RlczogW3tuYW1lOiIxN2NoIixjaGFubmVsczoxN30se25hbWU6IjIwY2giLGNoYW5uZWxzOjIwfV0gfSwKICAgIHsgbW9kZWw6ICJQbGF0aW51bSAxMjAwIFdhc2giLCBtb2RlczogW3tuYW1lOiIyMmNoIixjaGFubmVsczoyMn0se25hbWU6IjMwY2giLGNoYW5uZWxzOjMwfSx7bmFtZToiNDVjaCIsY2hhbm5lbHM6NDV9XSB9LAogICAgLy8gLS0tIFNtYXJ0eSBzZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiU21hcnR5IEh5YnJpZCIsIG1vZGVzOiBbe25hbWU6IjE4Y2giLGNoYW5uZWxzOjE4fSx7bmFtZToiMjJjaCIsY2hhbm5lbHM6MjJ9XSB9LAogICAgLy8gLS0tIEtMIFNlcmllcyAoc3RhdGljIHN0dWRpbyBwYXJzKSAtLS0KICAgIHsgbW9kZWw6ICJLTCBQYXIgRkMiLCBtb2RlczogW3tuYW1lOiIxY2ggRGltbWVyIixjaGFubmVsczoxfSx7bmFtZToiNmNoIFN0YW5kYXJkIixjaGFubmVsczo2fSx7bmFtZToiOWNoIENNWSIsY2hhbm5lbHM6OX0se25hbWU6IjExY2ggRXh0ZW5kZWQiLGNoYW5uZWxzOjExfSx7bmFtZToiMTRjaCBDTVkgRXh0IixjaGFubmVsczoxNH0se25hbWU6IjE4Y2ggRXh0ZW5kZWQiLGNoYW5uZWxzOjE4fV0gfSwKICAgIC8vIC0tLSBTaXhQYXIgLyBTZXZlbiBQYXIgLyBEVFcgc3RhdGljIHBhcnMgLS0tCiAgICB7IG1vZGVsOiAiU2l4UGFyIDIwMCBJUCIsIG1vZGVzOiBbe25hbWU6IjNjaCIsY2hhbm5lbHM6M30se25hbWU6IjZjaCIsY2hhbm5lbHM6Nn0se25hbWU6IjdjaCIsY2hhbm5lbHM6N30se25hbWU6IjEwY2giLGNoYW5uZWxzOjEwfV0gfSwKICAgIHsgbW9kZWw6ICJTaXhQYXIgMzAwIiwgbW9kZXM6IFt7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNmNoIixjaGFubmVsczo2fSx7bmFtZToiN2NoIixjaGFubmVsczo3fSx7bmFtZToiMTBjaCIsY2hhbm5lbHM6MTB9XSB9LAogICAgeyBtb2RlbDogIlNldmVuIFBhciA3SVAiLCBtb2RlczogW3tuYW1lOiI3Y2giLGNoYW5uZWxzOjd9LHtuYW1lOiIxMGNoIixjaGFubmVsczoxMH0se25hbWU6IjE2Y2giLGNoYW5uZWxzOjE2fV0gfSwKICAgIHsgbW9kZWw6ICJTZXZlbiBCYXR0ZW4gNzIiLCBtb2RlczogW3tuYW1lOiI5Y2giLGNoYW5uZWxzOjl9LHtuYW1lOiIxNmNoIixjaGFubmVsczoxNn0se25hbWU6IjMyY2giLGNoYW5uZWxzOjMyfSx7bmFtZToiNzJjaCIsY2hhbm5lbHM6NzJ9XSB9LAogICAgeyBtb2RlbDogIkRUVyBQYXIgMzAwIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiMmNoIixjaGFubmVsczoyfSx7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fV0gfSwKICAgIC8vIC0tLSBDdWVwaXggYmxpbmRlcnMgLS0tCiAgICB7IG1vZGVsOiAiQ3VlcGl4IEJsaW5kZXIgV1cyIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiMmNoIixjaGFubmVsczoyfSx7bmFtZToiM2NoIixjaGFubmVsczozfV0gfSwKICAgIHsgbW9kZWw6ICJDdWVwaXggQmxpbmRlciBXVzQiLCBtb2RlczogW3tuYW1lOiIxY2giLGNoYW5uZWxzOjF9LHtuYW1lOiIyY2giLGNoYW5uZWxzOjJ9LHtuYW1lOiI0Y2giLGNoYW5uZWxzOjR9LHtuYW1lOiI1Y2giLGNoYW5uZWxzOjV9XSB9LAogICAgLy8gLS0tIEVNT1RJT04gKGRpZ2l0YWwgcHJvamVjdG9yIG1vdmluZyBoZWFkKSAtLS0KICAgIHsgbW9kZWw6ICJFbW90aW9uIiwgbW9kZXM6IFt7bmFtZToiMzJjaCIsY2hhbm5lbHM6MzJ9LHtuYW1lOiI1NGNoIixjaGFubmVsczo1NH1dIH0KICBdLAogICJNYXJ0aW4iOiBbCiAgICAvLyAtLS0gTUFDIE1vdmluZyBIZWFkczogQ3VycmVudCBmbGFnc2hpcCAvIFhJUCBzZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiTUFDIE9uZSIsIG1vZGVzOiBbe25hbWU6IkNvbXBhY3QgMjBjaCIsY2hhbm5lbHM6MjB9LHtuYW1lOiJCYXNpYyAzNmNoIixjaGFubmVsczozNn0se25hbWU6Ikx1ZGljcm91cyAxMDhjaCIsY2hhbm5lbHM6MTA4fSx7bmFtZToiQ29tcGFjdCBEaXJlY3QgMjBjaCIsY2hhbm5lbHM6MjB9XSB9LAogICAgeyBtb2RlbDogIk1BQyBWaXBlciBYSVAiLCBtb2RlczogW3tuYW1lOiJCYXNpYyA1NGNoIixjaGFubmVsczo1NH0se25hbWU6IkV4dGVuZGVkIDY0Y2giLGNoYW5uZWxzOjY0fSx7bmFtZToiTHVkaWNyb3VzIDcwY2giLGNoYW5uZWxzOjcwfV0gfSwKICAgIHsgbW9kZWw6ICJNQUMgRW5jb3JlIFR3byIsIG1vZGVzOiBbe25hbWU6IkJhc2ljIDUyY2giLGNoYW5uZWxzOjUyfSx7bmFtZToiRXh0ZW5kZWQgNjJjaCIsY2hhbm5lbHM6NjJ9LHtuYW1lOiJMdWRpY3JvdXMgNjhjaCIsY2hhbm5lbHM6Njh9XSB9LAogICAgeyBtb2RlbDogIk1BQyBVbHRyYSBQZXJmb3JtYW5jZSIsIG1vZGVzOiBbe25hbWU6IlN0YW5kYXJkIDQ4Y2giLGNoYW5uZWxzOjQ4fSx7bmFtZToiRXh0ZW5kZWQgNThjaCIsY2hhbm5lbHM6NTh9XSB9LAogICAgLy8gLS0tIE1BQyBBdXJhIFNlcmllcyAtLS0KICAgIHsgbW9kZWw6ICJNQUMgQXVyYSIsIG1vZGVzOiBbe25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiMjVjaCIsY2hhbm5lbHM6MjV9XSB9LAogICAgeyBtb2RlbDogIk1BQyBBdXJhIFhCIiwgbW9kZXM6IFt7bmFtZToiU3RhbmRhcmQgMTRjaCIsY2hhbm5lbHM6MTR9LHtuYW1lOiJFeHRlbmRlZCAyNWNoIixjaGFubmVsczoyNX1dIH0sCiAgICB7IG1vZGVsOiAiTUFDIEF1cmEgWElQIiwgbW9kZXM6IFt7bmFtZToiQ29tcGFjdCAyMGNoIixjaGFubmVsczoyMH0se25hbWU6IkJhc2ljIDM2Y2giLGNoYW5uZWxzOjM2fSx7bmFtZToiRXh0ZW5kZWQgNTdjaCIsY2hhbm5lbHM6NTd9LHtuYW1lOiJMdWRpY3JvdXMgOTNjaCIsY2hhbm5lbHM6OTN9LHtuYW1lOiJDb21wYWN0IERpcmVjdCAyMGNoIixjaGFubmVsczoyMH0se25hbWU6IlhCIFN0YW5kYXJkIDE0Y2giLGNoYW5uZWxzOjE0fSx7bmFtZToiWEIgRXh0ZW5kZWQgMjVjaCIsY2hhbm5lbHM6MjV9XSB9LAogICAgeyBtb2RlbDogIk1BQyBBdXJhIFJhdmVuIFhJUCIsIG1vZGVzOiBbe25hbWU6IkNvbXBhY3QgMjJjaCIsY2hhbm5lbHM6MjJ9LHtuYW1lOiJCYXNpYyAzOGNoIixjaGFubmVsczozOH0se25hbWU6IkV4dGVuZGVkIDE0OWNoIixjaGFubmVsczoxNDl9LHtuYW1lOiJMdWRpY3JvdXMgMjY2Y2giLGNoYW5uZWxzOjI2Nn0se25hbWU6IlBsYWlkIDg1MWNoIixjaGFubmVsczo4NTF9LHtuYW1lOiJDb21wYWN0IERpcmVjdCAyMmNoIixjaGFubmVsczoyMn1dIH0sCiAgICAvLyAtLS0gTUFDIFF1YW50dW0gU2VyaWVzIC0tLQogICAgeyBtb2RlbDogIk1BQyBRdWFudHVtIFByb2ZpbGUiLCBtb2RlczogW3tuYW1lOiIxOWNoIixjaGFubmVsczoxOX0se25hbWU6IjI3Y2giLGNoYW5uZWxzOjI3fV0gfSwKICAgIHsgbW9kZWw6ICJNQUMgUXVhbnR1bSBXYXNoIiwgbW9kZXM6IFt7bmFtZToiMTdjaCIsY2hhbm5lbHM6MTd9LHtuYW1lOiIzM2NoIixjaGFubmVsczozM31dIH0sCiAgICAvLyAtLS0gTUFDIFZpcGVyIFNlcmllcyAoZGlzY2hhcmdlLCBjbGFzc2ljKSAtLS0KICAgIHsgbW9kZWw6ICJNQUMgVmlwZXIgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjI2Y2giLGNoYW5uZWxzOjI2fSx7bmFtZToiMzRjaCIsY2hhbm5lbHM6MzR9XSB9LAogICAgeyBtb2RlbDogIk1BQyBWaXBlciBXYXNoIERYIiwgbW9kZXM6IFt7bmFtZToiMThjaCIsY2hhbm5lbHM6MTh9LHtuYW1lOiIyNGNoIixjaGFubmVsczoyNH1dIH0sCiAgICB7IG1vZGVsOiAiTUFDIFZpcGVyIFBlcmZvcm1hbmNlIiwgbW9kZXM6IFt7bmFtZToiMjZjaCIsY2hhbm5lbHM6MjZ9LHtuYW1lOiIzNGNoIixjaGFubmVsczozNH1dIH0sCiAgICB7IG1vZGVsOiAiTUFDIFZpcGVyIFdhc2giLCBtb2RlczogW3tuYW1lOiIxNmNoIixjaGFubmVsczoxNn0se25hbWU6IjIyY2giLGNoYW5uZWxzOjIyfV0gfSwKICAgIC8vIC0tLSBNQUMgNzAwLzIwMDAgbGVnYWN5IC0tLQogICAgeyBtb2RlbDogIk1BQyA3MDAgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjE3Y2giLGNoYW5uZWxzOjE3fSx7bmFtZToiMjFjaCIsY2hhbm5lbHM6MjF9XSB9LAogICAgeyBtb2RlbDogIk1BQyA3MDAgV2FzaCIsIG1vZGVzOiBbe25hbWU6IjE1Y2giLGNoYW5uZWxzOjE1fSx7bmFtZToiMTljaCIsY2hhbm5lbHM6MTl9XSB9LAogICAgeyBtb2RlbDogIk1BQyAyMDAwIFByb2ZpbGUgSUkiLCBtb2RlczogW3tuYW1lOiIyM2NoIixjaGFubmVsczoyM30se25hbWU6IjMxY2giLGNoYW5uZWxzOjMxfV0gfSwKICAgIHsgbW9kZWw6ICJNQUMgMjAwMCBXYXNoIFhCIiwgbW9kZXM6IFt7bmFtZToiMjBjaCIsY2hhbm5lbHM6MjB9LHtuYW1lOiIyOGNoIixjaGFubmVsczoyOH1dIH0sCiAgICAvLyAtLS0gTUFDIDEwMSAvIDMwMSAoTEVEIGNvbXBhY3RzKSAtLS0KICAgIHsgbW9kZWw6ICJNQUMgMTAxIiwgbW9kZXM6IFt7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiMTBjaCIsY2hhbm5lbHM6MTB9LHtuYW1lOiIxNGNoIixjaGFubmVsczoxNH1dIH0sCiAgICB7IG1vZGVsOiAiTUFDIDMwMSBXYXNoIiwgbW9kZXM6IFt7bmFtZToiMTBjaCIsY2hhbm5lbHM6MTB9LHtuYW1lOiIxNmNoIixjaGFubmVsczoxNn1dIH0sCiAgICAvLyAtLS0gQXRvbWljIHN0cm9iZXMgLS0tCiAgICB7IG1vZGVsOiAiQXRvbWljIDMwMDAgRE1YIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fV0gfSwKICAgIHsgbW9kZWw6ICJBdG9taWMgMzAwMCBMRUQiLCBtb2RlczogW3tuYW1lOiIzY2giLGNoYW5uZWxzOjN9LHtuYW1lOiI0Y2giLGNoYW5uZWxzOjR9LHtuYW1lOiIxNGNoIixjaGFubmVsczoxNH1dIH0sCiAgICAvLyAtLS0gVkRPIEF0b21pYyBTZXJpZXMgLS0tCiAgICB7IG1vZGVsOiAiVkRPIEF0b21pYyBCb2xkIiwgbW9kZXM6IFt7bmFtZToiQmFzaWMgMTljaCIsY2hhbm5lbHM6MTl9LHtuYW1lOiJFeHRlbmRlZCA2NGNoIixjaGFubmVsczo2NH1dIH0sCiAgICB7IG1vZGVsOiAiVkRPIEF0b21pYyBEb3QgQ0xEIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiQmFzaWMgMTljaCIsY2hhbm5lbHM6MTl9LHtuYW1lOiJFeHRlbmRlZCA2NGNoIixjaGFubmVsczo2NH1dIH0sCiAgICB7IG1vZGVsOiAiVkRPIEF0b21pYyBEb3QgV1JNIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiM2NoIixjaGFubmVsczozfSx7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiQmFzaWMgMTljaCIsY2hhbm5lbHM6MTl9LHtuYW1lOiJFeHRlbmRlZCA2NGNoIixjaGFubmVsczo2NH1dIH0sCiAgICAvLyAtLS0gUlVTSCBTZXJpZXMgKGJ1ZGdldCB3b3JraG9yc2UgbGluZSkgLS0tCiAgICB7IG1vZGVsOiAiUlVTSCBQQVIgMSBSR0JXIiwgbW9kZXM6IFt7bmFtZToiNWNoIixjaGFubmVsczo1fSx7bmFtZToiN2NoIixjaGFubmVsczo3fV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIFBBUiAyIFJHQlcgWm9vbSIsIG1vZGVzOiBbe25hbWU6IjdjaCIsY2hhbm5lbHM6N30se25hbWU6IjExY2giLGNoYW5uZWxzOjExfV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIEJhdHRlbiAxIEhleCIsIG1vZGVzOiBbe25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfSx7bmFtZToiODBjaCIsY2hhbm5lbHM6ODB9XSB9LAogICAgeyBtb2RlbDogIlJVU0ggU3Ryb2JlIDEgNXg1IiwgbW9kZXM6IFt7bmFtZToiNGNoIixjaGFubmVsczo0fSx7bmFtZToiMjVjaCIsY2hhbm5lbHM6MjV9LHtuYW1lOiIyOWNoIixjaGFubmVsczoyOX1dIH0sCiAgICB7IG1vZGVsOiAiUlVTSCBTdHJvYmUgQ1dMIiwgbW9kZXM6IFt7bmFtZToiMWNoIixjaGFubmVsczoxfSx7bmFtZToiNGNoIixjaGFubmVsczo0fV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIE1IIDQgQmVhbSIsIG1vZGVzOiBbe25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIE1IIDUgUHJvZmlsZSIsIG1vZGVzOiBbe25hbWU6IjE0Y2giLGNoYW5uZWxzOjE0fV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIE1IIDYgV2FzaCIsIG1vZGVzOiBbe25hbWU6IjEzY2giLGNoYW5uZWxzOjEzfV0gfSwKICAgIHsgbW9kZWw6ICJSVVNIIFNjYW5uZXIgMSBMRUQiLCBtb2RlczogW3tuYW1lOiIxNmNoIixjaGFubmVsczoxNn1dIH0KICBdCn07CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTVEFURQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmxldCBsaWJyYXJ5ID0ge307CmxldCBmaXh0dXJlcyA9IFtdOyAvLyB7aWQsIG1mciwgbW9kZWwsIG1vZGVOYW1lLCBjaGFubmVscywgY3VzdG9tTmFtZSwgZ3JvdXAsIHN0YXJ0QWRkcmVzcywgdW5pdmVyc2UsIGxvY2tlZEFkZHJlc3MsIGxvY2tlZFVuaXZlcnNlfQpsZXQgY29sbGFwc2VkVW5pdmVyc2VzID0gbmV3IFNldCgpOyAvLyB1bml2ZXJzZSBudW1iZXJzIHRoYXQgYXJlIGNvbGxhcHNlZAoKY29uc3QgTElCUkFSWV9TVE9SQUdFX0tFWSA9ICdkbXhQYXRjaFBsYW5uZXIubGlicmFyeSc7CgovLyBTbmFwc2hvdCBidWlsdC1pbiBmaXh0dXJlIGlkZW50aXRpZXMgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIGN1c3RvbSBvbmVzCmNvbnN0IEJVSUxUSU5fS0VZUyA9IG5ldyBTZXQoKTsKT2JqZWN0LmVudHJpZXMoQlVJTFRJTl9MSUJSQVJZKS5mb3JFYWNoKChbbWZyLCBsaXN0XSkgPT4gewogIGxpc3QuZm9yRWFjaChmID0+IEJVSUxUSU5fS0VZUy5hZGQoYCR7bWZyfTo6JHtmLm1vZGVsfWApKTsKfSk7CgpmdW5jdGlvbiBpc0N1c3RvbUZpeHR1cmUobWZyLCBtb2RlbCkgewogIHJldHVybiAhQlVJTFRJTl9LRVlTLmhhcyhgJHttZnJ9Ojoke21vZGVsfWApOwp9CgpmdW5jdGlvbiBnZXRDdXN0b21GaXh0dXJlcygpIHsKICBjb25zdCBvdXQgPSBbXTsKICBPYmplY3QuZW50cmllcyhsaWJyYXJ5KS5zb3J0KCkuZm9yRWFjaCgoW21mciwgbGlzdF0pID0+IHsKICAgIGxpc3Quc2xpY2UoKS5zb3J0KChhLGIpID0+IGEubW9kZWwubG9jYWxlQ29tcGFyZShiLm1vZGVsKSkuZm9yRWFjaChmID0+IHsKICAgICAgaWYgKGlzQ3VzdG9tRml4dHVyZShtZnIsIGYubW9kZWwpKSBvdXQucHVzaCh7IG1mciwgbW9kZWw6IGYubW9kZWwgfSk7CiAgICB9KTsKICB9KTsKICByZXR1cm4gb3V0Owp9CgpmdW5jdGlvbiBtZXJnZUxpYnJhcnkoYnVpbHRpbikgewogIGxpYnJhcnkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJ1aWx0aW4pKTsKfQoKZnVuY3Rpb24gc2F2ZUxpYnJhcnkoKSB7CiAgdHJ5IHsKICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExJQlJBUllfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGxpYnJhcnkpKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGxpYnJhcnkgdG8gc3RvcmFnZTonLCBlKTsKICB9Cn0KCmZ1bmN0aW9uIGxvYWRTYXZlZExpYnJhcnkoKSB7CiAgdHJ5IHsKICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExJQlJBUllfU1RPUkFHRV9LRVkpOwogICAgaWYgKCFyYXcpIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHNhdmVkID0gSlNPTi5wYXJzZShyYXcpOwogICAgaWYgKHR5cGVvZiBzYXZlZCAhPT0gJ29iamVjdCcgfHwgIXNhdmVkKSByZXR1cm4gZmFsc2U7CgogICAgLy8gTWVyZ2Ugc2F2ZWQgb24gdG9wIG9mIGJ1aWx0LWluOiBrZWVwIGJ1aWx0LWluIGZpeHR1cmVzLCBhZGQvb3ZlcnJpZGUgd2l0aCBzYXZlZAogICAgT2JqZWN0LmVudHJpZXMoc2F2ZWQpLmZvckVhY2goKFttZnIsIGxpc3RdKSA9PiB7CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgcmV0dXJuOwogICAgICBsaWJyYXJ5W21mcl0gPSBsaWJyYXJ5W21mcl0gfHwgW107CiAgICAgIGxpc3QuZm9yRWFjaChmID0+IHsKICAgICAgICBpZiAoIWYgfHwgIWYubW9kZWwpIHJldHVybjsKICAgICAgICBjb25zdCBleGlzdGluZyA9IGxpYnJhcnlbbWZyXS5maW5kSW5kZXgoeCA9PiB4Lm1vZGVsID09PSBmLm1vZGVsKTsKICAgICAgICBpZiAoZXhpc3RpbmcgPj0gMCkgbGlicmFyeVttZnJdW2V4aXN0aW5nXSA9IGY7CiAgICAgICAgZWxzZSBsaWJyYXJ5W21mcl0ucHVzaChmKTsKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwogIH0gY2F0Y2ggKGUpIHsKICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGxvYWQgc2F2ZWQgbGlicmFyeTonLCBlKTsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmZ1bmN0aW9uIHJlc2V0TGlicmFyeSgpIHsKICBpZiAoIWNvbmZpcm0oJ1Jlc2V0IHRvIGJ1aWx0LWluIGZpeHR1cmVzIG9ubHk/IFlvdXIgY3VzdG9tIGZpeHR1cmVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaWJyYXJ5IChidXQgYWxyZWFkeS1wYXRjaGVkIGZpeHR1cmVzIHdpbGwgc3RheSBpbiB0aGUgY3VycmVudCByaWcpLicpKSByZXR1cm47CiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTElCUkFSWV9TVE9SQUdFX0tFWSk7IH0gY2F0Y2gge30KICBsaWJyYXJ5ID0ge307CiAgbWVyZ2VMaWJyYXJ5KEJVSUxUSU5fTElCUkFSWSk7CiAgcG9wdWxhdGVNZnJTZWxlY3QoKTsKICByZWZyZXNoRGVsZXRlTGlzdCgpOwogIHNob3dUb2FzdCgnTGlicmFyeSByZXNldCB0byBidWlsdC1pbiBmaXh0dXJlcycpOwp9CgpmdW5jdGlvbiByZWZyZXNoRGVsZXRlTGlzdCgpIHsKICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlQ3VzdG9tU2VsZWN0Jyk7CiAgaWYgKCFzZWwpIHJldHVybjsKICBjb25zdCBjdXN0b20gPSBnZXRDdXN0b21GaXh0dXJlcygpOwogIGlmIChjdXN0b20ubGVuZ3RoID09PSAwKSB7CiAgICBzZWwuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9IiI+4oCUIG5vIGN1c3RvbSBmaXh0dXJlcyDigJQ8L29wdGlvbj4nOwogICAgc2VsLmRpc2FibGVkID0gdHJ1ZTsKICB9IGVsc2UgewogICAgc2VsLmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSIiPkNob29zZSBhIGN1c3RvbSBmaXh0dXJl4oCmPC9vcHRpb24+JyArCiAgICAgIGN1c3RvbS5tYXAoYyA9PiBgPG9wdGlvbiB2YWx1ZT0iJHtlc2NhcGVIdG1sKGMubWZyKX06OiR7ZXNjYXBlSHRtbChjLm1vZGVsKX0iPiR7ZXNjYXBlSHRtbChjLm1mcil9IOKAlCAke2VzY2FwZUh0bWwoYy5tb2RlbCl9PC9vcHRpb24+YCkuam9pbignJyk7CiAgICBzZWwuZGlzYWJsZWQgPSBmYWxzZTsKICB9Cn0KCmZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkQ3VzdG9tKCkgewogIGNvbnN0IHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWxldGVDdXN0b21TZWxlY3QnKTsKICBjb25zdCB2YWwgPSBzZWwudmFsdWU7CiAgaWYgKCF2YWwpIHsgc2hvd1RvYXN0KCdQaWNrIGEgY3VzdG9tIGZpeHR1cmUgZmlyc3QnLCAnZXJyb3InKTsgcmV0dXJuOyB9CiAgY29uc3QgW21mciwgbW9kZWxdID0gdmFsLnNwbGl0KCc6OicpOwogIGlmICghaXNDdXN0b21GaXh0dXJlKG1mciwgbW9kZWwpKSB7CiAgICBzaG93VG9hc3QoJ0Nhbm5vdCBkZWxldGUgYnVpbHQtaW4gZml4dHVyZXMnLCAnZXJyb3InKTsKICAgIHJldHVybjsKICB9CiAgaWYgKCFjb25maXJtKGBEZWxldGUgIiR7bWZyfSDigJQgJHttb2RlbH0iIGZyb20gdGhlIGxpYnJhcnk/XG5cbkFscmVhZHktcGF0Y2hlZCBmaXh0dXJlcyBvZiB0aGlzIG1vZGVsIHdpbGwgc3RheSBpbiB5b3VyIHJpZywgYnV0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGFkZCBuZXcgb25lcyB1bnRpbCB5b3UgcmUtYWRkIHRoZSBmaXh0dXJlLmApKSByZXR1cm47CgogIGlmIChsaWJyYXJ5W21mcl0pIHsKICAgIGxpYnJhcnlbbWZyXSA9IGxpYnJhcnlbbWZyXS5maWx0ZXIoZiA9PiBmLm1vZGVsICE9PSBtb2RlbCk7CiAgICBpZiAobGlicmFyeVttZnJdLmxlbmd0aCA9PT0gMCkgZGVsZXRlIGxpYnJhcnlbbWZyXTsKICB9CgogIHNhdmVMaWJyYXJ5KCk7CiAgcG9wdWxhdGVNZnJTZWxlY3QoKTsKICByZWZyZXNoRGVsZXRlTGlzdCgpOwogIHVwZGF0ZVByZXZpZXcoKTsKICBzaG93VG9hc3QoYERlbGV0ZWQ6ICR7bWZyfSDigJQgJHttb2RlbH1gKTsKfQoKbWVyZ2VMaWJyYXJ5KEJVSUxUSU5fTElCUkFSWSk7CmxvYWRTYXZlZExpYnJhcnkoKTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVUkgUE9QVUxBVElPTgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHBvcHVsYXRlTWZyU2VsZWN0KCkgewogIGNvbnN0IHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZnJTZWxlY3QnKTsKICBzZWwuaW5uZXJIVE1MID0gJyc7CiAgT2JqZWN0LmtleXMobGlicmFyeSkuc29ydCgpLmZvckVhY2gobSA9PiB7CiAgICBjb25zdCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICBvLnZhbHVlID0gbTsgby50ZXh0Q29udGVudCA9IG07CiAgICBzZWwuYXBwZW5kQ2hpbGQobyk7CiAgfSk7CiAgdXBkYXRlTW9kZWxMaXN0KCk7CiAgdXBkYXRlTWZyU3VnZ2VzdGlvbnMoKTsKfQoKZnVuY3Rpb24gdXBkYXRlTW9kZWxMaXN0KCkgewogIGNvbnN0IG1mciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZnJTZWxlY3QnKS52YWx1ZTsKICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWxTZWxlY3QnKTsKICBzZWwuaW5uZXJIVE1MID0gJyc7CiAgaWYgKCFsaWJyYXJ5W21mcl0pIHJldHVybjsKICBsaWJyYXJ5W21mcl0uc2xpY2UoKS5zb3J0KChhLGIpID0+IGEubW9kZWwubG9jYWxlQ29tcGFyZShiLm1vZGVsKSkuZm9yRWFjaChmID0+IHsKICAgIGNvbnN0IG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgIG8udmFsdWUgPSBmLm1vZGVsOyBvLnRleHRDb250ZW50ID0gZi5tb2RlbDsKICAgIHNlbC5hcHBlbmRDaGlsZChvKTsKICB9KTsKICB1cGRhdGVNb2RlTGlzdCgpOwp9CgpmdW5jdGlvbiB1cGRhdGVNb2RlTGlzdCgpIHsKICBjb25zdCBtZnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWZyU2VsZWN0JykudmFsdWU7CiAgY29uc3QgbW9kZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWxTZWxlY3QnKS52YWx1ZTsKICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZVNlbGVjdCcpOwogIHNlbC5pbm5lckhUTUwgPSAnJzsKICBjb25zdCBmID0gKGxpYnJhcnlbbWZyXSB8fCBbXSkuZmluZCh4ID0+IHgubW9kZWwgPT09IG1vZGVsKTsKICBpZiAoIWYpIHJldHVybjsKICBmLm1vZGVzLmZvckVhY2gobSA9PiB7CiAgICBjb25zdCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICBvLnZhbHVlID0gbS5uYW1lOwogICAgby50ZXh0Q29udGVudCA9IGAke20ubmFtZX0gKCR7bS5jaGFubmVsc30gY2gpYDsKICAgIHNlbC5hcHBlbmRDaGlsZChvKTsKICB9KTsKfQoKZnVuY3Rpb24gdXBkYXRlTWZyU3VnZ2VzdGlvbnMoKSB7CiAgY29uc3QgZGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWZyU3VnZ2VzdCcpOwogIGlmICghZGwpIHJldHVybjsKICBkbC5pbm5lckhUTUwgPSBPYmplY3Qua2V5cyhsaWJyYXJ5KS5zb3J0KCkKICAgIC5tYXAobSA9PiBgPG9wdGlvbiB2YWx1ZT0iJHtlc2NhcGVIdG1sKG0pfSI+PC9vcHRpb24+YCkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIGFkZE1vZGVSb3coKSB7CiAgY29uc3Qgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlUm93cycpOwogIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvdy5jbGFzc05hbWUgPSAnbW9kZS1yb3cnOwogIHJvdy5pbm5lckhUTUwgPSBgCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1vZGUtbmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWUgKGUuZy4gOGNoKSI+CiAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ibW9kZS1jaGFubmVscyIgcGxhY2Vob2xkZXI9IkNoIiBtaW49IjEiIG1heD0iNTEyIj4KICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIG1vZGUtcmVtb3ZlIiBvbmNsaWNrPSJyZW1vdmVNb2RlUm93KHRoaXMpIiB0aXRsZT0iUmVtb3ZlIj7inJU8L2J1dHRvbj4KICBgOwogIHJvd3MuYXBwZW5kQ2hpbGQocm93KTsKICByb3cucXVlcnlTZWxlY3RvcignLm1vZGUtbmFtZScpLmZvY3VzKCk7Cn0KCmZ1bmN0aW9uIHJlbW92ZU1vZGVSb3coYnRuKSB7CiAgY29uc3Qgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlUm93cycpOwogIGlmIChyb3dzLmNoaWxkcmVuLmxlbmd0aCA8PSAxKSB7CiAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSByb3cg4oCUIGp1c3QgY2xlYXIgaXQgaW5zdGVhZAogICAgY29uc3Qgcm93ID0gYnRuLmNsb3Nlc3QoJy5tb2RlLXJvdycpOwogICAgcm93LnF1ZXJ5U2VsZWN0b3IoJy5tb2RlLW5hbWUnKS52YWx1ZSA9ICcnOwogICAgcm93LnF1ZXJ5U2VsZWN0b3IoJy5tb2RlLWNoYW5uZWxzJykudmFsdWUgPSAnJzsKICAgIHJldHVybjsKICB9CiAgYnRuLmNsb3Nlc3QoJy5tb2RlLXJvdycpLnJlbW92ZSgpOwp9CgpmdW5jdGlvbiBhZGRGaXh0dXJlVG9MaWJyYXJ5KCkgewogIGNvbnN0IG1mciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdNZnInKS52YWx1ZS50cmltKCk7CiAgY29uc3QgbW9kZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3TW9kZWwnKS52YWx1ZS50cmltKCk7CiAgaWYgKCFtZnIpIHsgc2hvd1RvYXN0KCdFbnRlciBhIG1hbnVmYWN0dXJlcicsICdlcnJvcicpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3TWZyJykuZm9jdXMoKTsgcmV0dXJuOyB9CiAgaWYgKCFtb2RlbCkgeyBzaG93VG9hc3QoJ0VudGVyIGEgbW9kZWwnLCAnZXJyb3InKTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld01vZGVsJykuZm9jdXMoKTsgcmV0dXJuOyB9CgogIC8vIENvbGxlY3QgbW9kZXMKICBjb25zdCBtb2RlcyA9IFtdOwogIGNvbnN0IHJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjbW9kZVJvd3MgLm1vZGUtcm93Jyk7CiAgcm93cy5mb3JFYWNoKHIgPT4gewogICAgY29uc3QgbmFtZSA9IHIucXVlcnlTZWxlY3RvcignLm1vZGUtbmFtZScpLnZhbHVlLnRyaW0oKTsKICAgIGNvbnN0IGNoYW5uZWxzID0gcGFyc2VJbnQoci5xdWVyeVNlbGVjdG9yKCcubW9kZS1jaGFubmVscycpLnZhbHVlKTsKICAgIGlmICghbmFtZSB8fCAhY2hhbm5lbHMgfHwgY2hhbm5lbHMgPCAxIHx8IGNoYW5uZWxzID4gNTEyKSByZXR1cm47CiAgICBtb2Rlcy5wdXNoKHsgbmFtZSwgY2hhbm5lbHMgfSk7CiAgfSk7CgogIGlmIChtb2Rlcy5sZW5ndGggPT09IDApIHsKICAgIHNob3dUb2FzdCgnQWRkIGF0IGxlYXN0IG9uZSB2YWxpZCBETVggbW9kZScsICdlcnJvcicpOwogICAgcmV0dXJuOwogIH0KCiAgLy8gTWVyZ2UgaW50byBsaWJyYXJ5CiAgbGlicmFyeVttZnJdID0gbGlicmFyeVttZnJdIHx8IFtdOwogIGNvbnN0IGV4aXN0aW5nID0gbGlicmFyeVttZnJdLmZpbmRJbmRleCh4ID0+IHgubW9kZWwgPT09IG1vZGVsKTsKICBpZiAoZXhpc3RpbmcgPj0gMCkgewogICAgLy8gTWVyZ2UgbW9kZXMgaW50byBleGlzdGluZyBmaXh0dXJlCiAgICBjb25zdCBmaXggPSBsaWJyYXJ5W21mcl1bZXhpc3RpbmddOwogICAgbW9kZXMuZm9yRWFjaChtID0+IHsKICAgICAgY29uc3QgaSA9IGZpeC5tb2Rlcy5maW5kSW5kZXgoeCA9PiB4Lm5hbWUgPT09IG0ubmFtZSk7CiAgICAgIGlmIChpID49IDApIGZpeC5tb2Rlc1tpXSA9IG07CiAgICAgIGVsc2UgZml4Lm1vZGVzLnB1c2gobSk7CiAgICB9KTsKICAgIHNob3dUb2FzdChgVXBkYXRlZCAke21mcn0gwrcgJHttb2RlbH0gKCR7Zml4Lm1vZGVzLmxlbmd0aH0gbW9kZXMpYCk7CiAgfSBlbHNlIHsKICAgIGxpYnJhcnlbbWZyXS5wdXNoKHsgbW9kZWwsIG1vZGVzIH0pOwogICAgc2hvd1RvYXN0KGBBZGRlZCAke21mcn0gwrcgJHttb2RlbH0gKCR7bW9kZXMubGVuZ3RofSBtb2RlJHttb2Rlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30pYCk7CiAgfQoKICAvLyBDbGVhciBmb3JtIGJ1dCBrZWVwIHRoZSBtYW51ZmFjdHVyZXIgZm9yIHJhcGlkIGVudHJ5IG9mIG1vcmUgbW9kZWxzCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25ld01vZGVsJykudmFsdWUgPSAnJzsKICBjb25zdCBtb2RlUm93c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVSb3dzJyk7CiAgbW9kZVJvd3NFbC5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJtb2RlLXJvdyI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibW9kZS1uYW1lIiBwbGFjZWhvbGRlcj0iTmFtZSAoZS5nLiA4Y2gpIj4KICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1vZGUtY2hhbm5lbHMiIHBsYWNlaG9sZGVyPSJDaCIgbWluPSIxIiBtYXg9IjUxMiI+CiAgICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIG1vZGUtcmVtb3ZlIiBvbmNsaWNrPSJyZW1vdmVNb2RlUm93KHRoaXMpIiB0aXRsZT0iUmVtb3ZlIj7inJU8L2J1dHRvbj4KICAgIDwvZGl2PgogIGA7CgogIC8vIFJlZnJlc2ggdGhlIG1haW4gZml4dHVyZSBkcm9wZG93bnMgYW5kIHNlbGVjdCB0aGUgbmV3bHkgYWRkZWQgZml4dHVyZQogIHBvcHVsYXRlTWZyU2VsZWN0KCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21mclNlbGVjdCcpLnZhbHVlID0gbWZyOwogIHVwZGF0ZU1vZGVsTGlzdCgpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbFNlbGVjdCcpLnZhbHVlID0gbW9kZWw7CiAgdXBkYXRlTW9kZUxpc3QoKTsKICB1cGRhdGVNZnJTdWdnZXN0aW9ucygpOwogIHVwZGF0ZVByZXZpZXcoKTsKICBzYXZlTGlicmFyeSgpOwogIHJlZnJlc2hEZWxldGVMaXN0KCk7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXdNb2RlbCcpLmZvY3VzKCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZUdyb3VwU3VnZ2VzdGlvbnMoKSB7CiAgY29uc3QgZ3JvdXBzID0gWy4uLm5ldyBTZXQoZml4dHVyZXMubWFwKGYgPT4gZi5ncm91cCkuZmlsdGVyKEJvb2xlYW4pKV0uc29ydCgpOwogIGNvbnN0IGRhdGFsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwU3VnZ2VzdCcpOwogIGRhdGFsaXN0LmlubmVySFRNTCA9IGdyb3Vwcy5tYXAoZyA9PiBgPG9wdGlvbiB2YWx1ZT0iJHtlc2NhcGVIdG1sKGcpfSI+PC9vcHRpb24+YCkuam9pbignJyk7Cn0KCi8qIExpdmUgcHJldmlldyBvZiB3aGF0IGFkZHJlc3NlcyB0aGUgbmV4dCBhZGQoKSB3aWxsIG9jY3VweSAqLwpmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KCkgewogIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZFByZXZpZXcnKTsKICBpZiAoIWVsKSByZXR1cm47CiAgY29uc3QgbWZyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21mclNlbGVjdCcpLnZhbHVlOwogIGNvbnN0IG1vZGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsU2VsZWN0JykudmFsdWU7CiAgY29uc3QgbW9kZU5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZVNlbGVjdCcpLnZhbHVlOwogIGNvbnN0IHF0eSA9IE1hdGgubWF4KDEsIHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdHlJbnB1dCcpLnZhbHVlKSB8fCAxKTsKCiAgY29uc3QgZiA9IChsaWJyYXJ5W21mcl0gfHwgW10pLmZpbmQoeCA9PiB4Lm1vZGVsID09PSBtb2RlbCk7CiAgY29uc3QgbW9kZSA9IGYgJiYgZi5tb2Rlcy5maW5kKG0gPT4gbS5uYW1lID09PSBtb2RlTmFtZSk7CgogIGlmICghbW9kZSkgewogICAgZWwuY2xhc3NOYW1lID0gJ2FkZC1wcmV2aWV3IGVtcHR5JzsKICAgIGVsLnRleHRDb250ZW50ID0gJ1ByZXZpZXc6IHBpY2sgYSBmaXh0dXJlICYgbW9kZSc7CiAgICByZXR1cm47CiAgfQoKICAvLyBTaW11bGF0ZSBwYXRjaGluZyB3aXRob3V0IG11dGF0aW5nIHJlYWwgc3RhdGUKICBjb25zdCBzaW0gPSBzaW11bGF0ZUFkZChtb2RlLmNoYW5uZWxzLCBxdHkpOwogIGlmICghc2ltLmxlbmd0aCkgewogICAgZWwuY2xhc3NOYW1lID0gJ2FkZC1wcmV2aWV3IHdhcm4nOwogICAgZWwudGV4dENvbnRlbnQgPSAnQ2Fubm90IHBhdGNoIOKAlCBleGNlZWRzIHVuaXZlcnNlIHNpemUnOwogICAgcmV0dXJuOwogIH0KCiAgLy8gRGV0ZWN0IGlmIHRoZXknbGwgc3BpbGwgYWNyb3NzIHVuaXZlcnNlcwogIGNvbnN0IHVzZXMgPSBbLi4ubmV3IFNldChzaW0ubWFwKHMgPT4gcy51bml2ZXJzZSkpXTsKICBjb25zdCBmaXJzdFN0YXJ0ID0gc2ltWzBdOwogIGNvbnN0IGxhc3RFbmQgPSBzaW1bc2ltLmxlbmd0aCAtIDFdOwoKICBlbC5jbGFzc05hbWUgPSAnYWRkLXByZXZpZXcnOwogIGxldCBsaW5lMTsKICBpZiAocXR5ID09PSAxKSB7CiAgICBsaW5lMSA9IGBVJHtmaXJzdFN0YXJ0LnVuaXZlcnNlfSDCtyA8c3BhbiBjbGFzcz0iYWRkci1oaW50Ij4ke2ZpcnN0U3RhcnQuc3RhcnR94oCTJHtmaXJzdFN0YXJ0LmVuZH08L3NwYW4+YDsKICB9IGVsc2UgaWYgKHVzZXMubGVuZ3RoID09PSAxKSB7CiAgICBsaW5lMSA9IGBVJHtmaXJzdFN0YXJ0LnVuaXZlcnNlfSDCtyA8c3BhbiBjbGFzcz0iYWRkci1oaW50Ij4ke2ZpcnN0U3RhcnQuc3RhcnR94oCTJHtsYXN0RW5kLmVuZH08L3NwYW4+YDsKICB9IGVsc2UgewogICAgbGluZTEgPSBgVSR7dXNlc1swXX3igJNVJHt1c2VzW3VzZXMubGVuZ3RoLTFdfSDCtyA8c3BhbiBjbGFzcz0iYWRkci1oaW50Ij4ke2ZpcnN0U3RhcnQuc3RhcnR9IOKGkiAke2xhc3RFbmQuZW5kfTwvc3Bhbj5gOwogIH0KICBlbC5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJsaW5lIj4KICAgICAgPHNwYW4+TmV4dDogJHtxdHkgPiAxID8gYCR7cXR5fSDDlyBgIDogJyd9JHttb2RlLmNoYW5uZWxzfSBjaDwvc3Bhbj4KICAgICAgPHNwYW4+JHtsaW5lMX08L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZXNjYXBlSHRtbChtZnIpfSDCtyAke2VzY2FwZUh0bWwobW9kZWwpfSDCtyAke2VzY2FwZUh0bWwobW9kZU5hbWUpfTwvZGl2PgogIGA7Cn0KCi8qIFJldHVybnMgYXJyYXkgb2Yge3VuaXZlcnNlLCBzdGFydCwgZW5kfSBmb3IgZWFjaCBmaXh0dXJlIHRoYXQgV09VTEQgYmUgYWRkZWQsIG9yIFtdIGlmIGltcG9zc2libGUgKi8KZnVuY3Rpb24gc2ltdWxhdGVBZGQoY2hhbm5lbHMsIHF0eSkgewogIGlmIChjaGFubmVscyA+IFVOSVZFUlNFX1NJWkUpIHJldHVybiBbXTsKICBjb25zdCBiYXNlVW5pdmVyc2UgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndW5pdmVyc2VTdGFydCcpLnZhbHVlKSB8fCAxOwoKICAvLyBCdWlsZCByZXNlcnZhdGlvbiBtYXAgZnJvbSBjdXJyZW50IGZpeHR1cmVzCiAgY29uc3QgcmVzZXJ2ZWQgPSB7fTsKICBmaXh0dXJlcy5mb3JFYWNoKGZ4ID0+IHsKICAgIGlmICghZngudW5pdmVyc2UgfHwgIWZ4LnN0YXJ0QWRkcmVzcykgcmV0dXJuOwogICAgcmVzZXJ2ZWRbZngudW5pdmVyc2VdID0gcmVzZXJ2ZWRbZngudW5pdmVyc2VdIHx8IFtdOwogICAgcmVzZXJ2ZWRbZngudW5pdmVyc2VdLnB1c2goe3N0YXJ0OiBmeC5zdGFydEFkZHJlc3MsIGVuZDogZnguc3RhcnRBZGRyZXNzICsgZnguY2hhbm5lbHMgLSAxfSk7CiAgfSk7CgogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGZvciAobGV0IGkgPSAwOyBpIDwgcXR5OyBpKyspIHsKICAgIGxldCB1ID0gYmFzZVVuaXZlcnNlOwogICAgbGV0IHBsYWNlZCA9IGZhbHNlOwogICAgd2hpbGUgKCFwbGFjZWQgJiYgdSA8IGJhc2VVbml2ZXJzZSArIDEwMDApIHsKICAgICAgY29uc3QgYmxvY2tzID0gKHJlc2VydmVkW3VdIHx8IFtdKS5zbGljZSgpLnNvcnQoKGEsYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpOwogICAgICBsZXQgY3Vyc29yID0gMTsKICAgICAgZm9yIChjb25zdCBiIG9mIGJsb2NrcykgewogICAgICAgIGlmIChiLnN0YXJ0IC0gY3Vyc29yID49IGNoYW5uZWxzKSBicmVhazsKICAgICAgICBjdXJzb3IgPSBiLmVuZCArIDE7CiAgICAgIH0KICAgICAgaWYgKGN1cnNvciArIGNoYW5uZWxzIC0gMSA8PSBVTklWRVJTRV9TSVpFKSB7CiAgICAgICAgcmVzdWx0LnB1c2goe3VuaXZlcnNlOiB1LCBzdGFydDogY3Vyc29yLCBlbmQ6IGN1cnNvciArIGNoYW5uZWxzIC0gMX0pOwogICAgICAgIHJlc2VydmVkW3VdID0gcmVzZXJ2ZWRbdV0gfHwgW107CiAgICAgICAgcmVzZXJ2ZWRbdV0ucHVzaCh7c3RhcnQ6IGN1cnNvciwgZW5kOiBjdXJzb3IgKyBjaGFubmVscyAtIDF9KTsKICAgICAgICBwbGFjZWQgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHUrKzsKICAgICAgfQogICAgfQogICAgaWYgKCFwbGFjZWQpIHJldHVybiBbXTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBQQVRDSElORyBMT0dJQwogICBUd28tcGFzczogZmlyc3QgcGxhY2UgbG9ja2VkIGZpeHR1cmVzIHdoZXJlIHRoZXkgd2FudCB0byBnbywgdGhlbgogICBncmVlZHktcGxhY2UgdGhlIHJlc3QgaW4gb3JkZXIsIHNraXBwaW5nIG92ZXIgcmVzZXJ2ZWQgcmFuZ2VzLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmNvbnN0IFVOSVZFUlNFX1NJWkUgPSA1MTI7CgpmdW5jdGlvbiByZXBhdGNoQWxsKCkgewogIGNvbnN0IGJhc2VVbml2ZXJzZSA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1bml2ZXJzZVN0YXJ0JykudmFsdWUpIHx8IDE7CgogIC8vIFJlc2VydmVkIHJhbmdlcyBwZXIgdW5pdmVyc2U6IFt7c3RhcnQsIGVuZH1dCiAgY29uc3QgcmVzZXJ2ZWQgPSB7fTsgLy8gdW5pdmVyc2UgLT4gW3Jhbmdlc10KCiAgLy8gUGFzcyAxOiBwbGFjZSBsb2NrZWQgZml4dHVyZXMgZXhhY3RseSB3aGVyZSB0aGV5IHNhaWQKICBmaXh0dXJlcy5mb3JFYWNoKGZ4ID0+IHsKICAgIGlmIChmeC5sb2NrZWRBZGRyZXNzICYmIGZ4LmxvY2tlZFVuaXZlcnNlICE9IG51bGwpIHsKICAgICAgY29uc3QgdSA9IGZ4LmxvY2tlZFVuaXZlcnNlOwogICAgICBjb25zdCBzdGFydCA9IGZ4LmxvY2tlZEFkZHJlc3M7CiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgZnguY2hhbm5lbHMgLSAxOwogICAgICBpZiAoc3RhcnQgPCAxIHx8IGVuZCA+IFVOSVZFUlNFX1NJWkUpIHsKICAgICAgICAvLyBJbnZhbGlkIGxvY2sg4oCUIGNsZWFyIGFuZCBmYWxsIHRocm91Z2ggdG8gYXV0by1wYXRjaGluZwogICAgICAgIGZ4LmxvY2tlZEFkZHJlc3MgPSBudWxsOwogICAgICAgIGZ4LmxvY2tlZFVuaXZlcnNlID0gbnVsbDsKICAgICAgICBmeC51bml2ZXJzZSA9IDA7CiAgICAgICAgZnguc3RhcnRBZGRyZXNzID0gMDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZngudW5pdmVyc2UgPSB1OwogICAgICBmeC5zdGFydEFkZHJlc3MgPSBzdGFydDsKICAgICAgcmVzZXJ2ZWRbdV0gPSByZXNlcnZlZFt1XSB8fCBbXTsKICAgICAgcmVzZXJ2ZWRbdV0ucHVzaCh7c3RhcnQsIGVuZH0pOwogICAgfQogIH0pOwoKICAvLyBQYXNzIDI6IGF1dG8tcGxhY2UgdGhlIHJlc3QgaW4gbGlzdCBvcmRlciwgcmVzcGVjdGluZyByZXNlcnZhdGlvbnMKICBmaXh0dXJlcy5mb3JFYWNoKGZ4ID0+IHsKICAgIGlmIChmeC5sb2NrZWRBZGRyZXNzICYmIGZ4LmxvY2tlZFVuaXZlcnNlICE9IG51bGwpIHJldHVybjsKCiAgICBsZXQgdSA9IGJhc2VVbml2ZXJzZTsKICAgIGxldCBwbGFjZWQgPSBmYWxzZTsKICAgIHdoaWxlICghcGxhY2VkKSB7CiAgICAgIC8vIGZpbmQgZmlyc3QgZ2FwIGluIHRoaXMgdW5pdmVyc2UgdGhhdCBmaXRzCiAgICAgIGNvbnN0IGJsb2NrcyA9IChyZXNlcnZlZFt1XSB8fCBbXSkuc2xpY2UoKS5zb3J0KChhLGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTsKICAgICAgbGV0IGN1cnNvciA9IDE7CiAgICAgIGZvciAoY29uc3QgYiBvZiBibG9ja3MpIHsKICAgICAgICBpZiAoYi5zdGFydCAtIGN1cnNvciA+PSBmeC5jaGFubmVscykgewogICAgICAgICAgLy8gZml0cyBiZWZvcmUgdGhpcyBibG9jawogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGN1cnNvciA9IGIuZW5kICsgMTsKICAgICAgfQogICAgICBpZiAoY3Vyc29yICsgZnguY2hhbm5lbHMgLSAxIDw9IFVOSVZFUlNFX1NJWkUpIHsKICAgICAgICBmeC51bml2ZXJzZSA9IHU7CiAgICAgICAgZnguc3RhcnRBZGRyZXNzID0gY3Vyc29yOwogICAgICAgIHJlc2VydmVkW3VdID0gKHJlc2VydmVkW3VdIHx8IFtdKTsKICAgICAgICByZXNlcnZlZFt1XS5wdXNoKHtzdGFydDogY3Vyc29yLCBlbmQ6IGN1cnNvciArIGZ4LmNoYW5uZWxzIC0gMX0pOwogICAgICAgIHBsYWNlZCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdSsrOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCmZ1bmN0aW9uIGFkZEZpeHR1cmVzKCkgewogIGNvbnN0IG1mciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZnJTZWxlY3QnKS52YWx1ZTsKICBjb25zdCBtb2RlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbFNlbGVjdCcpLnZhbHVlOwogIGNvbnN0IG1vZGVOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVTZWxlY3QnKS52YWx1ZTsKICBjb25zdCBxdHkgPSBNYXRoLm1heCgxLCBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXR5SW5wdXQnKS52YWx1ZSkgfHwgMSk7CiAgY29uc3QgY3VzdG9tTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21OYW1lJykudmFsdWUudHJpbSgpOwogIGNvbnN0IGdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwSW5wdXQnKS52YWx1ZS50cmltKCk7CiAgY29uc3QgYXV0b051bWJlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRvTnVtYmVyJykudmFsdWUgPT09ICcxJzsKCiAgY29uc3QgZiA9IChsaWJyYXJ5W21mcl0gfHwgW10pLmZpbmQoeCA9PiB4Lm1vZGVsID09PSBtb2RlbCk7CiAgaWYgKCFmKSB7IHNob3dUb2FzdCgnU2VsZWN0IGEgdmFsaWQgZml4dHVyZScsICdlcnJvcicpOyByZXR1cm47IH0KICBjb25zdCBtb2RlID0gZi5tb2Rlcy5maW5kKG0gPT4gbS5uYW1lID09PSBtb2RlTmFtZSk7CiAgaWYgKCFtb2RlKSB7IHNob3dUb2FzdCgnU2VsZWN0IGEgdmFsaWQgbW9kZScsICdlcnJvcicpOyByZXR1cm47IH0KCiAgaWYgKG1vZGUuY2hhbm5lbHMgPiBVTklWRVJTRV9TSVpFKSB7CiAgICBzaG93VG9hc3QoYEZpeHR1cmUgdXNlcyAke21vZGUuY2hhbm5lbHN9IGNoIOKAlCBleGNlZWRzIHVuaXZlcnNlIHNpemUgb2YgJHtVTklWRVJTRV9TSVpFfWAsICdlcnJvcicpOwogICAgcmV0dXJuOwogIH0KCiAgLy8gZmlndXJlIG91dCBzdGFydGluZyBudW1iZXIgZm9yIGF1dG8tbnVtYmVyaW5nCiAgbGV0IHN0YXJ0TnVtID0gMTsKICBpZiAoYXV0b051bWJlciAmJiBjdXN0b21OYW1lKSB7CiAgICBjb25zdCBleGlzdGluZyA9IGZpeHR1cmVzCiAgICAgIC5maWx0ZXIoeCA9PiB4LmN1c3RvbU5hbWUgJiYgeC5jdXN0b21OYW1lLnN0YXJ0c1dpdGgoY3VzdG9tTmFtZSkpCiAgICAgIC5tYXAoeCA9PiB7CiAgICAgICAgY29uc3QgbSA9IHguY3VzdG9tTmFtZS5tYXRjaCgvXHMoXGQrKSQvKTsKICAgICAgICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0pIDogMDsKICAgICAgfSk7CiAgICBpZiAoZXhpc3RpbmcubGVuZ3RoKSBzdGFydE51bSA9IE1hdGgubWF4KC4uLmV4aXN0aW5nKSArIDE7CiAgfQoKICBmb3IgKGxldCBpID0gMDsgaSA8IHF0eTsgaSsrKSB7CiAgICBsZXQgbmFtZSA9IGN1c3RvbU5hbWU7CiAgICBpZiAoY3VzdG9tTmFtZSAmJiBhdXRvTnVtYmVyKSB7CiAgICAgIC8vIG51bWJlciB3aGVuIGFkZGluZyBtdWx0aXBsZSwgT1Igd2hlbiBhIGZpeHR1cmUgd2l0aCB0aGlzIGV4YWN0IG5hbWUgYWxyZWFkeSBleGlzdHMKICAgICAgY29uc3QgbmVlZHNOdW1iZXIgPSBxdHkgPiAxIHx8IGZpeHR1cmVzLnNvbWUoeCA9PiB4LmN1c3RvbU5hbWUgPT09IGN1c3RvbU5hbWUpOwogICAgICBpZiAobmVlZHNOdW1iZXIpIG5hbWUgPSBgJHtjdXN0b21OYW1lfSAke3N0YXJ0TnVtICsgaX1gOwogICAgfQoKICAgIGZpeHR1cmVzLnB1c2goewogICAgICBpZDogRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCksCiAgICAgIG1mciwgbW9kZWwsIG1vZGVOYW1lLAogICAgICBjaGFubmVsczogbW9kZS5jaGFubmVscywKICAgICAgY3VzdG9tTmFtZTogbmFtZSB8fCAnJywKICAgICAgZ3JvdXA6IGdyb3VwIHx8ICcnLAogICAgICBzdGFydEFkZHJlc3M6IDAsCiAgICAgIHVuaXZlcnNlOiAwLAogICAgICBsb2NrZWRBZGRyZXNzOiBudWxsLAogICAgICBsb2NrZWRVbml2ZXJzZTogbnVsbAogICAgfSk7CiAgfQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21OYW1lJykudmFsdWUgPSAnJzsKICByZXBhdGNoQWxsKCk7CiAgcmVyZW5kZXIoKTsKICBzaG93VG9hc3QoYEFkZGVkICR7cXR5fSDDlyAke21vZGVsfSAoJHttb2RlLmNoYW5uZWxzfSBjaClgKTsKfQoKZnVuY3Rpb24gcmVtb3ZlRml4dHVyZShpZCkgewogIGZpeHR1cmVzID0gZml4dHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gaWQpOwogIHJlcGF0Y2hBbGwoKTsKICByZXJlbmRlcigpOwp9CgpmdW5jdGlvbiBkdXBsaWNhdGVGaXh0dXJlKGlkKSB7CiAgY29uc3QgZnggPSBmaXh0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpOwogIGlmICghZngpIHJldHVybjsKICBjb25zdCBpZHggPSBmaXh0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7CiAgY29uc3QgY29weSA9IHsKICAgIC4uLmZ4LAogICAgaWQ6IERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpLAogICAgbG9ja2VkQWRkcmVzczogbnVsbCwKICAgIGxvY2tlZFVuaXZlcnNlOiBudWxsLAogICAgc3RhcnRBZGRyZXNzOiAwLAogICAgdW5pdmVyc2U6IDAKICB9OwogIC8vIGF1dG8taW5jcmVtZW50IG5hbWUgaWYgaXQgZW5kcyBpbiBhIG51bWJlcgogIGlmIChjb3B5LmN1c3RvbU5hbWUpIHsKICAgIGNvbnN0IG0gPSBjb3B5LmN1c3RvbU5hbWUubWF0Y2goL14oLio/KShcZCspJC8pOwogICAgaWYgKG0pIHsKICAgICAgY29uc3QgcHJlZml4ID0gbVsxXTsKICAgICAgY29uc3QgZXhpc3RpbmdOdW1zID0gZml4dHVyZXMKICAgICAgICAuZmlsdGVyKGYgPT4gZi5jdXN0b21OYW1lICYmIGYuY3VzdG9tTmFtZS5zdGFydHNXaXRoKHByZWZpeCkpCiAgICAgICAgLm1hcChmID0+IHsKICAgICAgICAgIGNvbnN0IG1tID0gZi5jdXN0b21OYW1lLm1hdGNoKC8oXGQrKSQvKTsKICAgICAgICAgIHJldHVybiBtbSA/IHBhcnNlSW50KG1tWzFdKSA6IDA7CiAgICAgICAgfSk7CiAgICAgIGNvcHkuY3VzdG9tTmFtZSA9IHByZWZpeCArIChNYXRoLm1heCgwLCAuLi5leGlzdGluZ051bXMpICsgMSk7CiAgICB9IGVsc2UgewogICAgICBjb3B5LmN1c3RvbU5hbWUgPSBmeC5jdXN0b21OYW1lICsgJyBjb3B5JzsKICAgIH0KICB9CiAgZml4dHVyZXMuc3BsaWNlKGlkeCArIDEsIDAsIGNvcHkpOwogIHJlcGF0Y2hBbGwoKTsKICByZXJlbmRlcigpOwogIHNob3dUb2FzdChgRHVwbGljYXRlZDogJHtjb3B5LmN1c3RvbU5hbWUgfHwgZngubW9kZWx9YCk7Cn0KCmZ1bmN0aW9uIGNoYW5nZUZpeHR1cmVNb2RlKGlkLCBuZXdNb2RlTmFtZSkgewogIGNvbnN0IGZ4ID0gZml4dHVyZXMuZmluZChmID0+IGYuaWQgPT09IGlkKTsKICBpZiAoIWZ4KSByZXR1cm47CiAgaWYgKGZ4Lm1vZGVOYW1lID09PSBuZXdNb2RlTmFtZSkgcmV0dXJuOwoKICBjb25zdCBsaWJGaXggPSAobGlicmFyeVtmeC5tZnJdIHx8IFtdKS5maW5kKHggPT4geC5tb2RlbCA9PT0gZngubW9kZWwpOwogIGlmICghbGliRml4KSB7IHNob3dUb2FzdCgnRml4dHVyZSBub3QgaW4gbGlicmFyeScsICdlcnJvcicpOyByZXJlbmRlcigpOyByZXR1cm47IH0KICBjb25zdCBuZXdNb2RlID0gbGliRml4Lm1vZGVzLmZpbmQobSA9PiBtLm5hbWUgPT09IG5ld01vZGVOYW1lKTsKICBpZiAoIW5ld01vZGUpIHsgc2hvd1RvYXN0KCdNb2RlIG5vdCBmb3VuZCcsICdlcnJvcicpOyByZXJlbmRlcigpOyByZXR1cm47IH0KCiAgaWYgKG5ld01vZGUuY2hhbm5lbHMgPiBVTklWRVJTRV9TSVpFKSB7CiAgICBzaG93VG9hc3QoYCR7bmV3TW9kZS5jaGFubmVsc30gY2ggZXhjZWVkcyB1bml2ZXJzZSBzaXplIG9mICR7VU5JVkVSU0VfU0laRX1gLCAnZXJyb3InKTsKICAgIHJlcmVuZGVyKCk7CiAgICByZXR1cm47CiAgfQoKICAvLyBBbHdheXMgdXBkYXRlIGFsbCBzYW1lLW1vZGVsIGZpeHR1cmVzIG9uIHRoZSBzYW1lIG9sZCBtb2RlCiAgY29uc3Qgb2xkTW9kZSA9IGZ4Lm1vZGVOYW1lOwogIGNvbnN0IG1hdGNoZXMgPSBmaXh0dXJlcy5maWx0ZXIoZiA9PiBmLm1mciA9PT0gZngubWZyICYmIGYubW9kZWwgPT09IGZ4Lm1vZGVsICYmIGYubW9kZU5hbWUgPT09IG9sZE1vZGUpOwogIG1hdGNoZXMuZm9yRWFjaChmID0+IHsKICAgIGYubW9kZU5hbWUgPSBuZXdNb2RlTmFtZTsKICAgIGYuY2hhbm5lbHMgPSBuZXdNb2RlLmNoYW5uZWxzOwogICAgLy8gaWYgY2hhbm5lbCBjb3VudCBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFueSBsb2NrIHRoYXQgd291bGQgbm93IG92ZXJmbG93CiAgICBpZiAoZi5sb2NrZWRBZGRyZXNzICYmIGYubG9ja2VkQWRkcmVzcyArIG5ld01vZGUuY2hhbm5lbHMgLSAxID4gVU5JVkVSU0VfU0laRSkgewogICAgICBmLmxvY2tlZEFkZHJlc3MgPSBudWxsOwogICAgICBmLmxvY2tlZFVuaXZlcnNlID0gbnVsbDsKICAgIH0KICB9KTsKCiAgc2hvd1RvYXN0KGBVcGRhdGVkICR7bWF0Y2hlcy5sZW5ndGh9IMOXICR7ZngubW9kZWx9IOKGkiAke25ld01vZGVOYW1lfWApOwogIHJlcGF0Y2hBbGwoKTsKICByZXJlbmRlcigpOwp9CgpmdW5jdGlvbiB1cGRhdGVGaXh0dXJlTmFtZShpZCwgbmV3TmFtZSkgewogIGNvbnN0IGZ4ID0gZml4dHVyZXMuZmluZChmID0+IGYuaWQgPT09IGlkKTsKICBpZiAoIWZ4KSByZXR1cm47CiAgY29uc3QgdHJpbW1lZCA9IG5ld05hbWUudHJpbSgpOwogIGlmICh0cmltbWVkID09PSAoZnguY3VzdG9tTmFtZSB8fCAnJykpIHJldHVybjsKICBmeC5jdXN0b21OYW1lID0gdHJpbW1lZDsKICB1cGRhdGVHcm91cFN1Z2dlc3Rpb25zKCk7CiAgcmVyZW5kZXIoKTsKfQoKZnVuY3Rpb24gbG9ja0ZpeHR1cmVBZGRyZXNzKGlkLCBpbnB1dCkgewogIGNvbnN0IGZ4ID0gZml4dHVyZXMuZmluZChmID0+IGYuaWQgPT09IGlkKTsKICBpZiAoIWZ4KSByZXR1cm47CgogIGNvbnN0IHZhbCA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICBjb25zdCBjdXJyZW50RGlzcGxheSA9IGBVJHtmeC51bml2ZXJzZX0vJHtmeC5zdGFydEFkZHJlc3N9YDsKICAvLyBJZiB1c2VyIGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcsIGRvIG5vdGhpbmcKICBpZiAodmFsID09PSBjdXJyZW50RGlzcGxheSkgcmV0dXJuOwoKICAvLyBhY2NlcHQgIjEyMyIgb3IgIlUyLzEyMyIgb3IgIjIvMTIzIgogIGxldCB1ID0gZngudW5pdmVyc2U7CiAgbGV0IGFkZHI7CiAgbGV0IG07CiAgaWYgKG0gPSB2YWwubWF0Y2goL15bdVVdPyhcZCspW1wvXC46XShcZCspJC8pKSB7CiAgICB1ID0gcGFyc2VJbnQobVsxXSk7CiAgICBhZGRyID0gcGFyc2VJbnQobVsyXSk7CiAgfSBlbHNlIGlmIChtID0gdmFsLm1hdGNoKC9eKFxkKykkLykpIHsKICAgIGFkZHIgPSBwYXJzZUludChtWzFdKTsKICB9IGVsc2UgewogICAgc2hvd1RvYXN0KCdVc2UgZm9ybWF0ICIxMjMiIG9yICJVMi8xMjMiJywgJ2Vycm9yJyk7CiAgICByZXJlbmRlcigpOwogICAgcmV0dXJuOwogIH0KCiAgaWYgKGFkZHIgPCAxIHx8IGFkZHIgPiBVTklWRVJTRV9TSVpFKSB7CiAgICBzaG93VG9hc3QoYEFkZHJlc3MgbXVzdCBiZSAxLSR7VU5JVkVSU0VfU0laRX1gLCAnZXJyb3InKTsKICAgIHJlcmVuZGVyKCk7CiAgICByZXR1cm47CiAgfQogIGlmIChhZGRyICsgZnguY2hhbm5lbHMgLSAxID4gVU5JVkVSU0VfU0laRSkgewogICAgc2hvd1RvYXN0KGBGaXh0dXJlIHJ1bnMgcGFzdCBlbmQgb2YgdW5pdmVyc2UgKG5lZWRzICR7ZnguY2hhbm5lbHN9IGNoKWAsICdlcnJvcicpOwogICAgcmVyZW5kZXIoKTsKICAgIHJldHVybjsKICB9CiAgLy8gQ2hlY2sgY29uZmxpY3RzIHdpdGggb3RoZXIgbG9ja2VkIGZpeHR1cmVzCiAgY29uc3QgY29uZmxpY3QgPSBmaXh0dXJlcy5maW5kKGYgPT4KICAgIGYuaWQgIT09IGZ4LmlkICYmCiAgICBmLmxvY2tlZEFkZHJlc3MgIT0gbnVsbCAmJgogICAgZi5sb2NrZWRVbml2ZXJzZSA9PT0gdSAmJgogICAgIShmLmxvY2tlZEFkZHJlc3MgKyBmLmNoYW5uZWxzIC0gMSA8IGFkZHIgfHwgZi5sb2NrZWRBZGRyZXNzID4gYWRkciArIGZ4LmNoYW5uZWxzIC0gMSkKICApOwogIGlmIChjb25mbGljdCkgewogICAgc2hvd1RvYXN0KGBDb25mbGljdHMgd2l0aCBsb2NrZWQ6ICR7Y29uZmxpY3QuY3VzdG9tTmFtZSB8fCBjb25mbGljdC5tb2RlbH0gQCBVJHtjb25mbGljdC5sb2NrZWRVbml2ZXJzZX0vJHtjb25mbGljdC5sb2NrZWRBZGRyZXNzfWAsICdlcnJvcicpOwogICAgcmVyZW5kZXIoKTsKICAgIHJldHVybjsKICB9CgogIGZ4LmxvY2tlZEFkZHJlc3MgPSBhZGRyOwogIGZ4LmxvY2tlZFVuaXZlcnNlID0gdTsKICByZXBhdGNoQWxsKCk7CiAgcmVyZW5kZXIoKTsKICBzaG93VG9hc3QoYPCflJIgTG9ja2VkIHRvIFUke3V9LyR7YWRkcn1gKTsKfQoKZnVuY3Rpb24gdW5sb2NrRml4dHVyZShpZCkgewogIGNvbnN0IGZ4ID0gZml4dHVyZXMuZmluZChmID0+IGYuaWQgPT09IGlkKTsKICBpZiAoIWZ4KSByZXR1cm47CiAgZngubG9ja2VkQWRkcmVzcyA9IG51bGw7CiAgZngubG9ja2VkVW5pdmVyc2UgPSBudWxsOwogIHJlcGF0Y2hBbGwoKTsKICByZXJlbmRlcigpOwogIHNob3dUb2FzdCgnQWRkcmVzcyB1bmxvY2tlZCDigJQgYXV0by1wYXRjaGVkJyk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRFJBRyBUTyBSRU9SREVSCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KbGV0IGRyYWdnZWRJZCA9IG51bGw7CgpmdW5jdGlvbiBvbkRyYWdTdGFydChlLCBpZCkgewogIGRyYWdnZWRJZCA9IGlkOwogIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7CiAgZS50YXJnZXQuY2xvc2VzdCgndHInKS5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpOwp9CmZ1bmN0aW9uIG9uRHJhZ092ZXIoZSwgaWQpIHsKICBlLnByZXZlbnREZWZhdWx0KCk7CiAgY29uc3Qgcm93ID0gZS50YXJnZXQuY2xvc2VzdCgndHInKTsKICBpZiAoIXJvdykgcmV0dXJuOwogIGNvbnN0IHJlY3QgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgY29uc3QgYWZ0ZXIgPSBlLmNsaWVudFkgPiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0ci5kcm9wLWFib3ZlLCB0ci5kcm9wLWJlbG93JykuZm9yRWFjaChyID0+IHsKICAgIHIuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1hYm92ZScsICdkcm9wLWJlbG93Jyk7CiAgfSk7CiAgcm93LmNsYXNzTGlzdC5hZGQoYWZ0ZXIgPyAnZHJvcC1iZWxvdycgOiAnZHJvcC1hYm92ZScpOwp9CmZ1bmN0aW9uIG9uRHJvcChlLCB0YXJnZXRJZCkgewogIGUucHJldmVudERlZmF1bHQoKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0ci5kcm9wLWFib3ZlLCB0ci5kcm9wLWJlbG93LCB0ci5kcmFnZ2luZycpLmZvckVhY2gociA9PiB7CiAgICByLmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtYWJvdmUnLCAnZHJvcC1iZWxvdycsICdkcmFnZ2luZycpOwogIH0pOwogIGlmIChkcmFnZ2VkSWQgPT0gbnVsbCB8fCBkcmFnZ2VkSWQgPT09IHRhcmdldElkKSByZXR1cm47CgogIGNvbnN0IHJvdyA9IGUudGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7CiAgY29uc3QgcmVjdCA9IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICBjb25zdCBhZnRlciA9IGUuY2xpZW50WSA+IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwoKICBjb25zdCBmcm9tSWR4ID0gZml4dHVyZXMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZHJhZ2dlZElkKTsKICBjb25zdCB0b0lkeFJhdyA9IGZpeHR1cmVzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IHRhcmdldElkKTsKICBpZiAoZnJvbUlkeCA8IDAgfHwgdG9JZHhSYXcgPCAwKSByZXR1cm47CiAgY29uc3QgW21vdmVkXSA9IGZpeHR1cmVzLnNwbGljZShmcm9tSWR4LCAxKTsKICBsZXQgdG9JZHggPSBmaXh0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSB0YXJnZXRJZCk7CiAgaWYgKGFmdGVyKSB0b0lkeCsrOwogIGZpeHR1cmVzLnNwbGljZSh0b0lkeCwgMCwgbW92ZWQpOwogIGRyYWdnZWRJZCA9IG51bGw7CiAgcmVwYXRjaEFsbCgpOwogIHJlcmVuZGVyKCk7Cn0KZnVuY3Rpb24gb25EcmFnRW5kKCkgewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyLmRyb3AtYWJvdmUsIHRyLmRyb3AtYmVsb3csIHRyLmRyYWdnaW5nJykuZm9yRWFjaChyID0+IHsKICAgIHIuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1hYm92ZScsICdkcm9wLWJlbG93JywgJ2RyYWdnaW5nJyk7CiAgfSk7CiAgZHJhZ2dlZElkID0gbnVsbDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBSRU5ERVIKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBvcGVuSGVscCgpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscE1vZGFsJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwogIC8vIFN0b3AgdGhlIHB1bHNlIGFuaW1hdGlvbiBvbmNlIHVzZXIgZGlzY292ZXJzIGl0CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhlbHAtcHVsc2UnKS5mb3JFYWNoKGIgPT4gYi5jbGFzc0xpc3QuYWRkKCdzZWVuJykpOwp9CmZ1bmN0aW9uIGNsb3NlSGVscCgpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscE1vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOwp9CgpmdW5jdGlvbiBwcmludFBhdGNoKCkgewogIC8vIFRlbXBvcmFyaWx5IGV4cGFuZCBhbGwgdW5pdmVyc2VzIGZvciBhIGNvbXBsZXRlIHByaW50LCB0aGVuIHJlc3RvcmUKICBjb25zdCB3YXNDb2xsYXBzZWQgPSBuZXcgU2V0KGNvbGxhcHNlZFVuaXZlcnNlcyk7CiAgY29sbGFwc2VkVW5pdmVyc2VzID0gbmV3IFNldCgpOwogIHJlcmVuZGVyKCk7CiAgLy8gVXNlIHRpbWVvdXQgdG8gZW5zdXJlIHJlbmRlciBjb21wbGV0ZXMgYmVmb3JlIHByaW50IGRpYWxvZwogIHNldFRpbWVvdXQoKCkgPT4gewogICAgd2luZG93LnByaW50KCk7CiAgICAvLyBSZXN0b3JlIGNvbGxhcHNlZCBzdGF0ZSBhZnRlciB0aGUgcHJpbnQgZGlhbG9nIGNsb3NlcwogICAgY29sbGFwc2VkVW5pdmVyc2VzID0gd2FzQ29sbGFwc2VkOwogICAgcmVyZW5kZXIoKTsKICB9LCA1MCk7Cn0KCmZ1bmN0aW9uIHRvZ2dsZVVuaXZlcnNlQ29sbGFwc2UodSkgewogIGlmIChjb2xsYXBzZWRVbml2ZXJzZXMuaGFzKHUpKSBjb2xsYXBzZWRVbml2ZXJzZXMuZGVsZXRlKHUpOwogIGVsc2UgY29sbGFwc2VkVW5pdmVyc2VzLmFkZCh1KTsKICByZXJlbmRlcigpOwp9CgpmdW5jdGlvbiByZXJlbmRlcigpIHsKICByZXBhdGNoQWxsKCk7CiAgdXBkYXRlR3JvdXBTdWdnZXN0aW9ucygpOwogIGNvbnN0IGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF0Y2hBcmVhJyk7CiAgY29uc3QgZmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlcklucHV0JykudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7CgogIGNvbnN0IHRvdGFsQ2hhbm5lbHMgPSBmaXh0dXJlcy5yZWR1Y2UoKHMsZikgPT4gcyArIGYuY2hhbm5lbHMsIDApOwogIGNvbnN0IHVuaXZlcnNlcyA9IFsuLi5uZXcgU2V0KGZpeHR1cmVzLm1hcChmID0+IGYudW5pdmVyc2UpKV0uc29ydCgoYSxiKSA9PiBhLWIpOwogIGNvbnN0IGdyb3VwcyA9IG5ldyBTZXQoZml4dHVyZXMubWFwKGYgPT4gZi5ncm91cCkuZmlsdGVyKEJvb2xlYW4pKTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRGaXh0dXJlcycpLnRleHRDb250ZW50ID0gZml4dHVyZXMubGVuZ3RoOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0Q2hhbm5lbHMnKS50ZXh0Q29udGVudCA9IHRvdGFsQ2hhbm5lbHM7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRVbml2ZXJzZXMnKS50ZXh0Q29udGVudCA9IHVuaXZlcnNlcy5sZW5ndGg7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRHcm91cHMnKS50ZXh0Q29udGVudCA9IGdyb3Vwcy5zaXplOwoKICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1wcmludC1kYXRlJywgbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcodW5kZWZpbmVkLCB7eWVhcjonbnVtZXJpYycsIG1vbnRoOidzaG9ydCcsIGRheTonbnVtZXJpYyd9KSk7CgogIGlmIChmaXh0dXJlcy5sZW5ndGggPT09IDApIHsKICAgIGFyZWEuaW5uZXJIVE1MID0gYAogICAgICA8ZGl2IGNsYXNzPSJlbXB0eSI+CiAgICAgICAgPGgzPk5vIGZpeHR1cmVzIHBhdGNoZWQ8L2gzPgogICAgICAgIDxwPlBpY2sgYSBtYW51ZmFjdHVyZXIsIG1vZGVsLCBhbmQgbW9kZSBvbiB0aGUgbGVmdCwgdGhlbiBoaXQgPGtiZD5FbnRlcjwva2JkPi48L3A+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij5PciBpbXBvcnQgYSBzYXZlZCByaWcgLyBKU09OIHBhdGNoIGxpc3QuPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LW5vdGljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1ub3RpY2UtdGl0bGUiPvCfkYsgRmlyc3QgdGltZSBoZXJlPzwvZGl2PgogICAgICAgICAgPHA+Q2xpY2sgdGhlIGdsb3dpbmcgPHN0cm9uZz4/IEhlbHA8L3N0cm9uZz4gYnV0dG9uIGF0IHRoZSB0b3AgZm9yIGEgZnVsbCB3YWxrdGhyb3VnaC48L3A+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPjxzcGFuIGNsYXNzPSJmbGFzaC13YXJuIj7imqAgSGVhZHMgdXA6PC9zcGFuPiBhbnkgY3VzdG9tIGZpeHR1cmVzIHlvdSBhZGQgYXJlIHN0b3JlZCBpbiA8ZW0+dGhpcyBicm93c2VyIG9ubHk8L2VtPi4gSWYgeW91IGNsZWFyIHlvdXIgYnJvd3NlciBkYXRhLCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgZGV2aWNlLCBvciB1c2UgcHJpdmF0ZS9pbmNvZ25pdG8gbW9kZSwgeW91ciBjdXN0b20gbGlicmFyeSB3aWxsIGJlIDxzdHJvbmc+bG9zdDwvc3Ryb25nPi48L3A+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPlRvIGtlZXAgeW91ciBjdXN0b20gbGlicmFyeSBzYWZlLCBjbGljayA8c3Ryb25nPuKshyBMaWJyYXJ5PC9zdHJvbmc+IGluIHRoZSBoZWFkZXIgdG8gZG93bmxvYWQgYSBKU09OIGJhY2t1cCDigJQgdGhlbiByZS1pbXBvcnQgaXQgYW55dGltZSB2aWEgPHN0cm9uZz7vvIsgTG9hZCAuanNvbiBGaWxlPC9zdHJvbmc+IGluIHRoZSBzaWRlYmFyLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YDsKICAgIHVwZGF0ZVByZXZpZXcoKTsKICAgIHJldHVybjsKICB9CgogIGxldCBodG1sID0gJyc7CiAgdW5pdmVyc2VzLmZvckVhY2godSA9PiB7CiAgICBjb25zdCBpdGVtcyA9IGZpeHR1cmVzCiAgICAgIC5maWx0ZXIoZiA9PiBmLnVuaXZlcnNlID09PSB1KQogICAgICAuZmlsdGVyKGYgPT4gewogICAgICAgIGlmICghZmlsdGVyKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gKGYubWZyICsgJyAnICsgZi5tb2RlbCArICcgJyArIChmLmN1c3RvbU5hbWV8fCcnKSArICcgJyArIGYubW9kZU5hbWUgKyAnICcgKyAoZi5ncm91cHx8JycpKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcik7CiAgICAgIH0pOwoKICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDAgJiYgZmlsdGVyKSByZXR1cm47CgogICAgY29uc3QgdXNlZCA9IGZpeHR1cmVzLmZpbHRlcihmID0+IGYudW5pdmVyc2UgPT09IHUpLnJlZHVjZSgocyxmKSA9PiBzICsgZi5jaGFubmVscywgMCk7CiAgICBjb25zdCBwY3QgPSBNYXRoLm1pbigxMDAsICh1c2VkIC8gVU5JVkVSU0VfU0laRSkgKiAxMDApOwogICAgY29uc3QgaXNGdWxsID0gcGN0ID49IDkwOwoKICAgIGh0bWwgKz0gYAogICAgICA8ZGl2IGNsYXNzPSJ1bml2ZXJzZS1ibG9jayR7aXNGdWxsID8gJyB3YXJuJyA6ICcnfSR7Y29sbGFwc2VkVW5pdmVyc2VzLmhhcyh1KSA/ICcgY29sbGFwc2VkJyA6ICcnfSI+CiAgICAgICAgPGRpdiBjbGFzcz0idW5pdmVyc2UtaGVhZGVyIiBvbmNsaWNrPSJ0b2dnbGVVbml2ZXJzZUNvbGxhcHNlKCR7dX0pIiB0aXRsZT0iQ2xpY2sgdG8gJHtjb2xsYXBzZWRVbml2ZXJzZXMuaGFzKHUpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnfSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1bml2ZXJzZS10aXRsZSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzZS1jaGV2cm9uIj4ke2NvbGxhcHNlZFVuaXZlcnNlcy5oYXModSkgPyAn4pa4JyA6ICfilr4nfTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+VW5pdmVyc2UgJHt1fTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoaXAke2lzRnVsbCA/ICcgd2FybicgOiAnJ30iPlUke3V9JHtpc0Z1bGwgPyAnIMK3IFRJR0hUJyA6ICcnfTwvc3Bhbj4KICAgICAgICAgICAgJHtjb2xsYXBzZWRVbml2ZXJzZXMuaGFzKHUpID8gYDxzcGFuIGNsYXNzPSJjb2xsYXBzZS1jb3VudCI+JHtpdGVtcy5sZW5ndGh9IGZpeHR1cmUke2l0ZW1zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfTwvc3Bhbj5gIDogJyd9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InVuaXZlcnNlLW1ldGVyIj4KICAgICAgICAgICAgPHNwYW4+JHt1c2VkfSAvICR7VU5JVkVSU0VfU0laRX0gY2g8L3NwYW4+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGVyLWJhciI+PGRpdiBjbGFzcz0ibWV0ZXItZmlsbCIgc3R5bGU9IndpZHRoOiAke3BjdH0lOyI+PC9kaXY+PC9kaXY+CiAgICAgICAgICAgIDxzcGFuPiR7cGN0LnRvRml4ZWQoMCl9JTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgICR7Y29sbGFwc2VkVW5pdmVyc2VzLmhhcyh1KSA/ICcnIDogYDx0YWJsZT4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0iZHJhZy1oYW5kbGUtY29sIiBzdHlsZT0id2lkdGg6IDI4cHg7Ij48L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6IDE4MHB4OyI+QWRkcmVzczwvdGg+CiAgICAgICAgICAgICAgPHRoPkZpeHR1cmU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6IDE0MHB4OyI+TW9kZTwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogNjBweDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij5DaDwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogOTBweDsiPkFjdGlvbnM8L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgJHtpdGVtcy5tYXAoZiA9PiB7CiAgICAgICAgICAgICAgY29uc3QgbGliRml4ID0gKGxpYnJhcnlbZi5tZnJdIHx8IFtdKS5maW5kKHggPT4geC5tb2RlbCA9PT0gZi5tb2RlbCk7CiAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlTW9kZXMgPSBsaWJGaXggPyBsaWJGaXgubW9kZXMgOiBbe25hbWU6IGYubW9kZU5hbWUsIGNoYW5uZWxzOiBmLmNoYW5uZWxzfV07CiAgICAgICAgICAgICAgY29uc3QgbW9kZU9wdGlvbnMgPSBhdmFpbGFibGVNb2Rlcy5tYXAobSA9PgogICAgICAgICAgICAgICAgYDxvcHRpb24gdmFsdWU9IiR7ZXNjYXBlSHRtbChtLm5hbWUpfSIgJHttLm5hbWUgPT09IGYubW9kZU5hbWUgPyAnc2VsZWN0ZWQnIDogJyd9PiR7ZXNjYXBlSHRtbChtLm5hbWUpfSAoJHttLmNoYW5uZWxzfSBjaCk8L29wdGlvbj5gCiAgICAgICAgICAgICAgKS5qb2luKCcnKTsKICAgICAgICAgICAgICBjb25zdCBsb2NrZWQgPSBmLmxvY2tlZEFkZHJlc3MgIT0gbnVsbDsKICAgICAgICAgICAgICBjb25zdCBhZGRyRGlzcGxheSA9IGBVJHtmLnVuaXZlcnNlfS8ke2Yuc3RhcnRBZGRyZXNzfWA7CiAgICAgICAgICAgICAgY29uc3QgZW5kQWRkciA9IChmLnN0YXJ0QWRkcmVzcyArIGYuY2hhbm5lbHMgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDMsJzAnKTsKICAgICAgICAgICAgICByZXR1cm4gYAogICAgICAgICAgICAgIDx0ciBkYXRhLWlkPSIke2YuaWR9IgogICAgICAgICAgICAgICAgICBvbmRyYWdvdmVyPSJvbkRyYWdPdmVyKGV2ZW50LCAke2YuaWR9KSIKICAgICAgICAgICAgICAgICAgb25kcm9wPSJvbkRyb3AoZXZlbnQsICR7Zi5pZH0pIgogICAgICAgICAgICAgICAgICBvbmRyYWdlbmQ9Im9uRHJhZ0VuZCgpIj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZHJhZy1oYW5kbGUiCiAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSJ0cnVlIgogICAgICAgICAgICAgICAgICAgIG9uZHJhZ3N0YXJ0PSJvbkRyYWdTdGFydChldmVudCwgJHtmLmlkfSkiCiAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkRyYWcgdG8gcmVvcmRlciI+4ouu4ouuPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYWRkciR7bG9ja2VkID8gJyBsb2NrZWQnIDogJyd9Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFkZHItY29tYm8iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYWRkci1lZGl0IiB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YWRkckRpc3BsYXl9IgogICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IiR7bG9ja2VkID8gJ0xvY2tlZCDigJQgZWRpdCB0byBjaGFuZ2UsIGNsZWFyIHRvIGF1dG8tcGF0Y2gnIDogJ0NsaWNrIHRvIGxvY2sgdG8gYSBzcGVjaWZpYyBhZGRyZXNzLiBVc2UgIjEyMyIgb3IgIlUyLzEyMyInfSIKICAgICAgICAgICAgICAgICAgICAgIG9uYmx1cj0ibG9ja0ZpeHR1cmVBZGRyZXNzKCR7Zi5pZH0sIHRoaXMpIgogICAgICAgICAgICAgICAgICAgICAgb25rZXlkb3duPSJpZihldmVudC5rZXk9PT0nRW50ZXInKXRoaXMuYmx1cigpOyBpZihldmVudC5rZXk9PT0nRXNjYXBlJyl7dGhpcy52YWx1ZT0nJHthZGRyRGlzcGxheX0nO3RoaXMuYmx1cigpO30iPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhZGRyLXNlcCI+4oaSPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhZGRyLWVuZCI+JHtlbmRBZGRyfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZml4Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJuYW1lLWVkaXQiIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IiIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlc2NhcGVIdG1sKGYuY3VzdG9tTmFtZSB8fCAnJyl9IgogICAgICAgICAgICAgICAgICAgIG9uYmx1cj0idXBkYXRlRml4dHVyZU5hbWUoJHtmLmlkfSwgdGhpcy52YWx1ZSkiCiAgICAgICAgICAgICAgICAgICAgb25rZXlkb3duPSJpZihldmVudC5rZXk9PT0nRW50ZXInKXRoaXMuYmx1cigpOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1mciI+JHtlc2NhcGVIdG1sKGYubWZyKX0gwrcgJHtlc2NhcGVIdG1sKGYubW9kZWwpfSR7Zi5ncm91cCA/IGA8c3BhbiBjbGFzcz0iZ3JvdXAtdGFnIj4ke2VzY2FwZUh0bWwoZi5ncm91cCl9PC9zcGFuPmAgOiAnJ308L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoIj4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibW9kZS1lZGl0IiBvbmNoYW5nZT0iY2hhbmdlRml4dHVyZU1vZGUoJHtmLmlkfSwgdGhpcy52YWx1ZSkiPgogICAgICAgICAgICAgICAgICAgICR7bW9kZU9wdGlvbnN9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibnVtIj4ke2YuY2hhbm5lbHN9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgJHtsb2NrZWQgPyBgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idG4iIG9uY2xpY2s9InVubG9ja0ZpeHR1cmUoJHtmLmlkfSkiIHRpdGxlPSJVbmxvY2sg4oCUIHJldHVybiB0byBhdXRvLXBhdGNoIj7wn5STPC9idXR0b24+YCA6ICcnfQogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJpY29uLWJ0biIgb25jbGljaz0iZHVwbGljYXRlRml4dHVyZSgke2YuaWR9KSIgdGl0bGU9IkR1cGxpY2F0ZSAoQ21kL0N0cmwrRCkiPuKOmDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkYW5nZXIiIG9uY2xpY2s9InJlbW92ZUZpeHR1cmUoJHtmLmlkfSkiIHRpdGxlPSJSZW1vdmUgKERlbCkiPuKclTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICBgO30pLmpvaW4oJycpfQogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPmB9CiAgICAgIDwvZGl2PmA7CiAgfSk7CgogIGlmICghaHRtbCkgewogICAgYXJlYS5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0iZW1wdHkiPjxoMz5ObyBtYXRjaGVzPC9oMz48cD5ObyBmaXh0dXJlcyBtYXRjaCB0aGUgY3VycmVudCBmaWx0ZXIuPC9wPjwvZGl2PmA7CiAgICB1cGRhdGVQcmV2aWV3KCk7CiAgICByZXR1cm47CiAgfQoKICBhcmVhLmlubmVySFRNTCA9IGh0bWw7CiAgdXBkYXRlUHJldmlldygpOwp9CgpmdW5jdGlvbiBlc2NhcGVIdG1sKHMpIHsKICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoL1smPD4iJ10vZywgYyA9PgogICAgKHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXSkKICApOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIElNUE9SVCAvIEVYUE9SVAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIGV4cG9ydFBhdGNoKGZvcm1hdCkgewogIGlmIChmb3JtYXQgPT09ICd4bHN4JykgewogICAgaWYgKGZpeHR1cmVzLmxlbmd0aCA9PT0gMCkgeyBzaG93VG9hc3QoJ05vdGhpbmcgdG8gZXhwb3J0JywgJ2Vycm9yJyk7IHJldHVybjsgfQogICAgZXhwb3J0WGxzeCgpOwogICAgcmV0dXJuOwogIH0KCiAgLy8gSlNPTjogZnVsbCBmaXh0dXJlIGxpYnJhcnkgb25seSDigJQgbm8gcGF0Y2hlZCByaWcKICBjb25zdCBkYXRhID0gewogICAgZXhwb3J0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIGxpYnJhcnk6IGxpYnJhcnkKICB9OwogIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMildLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nfSk7CiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogIGEuaHJlZiA9IHVybDsKICBhLmRvd25sb2FkID0gYGRteF9maXh0dXJlX2xpYnJhcnlfJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCl9Lmpzb25gOwogIGEuY2xpY2soKTsKICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgc2hvd1RvYXN0KCdGaXh0dXJlIGxpYnJhcnkgZXhwb3J0ZWQnKTsKfQoKYXN5bmMgZnVuY3Rpb24gZXhwb3J0WGxzeCgpIHsKICAvLyBMYXp5LWxvYWQgU2hlZXRKUyBmcm9tIENETgogIGlmICh0eXBlb2YgWExTWCA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgIHNob3dUb2FzdCgnTG9hZGluZyBzcHJlYWRzaGVldCBsaWJyYXJ5Li4uJywgJ3dhcm4nKTsKICAgIHRyeSB7CiAgICAgIGF3YWl0IGxvYWRTY3JpcHQoJ2h0dHBzOi8vY2RuLnNoZWV0anMuY29tL3hsc3gtMC4yMC4zL3BhY2thZ2UvZGlzdC94bHN4LmZ1bGwubWluLmpzJyk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNob3dUb2FzdCgnQ291bGQgbm90IGxvYWQgWExTWCBsaWJyYXJ5LiBDaGVjayBpbnRlcm5ldCBjb25uZWN0aW9uLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CiAgfQoKICBjb25zdCBzb3J0ZWQgPSBmaXh0dXJlcy5zbGljZSgpLnNvcnQoKGEsYikgPT4gYS51bml2ZXJzZSAtIGIudW5pdmVyc2UgfHwgYS5zdGFydEFkZHJlc3MgLSBiLnN0YXJ0QWRkcmVzcyk7CgogIC8vIEJ1aWxkIHNoZWV0IGRhdGEKICBjb25zdCBhb2EgPSBbXTsKICBhb2EucHVzaChbYERNWCBQYXRjaCBTaGVldCDigJQgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHt5ZWFyOidudW1lcmljJywgbW9udGg6J2xvbmcnLCBkYXk6J251bWVyaWMnfSl9YF0pOwogIGFvYS5wdXNoKFtgJHtmaXh0dXJlcy5sZW5ndGh9IGZpeHR1cmVzIMK3ICR7Zml4dHVyZXMucmVkdWNlKChzLGYpID0+IHMgKyBmLmNoYW5uZWxzLCAwKX0gY2hhbm5lbHMgwrcgJHtuZXcgU2V0KGZpeHR1cmVzLm1hcChmID0+IGYudW5pdmVyc2UpKS5zaXplfSB1bml2ZXJzZXNgXSk7CiAgYW9hLnB1c2goW10pOwogIGFvYS5wdXNoKFsnVW5pdmVyc2UnLCAnU3RhcnQnLCAnRW5kJywgJ05hbWUnLCAnTWFudWZhY3R1cmVyJywgJ01vZGVsJywgJ01vZGUnLCAnQ2gnLCAnR3JvdXAnLCAnTG9ja2VkJ10pOwoKICBjb25zdCBoZWFkZXJSb3cgPSBhb2EubGVuZ3RoIC0gMTsgLy8gMC1pbmRleGVkCgogIGxldCBwcmV2VW5pdmVyc2UgPSBudWxsOwogIHNvcnRlZC5mb3JFYWNoKGYgPT4gewogICAgaWYgKHByZXZVbml2ZXJzZSAhPT0gbnVsbCAmJiBmLnVuaXZlcnNlICE9PSBwcmV2VW5pdmVyc2UpIHsKICAgICAgYW9hLnB1c2goW10pOyAvLyB2aXN1YWwgc2VwYXJhdG9yIGJldHdlZW4gdW5pdmVyc2VzCiAgICB9CiAgICBhb2EucHVzaChbCiAgICAgIGYudW5pdmVyc2UsCiAgICAgIGYuc3RhcnRBZGRyZXNzLAogICAgICBmLnN0YXJ0QWRkcmVzcyArIGYuY2hhbm5lbHMgLSAxLAogICAgICBmLmN1c3RvbU5hbWUgfHwgJycsCiAgICAgIGYubWZyLAogICAgICBmLm1vZGVsLAogICAgICBmLm1vZGVOYW1lLAogICAgICBmLmNoYW5uZWxzLAogICAgICBmLmdyb3VwIHx8ICcnLAogICAgICBmLmxvY2tlZEFkZHJlc3MgIT0gbnVsbCA/ICfwn5SSJyA6ICcnCiAgICBdKTsKICAgIHByZXZVbml2ZXJzZSA9IGYudW5pdmVyc2U7CiAgfSk7CgogIGNvbnN0IHdzID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoYW9hKTsKCiAgLy8gQ29sdW1uIHdpZHRocwogIHdzWychY29scyddID0gWwogICAge3djaDogMTB9LCB7d2NoOiA3fSwge3djaDogN30sIHt3Y2g6IDI0fSwge3djaDogMjB9LCB7d2NoOiAyOH0sCiAgICB7d2NoOiAxOH0sIHt3Y2g6IDV9LCB7d2NoOiAxNn0sIHt3Y2g6IDh9CiAgXTsKCiAgLy8gTWVyZ2UgdGl0bGUgcm93IGFjcm9zcyBhbGwgY29sdW1ucwogIHdzWychbWVyZ2VzJ10gPSBbCiAgICB7czp7cjowLGM6MH0sIGU6e3I6MCxjOjl9fSwKICAgIHtzOntyOjEsYzowfSwgZTp7cjoxLGM6OX19CiAgXTsKCiAgLy8gU3R5bGUgY2VsbHMg4oCUIHRpdGxlLCBzdWJ0aXRsZSwgaGVhZGVyCiAgY29uc3QgdGl0bGVDZWxsID0gd3NbJ0ExJ107CiAgaWYgKHRpdGxlQ2VsbCkgdGl0bGVDZWxsLnMgPSB7CiAgICBmb250OiB7Ym9sZDogdHJ1ZSwgc3o6IDE0LCBjb2xvcjoge3JnYjogJ0ZGRkZGRid9fSwKICAgIGZpbGw6IHtmZ0NvbG9yOiB7cmdiOiAnMUMxQzI4J319LAogICAgYWxpZ25tZW50OiB7aG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnY2VudGVyJ30KICB9OwogIGNvbnN0IHN1YkNlbGwgPSB3c1snQTInXTsKICBpZiAoc3ViQ2VsbCkgc3ViQ2VsbC5zID0gewogICAgZm9udDoge2l0YWxpYzogdHJ1ZSwgc3o6IDEwLCBjb2xvcjoge3JnYjogJzVBNUE3MCd9fSwKICAgIGFsaWdubWVudDoge2hvcml6b250YWw6ICdjZW50ZXInfQogIH07CgogIC8vIEhlYWRlciBzdHlsaW5nCiAgY29uc3QgaGVhZGVyQ29scyA9IFsnQScsJ0InLCdDJywnRCcsJ0UnLCdGJywnRycsJ0gnLCdJJywnSiddOwogIGhlYWRlckNvbHMuZm9yRWFjaChjb2wgPT4gewogICAgY29uc3QgYWRkciA9IGAke2NvbH0ke2hlYWRlclJvdyArIDF9YDsKICAgIGlmICh3c1thZGRyXSkgewogICAgICB3c1thZGRyXS5zID0gewogICAgICAgIGZvbnQ6IHtib2xkOiB0cnVlLCBjb2xvcjoge3JnYjogJ0ZGRkZGRid9fSwKICAgICAgICBmaWxsOiB7ZmdDb2xvcjoge3JnYjogJ0ZGNEQyRSd9fSwKICAgICAgICBhbGlnbm1lbnQ6IHtob3Jpem9udGFsOiAnY2VudGVyJ30sCiAgICAgICAgYm9yZGVyOiB7CiAgICAgICAgICBib3R0b206IHtzdHlsZTogJ21lZGl1bScsIGNvbG9yOiB7cmdiOiAnMDAwMDAwJ319CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBEYXRhIHJvdyBzdHlsaW5nIHdpdGggYWx0ZXJuYXRpbmcgYmFuZHMgKyBib2xkIGFkZHJlc3MgY29scwogIGZvciAobGV0IHIgPSBoZWFkZXJSb3cgKyAxOyByIDwgYW9hLmxlbmd0aDsgcisrKSB7CiAgICBjb25zdCByb3cgPSBhb2Fbcl07CiAgICBpZiAoIXJvdyB8fCByb3cubGVuZ3RoID09PSAwKSBjb250aW51ZTsgLy8gc2VwYXJhdG9yIHJvdwogICAgY29uc3QgYmFuZCA9IChyIC0gaGVhZGVyUm93KSAlIDIgPT09IDA7CiAgICBoZWFkZXJDb2xzLmZvckVhY2goKGNvbCwgY2kpID0+IHsKICAgICAgY29uc3QgYWRkciA9IGAke2NvbH0ke3IgKyAxfWA7CiAgICAgIGlmICghd3NbYWRkcl0pIHJldHVybjsKICAgICAgd3NbYWRkcl0ucyA9IHsKICAgICAgICBmaWxsOiBiYW5kID8ge2ZnQ29sb3I6IHtyZ2I6ICdGN0Y3RkEnfX0gOiB7ZmdDb2xvcjoge3JnYjogJ0ZGRkZGRid9fSwKICAgICAgICBhbGlnbm1lbnQ6IHsKICAgICAgICAgIGhvcml6b250YWw6IGNpIDw9IDIgfHwgY2kgPT09IDcgfHwgY2kgPT09IDkgPyAnY2VudGVyJyA6ICdsZWZ0JywKICAgICAgICAgIHZlcnRpY2FsOiAnY2VudGVyJwogICAgICAgIH0sCiAgICAgICAgZm9udDogY2kgPD0gMiA/IHtib2xkOiB0cnVlLCBjb2xvcjoge3JnYjogJzhBNUIwMCd9fSA6IHtjb2xvcjoge3JnYjogJzExMTExMSd9fSwKICAgICAgICBib3JkZXI6IHsKICAgICAgICAgIGJvdHRvbToge3N0eWxlOiAndGhpbicsIGNvbG9yOiB7cmdiOiAnREREREREJ319CiAgICAgICAgfQogICAgICB9OwogICAgfSk7CiAgfQoKICAvLyBSb3cgaGVpZ2h0cwogIHdzWychcm93cyddID0gW3tocHQ6IDI0fSwge2hwdDogMTh9LCB7aHB0OiA4fSwge2hwdDogMjJ9XTsKCiAgY29uc3Qgd2IgPSBYTFNYLnV0aWxzLmJvb2tfbmV3KCk7CiAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsICdQYXRjaCcpOwogIFhMU1gud3JpdGVGaWxlKHdiLCBgZG14X3BhdGNoXyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApfS54bHN4YCk7CiAgc2hvd1RvYXN0KCdFeGNlbCBleHBvcnRlZCcpOwp9CgpmdW5jdGlvbiBsb2FkU2NyaXB0KHNyYykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9IiR7c3JjfSJdYCk7CiAgICBpZiAoZXhpc3RpbmcpIHsKICAgICAgaWYgKGV4aXN0aW5nLmRhdGFzZXQubG9hZGVkKSByZXR1cm4gcmVzb2x2ZSgpOwogICAgICBleGlzdGluZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gcmVzb2x2ZSgpKTsKICAgICAgZXhpc3RpbmcuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWplY3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICBzLnNyYyA9IHNyYzsKICAgIHMub25sb2FkID0gKCkgPT4geyBzLmRhdGFzZXQubG9hZGVkID0gJzEnOyByZXNvbHZlKCk7IH07CiAgICBzLm9uZXJyb3IgPSByZWplY3Q7CiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOwogIH0pOwp9CgpmdW5jdGlvbiBpbXBvcnRGaXh0dXJlcyhldmVudCkgewogIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07CiAgaWYgKCFmaWxlKSByZXR1cm47CiAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICByZWFkZXIub25sb2FkID0gZSA9PiB7CiAgICBsZXQgdGV4dCA9IGUudGFyZ2V0LnJlc3VsdDsKICAgIC8vIFN0cmlwIEJPTSBpZiBwcmVzZW50CiAgICBpZiAodGV4dC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHRleHQgPSB0ZXh0LnNsaWNlKDEpOwogICAgdGV4dCA9IHRleHQudHJpbSgpOwoKICAgIGxldCBkYXRhOwogICAgdHJ5IHsKICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gQmV0dGVyIGRpYWdub3N0aWNzCiAgICAgIGxldCBoaW50ID0gJyc7CiAgICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoJzwnKSkgaGludCA9ICcgKGZpbGUgbG9va3MgbGlrZSBIVE1MLCBub3QgSlNPTiknOwogICAgICBlbHNlIGlmICghdGV4dC5zdGFydHNXaXRoKCd7JykgJiYgIXRleHQuc3RhcnRzV2l0aCgnWycpKSBoaW50ID0gYCAoc3RhcnRzIHdpdGggIiR7dGV4dC5zbGljZSgwLDIwKX0iKWA7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG0gPSBlcnIubWVzc2FnZS5tYXRjaCgvcG9zaXRpb24gKFxkKykvKTsKICAgICAgICBpZiAobSkgewogICAgICAgICAgY29uc3QgcG9zID0gcGFyc2VJbnQobVsxXSk7CiAgICAgICAgICBoaW50ID0gYCBuZWFyOiAiLi4uJHt0ZXh0LnNsaWNlKE1hdGgubWF4KDAscG9zLTE1KSwgcG9zKzE1KX0uLi4iYDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2hvd1RvYXN0KGBKU09OIHBhcnNlIGVycm9yJHtoaW50fWAsICdlcnJvcicpOwogICAgICBjb25zb2xlLmVycm9yKCdJbXBvcnQgcGFyc2UgZXJyb3I6JywgZXJyLCAnRmlyc3QgMjAwIGNoYXJzOicsIHRleHQuc2xpY2UoMCwgMjAwKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICAvLyBJZiB0aGUgZmlsZSBpbmNsdWRlcyBhIGxpYnJhcnksIG1lcmdlIGl0IGluCiAgICAgIGxldCBsaWJNZXJnZWRDb3VudCA9IDA7CiAgICAgIGlmIChkYXRhLmxpYnJhcnkgJiYgdHlwZW9mIGRhdGEubGlicmFyeSA9PT0gJ29iamVjdCcpIHsKICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhLmxpYnJhcnkpLmZvckVhY2goKFttZnIsIGxpc3RdKSA9PiB7CiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHJldHVybjsKICAgICAgICAgIGxpYnJhcnlbbWZyXSA9IGxpYnJhcnlbbWZyXSB8fCBbXTsKICAgICAgICAgIGxpc3QuZm9yRWFjaChmID0+IHsKICAgICAgICAgICAgaWYgKCFmIHx8ICFmLm1vZGVsKSByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gbGlicmFyeVttZnJdLmZpbmRJbmRleCh4ID0+IHgubW9kZWwgPT09IGYubW9kZWwpOwogICAgICAgICAgICBpZiAoZXhpc3RpbmcgPj0gMCkgbGlicmFyeVttZnJdW2V4aXN0aW5nXSA9IGY7CiAgICAgICAgICAgIGVsc2UgbGlicmFyeVttZnJdLnB1c2goZik7CiAgICAgICAgICAgIGxpYk1lcmdlZENvdW50Kys7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLy8gVGhlbiBpbXBvcnQgcGF0Y2hlZCBmaXh0dXJlcyAoaWYgYW55KQogICAgICBsZXQgbGlzdCA9IFtdOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgbGlzdCA9IGRhdGE7CiAgICAgIGVsc2UgaWYgKGRhdGEuZml4dHVyZXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmZpeHR1cmVzKSkgbGlzdCA9IGRhdGEuZml4dHVyZXM7CgogICAgICBpZiAoZGF0YS51bml2ZXJzZVN0YXJ0KSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndW5pdmVyc2VTdGFydCcpLnZhbHVlID0gZGF0YS51bml2ZXJzZVN0YXJ0OwoKICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIGlmICghaXRlbSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHF0eSA9IGl0ZW0ucXR5IHx8IDE7CiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBpdGVtLmNoYW5uZWxzIHx8IChpdGVtLm1vZGUgJiYgaXRlbS5tb2RlLmNoYW5uZWxzKSB8fCAwOwogICAgICAgIGlmICghY2hhbm5lbHMpIHJldHVybjsKCiAgICAgICAgY29uc3QgbWZyID0gaXRlbS5tYW51ZmFjdHVyZXIgfHwgaXRlbS5tZnIgfHwgJ1Vua25vd24nOwogICAgICAgIGNvbnN0IG1vZGVsID0gaXRlbS5tb2RlbCB8fCAnVW5rbm93bic7CiAgICAgICAgY29uc3QgbW9kZU5hbWUgPSB0eXBlb2YgaXRlbS5tb2RlID09PSAnc3RyaW5nJyA/IGl0ZW0ubW9kZSA6IChpdGVtLm1vZGUgJiYgaXRlbS5tb2RlLm5hbWUpIHx8IGAke2NoYW5uZWxzfWNoYDsKCiAgICAgICAgLy8gQXV0by1wcm9tb3RlIHRvIGxpYnJhcnkgaWYgbm90IGFscmVhZHkgdGhlcmUKICAgICAgICBsaWJyYXJ5W21mcl0gPSBsaWJyYXJ5W21mcl0gfHwgW107CiAgICAgICAgbGV0IGxpYkZpeCA9IGxpYnJhcnlbbWZyXS5maW5kKHggPT4geC5tb2RlbCA9PT0gbW9kZWwpOwogICAgICAgIGlmICghbGliRml4KSB7CiAgICAgICAgICBsaWJGaXggPSB7IG1vZGVsLCBtb2RlczogW10gfTsKICAgICAgICAgIGxpYnJhcnlbbWZyXS5wdXNoKGxpYkZpeCk7CiAgICAgICAgICBsaWJNZXJnZWRDb3VudCsrOwogICAgICAgIH0KICAgICAgICBpZiAoIWxpYkZpeC5tb2Rlcy5maW5kKG0gPT4gbS5uYW1lID09PSBtb2RlTmFtZSkpIHsKICAgICAgICAgIGxpYkZpeC5tb2Rlcy5wdXNoKHsgbmFtZTogbW9kZU5hbWUsIGNoYW5uZWxzIH0pOwogICAgICAgICAgbGliTWVyZ2VkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXR5OyBpKyspIHsKICAgICAgICAgIGZpeHR1cmVzLnB1c2goewogICAgICAgICAgICBpZDogRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCksCiAgICAgICAgICAgIG1mciwgbW9kZWwsIG1vZGVOYW1lLAogICAgICAgICAgICBjaGFubmVsczogY2hhbm5lbHMsCiAgICAgICAgICAgIGN1c3RvbU5hbWU6IGl0ZW0ubmFtZSB8fCBpdGVtLmN1c3RvbU5hbWUgfHwgJycsCiAgICAgICAgICAgIGdyb3VwOiBpdGVtLmdyb3VwIHx8ICcnLAogICAgICAgICAgICBzdGFydEFkZHJlc3M6IDAsIHVuaXZlcnNlOiAwLAogICAgICAgICAgICBsb2NrZWRBZGRyZXNzOiBpdGVtLmxvY2tlZEFkZHJlc3MgfHwgbnVsbCwKICAgICAgICAgICAgbG9ja2VkVW5pdmVyc2U6IGl0ZW0ubG9ja2VkVW5pdmVyc2UgfHwgbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHBvcHVsYXRlTWZyU2VsZWN0KCk7CiAgICAgIHJlcGF0Y2hBbGwoKTsKICAgICAgcmVyZW5kZXIoKTsKICAgICAgc2F2ZUxpYnJhcnkoKTsKICByZWZyZXNoRGVsZXRlTGlzdCgpOwoKICAgICAgY29uc3QgcGFydHMgPSBbXTsKICAgICAgaWYgKGxpYk1lcmdlZENvdW50KSBwYXJ0cy5wdXNoKGAke2xpYk1lcmdlZENvdW50fSBsaWJyYXJ5IGl0ZW1zYCk7CiAgICAgIGlmIChsaXN0Lmxlbmd0aCkgcGFydHMucHVzaChgJHtsaXN0Lmxlbmd0aH0gZml4dHVyZXNgKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHNob3dUb2FzdCgnRmlsZSBsb2FkZWQgYnV0IG5vIGxpYnJhcnkgb3IgZml4dHVyZXMgZm91bmQnLCAnd2FybicpOwogICAgICB9IGVsc2UgewogICAgICAgIHNob3dUb2FzdChgSW1wb3J0ZWQgJHtwYXJ0cy5qb2luKCcgKyAnKX1gKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHNob3dUb2FzdCgnSW1wb3J0IGVycm9yOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcicpOwogICAgICBjb25zb2xlLmVycm9yKCdJbXBvcnQgZXJyb3I6JywgZXJyKTsKICAgIH0KICB9OwogIHJlYWRlci5vbmVycm9yID0gKCkgPT4gc2hvd1RvYXN0KCdDb3VsZCBub3QgcmVhZCBmaWxlJywgJ2Vycm9yJyk7CiAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7Cn0KCmZ1bmN0aW9uIGltcG9ydExpYnJhcnkoZXZlbnQpIHsKICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdOwogIGlmICghZmlsZSkgcmV0dXJuOwogIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgcmVhZGVyLm9ubG9hZCA9IGUgPT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzdWx0KTsKICAgICAgaWYgKGRhdGEubWFudWZhY3R1cmVyICYmIEFycmF5LmlzQXJyYXkoZGF0YS5maXh0dXJlcykpIHsKICAgICAgICBsaWJyYXJ5W2RhdGEubWFudWZhY3R1cmVyXSA9IGxpYnJhcnlbZGF0YS5tYW51ZmFjdHVyZXJdIHx8IFtdOwogICAgICAgIGRhdGEuZml4dHVyZXMuZm9yRWFjaChmID0+IHsKICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gbGlicmFyeVtkYXRhLm1hbnVmYWN0dXJlcl0uZmluZEluZGV4KHggPT4geC5tb2RlbCA9PT0gZi5tb2RlbCk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgPj0gMCkgbGlicmFyeVtkYXRhLm1hbnVmYWN0dXJlcl1bZXhpc3RpbmddID0gZjsKICAgICAgICAgIGVsc2UgbGlicmFyeVtkYXRhLm1hbnVmYWN0dXJlcl0ucHVzaChmKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHsKICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhKS5mb3JFYWNoKChbbWZyLCBsaXN0XSkgPT4gewogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSByZXR1cm47CiAgICAgICAgICBsaWJyYXJ5W21mcl0gPSBsaWJyYXJ5W21mcl0gfHwgW107CiAgICAgICAgICBsaXN0LmZvckVhY2goZiA9PiB7CiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gbGlicmFyeVttZnJdLmZpbmRJbmRleCh4ID0+IHgubW9kZWwgPT09IGYubW9kZWwpOwogICAgICAgICAgICBpZiAoZXhpc3RpbmcgPj0gMCkgbGlicmFyeVttZnJdW2V4aXN0aW5nXSA9IGY7CiAgICAgICAgICAgIGVsc2UgbGlicmFyeVttZnJdLnB1c2goZik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzaG93VG9hc3QoJ1VucmVjb2duaXplZCBsaWJyYXJ5IHN0cnVjdHVyZScsICdlcnJvcicpOyByZXR1cm47CiAgICAgIH0KICAgICAgcG9wdWxhdGVNZnJTZWxlY3QoKTsKICAgICAgc2hvd1RvYXN0KCdDdXN0b20gZml4dHVyZSBsaWJyYXJ5IGxvYWRlZCcpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHNob3dUb2FzdCgnSW52YWxpZCBKU09OOiAnICsgZXJyLm1lc3NhZ2UsICdlcnJvcicpOwogICAgfQogIH07CiAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7Cn0KCmZ1bmN0aW9uIGNsZWFyQWxsKCkgewogIGlmIChmaXh0dXJlcy5sZW5ndGggPT09IDApIHsKICAgIC8vIFN0aWxsIHJlc2V0IGZpbHRlcnMgYW5kIGZvcm0gaW4gY2FzZSB0aG9zZSBhcmUgdGhlICJtZXNzIgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlcklucHV0JykudmFsdWUgPSAnJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21OYW1lJykudmFsdWUgPSAnJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncm91cElucHV0JykudmFsdWUgPSAnJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdHlJbnB1dCcpLnZhbHVlID0gJzEnOwogICAgcmVyZW5kZXIoKTsKICAgIHNob3dUb2FzdCgnQWxyZWFkeSBlbXB0eSDigJQgZmlsdGVycyByZXNldCcpOwogICAgcmV0dXJuOwogIH0KICBpZiAoIWNvbmZpcm0oYFJlbW92ZSBhbGwgJHtmaXh0dXJlcy5sZW5ndGh9IHBhdGNoZWQgZml4dHVyZXM/YCkpIHJldHVybjsKICBmaXh0dXJlcyA9IFtdOwogIC8vIFJlc2V0IGZpbHRlcnMgYW5kIGZvcm0gdG9vCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlcklucHV0JykudmFsdWUgPSAnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tTmFtZScpLnZhbHVlID0gJyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwSW5wdXQnKS52YWx1ZSA9ICcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdHlJbnB1dCcpLnZhbHVlID0gJzEnOwogIHJlcmVuZGVyKCk7CiAgc2hvd1RvYXN0KCdDbGVhcmVkIGFsbCBmaXh0dXJlcycpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEtFWUJPQVJEIFNIT1JUQ1VUUwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHsKICBjb25zdCB0YWcgPSAoZS50YXJnZXQudGFnTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTsKICBjb25zdCBpbkZpZWxkID0gdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnOwogIGNvbnN0IGhlbHBPcGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBNb2RhbCcpPy5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKTsKCiAgLy8gRXNjYXBlIGNsb3NlcyB0aGUgaGVscCBtb2RhbAogIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgaGVscE9wZW4pIHsKICAgIGNsb3NlSGVscCgpOwogICAgcmV0dXJuOwogIH0KICAvLyBTa2lwIG90aGVyIHNob3J0Y3V0cyB3aGlsZSBtb2RhbCBpcyBvcGVuCiAgaWYgKGhlbHBPcGVuKSByZXR1cm47CgogIC8vIEVudGVyIGluIHRoZSBzaWRlYmFyIEFkZCBGaXh0dXJlIGFyZWEKICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgaW5GaWVsZCkgewogICAgY29uc3Qgc2lkZWJhciA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5zaWRlYmFyLXNlY3Rpb24nKTsKICAgIGlmIChzaWRlYmFyICYmIHNpZGViYXIucXVlcnlTZWxlY3RvcignI21mclNlbGVjdCcpKSB7CiAgICAgIC8vIERvbid0IHRyaWdnZXIgaW5zaWRlIHRoZSBjdXN0b20gbmFtZSAvIGdyb3VwIHdoaWNoIG1heSBiZSBiYXJlIHRleHQKICAgICAgY29uc3QgaWQgPSBlLnRhcmdldC5pZDsKICAgICAgaWYgKFsnbWZyU2VsZWN0JywnbW9kZWxTZWxlY3QnLCdtb2RlU2VsZWN0JywncXR5SW5wdXQnLCdjdXN0b21OYW1lJywnZ3JvdXBJbnB1dCcsJ2F1dG9OdW1iZXInXS5pbmNsdWRlcyhpZCkpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYWRkRml4dHVyZXMoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuOwogIH0KCiAgLy8gQ3RybC9DbWQrUCDihpIgcHJpbnQKICBpZiAoKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpICYmIGUua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdwJyAmJiAhaW5GaWVsZCkgewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgcHJpbnRQYXRjaCgpOwogICAgcmV0dXJuOwogIH0KCiAgLy8gQ3RybC9DbWQrRCBvbiBhIGZvY3VzZWQgcm93IGlucHV0IOKGkiBkdXBsaWNhdGUKICBpZiAoKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpICYmIGUua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdkJykgewogICAgY29uc3Qgcm93ID0gZS50YXJnZXQuY2xvc2VzdCgndHJbZGF0YS1pZF0nKTsKICAgIGlmIChyb3cpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBpZCA9IHBhcnNlRmxvYXQocm93LmRhdGFzZXQuaWQpOwogICAgICBkdXBsaWNhdGVGaXh0dXJlKGlkKTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIC8vIERlbCAvIEJhY2tzcGFjZSB3aGVuIGZvY3VzZWQgb24gYSByb3cgKGJ1dCBub3QgaW5zaWRlIGEgdGV4dCBpbnB1dCkKICBpZiAoKGUua2V5ID09PSAnRGVsZXRlJyB8fCBlLmtleSA9PT0gJ0JhY2tzcGFjZScpICYmICFpbkZpZWxkKSB7CiAgICBjb25zdCByb3cgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3Q/LigndHJbZGF0YS1pZF0nKTsKICAgIGlmIChyb3cpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBpZCA9IHBhcnNlRmxvYXQocm93LmRhdGFzZXQuaWQpOwogICAgICByZW1vdmVGaXh0dXJlKGlkKTsKICAgIH0KICB9Cn0pOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBVWAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHNob3dUb2FzdChtc2csIGtpbmQpIHsKICBjb25zdCB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvYXN0Jyk7CiAgdC50ZXh0Q29udGVudCA9IG1zZzsKICB0LmNsYXNzTmFtZSA9ICd0b2FzdCBzaG93JyArIChraW5kID09PSAnZXJyb3InID8gJyBlcnJvcicgOiBraW5kID09PSAnd2FybicgPyAnIHdhcm4nIDogJycpOwogIGNsZWFyVGltZW91dCh3aW5kb3cuX3RvYXN0VGltZXIpOwogIHdpbmRvdy5fdG9hc3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0LmNsYXNzTmFtZSA9ICd0b2FzdCc7IH0sIDI4MDApOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIElOSVQKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpwb3B1bGF0ZU1mclNlbGVjdCgpOwpyZWZyZXNoRGVsZXRlTGlzdCgpOwpyZXJlbmRlcigpOwo8L3NjcmlwdD4KCgo8ZGl2IGNsYXNzPSJsb2dvLWJhZGdlIiB0aXRsZT0iV2lsc29uIFByb2Zlc3Npb25hbCBBVkwiPgogIDxpbWcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRQUFTQUJJQUFELzRRQk1SWGhwWmdBQVRVMEFLZ0FBQUFnQUFZZHBBQVFBQUFBQkFBQUFHZ0FBQUFBQUE2QUJBQU1BQUFBQkFBRUFBS0FDQUFRQUFBQUJBQUFDV0tBREFBUUFBQUFCQUFBQXpBQUFBQUQvN1FBNFVHaHZkRzl6YUc5d0lETXVNQUE0UWtsTkJBUUFBQUFBQUFBNFFrbE5CQ1VBQUFBQUFCRFVIWXpaandDeUJPbUFDWmpzK0VKKy84QUFFUWdBekFKWUF3RWlBQUlSQVFNUkFmL0VBQjhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQUFCQWdNRUJRWUhDQWtLQy8vRUFMVVFBQUlCQXdNQ0JBTUZCUVFFQUFBQmZRRUNBd0FFRVFVU0lURkJCaE5SWVFjaWNSUXlnWkdoQ0NOQ3NjRVZVdEh3SkROaWNvSUpDaFlYR0JrYUpTWW5LQ2txTkRVMk56ZzVPa05FUlVaSFNFbEtVMVJWVmxkWVdWcGpaR1ZtWjJocGFuTjBkWFozZUhsNmc0U0Zob2VJaVlxU2s1U1ZscGVZbVpxaW82U2xwcWVvcWFxeXM3UzF0cmU0dWJyQ3c4VEZ4c2ZJeWNyUzA5VFYxdGZZMmRyaDR1UGs1ZWJuNk9ucThmTHo5UFgyOS9qNSt2L0VBQjhCQUFNQkFRRUJBUUVCQVFFQUFBQUFBQUFCQWdNRUJRWUhDQWtLQy8vRUFMVVJBQUlCQWdRRUF3UUhCUVFFQUFFQ2R3QUJBZ01SQkFVaE1RWVNRVkVIWVhFVElqS0JDQlJDa2FHeHdRa2pNMUx3RldKeTBRb1dKRFRoSmZFWEdCa2FKaWNvS1NvMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvS0RoSVdHaDRpSmlwS1RsSldXbDVpWm1xS2pwS1dtcDZpcHFyS3p0TFcydDdpNXVzTER4TVhHeDhqSnl0TFQxTlhXMTlqWjJ1TGo1T1htNStqcDZ2THo5UFgyOS9qNSt2L2JBRU1BQVFFQkFRRUJBZ0VCQWdNQ0FnSURCQU1EQXdNRUJnUUVCQVFFQmdjR0JnWUdCZ1lIQndjSEJ3Y0hCd2dJQ0FnSUNBa0pDUWtKQ3dzTEN3c0xDd3NMQy8vYkFFTUJBZ0lDQXdNREJRTURCUXNJQmdnTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDLy9kQUFRQUp2L2FBQXdEQVFBQ0VRTVJBRDhBL3dBLytpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BLy85RC9BRC82S0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLSy9weDhOLzhHa24vQlhMeFY0YzAveFJwVm40Uyt5Nm5iUTNjTy9XR1Z2TG1RT3U0ZVJ3Y0VaSFkwQWZ6SFVWKzh2N2FmOEF3YmtmOEZJUDJDUDJiUEVQN1ZueDh0ZkRxZUUvRERXaTN6YWZxVFhGd1B0dHpGYXg3WXpDb0k4MlpBZm1HQWEvQnFnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0QvOUgvQUQvNktLS0FDaWlpZ0Fvb29vQUtLS0tBQ2l2MUgvNEl5ZkJyOWxUOW8vOEE0S08vRG45blg5c3JUYnJVZkJmank2bDBUL1E3eVN5bGgxRzVqWVdUQjQrV0QzQWppSzVBeEpuc0FmOEFSUDhBK0lTUC9naTkvd0JDajRoLzhIOTMvd0RGVUFmNU5ORmYybC84SExuL0FBUVQvWk4vNEp3ZnN4K0JmMmx2Mk1kSzFQVHJKL0VMNkY0aGl2YjZXL0RDOWdhVzFsSG01TVlScmVSR0lPR01xZzg0citMU2dBb29vb0FLS0s5cy9acytCM2luOXByOW9Yd1ArenI0SkJPcmVPZGQwL1FyVmd1NEpKZnpwQ0hZZjNVMzdtSndBb0pKQW9BOFRvci9BRmtvZitEU0QvZ2pCSEVzYitGUEVjaFVBRm0xKzZ5eEhjNElHVDdBQ3Z4Ni93Q0M3djhBd2JWL3NOZnNpLzhBQk9MeFgrMUYreGRvbXI2ZDRuOEQzZGhmM3kzZXB6WHlUNlZKS0xlNFVKS1NBWXpNa3hZWUlXSmgzeFFCL241VVVVVUFGRkZGQUJSVXNFRTkxT2x0Ykkwa2tqQlVSUmxtWThBQURra212OVRUOW4vL0FJTkhmK0NXdHY4QUFud1hEOGVQRG11MzNqZ2FIcC8vQUFrTThPdDNFTVVtcUdCUHRSU05EdFJQTzM3VkhSY0RKNjBBZjVZMUZmNlp2L0JRei9nM0wvNEltZnNTZnNRZkZIOXFyVVBDZXZlWjRMOFBYZDdaSko0Z3V0c3VvTXZsMmNSeWNZbHVYaWo2SDczUTlLL3pNcUFQMTgvNEpELzhFWi8yay84QWdyNzhXZFQ4SmZDaTZ0L0RQaEh3eXNVbmlEeFJxRWJTMjluNStmS2hpaVVxMDl4SUZabGpESW9WU1hkTXJ1L3E2K0pQL0JrQjhORDhPcFUrRUh4NDFOZkZzVVJNYjZ4cE1SMDZlVWRGWllKQkxDcmROd2FVcjEydGpGZm9YL3daeVNlQVcvNEpKWGNmaFB5ZjdWWHh6ckg5dGhNZVo5ck1WcjVaZnY4QThlM2s0OXZ4cityZWdEL0NWL2EyL1pSK052N0VYN1F2aVg5bUw5b2ZTdjdJOFZlRnJueUxtTlc4eUdWSFVQRlBESmdiNFpvMldTTnNBbFdHUURrRDV4cit4VC9nOVQvNFFYL2g1QjhQZjdETVA5dS84Sy90ZjdVRVdOKzM3ZmUvWi9NeC9GdDNZejgyemIyMjEvSFhRQVYvdlA4QXdELzVJWDRML3dDd0RwMy9BS1RwWCtEQlgrOC84QS8rU0YrQy93RHNBNmQvNlRwUUIrSS8vQjAzL3dBb09Qakgvd0JkdkRuL0FLZXJHdjhBSVlyL0FGNS8rRHB2L2xCeDhZLyt1M2h6L3dCUFZqWCtReFFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVjlKZkFYOWt6NDQvdEhYbVBoenBESFQwYmJMcVYwVERaeG51UE1JTzhqdXNZWmg2Vit5dndlLzRKRy9DSHd6RkZxSHhnMVc2OFMzZ3dYdHJjbTB0QWU0K1VtVnZydlRQcFgyL0RmaDVubWRwVk1KUXRTZjI1KzdINWRaZjl1cG53UEZQaVp3L2tEZExHMSthcXZzUTk2ZnpXMGYrM25FL25ZcmNzUERQaVRWSXhMcG1uM055aDZHS0puSDVnR3Y3RlBCUDdPZndHK0hFYXA0SzhJYVRZTXZTVmJWR200OVpHQmMvaTFleXh4cEVnamlVS3FqQUE0QUZmcWVEK2ovQUZYRytLeDZUN1JnMnZ2Y28va2ZrR04ra2pSVXJZVExtMTNsVVVYOXlqTDh6K0lXL3dERFhpUFMwTXVwNmZjMnlqcVpZbVFmcUJXSlg5eXNrY2NxR0tWUXlzTUVFWkJGZUwrTi93Qm0vd0NBZnhIalpmR3ZoRFNiNTN6bVZyVkVtNTlKRUN1UHdhbGpQQUNzbzN3dVBUZmFVR3Z4VXBma1BCZlNSb09Wc1pseml1OGFpay91Y1kvbWZ4cFVWL1JMOFlQK0NSZndqOFN4UzZoOEh0V3V2RGQyY2xMYTRKdTdRbnNQbUlsWDY3M3g2VitObng2L1pNK09QN09ONXQrSTJrdC9aN3R0aTFLMUptczVEMi9lQURZVDJXUUt4OUsvTE9KUER6UE1rVHFZdWhla3Z0dzk2UHo2eC83ZVNQMTdoYnhNNGZ6OXFsZ3EvTFZmMkorN1A1TGFYL2JyWjgyMFVVVjhTZmZCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUIvL1Mvd0EvK2lpaWdBb29vb0FLS0tLQUNpaWlnRHNQaDU0ODhVZkN6eC9vZnhQOEVYSnM5YThPYWhiYXBwOXd2V0s2czVGbGljZTZ1b1A0Vi91cy9zei9BQnk4TmZ0Ti9zN2VCZjJpdkJ4VTZaNDUwSFQ5ZHQxVnQyeEwrQkp0aFA4QWVUZHRZSGtFRUhtdjhIYXY5VlQvQUlOQ1AycmYrRjhmOEVyMCtDbXNYQmwxYjRRNjllYUx0ZHR6blQ3NC9iclZ5ZjdvYWFhRlIyRU9PbUtBUDFYL0FPQzJQN0xIL0RaUC9CTEw0MGZCQ3l0ZnRtcXllSHB0WDBtTlJtUnRSMGNpK3RrUTlRMGtrQWk0Nmh5RHdUWCtLcFgrL3V5cXlsV0dRZUNEWCtJUC93QUZVLzJXeit4ZC93QUZGZmpEK3pWQkQ5bnNQRGZpVzcvc3lQRzNHbVhoRjFZOGNEL2oxbWl6ampQU2dENEFvb29vQUsvcVkvNE5FZjJVbCtQbi9CVmFENHg2ekI1bWsvQ0hRcnpYU1dHVWJVTHNmWWJWRC90QVRTekw3dzEvTFBYK25wL3dabmZzb3Q4SmYrQ2VuaXI5cC9XclVSYWo4V2ZFVHJheWxjR1RTdENEVzBKejEvNCtudkI2Y0NnRCt3U3ZJdmovQVBCcndyKzBWOEN2R1h3Qjhjb0pORzhiYUpmNkhlZ2pPSUwrQjRISTl3SHlEd1FSa1UzNHkvSFg0Wi9BTFNkRTF6NG8zLzhBWjF0NGkxL1MvRE5pKzB2NW1wYXpjSmEya1hIVGZLNnJub09wNHIxK2dEL0JKK0xmd3g4V2ZCVDRxK0p2ZzM0OWcreTY1NFMxVzgwYlVZZitlZDFZek5CS3ZQbzZFVjU3WDlMSC9CMTUreVlQMmF2K0N0M2lQeDNvOXY1T2kvRm5UTFR4YmJiUjhpM1VnYTF2VnozZHJpM2FaaDI4NGV0ZnpUMEFGRkZGQUg2eS93REJESDltRC9ocnovZ3Evd0RCVDRRM2NCbjB5SHhCRnJ1cHFSbERaYUdyWDhxT2V5eWlEeXMrcmdkU0svMms2L3pvZitESlg5bDRlSWZqcjhZUDJ3OVp0Y3crR2RJdFBDMm1TdU1xYmpWSlB0TnlVLzI0NDdhSlNlb1diSFFtdjlGNmdEK056L2c5Qi9hby93Q0ZaL3NIK0IvMlY5SG5FZC84VVBFZjJ1N1FOeTJtYUNxeXVwSHZkVFdyQW5qNUQzNmY1bFZmMCsvOEhibjdWSS9hQi80S3k2cDhMdEh1L1AwZjRTNkxZK0hJMVE1aSsyeXFiMjdZZjdZZTRXRituTU9PMlQvTUZRQit0SC9CSmY4QTRMRS90Ti84RWlmaTNxUGpqNExSMjJ2ZUd2RWlSUmVJUERPcE15Mmwrc0c3eXBGZFBtaHVJdDdDT1ZRUmhpR1YxNHIrb3o0by93REI4SmMzWGdDU0Q0TGZzL3JZK0tabzhKUHJXdS9hckMza0krOFlvTGFHV2RRZjRmTWhKSGNWL0FYUlFCNy9BUHRSL3RQL0FCcy9iTCtQUGlQOXBUOW9mV3BOZThXK0tMbjdSZTNUZ0lvQ3FFamlpUWZMSEZGR3F4eG92Q29vQXJ3Q2lpZ0FyL2VmK0FmL0FDUXZ3WC8yQWRPLzlKMHIvQmdyL2VmK0FmOEF5UXZ3WC8yQWRPLzlKMG9BL0VmL0FJT20vd0RsQng4WS93RHJ0NGMvOVBWalgrUXhYK3ZQL3dBSFRmOEF5ZzQrTWY4QTEyOE9mK25xeHIvSVlvQUtLS0tBQ2lpdXE4SStCZkcveEExTCt4dkFlalgydDNtTStSWVc4bHpKZy83TWFzZjBvQTVXaXZxS2I5aDc5dFMyc1A3VnVQaEI0Mmp0U00rYzNoKy9FZVA5NHc0cjU3OFNlRmZGSGczVTIwWHhmcHQxcFY2Z3kxdmVRdkJLQjdxNERmcFFCZzBVVVVBRkZGRkFDZ0ZpRlVaSjZDdjIxL1l2L3dDQ1kzOXMydHI4VVAybGJhU0tCOXN0bm9MRW83anFHdWlNTW9QVVJERGYzeU9WcnBQK0NhdjdEMXJEWjJQN1NYeGN0QkpOS0JOb05qTXVWUlR5dDI2bnF4NndnOEFmUHlTaFg5dnEvby93dzhLcVZTbERPTTZoZStzS2IydDBsTmRiN3FPMXRYZTlsL0xuaTE0dzFhZFdwa21RMU9WeDBxVlZ2ZnJDRDZXMmxMZStrYld1OC9TdEowclF0TmcwYlE3YUt6czdaQkhEQkFnampqUWRGVlZBQUE5QUswS0tLL3BDTVZGSkpXU1A1YmxKeWJsSjNiQ2lpaW1JS0tLS0FDcy9WZEowclh0Tm4wYlhMYUs4czdsREhOQk9na2prUTlWWldCQkI3Z2l0Q2lsS0trbW1ycGpqSnhhbEYyYVB3Yy9iUi80SmovMkphWFh4Ui9acnRwSmJlUGRMZWFFQ1hkQjFMMnBPU3dIVXhITGYzQ2VGcjhTeUNwS3NNRVYvY3ZYNGUvOEFCU3I5aDYxYTB2djJrdmhIWmlPU0lOUHIxakN1RlplclhhS09oSFdZRGdqNStDSEovbS94UDhLcVZPbFBPTWxoWkxXZE5iVzZ5Z3VsdDNIYTJxdGF6L3FUd2w4WWF0U3JUeVRQcW5NNWFVNnIzdjBqTjliN1JsdmZTVjczWDRVMFVVVi9PQi9VWVVVVVVBRkZGRkFCUlhTK0ZQQm5qRHg1cTZlSC9BK2xYbXMzOGd5dHRZd1BjVEVkT0VqRE1ldnBYMDJmK0NlbjdmYTZUL2I1K0IzeEFGZ0YzZmFmK0VaMUh5ZHZydjhBSTI0L0dnRDQvb3JvUEUvaFB4VjRKMWlUdzk0ejB5NzBpL2grL2JYc0wyOHk1OVVjS3cvRVZ6OUFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFmLzlQL0FELzZLS0tBQ2lpaWdBb29vb0FLS0tLQUN2Njgvd0RnelgvYXUvNFZCL3dVWjhSZnN6YXhkZVZwbnhjOE95cGJ4RTRFbXJhSHV1NEQ2Y1dyWGc5Y2tWL0laWDFKK3hGKzBocTM3SC83WUh3MC9hZzBiZVg4RGVJOVAxZVdPTTRhZTJ0NWxOeEQyNG1oM3huMlkwQWY3cWxmNXFQL0FBZW8vc3NENGY4QTdaWHc0L2F6MFcxOHV5K0l2aDZUU2I2UlJrTnFPaFNBYjNQWm50cm1GRkI2aUU0Nkd2OEFTYTBQVzlKOFRhSlorSTlBdUV1N0RVSUk3bTJuak9VbGhsVU1qcWU0WlNDUGF2NXNmK0Rzajlsbi9ob2ovZ2taNGc4ZmFWQUpkWCtGT3IySGltQXFQM2h0Z3hzN3RRZXlpRzVNekR2NVE3Z1VBZjVOTkZGRkFGN1M5TTFIVzlUdDlHMGlGN203dTVVaGdoakc1NUpKQ0ZWVkE1SkpJQUhyWCs1cCt3WCt6THB2N0duN0Yvd3cvWmIwMEpud1I0Y3NOTXVYais3TmV4eGczVW8vNjYzQmtrUHUxZjVPUC9CdTMreWsvd0Mxei93VjMrRWZoRyt0dnRPamVGTlJQaS9WZHk3a1czME1mYVl3NDdySmRMQkNRZVAzblBGZjdJbEFIOFlIL0I1VCsyRnIzd0wrQS93TCtEL3cvdjJzdkVPcCtNLytFd1I0ejh5TDRhakhrbGg2RzR1NDNYcGxvdmF2NjMvMmV2ak40YS9hTStBdmdyNC8rRFNEcFBqZlF0UDEyMHdkMklkUWdTZFZKOVZENFB1Sy93QXVuL2c3ay9hZGorUEgvQld2VXZobHBOd0p0TStGT2c2ZDRjVUljeG03bVZyKzVZZjdRYTVXRituTVdPMWYySy84R20zN1VLL3RDZjhBQkludzc0QzFHY1M2dDhLdFkxRHd0Y0JqKzhOdnVGN2FzUi9kRU4wc0tub2ZLSTZnMEFmR1gvQjZIK3liSjhUZjJIZkF2N1d1aFd2bVgzd3UxODJOL0lxOHBwZXZCWWl6RWRRdDNEYklvUFF5bkdPYy93Q1pyWCs1aC93VUwvWmIwMzl0YjlpRDRwZnNzYWdpTko0MDhPM2xqWk5KOTJMVUFubVdjcHovQU04cmxJcFArQTEvaHQ2aHA5OXBOL1BwZXFRdmIzTnRJMFUwVWlsWGprUTRaV0I1QkJCQkI2R2dDblJSWHB2d1UrRlBpYjQ3L0dUd2w4RVBCYUdUV1BHT3MyR2lXS2diczNPb1RwQkdNZC9uY1VBZjZ3bi9BQWF6L3N3SDltMy9BSUk4ZUJOWTFLQVFhdDhTcnU5OFkzZ3h5VXZYRU5vYzlTR3M0SUg5dHhIdWYzditKdnhDOE0vQ1A0YmVJZml2NDFuRnRvM2hqVEx2VnIrWTRBanRiS0pwcFc1SUhDSVR5YXIvQUFtK0duaGY0TC9Ddnd6OEhmQkVYa2FMNFQwcXkwYXdpL3VXdGpDc0VTOGVpSUJYNElmOEhUbjdWSi9abS80SkFlTnRCMHE3K3phejhUN3V6OEcyVzAvTVlyeGpOZWpIWGExbEJQR1QwQmNaNjRJQi9sSy90Qi9HWHhOKzBYOGVmR254L3dER2h6cS9qZlhOUTEyOEdkd0Uyb1R2TzZnK2lsOEQyRmVRVVVVQWYyci9BUEJtMSt6UCt6ZiswaDQvK1B0bCswUDhQdkRmanlMU2RQOEFEcjJLK0l0THR0VEZxMDBsOEpERUxtT1FJWENydUtnRTdSbnBYOTIzL0Ryci9nbWgvd0JHOC9EVC93QUpUUy8vQUpHcitMYi9BSU1jditTay90R2Y5Z3p3ei82TnY2LzBOS0FQOFp2L0FJT0MvaHg4Ty9oSC93QUZoL2paOE9maFBvR25lRi9EMmw2aHB5V2VsNlRheDJkbmJxK20yanNJNFlsV05BenN6RUtvQllrOTYvR3V2M0gvQU9EazMvbE56OGV2K3dscG4vcHFzNi9EaWdBci9lZitBZjhBeVF2d1gvMkFkTy85SjByL0FBWUsvd0I1L3dDQWYvSkMvQmYvQUdBZE8vOEFTZEtBUHhIL0FPRHB2L2xCeDhZLyt1M2h6LzA5V05mNURGZjY4LzhBd2ROLzhvT1BqSC8xMjhPZitucXhyL0lZb0FLN0Q0ZmZEL3h2OFYvSE9rZkRQNGFhVGRhNzRoMSs3aHNOTzA2eWlhYTR1cm1kZ2tjY2FLQ1dabUlBQXJqNi93QkFIL2d6Sy80SnUrR0w3Uy9Gbi9CVGo0bWFldHpxTnRkemVGL0JubklDTFlMR3AxRzhUSVB6dUpWdFkzVWdxb3VGT1EvQUI5UGY4RW12K0RSRDRDL0NId3pwM3hnLzRLYkxINDk4YVhDSmNKNFN0YmhrMFRUQ3d6NWR6SkVWZTltVTQzWWRiY0hLN1psdzUvc00rRS93VitEdndHOEtRK0JQZ2g0VTBqd2ZvbHVxckhZYUxaUTJOdW9VWUdJNFZSZVBwWG9kOWZXV21XVTJwYWxNbHZiVzZOTExMS3dSRVJCbG1aamdBQURKSjRBci9PSS80S3AvOEhmbjdSZml6NG82ejhKditDWlAyUHdsNEwwdWFXemo4WFh0bWw3cW1xRkNWTTl2RGNLMEZ0YnZ5WXc4VHpNdTF5WXlUR29CL3BBMTVOOFh2Z0o4RHYyZ2ZEY25nNzQ3ZUR0RThaNlZLckkxcHJkaEJmd2xXNFB5VG80SDRWL2o4V3YvQUFjTGY4Rm9MUFUvN1hoL2FCOFJHWGR1MnVsckpGbi9BSzV0QVk4ZTIzRmZxNSt5VC93ZVIvOEFCUlg0UjZyYTZkKzFOb2VnZkZyUXd5aTRsOGhkRjFYWU92bHpXaS9aczQ3TmFuSkhVYzBBZlp2L0FBYzlmOEVVL3dEZ21QOEFzT2ZzdlFmdGQvczkyVi84UHZGMnM2OWFhTFllSGRQbU54bzkvTmNCNXBuTVU3TkxiQ0tDR1JnMEwrVnUyb1l4dkREK0Q2djZXZjhBZzQ1LzRMUmZESC9nclo0MytFMEg3UHNXcWFmNE44SWFETmQzZGpxc0lnbmkxN1VwY1hNYkJIZEpWaGhnZ0VjaWtnbDN4akp6L05OUUFWOXZmc0VmczByKzBoOGJZTFhYNFRKNGIwQUpmYXBuTzJSUWYzVUdSL3oxWUhQUTdGZkJ5Qlh4RFg5VVgvQk9INExRL0NMOW1mU3RSdklkbXFlS2NhdmRNUjgyeVlEeUV6MXdJZ3JZUFJtYjFyOUc4THVGNDUxbmNJVjQzbzBsenpYUjJla2ZtN1hYVkpuNWY0dWNYVHlISUtrOFBLMWVxL1p3ZlZYVDVwZjl1eHZaOUpOSDNsRkZGQkVzRUNoRVFCVlZSZ0FEb0FPd3FTaWl2N2FQNEhDaXZBUDJpLzJrZkFYN01QZzYwOGNmRU9DOXVMUzl2RnNZMXNZMGtrOHgwZVFFaDNRYmNSbm5PYzQ0cjR6L0FPSHUvd0N6RC8wRFBFWC9BSUN3Zi9KRmZONW54aGt1WFYzaHNkaW9RcUpKMmIxczlqNm5LZUNjOXpQRHJGWURCenFVMjJ1YUswdXR6Mno5dURVZmo1cHZoUFE1UGdKNGtzUERkMjEzSUxxVy91YmEyV1NQWjhxcWJrRlNRZWNMelh5dCt6SHIzN2JONzhjOUJ0dml0NC8wWFd2RDdOUDlyczdYVUxDYWFVQ0NUWnRTRmZNT0gyc2R2WVpQR2E4ay9hWi9iTy9ZaS9hbzBIVFBEL2orSHhqWlJhVmNQY1JOcDhGbWpGblhhUTNtU1NER1BRQ3VhL1l3dHYyR1kvMm1QQzcvQUFrdWZHcitJUTl6OWpYVlZzaFprL1pwZC9tZVVOLzNOMjNIOFdNOFYrU1poeEJReHZFMUNyZ2NielVwVHBKS09KY1U5WXByMlhMWjNlNnY3M3pQMmpMT0hNUmdPRThSUnpEQWN0YU5PcTI1WVZTa3RKTlAyM1BkV1d6dDd2blk5OS9hWjEvOXRxeitPT3ZXM3dyK0lHaTZOb0N2RDlrczdyVU5QaG1pQmhqTGJrbVV5REw3aU4zWThjWXI2dS9ZZzFINDlhbDRRMXVUNDkrSkxEeEplTGVJTFdXd3ViYTVXT0xZTXF4dGdGQnp6ZzgxK2FIN1pWdCt3dS83UzNpaC9pemMrTlU4UW1TMysyTHBTMlJzdzMyZUxiNWZtamY5emJuZC9GbnRYVi9zei90b2ZzUi9zcitIOVM4T2VBWWZHTjdEcWx3dHpLMm9RV2p1R1Zkb0NtT1NNWXg2ZzgwWmR4Qmg4RHhOWHE0N0c4dEtNNnFhbGlYSkxXU1M5bHkyVnVpdjd2bllNMDRieEdQNFV3OUhMOEJ6VnBRcE5PT0ZVSlBTTGI5dHp0dTYzZHZlOHJuN3cwVitXbi9EM2Y4QVpoLzZCbmlML3dBQllQOEE1SXI3Ty9aMC9hTzhCZnRPK0M3cngzOFBJYjJDenM3MTdDUmI2Tkk1UE5SRWtKQVIzRzNiSXZPYzV6eFg2M2xuRitTNWpYV0d3T0toT3BadXlldGx1ZmkrYmNFNTdsbUhlS3grRG5UcHBwYzBscGQ3SHZ0UnpRdzNNTDI5d2dramtCVmxZWkRBOEVFSHFEVWxGZlNOSHl5ZHRVZnlnL3Q2ZnMwLzhNMy9BQnR1TFBRb1NuaHZYZzk5cFI1MnhxVCs4Z3o2d3NjRHFkaFFrNUpyNGxyK3FEL2dvLzhBQldENHUvczBhcHFscENIMVh3cURxMXF3SHplWEVQOEFTRXoxdzBXNXNEcXlMNlYvSy9YOFMrS0hDMGNrenVjS0ViVWFxNTRkbGQ2eCtUdlpkSXRIOTgrRW5GMDgreUNuVXhFcjE2VDluTjlYWkxsbC93QnZSYXUrc2t6OVpmOEFnaFhvL2dueEgvd1Z4K0JQaGY0amFKcC9pTFJOVzhSQ3d1OU8xVzJqdkxTZEx1Q1dFQ1NHWldqZkJjTU55bkRBRWNnVi9ya2Y4TzV2K0Nldi9SQi9oMy80UyttLy9JOWY1Qy8vQUFSTHUyc3YrQ3VmN09jeThFK1B0RmovQU8vbHdxLzFyL2F6cjg1UDA4L3lXZjhBZzZXL1ozOEMvQ0QvQUlLK1hudzcrQXZoS3gwR3gxenc1b1Z4WjZQb05oSGF3dmNUSzhHSXJlM1JWTHlQSDBWY3N4N212MnovQU9DUFAvQm9mb045NGQwbjlvWC9BSUtxZWZKUGV4UjNWbDhQcktacmN3SzNJL3RXNWpJazNrZGJhQjBLY2I1U2QwYS8xRCtKUCtDVmZ3eitKbi9CWFczL0FPQ29YeFdodE5WbDhLK0ROTzhQZUZ0TWxVeWZaOVZpdWJ1YWZVcEFRRkVrY00wY05zTXR0SmtrSURyRXd4ZitDclgvQUFXMy9ZMy9BT0NTM2hLM1g0eVhrdmlMeDFxMEpuMG53aHBESTJvM0VlU29ubUxFSmJXMjRFZWJKeTJHRWFTRldBQVAwVytCSDdNLzdQUDdMM2crTHdCK3pwNEowVHdSbzhTaFJhNkxaUldhTmorSi9MVlRJeDZsbkpZbmtuTmU0Vi9sOWZITC9nODIvd0NDbHZqdnhETE44RS9DM2c3d0ZvNEo4bUJyU2JWYnNLVHg1azgwcVJ1UU9NcmJ4L1N0Mzluci9nOC8vd0NDaDNnVHhMQWYyaC9CbmhMeC9vUmtVM0VkcERObzkvc0IrWVJUeHlTd3FTUDcxdS9OQUgraTkrMGQreU4rekQrMTc0TWwrSC83VG5nUFJQSEdsU0lVRWVyV2tjN3haL2lobEk4eUZ4MmVKMVlkaUsvejUvOEFndVovd2F1YW4reXA0TzF2OXJ2L0FJSjJ0ZTYvNEMwbU5yelcvQ055elhXcGFSYklDMGx4YXpITDNWckdCbVJIelBFbzNscFYzRlA3aHY4QWdtZC93VkkvWlkvNEtxL0ExdmpMK3picU1pWFdtdkhiNjdvTitGajFMU0xxUUZsU2RGTEJra0NzWXBrTFJ5QldBSWRIUlAwY29BL3dCNksvbzMvNE9hditDWHVnZjhFNVAyOTI4U2ZDSFRocDN3MCtMTUUydjZGYlJJRWdzTHhIQzZoWXhBWUFTR1IwbGpWUUZqaG5qakdkaE5memtVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUgvL1Uvd0EvK2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BLzJJLytEYm45cTMvaHJQOEE0SkFmQ3ZXOVN1dnRXdGVDTGFUd1hxbk81a2swUWlLMkRIcVdheU50SXhQT1g3OWEvWUQ0Ni9DRHdyKzBGOEV2R0h3SDhkSjVtaStOTkZ2OUR2bHhrL1o5UWdlQ1RBOVFya2ozcitCdi9neVMvYXNPbGZFbjR4ZnNVYTFjSHl0WXNiWHhqcE1UTmhWbXNuV3p2ZG9QQmVSSnJVNEhPMklua0RqL0FFT2FBUDhBQkYrSzN3MzhVZkJ2NG8rSlBoQjQzaE50clhoVFZielI3K0k4R082c1ptZ2xYOEhRaXVCcitqZi9BSU9wUDJXZitHYS8rQ3dIalR4SHBsc0xiUi9paFkyWGpHekNqNWZOdWxOdmVaUFFzMTVielNFZFFKQjY1UDhBT1JRQi9vSS84R1IvN0tYMmZSdmpMKzI5ck52ODF6TGErQ2RKbXhnaFl3bDlmalBjTVdzc1k3cWEvdkY4WWVMUEQvZ0x3bHFuam54YmNyWmFWb3RwUGYzdHcvM1lyZTJReVNPZlpWVWsvU3Z5Vy80SUVmc3B0K3g3L3dBRWxmZzU4TTlUdGZzdXRhdnBBOFRhc0dYYko5czF4amViSkIvZmhpbGpnUHA1WUZlUmY4SExuN1VLL3N1LzhFZC9pbmVXTnliZlZ2SGtNSGd2VHdHMm1SdFpiWmRMbi9yeFc1YmpyajhhQVA4QUpvL2FsK08vaUg5cUw5cFR4OSswZjRxM0RVUEhYaURVZGNtUmpueXpmVHZLSXgvc3hoZ2lnY0FBQVYvV2ovd1pYZnRUbndCKzJWOFIvd0Jrdldicnk3SDRpZUhvOVdzWTJPUTJvNkhJZmxRZG1lMnVKbmJIVVJEUFFWL0ZyWDZDZjhFcHYyb3oreGgvd1VaK0R2N1NWeE9iZXc4TytKYlJkVGNOdHhwbDZUYTN2T1IveTdUUzR6eG5yeFFCL3Q2Vi9qZmY4SEVuN0pjbjdILy9BQVZ6K0xQaEd4dHZzK2krTGI4ZU1OSnd1MUd0OWN6Y1NoQU9Ba1YwWjRWQTR4SFgreUFDQ01qa0d2NE1mK0QyejlrMlBVUEJmd2UvYmcwTzJQbmFiZFhQZ3ZXSmxYSk1OeXJYdGhram9xUEhkako0SmxBNFBVQS96MXEvcEcvNE5UZjJYaiswWC93Vi93RENQaXpVcmI3UnBId3UwMi84VzNlNGZKNXNLQzF0T2Y3eTNWekZLbzZueXoyQnIrYm12OUhqL2d5Yy9aY1R3cit6WjhXZjJ3Tll0OFhYakRYTGJ3M3B6dVBtRm5vOFhuVE1oL3VTelhRVnZWb1Bia0EvdUFyL0FEZWYrRDE3OXFqL0FJVEg5cUQ0Vi9zZmFMUHV0ZkJHaDNIaUhVVlJ2bE43clVnaWlSeC9laWd0UTYvN00vdngvcERWL2lSLzhGZGYycXYrRzFQK0NsWHhrL2FNdExyN1pwbXMrSTdtMjBtVUhJYlN0T3haMlJISkEzVzBNYkhIR1NhQVB6am9vb29BL3ZFLzRNY3YrU2svdEdmOWd6d3ovd0NqYit2OURTdjg4djhBNE1jditTay90R2Y5Z3p3ei93Q2piK3Y5RFNnRC9ITy80T1RmK1UzUHg2LzdDV21mK21xenI4T0svY2YvQUlPVGYrVTNQeDYvN0NXbWYrbXF6cjhPS0FDdjk1LzRCLzhBSkMvQmYvWUIwNy8wblN2OEdDdjk1LzRCL3dESkMvQmYvWUIwNy8wblNnRDhSLzhBZzZiL0FPVUhIeGovQU91M2h6LzA5V05mNURGZjY4Ly9BQWROL3dES0RqNHgvd0RYYnc1LzZlckd2OGhpZ0FyL0FHS1ArRGFydy9vbmgzL2dpUjhDb05EUkZXNnNOVHU1bVVjdlBQcWQyOGhKN25jY2ZRWTdWL2pyMS9waC93REJtNSszNTRYK0szN0hldC9zQmVKNzlJL0Zud3Z2Ym5WZEp0WFlCN2pRTlRtODEyakJPVyt6M3NzZ2x3QUZFOFhyUUIvUkwvd1Z4MDN4NXJQL0FBUzYvYUQwdjRack5KcmMvd0FQL0VDVzZXK1RNNE5uTDVpeGdjbDJqM0JRT1NTTWMxL2lMMS92N09pU0lZNUFHVmhnZzhnZzEvbi9BSC9CWWY4QTRORXZGV3RlTXRiL0FHalArQ1diMmIyMnB5eTN0NThQcjJWTE1RU1BsbUdsWEQ0aDh0bVB5MjA3UnJHT0VrSzdZMUFQNENxSzlvK08zN09YeDgvWmc4Y3pmRFQ5b253YnJIZ25Yb0NjMldzMmN0cEt5cWNia0VpZ09oN09oS2tjZ2tWNHZRQVVVVVVBZDc4TFBCYy94SCtKZmgvd0JiNURhMXFOdFpaSFZSUElxRS9nQ1RYOXFWbloydW5XY1duMk1ZaWdnUlk0MFVZQ29vd0FQWUN2NVBmK0NlK21XK3EvdGhlQzQ3c3FJb0o3aTRZdVFBREJieXVwNS8yZ01WK2wzaXo5bVgvZ29QcW5pclU5VDhQL0FCZnRiYXd1THVhVzJoT3JYU21PRjNKUmNDRWdZVWdZQndPMWYwSjRRNHlybG1WNGpHME1IT3ZLcFU1SHljdDRxRVUxZm1hM2MzdDJQNXA4YXNEUnpiTnNOZ01Sam9ZZU5LbHpybjVyU2RTVGk3Y3FlcVZOYjl6OWJmaUZydXMrRnZBR3VlSnZEbGtkUzFEVHRQdWJxMXRBR0pubWhqWjBqQVVGanZZQmZsQlBQSE5ma1QvdzhIL2JSLzZJbmUvK0FWOS84YnJJL3dDR1YvOEFnbzcvQU5GbXRQOEF3Y1hmL3dBWW8vNFpYLzRLTy84QVJaclQvd0FIRjMvOFlyN0xQYy80Z3hzNFN3ZUZ4T0hTV3FpcU1yK2I1bXo0Zmg3aHpodkFVNXd4Mkx3bUpiYWFjcFZvOHZrdVZkZk1wK0ovMjF2Mm8vRzFpbWwrTS8yZnpxOXRHNGxTRzkwdTd1STFjQWdNRmVKZ0Rna1o2NEpyaGY4QWhvYjRyLzhBUnJ1bS93RGdnbS8rTVY2Ti93QU1yLzhBQlIzL0FLTE5hZjhBZzR1Ly9qRkgvREsvL0JSMy9vczFwLzRPTHY4QStNVjh4Vmh4SFZsejFZNHFUN3VsaG0veFByS00rRjZNZVNsTENSWFpWY1VsK0I1ei93QU5EZkZmL28xM1RmOEF3UVRmL0dLOTYvWmkrTS94RThVL0hQUWRCMXI0QjJQZzYxdUduRW1zUTZQTGF2YmJZWkdCRXJRcUYza0JPU003c2Q2NHYvaGxmL2dvNy8wV2EwLzhIRjMvQVBHSzlwL1o0L1ovL2JhOEdmR1BSZkV2eFgrSjF2ci9BSWZ0V21OM1lKcVZ6TzB3YUYxUUJKSWxVN1hLdHlSakdldGR1VFlmTzFqOE82dFBFY3ZQQzk2V0hTdHpLOTJ0VXJidGEyMjFPRFBNVGtEeTNFcWpVdzNQN09kdVdyaVhLL0s3V1V2ZGJ2c25vM3ZvY1A4QXRNL0dmNGllRi9qbHIyZzZMOEFySHhoYTI3d2hOWWwwZVc1ZTYzUW94SmxXRmcyMG5ad1RqYmp0WGhIL0FBME44Vi8ralhkTi93REJCTi84WXI2dC9hRi9aKy9iYzhaZkdMV3ZFdndxK0oxdm9PZ1hUd20wc0gxSzVnYUVMRWlzREhIRXlybHd6Y0U1em5yWGpIL0RLLzhBd1VkLzZMTmFmK0RpNy84QWpGTE9NUG5qeCtJZEtuaU9YbmxhMUxEdFc1bmF6ZXJWdG05YmI2anlURTVBc3V3eXJWTU56K3poZm1xNGxPL0tyM1VmZFR2dWxvbnRvZWMvOE5EZkZmOEE2TmQwMy93UVRmOEF4aXU3OE0vdHIvdFNlQ3JCdEs4Ry9zL25TYlYzTXJRMldsM2R2R1hJQUxGVWlBSklBR2Nad0JWdi9obGYvZ283L3dCRm10UC9BQWNYZi94aWovaGxmL2dvNy8wV2EwLzhIRjMvQVBHSzQ2VU9JNlV1ZWxIRlJmZFVzTW4rQjNWcDhMMW84bFdXRWt1enE0cHI4VWEvL0R3Zjl0SC9BS0luZS84QWdGZmYvRzYvWG53QnJtc2VKdkFtaWVKUEVObWRPMURVTEMydWJtMElZR0NhV05XZU1oZ0dHeGlWNUFQSFBOZmpmL3d5di93VWQvNkxOYWYrRGk3L0FQakZIL0RLL3dEd1VkLzZMTmFmK0RpNy93RGpGZlQ1Rm4rZjRLYzVZekM0bkVKcFdVbFJqYnpYSzF1ZkpjUThOOE40K25UamdjWGhNTTAyMjR5clM1dko4eTZlUisybDdaV21vMmMybjM4WWxnblJvNUVZWkRJd3dRZllnNHIrS3o0cCtESnZoMThTL0VIZ0dmTzdSZFJ1ckxua2tRU01nUDRnWnI5d1BDUDdNMy9CUWJTdkZlbDZuNGgrTDlyZGFmYlhjRXR6Q05XdW1Na0tPQzY3V2hBTzVRUmduQjcxK2FQL0FBVUkwaTMwZjlzSHhuSGFNalJYTTl2ZEtVT1FUUGJ4TzNUL0FHaWMxOGI0dll5cm1lV1lmSFY4SE9oS25VNUZ6OHQycHhiZHVWdlp3WDNuM1BncmdhT1U1dGljQmg4ZERFUnEwdWQ4bk5hTGhKUlYrWkxWcW85dXg3Si93UmhKSC9CV245bkFqL29vbmgvL0FOTEk2LzJ4cS94T1ArQ01YL0tXajluRC9zb25oNy8wc2pyL0FHeDYvbnMvcFkrSHYrQ2tQN2JQZzcvZ25iK3hQNC8vQUd2UEdVS1hnOEo2Y1cwK3hkaW4yN1U3aGxnczdiSXl3V1c0ZEZkbEJLUjdud1Fwci9GUi9hTC9BR2hmaTkrMWY4Y1BFMzdSWHg1MWlYWHZGdmkyOWUvMUc4bS9pZHNCVVJSd2tVYUJZNG8xd3NjYXFpZ0tvRmY2SlgvQjdKOFJkYjBUOWhqNFVmREN4a2FPejhRZU5udmJyYWNCL3dDenJLWUlqZW8zWEc3SFRLZzlRSy96VEtBQ2lpaWdEOWRQK0NIZi9CUVB4TC93VGsvNEtNK0F2akhGcURXdmhMV3IySHcvNHVnSi9jemFMcUVpeHl1NDdtMmJaZFI0SU8rSURPMW1CLzJoSy93QjYvM1lmMkx2SDEvOFYvMk92aFA4VWRWbGFlNjhTK0RkQzFXYVJ2dlBKZVdNTXpNZmNsaWFBUDU1ZitEd3I5blN5K0xYL0JLTmZqTkJiQnRSK0Z2aWZUZFRFNnJsMXM5Ulk2Zk5IbnNqeVhFRHQ3eHJYK1Z4WCt5OS93QUhER2lRZUlQK0NMMzdRTmhjS0dXUHc5SGNnSCs5YlhjRXluOENnTmY0ME5BQlJSUlFBVVVVVUFGRkZGQUJSUlJRQi8vVi93QS8raWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0EvVnovZ2g5KzFjZjJNZitDcVB3YStOTjlkZlpOSWZYWXRFMWgyT0l4cDJzZzJVN3llcXhMTjUzczBZUFVWL3RPVi9nRUt6S3daVGdqa0VWL3QzLzhBQktQOXF0ZjIyZjhBZ25OOEgvMmxwNS90T29lSWZEbHNtcVBuZG5WTEhOcGZkeWYrUHFHWEdlY1l6UUIvTWwvd2V2ZnNyUitML3dCbUw0Vi90aWFMYjdyM3dWcmsvaHpVWFJmbU5qck1mbXhPNS91eFQydXhmOXE0UHJYOEtYL0JPSDltQ1Q5dEQ5dkQ0VC9zdk1wYTA4WStKYkd6MUFybmN1bks0bHZIR082V3lTc09uSTZqclgrdUovd1hLL1owSDdVMy9CSmo0NmZDaTN0dnRkOG5obTQxcXdqQStkcnpSQ3VvUXFoN003MjRUM0RFZENhL2hQOEErRE5QOW5HUDRvZjhGTHZFUHg3MU9BdmFmQy93cGRUVzhtM0lUVWRYZGJPSVo2RGRiRzc5K1ByUUIvcUQydHRiV1Z0SFoyY2F4UXdxRVJFRzFWVlJnQUFjQUFjQVYvbjAvd0RCN3ArMUFicnhUOEZ2Mk10Sm5HMnl0cjN4bHFrUU9jdGNNYkt4T08yMFIzblhydUhwei9vTzEvaldmOEhDMzdVSS9hdy80SzlmR1R4dHA5MTlwMG53N3EzL0FBaW1tNE9VV0RRbEZvNVE4NVNTNGptbEJIQjM1SEJvQS9GcWlpaWdEL2EwL3dDQ0xIN1V6ZnRrL3dEQkxmNEwvSFMrdXZ0bXEzUGgyRFM5V2xKeTdhbHBCYXh1V2NkUTBrc0RTYzlRd0k0SXJELzRMamZzcVIvdGsvOEFCS3Y0emZCdTF0eGM2dERvTXV1YVF1TXYvYUdpa1gwS29lelNtRXc1OUpDRHdUWDg2ZjhBd1pOZnRTZjhKTit6MzhXLzJPOVp1QzF4NFQxbTI4VDZham5KTnJxMFhrVHFub3NjdHFqRWYzcDg5elg5dzF4YjI5M2J2YTNTTExGS3BSMGNibFpXNElJUEJCSFVVQWY0QnRmN1ZYL0JFdjhBWm1pL1pJLzRKVmZCSDROeTIzMlhVRjhOVzJzYW5Hd3c2NmhyT2IrNVZ6M01jazdSL1JRQndCWCtXVmIvQVBCUEc2dXYrQzIvL0R0cUtCalpENHBONFpPTW5HanBmSE0zVE9CWkF5OU9sZjdQOE1NTnRDbHZib0k0NHdGVlZHQW9IQUFBNkFVQWZtUi93V2MvYW9QN0dYL0JMNzR6L0h1eXVQczJxV1hoMmZUdEtrRGJYWFV0V0syTnE2OXlZNXAxa0lITzFTZUFDYS94UXEvMFovOEFnOWsvYXFQaG40QmZDWDlqWFE3cmJjZUs5WHVmRStxUkljTUxUU28vSXRsZm43a3MxeEl3R09XZ3oyci9BRG1LQUNpaWlnRCs4VC9neHkvNUtUKzBaLzJEUERQL0FLTnY2LzBOSy96eS93RGd4eS81S1QrMFovMkRQRFAvQUtOdjYvME5LQVA4YzcvZzVOLzVUYy9Ici9zSmFaLzZhck92dzRyOXgvOEFnNU4vNVRjL0hyL3NKYVovNmFyT3Z3NG9BSy8zbi9nSC93QWtMOEYvOWdIVHYvU2RLL3dZSy8zbi9nSC9BTWtMOEYvOWdIVHYvU2RLQVB4SC93Q0RwdjhBNVFjZkdQOEE2N2VIUC9UMVkxL2tNVi9yei84QUIwMy9BTW9PUGpIL0FOZHZEbi9wNnNhL3lHS0FDdm9EOWx6OXFENDNmc1ovSGZ3OSswait6dHJjdmgveFo0WnVQUHRMcVA1bFlNQ3NrVXFINVpJWlVKU1NOdmxaQ1FhK2Y2S0FQOWNIL2drUC93QUhJMzdIWC9CU2pSTkwrR254TnZMVDRYL0dGd2tFM2gvVVp3bG5xYytPWDB5NWtJV1FPZVJidVJPcHlBSkZYekcvbzNyL0FBQjYvZG45aGIvZzQ0LzRLb2ZzSTIxbjRWOE0rT1Q0NzhKV1pWVjBIeGlyYXBBa2Evd1JYQmRMdUZRQ1FxeHppTWNmSWNZb0EvMXVmanArenI4QnYyblBBMC93ei9hSThIYVA0MTBHNEIzV09zMmNWNUVDUmpjZ2tVN0hIWjB3eW5rRUd2NHdmK0Nvbi9CblA4TXZGK2w2bjhXditDWCtyTjRhMXRBMHg4RmEzY3RMcHR6MUpTenZaTjB0dTU2SWx3WkkyYmd5Ukx6WDZNLzhFdXYrRHFUOWlQOEFidzF6Uy9nMzhlTFp2ZzM4UmRSWkxlMmcxTzRXYlJkUXVISVZZN2EreEhza2tZL0xGY0pIa2tJanlNUUQvVVhRQi9nbS9GMzRRL0UvNEIvRXZXdmczOGFOQ3ZQRFBpbnc3Y3RhYWpwbC9FWXJpM21YQnd5bnNRUXlzTXF5a01wS2tFK2MxL3F0ZjhIUkgvQklmd1YrMnoreC9yZjdYL3d4MG1PSDR1ZkNiVFpOU0Z6QWdFdXJhRmFneTNkbk1SeTdReDc1N2JobURxMGFnZWNTUDhxV2dEMzc5bUQ0TzZWOGZ2amhvdndsMWpVSk5MaDFiN1FQdE1TQ1JsYUdGNVFBcElCeVV4MTcxOXQ2aCt4eit4RHBPb1Q2WHFQeHhpaHVMYVJvcFkydGt5cm9jTUQ4L1VFWXI0MC9aQzhZUStCUDJuUEEvaVM1YlpESHEwRU1qSG9zZHlmSlluMkN1VFg5QzJ0LzhFMWYyUy9FT3RYbXY2cG90Mjl6ZlR5WEV6QytuQU1rckZtT0ErQmttdjJYdys0VmptK1YxSjRmQ1VhdGFGUnFUcXpxUnRCeGp5MjltKzZsdWo4TThTdU1KNUxtOUtHSnhsZWpRblNUaXFNS1VyelU1YzEvYUwrVnd0Wm41VWY4TWsvc0svOEFSZFlmL0FaZi9pNlArR1NmMkZmK2k2dy8rQXkvL0YxK2lueEIvd0NDZFg3SEhnSHdGcmZqdWJ3M2ZYYWFMcDl6ZnRBbW9UcTBvdG8ya0tBbDhBdHR3Q2EvSTcvaGFQN0JuL1JKOVovOEhjbitGZWxubVFZYko1d3A1bGc4SFRsSlhWNTRwM1MvdzNQTTRlNGp4V2VVNTFjcXgyT3FSZzBuYW5nMVp2VmZGWTlkL3dDR1NmMkZmK2k2dy84QWdNdi9BTVhSL3dBTWsvc0svd0RSZFlmL0FBR1gvd0NMcnlML0FJV2ord1ovMFNmV2YvQjNKL2hSL3dBTFIvWU0vd0NpVDZ6L0FPRHVUL0N2Qzl0a24vUG5CZjhBZ1dNL3lQb2ZxK2YvQVBQL0FCMy9BSURnZi9rajEzL2hrbjloWC9vdXNQOEE0REwvQVBGMTlGL3NtL3M2ZnNtZUIvMmcvRHZpbjRjZkZxTHhIclZvOXdiYlRsaFZET1hna1Zoa01mdW9XYjhLK0YvK0ZvL3NHZjhBUko5Wi93REIzSi9oWDFEK3hoNCsvWkcxbjlwand4cHZ3MStIbXFhSnJjcjNQMmE5bjFWN2lPSWkybExib3lNTmxBeSt4T2E5Zmgrcms3elRDS25Td2lsN1NGdVdXSzVyOHl0eTh5NWI5dWJTKytoNG5FdERPMWxHTWRXdGpYSDJWUy9OSEI4dHVSMzV1VjgzTGJmbDk2MjJwNkgrMWQrem4reVg0My9hQjhSK0tQaU44V292RHV0WGNrQnVkT2FGWE1CV0NOVkdTd3psUUc2ZDYrZVArR1NmMkZmK2k2dy8rQXkvL0YxNkIrMlg0Ky9aRjBmOXBieFJwdnhKK0hlcWExcmNVbHVMbTlnMVY3ZU9VbTNpS2xZd01MaFNCN2tacjVpLzRXait3Wi8wU2ZXZi9CM0ovaFJ4QlZ5ZFpwaTFVcFlSeTlwTy9OTEY4MStaMzV1VmN0Ky9McGZiUU9HNkdkdktNRzZWYkdxUHNxZHVXT0Q1YmNpdHk4ejV1VzIzTjcxdDlUMTMvaGtuOWhYL0FLTHJELzRETC84QUYwZjhNay9zSy84QVJkWWYvQVpmL2k2OGkvNFdqK3daL3dCRW4xbi9BTUhjbitGSC9DMGYyRFAraVQ2ei93Q0R1VC9Ddkk5dGtuL1BuQmYrQll6L0FDUGIrcjUvL3dBLzhkLzREZ2YvQUpJOWQvNFpKL1lWL3dDaTZ3LytBeS8vQUJkSC9ESlA3Q3YvQUVYV0gvd0dYLzR1dkl2K0ZvL3NHZjhBUko5Wi93REIzSi9oWDY2ZUFmOEFnblIreHg0ODhDNkw0NGg4TjMxcW1zMkZ0ZkxDK29UbG94Y1JySUZKRDRKWGRna1Y3dVI1QmhzNG5Pbmx1RHdkUnhTYnRQRkt5ZTN4V1BuZUllSThWa2NLZFROY2RqcWNadHFONmVEZDJ0L2h1Zm5ycDM3SEg3RVdyNmhCcE9tL0hHS2E1dXBFaGlqVzJUTHU1MnFCOC9VazRyNGsvYWgrRG1rL0FINDM2ejhKZEYxRjlWaDBrVzQrMHlJSTJacG9VbElLZ2tmS1h4MTdWL1JOb2Y4QXdUVy9aTThPYTNaK0lkSzBXN1M2c0o0N2lGamZUa0NTSmd5bkJmQndRSy9uaS9hMjhYeGVPLzJtUEhIaWEzYmZETHE5eEZFMzk2TzNieWtQNHFnTmViNGc4TFJ5aks2Y3NSaEtOS3RPb2xGMHAxSlhnb3k1ciswZmR4MlBWOE5lTDU1M205V0dHeHRldFFoU2JrcTBLVWJUY284dHZacitWVHZkbjFUL0FNRVl2K1V0SDdPSC9aUlBEMy9wWkhYKzJQWCtKeC93UmkvNVMwZnM0ZjhBWlJQRDMvcFpIWCsyUFg0MGZ1Ui9Eei93ZStmOG15L0F2L3NaOVUvOUpFci9BRGphL3dCSEwvZzk4LzVObCtCZi9ZejZwLzZTSlgrY2JRQVVVVVVBRmY3aXYvQk1UL2xHdit6MS93QmswOEovK211MnIvRHFyL2NWL3dDQ1luL0tOZjhBWjYvN0pwNFQvd0RUWGJVQWZNdi9BQVgyL3dDVU4zN1F2L1lxVGY4QW95T3Y4WVN2OW52L0FJTDdmOG9idjJoZit4VW0vd0RSa2RmNHdsQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUIvL1cvd0EvK2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BSy93Qkk3L2d5bS9hdVBqWDlsajRuL3NlYTdkYjd2d0pya092NmJHNStiN0JyU0ZKRVFmM0lyaTNaMjQ0YWYzR1A4M0d2Nkt2K0RXajlxei9obVA4QTRLLytDTkQxUzQ4alIvaWhhM2ZneTl5MkY4eStDeldmQklCWnJ5Q0NNZHdIT091Q0FmNjRXb2FmWmF0WVQ2WHFVU3oyMXpHMFVzYmpLdWpqREtSM0JCd2EvbEsvNE5TdjJKeit5UjhLdjJrSnRTaTIzNStLMnErRGhJd3k4bHA0UkxXNkV0M0huejNBNDdnK3RmMWcxNWw4THZnLzRBK0RWaHJPbS9EMnhGaERyK3RhaDRndlZVNTgzVU5VbWFlNWwrcnlNVFFCNVgrMnorMFZwdjdJMzdJUHhNL2FiMVRheStCdkRlbzZ4RkcvU1c0dG9XYUNMNnl5N0VIdTFmNFhHcmFycVd1NnBjNjNyTTczVjVlU3ZQUE5JZHp5U1NFc3pNVDFMRWtrK3RmNmtYL0I0bCsxQ2ZnMS93QUV2Ykg0RDZSY2lMVXZpMTRsczlQbGlCMnUybWFYL3Axd3c3NEU4ZHFqRHVKT2VPRC9BSlp0QUJSUlJRQi9SSi93YTEvdFROK3pQL3dXRDhCNk5xTnlMZlIvaWJiWG5neSszTmdGNzVSTFpqSFFzMTdCYm9PK0hQMFArdXBYK0I3OE5QaUQ0bitFdnhIOFAvRlh3VE9iWFdmRE9wV21yV0V3NngzVmxLczBUZjhBQVhRR3Y5MmI0QS9HVHd2KzBUOEN2Qm54KzhFTnUwZnh0b2VuNjdaWk80aURVSUVuUUUrb1Z3RDdpZ0QrV1RTLzJGTktnLzRQQnI3NDNDM1VXcS9DOWZpS29BL2RpN2xUL2hHK2c0RHNWa2x3ZXBCYnJYOWU5ZVFMOEMvaHd2eDhmOXBkYk1qeGUvaDlmRERYZTdnNmFseWJvUjdmYVZpMmZlc3o5cHo0NStHLzJZdjJjdkhmN1JmaThxTk44RGFCcU91M0NzY2Ixc0lIbTJEMVp5b1ZRT1N4QUhKb0EveWl2K0RvTDlxZy90UC9BUEJZVDRoV2VuVG1mU1BodEhiZUNySDVzaFcwd005Mk1kQVJmVFhBNDdBWjU2ZnozVjFuajN4djRsK0p2anJXdmlSNDB1V3ZOWThRWDl6cVYvY045Nlc1dTVHbGxjKzdPeFA0MXlkQUJSUlJRQi9lSi93WTVmOEFKU2YyalA4QXNHZUdmL1J0L1graHBYK2VYL3dZNWY4QUpTZjJqUDhBc0dlR2YvUnQvWCtocFFCL2puZjhISnYvQUNtNStQWC9BR0V0TS84QVRWWjErSEZmdVA4QThISnYvS2JuNDlmOWhMVFAvVFZaMStIRkFCWCs4LzhBQVA4QTVJWDRMLzdBT25mK2s2Vi9nd1YvdlA4QXdELzVJWDRML3dDd0RwMy9BS1RwUUIrSS93RHdkTi84b09QakgvMTI4T2YrbnF4ci9JWXIvWG4vQU9EcHYvbEJ4OFkvK3UzaHovMDlXTmY1REZBQlJSWDB2TCt4dCsxTEgrelhaL3RoeCtCTlhuK0dGOWUzR25wNGpnZ00xaWx6YWtMSWtycHVNUHpIQ3RLRlZ5Q0ZKS3NBQWZORkZGRkFCWCtzNS93YXNmdDZmRW45dHIvZ21pbmgvd0NORi9OcS9pZjRWYXhKNFhmVWJsakpQZWFlc01VOW5KSzU1YVNPT1EyNVkvTXl3cXpGbVppZjhtT3Y5WmIvQUlOVS93QmczNG1mc1UvOEUweDRrK05Pbno2UDRtK0t1c3llSnpwdHlwam5zOU9NTVVGbWtxSGxaSkVqYTRJUHpLc3lxd1ZsWUFBL3BXMUhUN0hWOVBuMHJWSWx1TGE2amFLYUp4bFhqY0VNcEhjRUhCRmY0TWZ4djhFV253eitOUGkvNGNhZTVrdC9EK3Q2aHBzYk4xS1drN3hBbjZoYS93QjEvd0NNdnhXOEgvQWo0UmVLZmpiOFFyZ1dtZytFTkp2ZGExR1pqZ0phMk1MVFNuOEVRNHIvQUFlL0hmaS9WUGlENDMxbng3cm1QdHV1WDF4cUZ4dDZlYmN5TkkrUCtCTWFBT1pobWx0NWt1SUdLUEdReXNPQ0NPUVJYOW1mN1A4QThVYlg0MGZCZnczOFRyWmdXMWF4amtuQzlGdUYrU1pSL3V5cXkvaFg4WTlmdDcvd1NOL2FGZ3M3dlUvMmNQRWM0WDdVejZscEJjOVpBbyswUWpQcXFpUlFQU1Fuclg3SjRLOFJSd0djeXdOWjJoaUVvci9ISFdQMzNsSDFhUHc3eDU0WW5tT1JSekNoRzlURE55ZitDVmxQN3JSay9KTS9kb2dNQ3JESVBVVlcrdzJYL1BGUCsrUi9oVnFpdjY3YVQzUDRwVGEyWjhvL3RaNi84ZlBCM3cvc05TL1pwMEczMXJXNU5RU080aGxoV1VMYW1PUXMyQzhmTzhJTTVQWHBYNTgvOExuL0FPQ3JIL1JPN0Qvd0RULzVJcjl0S0srUXpqaFd0anNTOFJUekd0UlZrdVdFb3FPbld6aTlYMTFQdHNqNHhvWmZoVmhxdVdVSzdUYjU2a1pPV3ZTNmtsWmREOFMvK0Z6L0FQQlZqL29uZGgvNEJwLzhrVjdQK3ozOFQvOEFnb1ByL3dBWWRHMGo0MGVDN1RTdkRNelRDOXVvN1ZZM2pBaGNwaGhNeEdaQW82SHJYYWY4Rkd0SDhIYXg0SThPUitNZmlESjhQb2t2cFRIY1IyMXhkRzRZeDhwdHQyQkdCemx1SytLdjJPdkN2d3AwL3dEYVE4TlhuaDM0NXplTHIxSHVmTDBsOU92NEJjNXQ1UVJ2bVl4amFNdjh3NTI0SE9LL05xLzF6THVJS0dBK3ZWcWtWT244V0pvUnZ6Tk96cE5LYld0ckxXUytIZEg2bmgzZ3MwNGJ4R1lyQVVhVW5DcnBEQzRpVm5GU1NhcXB1bW5wZm1la1g4V3pQcDc5b0w0bi93REJRalFQakJyV2svQm53WGFhcDRaaGVJV1YxSmFySTBpbUpDK1dNeWs0Y3NPZzZWNDMvd0FMbi80S3NmOEFSTzdEL3dBQTAvOEFraXVCL2JCOEsvQ2pVUDJqL0UxNTRpK09rM2hLOWVTMzh6U1UwNi9uRnNSYnhBRGZDd2piY01QOG80M1lQTmZibi9CT2JSL0IyaitCUEVVZmc3NGd5ZkVHSjcrTXlYTWx0Y1dwdDI4c2ZKdHVDU2Nqbks4VVlkWXpNYy9yNEQ2OVdweDU2bnc0bWhLMW05RlNTYzB1bG5yRmZGc3d4THdXVjhONGZNZjdQbzFKS0ZMU2VGeEViOHlpbTNWYlZOdlc5MXBKL0R1ajVoLzRYUDhBOEZXUCtpZDJIL2dHbi95Ulg2RS9zbTY5OGV2R1B3OHZkVC9hVjBLMzBYWEUxQ1NLQ0dLRll3MXFJNHlyWUR5Y2x5NHprZE9sZlZkRmZwV1Q4SzFzRGlWaUttWVZxeXMxeTFKUmNkZXRsRmFycHFmbG1lY1lVTXd3cncxTExLRkIzVDU2Y1pLV25TN2s5SDFLdjJHeS93Q2VLZjhBZkkvd3F5QUZBVlJnRG9LV2l2cmtrdGo0bHR2ZG5qZjdRbnhSdHZndjhGUEV2eE51SFZYMHF4a2UzRGRHdVgrU0JmOEFnVXJLUHhyK00rYWFXNG1hNG5Zdkk1TE16SEpKUEpKUHFhL2JmL2dybCswTERlWHVtZnM0K0hKdzMyUmsxTFdOcDZTTXYranduNkt4a1lIajVvejJyOFJLL2tQeHE0aWpqODVqZ2FMdkREcHhmK042eSs2MFl2elRQN1c4QnVHSjVka1VzZldqYXBpV3BML0JHNmg5OTVTWGswZnBqL3dSaS81UzBmczRmOWxFOFBmK2xrZGY3WTlmNG5IL0FBUmkvd0NVdEg3T0gvWlJQRDMvQUtXUjEvdGoxK09IN2lmdzgvOEFCNzUveWJMOEMvOEFzWjlVL3dEU1JLL3pqYS8wY3Y4QWc5OC81TmwrQmY4QTJNK3FmK2tpVi9uRzBBRkZGRkFCWCs0ci93QUV4UDhBbEd2K3oxLzJUVHduL3dDbXUyci9BQTZxL3dCeFgvZ21KL3lqWC9aNi93Q3lhZUUvL1RYYlVBZk12L0JmYi9sRGQrMEwvd0JpcE4vNk1qci9BQmhLL3dCbnYvZ3Z0L3lodS9hRi93Q3hVbS85R1IxL2pDVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFILy8xLzhBUC9vb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUN1eStIUGo3eFQ4S2ZpRm9YeFI4RDNKczliOE5hamE2cnA5d3ZXSzZzNUZtaWNlNnVvUDRWeHRGQUgrOGIrelo4Y1BESDdUSDdQWGdmOW9qd1d3T2xlT05CMC9YYlVBNUtSMzhDVEJENk1tN2F3UElJSVBOZTExL25zLzhFZ2YrQ3RYL0FBVjUvWlgvQU9DZWZ3OStCM3cxL1l1OFYvR0R3cHBFTjIraCtLYlUzc01WM1lYVnpMT2lyNWRqY0k2eE5JMGFNcjQyS293TWMvcGFQK0MrSC9CYWovcEhENDAvOENOUS93RGxWUUIvUHovd2VZZnRRTDhWditDalhoajltN1NibnpiRDRVK0dZUmNSWnlJOVUxd2k2bTQ3YnJWYlAzcitRYXYwaS80S29MKzJkOFFQMnh2SFA3VG43Wm53ejhSZkRYV3ZpSnJOeHFVTmpydW4zVm9zVUp3SWJlR1M1aWk4NWJlQlk0ZzZqa0xuQTZWK2J0QUJSUlJRQVYvckcvOEFCcGgrMU8vN1EzL0JKSFEvaDVyRno1K3IvQ2ZXTDd3dkx2Yk1odENWdkxSaU95TEZjK1FudENSMnIvSnlyOTFmK0NLSC9CY2Y0aWY4RWFkVzhmbncvd0NDWVBIK2orUG9iRHo5UHVOUmJUeGIzT25OTDVjeU9zTStkeVR1cnJ0R2ZsT2ZsQW9BL3dCaU92NVl2K0R2VDlxay9Bai9BSUpVemZCblNKekhxdnhkMTZ5MFRhamJYRmhaTjl1dVhIK3lUQkZDNDdpYkhUTmZqaC94SEllUC93RG8yL1QvQVB3cUpQOEE1WFYvUGQvd1dyLzRMWC9FVC9nc3A0NThDK0lQRXZnNkh3SG8vZ094dkxlMDB1Qy9iVVZrdWIrUkdubk1qUXdZTEpEQ2dYWWNiTTU1d0FEOFJLSzdMNGQvRHp4eDhXL0htai9DL3dDR2VsWE91ZUl2RU41RHArbTZmWnhtVzR1cnE0WUpISEdnNUxNeEFBcit0TDRjL3dEQmx6L3dVbzhXZUJyYnhINDM4YmVCUEN1clhNUWtPa1hGM2QzVXNESCtDYVczdFpJZHc3K1UwcStqR2dEK1B1aXZxbjl0cjlqNzRyL3NEZnRSZUxQMlIvamhMcDl4NG84SFMyOFY3THBVNXViTi90VnZGZFJOSEl5UnNRWXBrSkRJcktjcVFDQ0srVnFBUDd4UCtESEwva3BQN1JuL0FHRFBEUDhBNk52Ni93QkRTdjhBSFYvNEltLzhGc2RjL3dDQ05Hdi9BQkUxN1JQaHpiZkVGdmlCYjZaYnNzK3B2cHB0QnByWERaQldDY1A1bm44NUF4dEdEeWEvZjcvaU9ROGYvd0RSdCtuL0FQaFVTZjhBeXVvQS9uNi80T1RmK1UzUHg2LzdDV21mK21xenI4T0srM1ArQ2puN1oxNS93VUsvYlU4ZGZ0amFoNGRpOEp6ZU5yaTFuZlNZYmxyeExjMjFyRGE0RXpKR1gzZVR2UHlMZ3RnREFyNGpvQUsvM24vZ0gveVF2d1gvQU5nSFR2OEEwblN2OEdDdjdwUEJIL0I3VjQ3OEZlQzlIOEhRL3M2YWZNbWsyVnZaTEovd2swcTd4QkdxYnNHd2JHY1p4azQ5VFFCL1NIL3dkTi84b09QakgvMTI4T2YrbnF4ci9JWXIrdFAvQUlLZC93REIxTjR0L3dDQ2xIN0V2akg5akxWdmdsWmVFb1BGemFjeDFhUFhwTDE3YzZmZXdYZzJ3bXpoRGIvSTJjdU1CaWVTQlg4bGxBRnF4c2IzVTcySFRkTmhlNHVMaDFpaWlpVXU3dTV3cXFveVNTVGdBY2sxL3Q0ZjhFeS8yUGRKL1l0LzRKM2ZDMzlrZlViU0o1ZkQzaHlHRFdZWFZYamwxRzlCdU5ReURrTXIzTTAzQno4cHdjMS9pR1d0MWMyTnpIZTJValF6UXNIamtRbFdWbE9RUVJ5Q0R5Q0svc2svNElTLzhGbmYrQzhmeGorSngvWlIrQkQ2UjhkNHZEK2pTYXZKcHZqaTdTMXZZdE50cFlMZC9KMVJwSXBuY1BQR0FKemNFQWtoY0E0QVA2OVAycXYrRGJYL0FJSkEvdFk2aGNlSXRmOEFoZEQ0TTFxNVptZlVQQjg3YU14WnpsbU52Rm16WmllU3pXNU9lOWZsRHEzL0FBWk5mc0FYR3NQYzZMOFZQSDlyWXN4S3dTdnAwMGlxZTNtQ3pRSEhyc3I3Sy9hTC93Q0RpcnhQL3dBRTZML3d6NGYvQU9DcVg3T1BpSDRaMy9pNUxtVFNuOEw2OXBYaXVDNGpzakdzN25iTlp5UkJUS21GZE1uUEJPRFhEd2Y4SGlQL0FBU0Ntc2hkU0R4eEUrTStTMmlSbC9wbGJvci9BT1BZb0ErcXYySXYrRGFIL2dsTit3OTR0c2ZpVDRmOEkzbmo3eFRwanBOWjZwNHl1VjFFMjB5RUVTUld5UncyaXVyQU1qbUF1aEFLc0RYNzkxL0YxOFlmK0QyUDlocnc3WXpwOERQaFQ0MDhWWHFBK1dOV2V5MGUyYys4a2MxN0lCLzJ5elg4d3Y4QXdVUS80T2dQK0NrdjdlV2hhaDhNL0R1bzIzd204RGFpclF6NlY0WGFTTzh1b1dCQlM1MUJ6NTdxd0pWMWg4bU4xT0dRaWdEOXMvOEFnNnEvNExzL0QveHo0TjFML2dsOSt4L3JjV3NwY1hLRHgvcnRqSUh0bEZySUhYU29KVnlKSDgxRmU3ZER0VFlJTXNXbVJQNEU2S0tBQ3VoOEorS3RmOERlSjdEeGo0VnVXczlTMHlkTG0ybVRxa2taeUR6d1J4eUR3UndlSzU2aXJwMUpRa3B3ZG10VTF1bjNJcVU0MUlPRTFlTFZtbnMwOTB6K3dIOWxQOXBUd3Y4QXRQOEF3cnR2RytrRkxmVTdmRUdxV0lQelcxeUJ6Z0hreHY4QWVqYm5JNFB6S3dIMHZYOGJuN1BQN1Fuajc5bTM0aHdlUHZBc3Vla2Q1YVNFK1Rkd1p5WTNBL05XSEtua2R3ZjZwLzJldjJrUGhwKzBwNEpqOFgrQUxvZWFnVmJ5d2xJRnphU0grR1JmUS93dVBsWWREa0VEK3lmRGJ4Rm81N2hvNFRGU1VjWEJhcmJuUysxSHovbVhSNnJRL2hyeFQ4TWEvRHVLbGpNSEZ5d1UzbzkvWnQvWWw1Znl5ZTYwYnZ2NzVSUlJYNm9majU1TjhXZmdaOEtQam5wMXBwUHhXMGVQV0xleGthYUJKSGtqMk93MmtneHNwNUhxYTg4OEEvc2EvczBmQzd4YlorTy9BZmhXRFR0V3NDNXQ3aFpwM0tHUkNqWUR5TXZLc1J5TzlmVGxmYW43TS83QVg3US83V3ZnKy84QUhQd2VpMHlTdzAyOWF3bSsyM24yZVFUS2lTSENoSHl1MTE1NDV5TzFmUFp0aDhrd3ovdFBNcWRLTFRYN3ljWTNUWHcrODFlNjZhNmRENmZKTVJuK01qL1pPVlZhc295VXYzY0pTczAvaTkxTzFuZDMwMTZuNUhlUGYyTS8yWnZpZjR0dlBIWGp2d3BCcUdyYWdWYTR1R21uUXVVVUl1UWtpcU1Lb0hBSFN2UmZoUDhBQTM0VS9BelRMdlIvaFRvOGVqMjE5S0pwMGplU1RlNmphQ1RJem5wNllyNlQrS0h3NThUZkIvNGphMThMUEdZaVhWdEF1bXM3c1FQNWtRbFVBbmErQnVISTV3SzRTdXJDWlZsYXFMSDRiRDAxT1h2YzhZeFVuemEzNWtydm12cTc2M09QSFp2bS9zM2x1THhOUndoN3JweW5KeFhMb2x5dDJYTGJSVzB0b0ZGRkZldWVJRmZNL3dDMWIrMHI0WS9aZytGZHo0MjFjcGNhbmNib05Mc1NmbXVia2pqSUJCRWFmZWtiakE0SHpNb08xKzBQKzBsOE5QMmF2QlVuaTN4OWRBenlCaFpXRVJCdWJ1UWZ3b3Y5MGNiblB5cU92SkFQOHJQN1F2N1Fmajc5cEw0aHorUHZIVXVPc2RwYVJrK1RhUUE1RWFBL216SGxqeWZRZmxYaVQ0aTBNaXcwc0poSktXTG10RnZ5Si9hbDUveXJxOVhvZnNQaFo0WVlqaUhGUnhtTWk0NEtEMWUzdEd2c1I4djVwTFphSjMyOHM4V2VLdGY4YytKNy93QVkrS3JscnpVdFRuZTV1Wm42dkpJY2srZ0dUd0J3QndPSzU2aWl2NDNxVkpUazV6ZDI5VzN1MzNQN2twMDQwNEtFRmFLVmtsc2t0a2o5TWY4QWdqRi95bG8vWncvN0tKNGUvd0RTeU92OXNldjhKWDlqL3dEYUl2djJSLzJwL2g3KzFCcGVseDY1YytBTmZzTmVpMCthVXd4M0wyTXF5aU5wRkRGQXhYRzRLY2Vocit5SC9pT0krTW4vQUViM292OEE0UDUvL2tTb0xQc1AvZzk4L3dDVFpmZ1gvd0JqUHFuL0FLU0pYK2NiWDlDSC9CWnovZ3YxNDMvNExGL0RYd1Y4T1BGbncwc1BBeWVETlR1TlNqdUxUVXBMNXB6Y1JDSW9WZUdJS0JqT2VUOUsvbnZvQUtLS0tBQ3Y5eFgvQUlKaWY4bzEvd0Juci9zbW5oUC9BTk5kdFgrSFZYOW8vd0N6ZC93ZVNmRm45blQ5bmZ3Rit6N3Avd0FDZEkxU0R3TDRkMHZ3OUhlU2E1TkU5d21tVzBkc0pXUVdyQlM0ajNGUXh4bkdUUUIvWnAvd1gyLzVRM2Z0Qy84QVlxVGYrakk2L3dBWVN2N0FmMjVmK0R1SDRvZnR1ZnNqK1B2MlR0YStDV2s2QmErTzlLazB1VFVZdGFtdUh0aElWYmVzWnQwREViZUFXQXIrUDZnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQS8vUS93QS8raWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQVA5a2YvZ2hqNGdtOEtmOEFCRFA0SitLWUloUEpwbmd1YTZXTmp0RG1HU2R3cE9EZ0hHTTRyK1YyTC9nK0YrT0lsVXovQUxQK2hNZ0kzQmRkdUZKSGZCK3pISDVHdjZrLytDSXVsYWhydi9CQ0Q0T2FIcEVmblhkNTRHdVlJWThoZDhralhDcU1uQUdTUU1uaXY4N0d5LzROaXY4QWd1UGUzY1ZwL3dBS01uaDh4Z3UrVFhkRlZGejNZL2IrQU85QUgrakQreUorMHAreGwvd2NYZjhBQk52Vk5UOGRlRGQvaHZXN2k1MER4RjRkMUpsbnVOSzFTM1JIRFFYQVZmM2lKTkZQYjNNYW95N2djSzRaUi9raC90aGZzNjYxK3lOKzFYOFJmMllQRUZ4OXN1dkFYaUxVZEROMXQyQzVTem1hT09ZTHpnU29Ga0E3QnEvMWZQOEFnZ24vQU1FMS9FUC9BQVJ5L3dDQ2UycStELzJrL0VHbXgrSWRaMU84OFgrSnA0NXdOTzBtTVcwVVhsRzRjSXJMQkJiaVNhVWdJSFp3Q3lLckgvTE4vd0NDa2Y3U0doZnRmZnQ4ZkY3OXBmd21yTG8zakx4VnFXb2FaNWlsSE5nMHJMYkYxUEt1WVZRc096RTBBZWhmQzcvZ2tWL3dVcitObndYc3YyaWZoUjhIUEVPdStDZFJ0SnI2MjFlMWlScmVXM3R5NnlPdVhERUtVWUhqdFhMZnMzLzhFdnYrQ2czN1hQaFc0OGZmczgvQ1R4RDRoOFBXc01rNzZ3TGI3THBwU0VGbjIzZHlZb0hLZ0hLcTViMnIvVTYvNE4xVFpEL2dodjhBQTA2bEVKcmYreE5UODJObERCMC90RzgzS1FlQ0NPTUhnMS9LVCsxLy93QUhtM3hWOFgrSDlUK0ZQN0dId2MwWHdwNGFuczVOTWh1dkUwajN0eUxWMDh2NUxTMWEzZ2dJVDVWUXlUcXZ1T0tBUDRpYS9Sejlsai9na1Qvd1VyL2JXOE5SK04vMlovZzU0ZzhSNkZPU3NPcXRFbGpwOHhIWHlybThlQ0dUSGZZNXgzcjZWLzROOGYyRFBBMy9BQVVPL3dDQ24vZ3Y0Ti9GcTAvdER3WG9jRjE0bTErekpJRjFhYWFvMlFOai9sbk5jdkRIS01nbU5tQUlPRFgraEIvd1hOLzRMa2VEditDS3ZnandMOE9QaHA0SHR2RmZqRHhiYnpuUzlNYWI3RHB1bDZicC9seGlTVVJLV0labUVjTU1ZUVlSeVhVS3F1QWY1MlB4cy80SURmOEFCWWY5bnp3emMrTWZpUDhBQWZYMjAyempNczgya1BiYTE1Y2FqTE15YWZOY09GVWNzU3VBT1RnVitQem84Ym1PUUZXVTRJUEJCRmY2Y0gvQkZ6L2c2YzFML2dvcCsxbnBmN0hQN1IzdzdzUENHdWVLb3JrNkJxdWkzTXN0ckxjMmtMM0RXODhNK1dUZkZHNVNSWkNDNENGUG1CSDQ3ZjhBQjVKL3dUeCtHZndHK08zZ1g5dUg0UWFYQm84ZnhSTjdwM2lhMnRVRVVNbXNXUVNXTzgyamp6YnFKMkV4VUFNMEljNWVSMklCNDMvd2FWL3NIL0hqWC84QWdvSDRQL2JaOFMrQU5RbitHbWxhWnIwZW0rSlhSZnNNZXFDRTJ1QVMyUzRFa3FENVRoajdaSDlLdi9CeC9xLy9BQVc0MUx4TDhOZkFmL0JLU3g4VXhlSHpaMzE1NGl2dkNvampuZTc4eU5MZUtTWmlKRVZFRHNGUXFHTGt0dTJydC9INy9nMFAvd0NDcGZ4WHUvSHVoLzhBQktRZUdkSVh3bGJXZXZlSlA3YURUZjJrWnl5UzdDTjVoMjViSDNBY0RybnIrelAvQUFjRi93REJlWDlvRC9nai93REZYNGRlQXZnNTRLOFBlS2JYeG5wTjVxRnhMckxYSWtpa3RwbGpDb0lKSXh0SWJKems1OUtBUDh6TDlzTHg5KzAzOFNQMmx2RjJ2L3RsMytvYWw4VUxXOS9zcnhGTnF1MzdhdDNwU0xaZVZOc0FCZUZZRmlQKzV5U2VhN1Q5a3ovZ25wKzIxKzNUZlhkbCt5VjhOTmM4Y0pwN2lLN3U3R0RiWlc4akFFSkxkU2xMZU55RGtLOGdZamtERmFuaERSZkdmL0JTNy9nb3ZaNlRMRkRwR3VmSFg0ZzdwMXRRendXVTNpTFVOMHBRU01XTWNQbk1SdVluYXZKenpYK21wL3dWYS9hK1gvZzMvd0QrQ2VIdy93RGc5L3dUeStHZHRxV3BYZHdOQTBDemt0WjdtenNvTGFFeVhOOWRpMzJQY1hEc1Z5WGtScFpaV2xkbTJzckFIK2U5OFl2K0RmYi9BSUxJL0Fud2xjZU9QSC93RzExOU50WWpQTStreldtc3lSeHFNc3pSYWZQY1NnS09XTzNnY25pdnh5a2praGthR1pTam9TR1VqQkJIVUVWL29GLzhFaC8rRGtqL0FJS2ZmSFA5dVh3VCt6bisyWjRFdGRWOEkrUHRSWFNmN1EwL1E3alRydlRMbTRCRUV1NE1ZbmdFbUJLSFhjRUpjT051MXZoTC9nOGsvWVkrRi83UFA3WGZnUDhBYXMrRm1uUTZSL3d1T3kxSCszTFcyUVJ4U2F2cERRZVpkN1JoUkpjeFhVZm1iUU44a2JTTmwzWmlBZng5ZUdmREhpVHhwNGhzdkNYZzdUN25WdFYxS1pMZTBzcktKcDdpNG1rT0VqampRRjNkaWNCVkJKUFN2MmQ4RWY4QUJ1Si93V3crSU9ocDRoMFA0Q2F2Ylc4aUNSVTFLKzA3VEo4SG5CZ3U3cUdWVDdGQVIzcjljLzhBZ3lzOEMvQjd4SCszeDhSL0YvaStHMnVmR1BoM3dmNTNoNVp3R2toaXVMbEliMmVFRWZLNm8wVVJkY01FbVplanRYOVhuL0JZcjlyL0FQNExqL3N0K01OUDFML2dtOThEUEQveE84Qm13U1crMUNTTzUxVFZvNzNjKytJV0Z0ZDJzdXpZRUt0R2syU1RrcWNDZ0QvTDYvYTQvd0NDYXY3ZC93Q3doWjJPcS90Yi9ERFd2Qk5ocVZ4OWt0YjY3alNXeW11QXBmeWt1WUdraE1tMVdZSUgzRlFUakFKcjRjcitqbi9nc1Yvd1hoL2FWLzRLWS9zKzZKK3liKzFmOEtyTHdCNHQ4RmVKNDlhbm5zamRXaHlsclBidGJ5MkY0SkpZMy9maHd4bU9BTWJlYzErUlgvQlBMd2o4S2ZpQiszdDhGZkF2eDFFRGVETlk4YzZCWmEybHlRc0QyRTk5Q2t5U3NTQXNiSVNydGtZVWs1b0E5OC9aaS80SXVmOEFCVW45c2J3YlovRVg5bm40TGE5clBoN1VWRDJlcVhJaDB5enVZejBlR2ErbHQwbFQvYmpMTDcxM0h4Mi80SUsvOEZlZjJiZkJtcC9FVDR0ZkEzVzdiUTlHdHBiMit2TENXMDFXTzN0b0ZMeVN5ZllaNXlxSWdMT3hBQ3FDVGdWL3JGZjhGQ2ZHL3dDM0w4R1AyWFp0Zi80SnFmRDd3LzQ4OGVhZmNRUlE2SHJWejlpdFYwNVVmZTBDckpickpLaFdOVWhNMElLbGlHSlZVYitIbjlxNy9nNVkvd0NDdC93citIUGpqOWx6L2dveit6anB2aFpQSE9nYXRvQ1RKWmFsb002THFOcTl2NTBFbDFMZVEzQWk4emZoT0d4amVPdEFIOFFkZnZYL0FNRVcvQjMvQUFXWitCUGlqVlAyMnY4QWdsLzhMYnJ4Y2wvWlhuaEs1MUtUVDQ3NnpDdEpiWE0wYXE4a1pFaXRGQ2R3NkFrZHpYNEtWL2RYL3dBR2luL0JVbjQwSDRyZUh2OEFnbFJiK0hOQWo4RGkxMTd4RkpxeXgzQTFlUzZ3SmNNL25lUVY2Smp5UWRvSE9SUUIrSVAvQUFYTytQdi9BQVY4K092aUg0YlhQL0JXVHdNbmdxODAyMzFSZkRRWFRFMC83VEZLMXVicmxKSlBNMkZZZUNSdDNjRDVqWDRKVi9kcC93QUh4UDhBeVY3OW5uL3NEK0lmL1Ixblg0RS84RzhuN0JmZ0wvZ29iL3dVL3dEQi93QUkvaTdhcnFIZ3p3OWEzWGlqWGJGejh0NWE2ZHNFZHUzckhMY3l3cEtPTXhGd0NDUWFBUG1EOWxqL0FJSkMvd0RCUzc5dFh3eEY0NC9abytEbmlEeEZvTndTc0dxdkhIWVdFeEhYeXJtOGVDR1RCNEpSMkFQWEZld2ZIRC9nZ1gvd1dFL1o0OE0zUGpMNGwvQWZ4QWRNczR6TFBQcERXMnRlWEdveXpzdW5UWExxcWpsbUtnS09UZ1Yvb2ovOEYwZitDNm5oTC9naTE0WDhEZkM3NFplQnJieFo0eThXV3MwdW42YzgzMkhUZEwwMnhLUkxKS3NTbDJEc2ZMaGhqQ0RFYmt1dTFWZjRrLzRJcS84QUIwcmYvd0RCUnY4QWF2MC85am45bzM0ZldIZzdYL0U4RjFKb0dxYU5kU3kyazl6Wnd2Y1BiVFJUNWFNdERISXlTQ1JnV1VKdHl3TkFIK1lxeXNqRlhHQ09DRFh0WDdQbjdPZnh3L2F0K0tWajhFLzJkZkRWNTR1OFY2bEhOTGE2WllLR25sUzNqYVdRZ0VnWVJGTEhub0svcmIvNFBIditDZWZ3eS9aOC9hRzhEZnRxZkI3UzdmUm9QaXNMMnk4UjJsb2dpaGZXYkR5M0Y1c0h5aVM2aWxJbDJnQm5oTWpaZVIyUDUxLzhHcEgvQUNtNytHSC9BR0R2RWY4QTZhcnFnRDgwZkgvL0FBU2svd0NDa0h3dytLL2gzNEdlTS9ndjRwdC9HSGl5Q2E2MG5TSWJGN3E2dW9MZGxTV1ZVZzh3aU9OblVPN1lWY2drZ1Y5WjZ6L3diaS84RnNOQzhKSHhwZS9BUFdKTE5VTWhpdDczVHJpNzJnWi80OVlycDdnbi9aRWU3MnIrL2ovZzRoLzRMVStPL3dEZ2o3NEo4Qmo0S2VDZE04UitOL2lRdXFRMmVwNnVXTm5wOXZwbjJjeWI0b21qbG1aMnVVS0lKVVFiU1dKNFUvbmQvd0FHN3Y4QXdjVWZ0Zy84RkkvMnc5VS9aTS9heDBmdy9QRmM2QmQ2enBlcWFMYXlXVTBNMWxKRUhpbVJwcEVlTjQ1Q1ZZQldWbEFPNE44b0IvbStlSmZEUGlUd1g0aHZ2Q1BqSFQ3blNkVzB5ZVMxdkxLOGlhQzR0NTRpVmVPV053SFIxWUVNckFFRVlOZWkvQWJYZmpYb1h4VjBnL3M5THFNL2kyN21XMnNMVFNvWHVybTdra0l4Q3NDSzVtM25BOHZhMjcwcitzZi9BSVBTL2dSNEUrSC9BTzNuOFBQalo0VnNvYkxVdkgzaFZockJoVUticTUwcWN3cFBKajcwaGdlT0xQOEFjaVVkcS9tRi9ZYi9BR290Wi9ZcC9hMzhCZnRWK0hkSGo4UVgvZ2ZWRTFLMzA2YVZvSTdtUkZaVlJuUU13QkxjNEJ6MDcxclJyMUtOU05Xakp4bEYzVFRzMCs2YTJabFhvVXE5T1ZHdEZTaEpXYWF1bW51bW5vMGYySWZzaGZzZWY4RlpQalJvZHJhL0dUOW5uWFBDbDdKRnVXK3VwTGF5dDVpb3o4OEZ4TWs4RG4rNjZrZTRPRnIyWDR4ZnNqL3ROZnMvNmNkYStNUGdyVXRGMDRNRU44eXJQYUt6Y0FOTkMwa2FrOXR6RFBhdkw3WC9BSUxvL3dEQjBwOFpFVHgxOEl2MllYdHRBdVczMm90ZkErc1R4U1I5djNzMDVNZ0kvaVRBUGJGZjFVLzhFa2Yyb3YyeWYyNS8yVWRjbC80S1MvQmVmNFgrTUxIVUpkSHV0T3ZkT3VMS3kxaXdrZ2pZWEVkdmViM1ZXTHZGSWhlUk1wa044MnhmMlhKUEhET2NMR0ZMSFU0Vm9MZHU4WnRlcWZMZnpjZGVwK0c1OTRBNURqSlZLMkFuT2hON0pOU2duNk5jMXZKU3N1aVA1SEsvcVgvNElPZjhtNWVNZit4bWYvMGx0Ni96eFAyeS93QnR2NDkvc1QvdHcvRm45bUxUNU5QOFVhRDRHOFc2dG8rbnlhaEFVdVRaV3R3NlFCbmhhTUZ4R0ZERXFjbk5mMjVmOEdvLzdVT3NmdFZmc1lmRVB4bnJXa3c2UkxwL2pSN1B5NFpUSXI0c2JWOTN6QUVmZXhqbXZvZkVIeEx5VFBPSDZtRXdjcEtxNVFhaktOdEU3dlZYaitKODE0YWVGV2U4UDhTUXhtTmpCMFZHYTVveVQzVmxvN1MvQS9Pbjl2ci9BSlBiK0tYL0FHTUZ4LzZDdGZJOWZFLy9BQVYyL3dDQ3AzaUg0UDhBL0JTbjQzL0RMVHZCbHZkdm8vaXU5dGx1cGIxZ0hFZUFHTWF4Y1pBempmWDQ3ZU9QK0NzUDdUL2lhTjdmdzB1bCtIWTJHQTFyYmVkS00vN1U3U0xuNklLK3V3WGkvd0FONExMY1BSZFdVNXdwd2kxR0QzVVVtcnk1VnV1OWo0dk12QlRpak1NMXhOZU5LRUtjNms1S1VweDJjbTA3UjVudDVYUDZTdGQ4UWFENFgwcWJYZkUxN0JwMWxiamRMY1hNaXhSSVBWbVlnRDhUWDVQL0FMU1gvQlZyNGUrRElKL0RYd0JoWHhIcXZLSFVKbFpMR0UrcWc0ZVlnK20xTzRadWxmaEg4US9pNzhUL0FJczZnTlUrSld2WDJ0U3FjcDlxbVowVFA5eE03VUhzb0FyenF2enppYnh4eDJLaEtobEZMMk1YOXQrOVA1ZlpqLzVNK3pSK2s4S2ZSK3k3QnpqaU02cmUza3ZzUnZHSHpmeFMvd0RKVjNUUjNmeEkrSm5qdjR1K0xianh4OFJ0VG0xWFU3cjcwMHArNm96aEVVWVZFR2VGVUJSMkZjSlJSWDRkV3JWSzFTVldySnlrM2R0dTdiN3R2ZG45QlVLRk9qVGpSb3hVWVJWa2tySkpiSkphSkJSUlhzLzdPWHdMOGEvdFBmSDd3WCt6cDhPSXhKcnZqaldySFE3TGNDVVNhK21XSU8rT2lKdTN1M1JWQko0RlpHcC9mbi93YkEvOEVidjJSZkdmL0JPdS93RDJ2LzI0UGg1NGQ4WVhQeEExVzR1TkhmeExhUlhNZGhvdWxscllTTDU0eEVacmhiaG5iZ1BHc1RkTVY4US84SGNYL0JKYjRFZnNvZUhQaGgrMTEreVI0SDByd1Q0WXU1cHZDdmlHdzBTMlMwdFJlTUh1ckdjeFJnTHZrUmJtT1I4RC9WeExrNUZmdFA4QThISi94eDhDZjhFemYrQ0pHZy9zTi9CbVVXYy9qTzAwL3dDSCtqdzVIbnJvbW1RbzE5TVJ3RzNReHBieXRqSmE2M2RlUjdkOE5idlQvd0RnNEQvNE54RDRkMUowdi9IR3VlRlgwMlpwSEFrajhZZUhDRERJN2Y4QUxNWE54QkZNM09mSXVNSGdtZ0QvQUNicS93QkZiL2cxbytBUC9CTTcvZ29CK3dWcVhnNzQ3L0JEd040aitJM3dzMWQ5TzFQVUw3U0xlZTl2ZFAxRXZjMlZ6UEl5a3MyZlB0d2Y3dHVPOWY1Mk4zYVhlbjNjdGhmeFBCUEE3UnlSeUtWZEhVNEtzRHlDRHdRZWxmMGhmOEdybjdibi9ESTMvQlZYdzU0QThTWGh0L0RIeGl0MjhIM3FzMkkxdnAyRW1teWJlaGMzU3JicVQwVzRhZ0Q4eC84QWdySCt4dGNmc0NmOEZFUGlwK3kzRkMwV2xhQnJVaytpbHNuZHBGK3EzVmo4eCs4VnQ1WTBjaitOV0hVR3ZQZitDZG43SldzL3QxZnR3ZkRIOWszUi9NVmZHbXUyOXBleXcvNnlEVG84elgweSs4TnJITElQWGJYOWpuL0I3Rit4Y1lOUitGUC9BQVVBOE0yd0NUcko0STE1MUdQblR6YnpUbk9PcFpmdGFNeDZCWTE5QlhtSC9CbFAreGIvQU1KVjhadmlaKzNyNG90ZDFuNFRzMDhKYUU3cmxUZjZodG52SkVQWjRiZFlvL2RiazBBZmZmOEF3Y3hmczBmOEV2UCtDZC8vQUFUY3VmOEFoVFh3TDhDNko4UXZpRnFOdjRjMEc5dHRKdDB2TE9KUVo3eTdqYmFIekhESDVRY0hLeVRJM05mNXM5ZjFSZjhBQjNOKzIzL3cweC93VXpQd0E4TlhuMmp3MzhFOU5YUkVDT0hpYldMM1pjNmhJdU9qTCs0dG5CNlBiR3Y1WGFBUDlTdi9BSUxpZjhFdnYrQ2N2d1QvQU9DTnZ4YStOUHdlK0IvZ3p3eDRxMHZSTk51TExWTk4wbUdDNnRwSnIyMVJtamxWZDRKVjJVbk9TQ2M1eWEveTFLLzJGLzhBZzRTLzVRTy9HZjhBN0Y3U1AvUyt5ci9Ib29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBUC8vUi93QS8raWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQVA5a0gvZ2h4cnQ1NFgvNElXZkJieE5weW85eHAzZ3FlNmlXVEpRdkM4N3FHd1FjWkhPRDByK0xYL2lOTS93Q0NwSC9Ra2ZEUC93QUZtcGYvQUMwcjBMOWlQL2c3QzhJZnNoLzhFL3ZCL3dDeERlL0EyNzE2Ynd0NGZsME50WFR4QWxzazVsOHo5NElUWlNGUis4Kzc1aDZkYS9qR29BL2JML2dvRC93Y0YvOEFCVFAvQUlLT2VDcC9oVDhadkZ0cjRmOEFCZDVqN1g0ZjhMMngwNnl1OEVFTGNNWGx1SjBCQUlqa21hUElEYmNnR3Z4Tm9vb0Evd0JpVC9nM2cvNVFXZkJIL3NBNnAvNmNMeXY4ZUc0LzQrSlA5NC96cit6SC9nbkQvd0FIWVBoRDlndjlnL3dKK3hocVh3T3UvRkV2ZzJ3dXJKOVZqOFFKYUxjL2FiaWFmY0lUWlNsTWVidHh2YnBudml2NHk1SDh5UnBPbTRrL25RQi9VRC93YUdmR0R3dDhMdjhBZ3NIcC9ocnhMT2x2SjQ3OEphejRmc1drTzFUZEF3WDZyazhaWkxOMVVkMklBNUlGZnVmL0FNSGlIL0JPUDlxdjlvelh2aGQrMWQreng0UjFQeHZwWGh2VEx6UWRidE5GdG52Ynl5M1RDZUNjd1JCcFdpZmRJcnVxRll5aTdpTndyL1BYOENlT3ZHWHd2OGJhUjhTZmgzcWR6b3V2NkJlUWFqcHVvV2NoaXVMVzd0bkVrVXNicnlybzZobEk1QkZmM0pmc2hmOEFCN0Q0OThMZUI3SHduKzJ6OEpWOFY2eGFSckhMNGc4TlhpV0QzVzBZM3kyTXNiUkxJM1ZqSE1rWkpPMk5CZ1VBZm43L0FNR3puL0JMZjl0alh2OEFncUQ4UC8ya1BHM3c4MTd3bDRFK0hVbDdxZW82dnJkaFBwOFVzaldrMEVOdmIrZWllZEswMHFGbFRPeU1NekVjQnYyRC93Q0QzejR4K0VJUGhSOERQMmZvN2xKTmV1OVcxUHhESmJxd0x3MmR2Q2xzanVPb0Vza3JoRGpER0ovN3BxcDhaLzhBZzk5K0c4SGhxNGcvWjUrQk9wWFdzU1JrUVQrSXRWaWd0b1pPelBGYkpLOHFqdW9saUovdkN2NGUvd0J0WDl0Zjlvbi9BSUtDZnRCNnYrMHgrMDdyWjFyeEpxd1dKQkd2bFd0bGFSWjhxMXRZZ1NJb0lzbmFvSkpZczdscEdaMkFQM2QvNE5BditVeFduLzhBWW9hNy93Q2d4Vitnbi9CNy93RDhuRy9BZi9zVzlXLzlLb3EvbkYvNEkzLzhGSk5ML3dDQ1ZIN1pzSDdXR3IrRUpmRzhVR2pYK2xmMmJGZWpUMkp2UWc4enpURk1QbDIvZDJjNTZpdm9mL2d1bi93V1owVC9BSUxJZkVqd0I0KzBYNGV6L0Q4ZUNkTnZOUGVHYlUxMUkzUDJxVkpBd1piZTMyYmR1TVliT2Vvb0ErRFArQ1lYeHI4S2ZzNWY4RkZmZ2o4Y2ZIa3lXMmhlR3ZHbWpYbXBUeUhDdzJhM0tDZVVuMGpqTFA4QWhYK3VCL3dWcC9hdy9iYS9Zei9acmcvYUEvWW4rRmxyOFg1dE51LytKOXBPK2Mza09udWhJdXJlSzNCZVpZM0FFcXFDeW8yL0d4WFpmOFZXdjZ6ditDVy8vQjJUKzFQK3cxOExOSS9aNC9hTDhMUS9GM3daNGZ0NDdMU0xoN3c2ZnJOamF4RGFrSnVESE5IY1JScUFzYXlSaVJWRzN6Q29WVkFQdDJUL0FJUE5mMjZvdGFQaHVYOW5QUkYxRU50TnFadFFFMjdwalp0M1ovQ3Z4ZS80THEvOEZidjJxdjhBZ3BnM3d3OE1mdFMvQ0ZmaExkK0RyZlVkVDB5RjB1NFpyKzExa3dKNTJ5N1ZDWXQxbVFqcUNySGR6eFg5T0dyZjhIdTM3S2tPbG03MFA0SGVLcm5VZG1CRlBxRm5ERm4wODFSSTJQZnkvd0FLL2pZLzRMRGY4RlB0YS80SzEvdGNwKzFGcS9nK0R3UEhhYUphNkRhNmJEZVBmTjludEpaNVZlU1praURTTVoyQjJSb29BSEdja2dIaG43QTJnZnQ5dy9HaVQ0d2Y4RTU5UDhUWGZqdndCYU5xOGsvaFNCN3ErdGJObVdDUjJnalYybGhZeUNPV014dWpLeERxVkpyK3pmOEFZei80T3F2K0NpSGhYWHROK0dQN2RuN00rdWVMSk55VzB1cGVGZEt2TlAxY25PQzdXRXlQRE5JZW15TjdaU2VtSy9sMi93Q0NLSC9CV3E3L0FPQ1BuN1MrdS9IcVB3TW5qMjE4UjZDK2dYVmliODZkSkZFOXhCY2ViSEw1TTRMQXdnYldUQkI2aXY2ODlQOEErRDNqOWxHVFNoTnF2d1I4V1EzMjNKaWl2N09XTGQ2ZVlkalk5L0wvQUFvQS9TLy9BSU9ZdjJLUDJlUDJvLzhBZ2xoNDgvYUo4YWVIN2F5OGMvRHJTWXRlMEhXNVlCQnFOdUk1SXpMYVNQdzdSelJzMFpoY2xSS1ZjRGNvTmY1UGZnTHdMNHUrS0hqblJ2aHA0QXNKZFYxN3hEZlcrbWFiWlFnR1c1dTd1UllvWWtCSUJaNUdWVjU2bXY2VC93RGdzcC93YzEvSG4vZ3FOOEpwZjJZL2h6NFJpK0dYdzF2WjRaOVZ0dnRoMURVZFdOczZ5eFJ6emVYRWtjQ3lxc25sSWhKZFZKa0lHMnY1M3ZnSDhWN3Y0RGZIWHdWOGNyQ3hpMVNmd1pyMm02N0haenN5UlhENmRjUjNBaWRsK1pWY3B0SlhrQThjMEFmMXhmc25mOEY3UCtDOHYvQk42eHNmZ0orMXI4SE5lK0kramFFRnRJb3ZGV2thaFk2MUhERndxSnFTUk1KbHgwa25pdUdJeGg4WXIrM2Y5bGo0eWZCVC9ndEIrd2VmRlh4OCtEbXBhTDRhOFR2YzZkcUhoWHh0WTRZdkNOcG10MllLWGorYjl6ZFJpTjFjSGJzZGVQNXBQQUgvQUFmQWZBZTkweU0vRlA0QzYvcGw0Rkc4YVZyRnZmUkZ1K0RORGFrRFBRWU5mT1A3WG4vQjdENHI4VWZEN1VmQ1A3RlB3bGJ3dnJsOUM4VUhpSHhKZXgzaldSY1k4eU94aWo4dDVGemxESk0wWVlEZEc0eXBBUDR3UDJ3Zmcvb1g3UFg3V3Z4UitBZmhlNWU5MHp3UjR0MXZRTFM0bElMeXdhYmVTMjhic1JnRm1XTUU0NHpYNzMvOEdpSC9BQ21VMEwvc1Z0ZS85RXJYOHpHdDYxckhpWFdidnhGNGh1cGIyLzFDYVM1dWJpZHpKTE5OS3haM2RqeXpNeEpKUEpKelg2Yy84RWR2K0NqbW1mOEFCSy85dEt4L2EwMWJ3akw0MmlzOUp2OEFUUDdNaXZSWU14dlVDaC9OTVV3K1hIVFp6NmlnRCttai9nK0ovd0NTdmZzOC93RFlIOFEvK2pyT3Z6YS80TkEvaTE0VCtHbi9BQVdBdGZEZmlhNFMybThjZUQ5WjBIVHkvQWU3RDI5OEV5ZUFXanM1TWVwd0J5Ulh6Qi93WFkvNExVNkYvd0FGbGZGL3c0OFU2TDhPNS9oOS93QUlIWjZsYXZIUHFhNmw5cSszdkE0SUsyOXZzMmVTUmpEWjNkc1YrSDN3L3dESC9qWDRVK090SCtKdnczMVM0MFR4QjRldllOUjAzVUxOekZQYTNWczRraWxqY2NxeU9vWUgxRkFIK2dsL3dlSC9BUEJOL3dEYXMvYUc4Wi9ESDlyYjlucndocW5qalI5QjBlNThQYTNhNkpiUGUzZGlST2JpQ2RvSWcwclJTZVpJclNLaFdNb041RzVjL2tKL3diSy84RXN2MjA5ZC93Q0NudmdQOXBieDk4UHRmOEllQS9oeTE5cWQvcTJ0MkUrbnhUek5hVFc4RnZiK2VpZWRJMHNxbHdtUWthc1dJTzBINzgvWkcvNFBZL0cvaGp3UlkrRlAyMXZoSXZpaldMU05ZNWRmOE0zcVdMWFcwWTN5V00wYlJySTNCWXh6SWhKTzJOQmdWN2Q4YXY4QWc5OStIa1BobTR0LzJkZmdWcU56ck1rWkVGeDRqMVNLRzJoazdNOE5xa2p5cU82aVdJbis4S0FHZjhIdjN4bDhKeGZEL3dDQlA3UGtGekhKcnMrb2FyNGludDFJTWtOcEZISGJST3c2aFpYZVFKNm1KdlN2d0UvNE5TUCtVM2Z3dy83QjNpUC9BTk5WMVg0Ni90bmZ0bi90RGZ0K2Z0QmF6KzB4KzAzcmphMzRtMWdyR05xK1ZiV2RyRm55clcxaUdWaWdpQk8xUmtrbG5jczdNemUvZjhFbFAyL05QLzRKa2Z0eitGdjJ4dFU4THllTW9mRGx0cVZ1ZEtpdXhZdEw5dnRKYllFVEdLWUxzOHpkalljNHh4MW9BL3JQL3dDRDVYL2o1L1pvL3dCM3hkL1BTcS9LTC9nejQvNVRDVy8vQUdKbXVmemdyNTYvNEx2L0FQQmNiUVArQ3pUZkM5dEYrRzAvdzlQdzcvdGdPWjlWWFUvdFkxWDdKakcyMnQvTDh2N01mNzI3ZjJ4ejhrZjhFYXYrQ2xXbC93REJLVDlzbFAycmRYOEh5K09JazBTKzBnYWJEZkRUMnplR00rWjVwaG5IeTdQdTdPYzlSaWdEK2piL0FJUGYvd0RrNHI0RGY5aTVxLzhBNlZSVjV0L3daaC9zZS9CSDQ0ZnROL0ZIOXBQNHBhYmE2MXJYd3NzZElqOFBXOTJpeXBiWGVydmNsN3hVYmp6WWt0ZGtiODdQTllqREJTUHlVLzRMcC84QUJaclJQK0N5UHhHK0gvajNSZmg3UDhQeDRKMDI4MDk0WnRUWFVqYy9hNVVrREJsdDdmWnQyWXhoczU2aXZsZi9BSUpVZjhGVVBqLy9BTUVsL3dCbzV2ajE4RW9MWFdMTFZMUTZicjJnNmdXRnJxZGtXRGhTeS9ORk5HNERSVExrb2NnaGtaMFlBL3JKL3dDQ3lQOEF3ZEIvOEZFLzJMUCtDZ25qdjlsVDRIK0RmRFdnK0h2QmR4RmFXOHV2NmZjM1Y5cUN2Q2tuMnJjdHpER0laZDJZUWlmY3dTeFBUK2czL2czdy9ieC9idC80S0pmc25hLyswRCsyL3dDR0xUdzgwMnQvWi9EVTFscHMybXdhaHBxd1JzMDhhelN5dEtubkZrRXE0UWxTQmtxY2ZnMzRyLzRQSC8yRlBpSHBkbDRxK0lmN01GOXJYaW13ai8wZGI2NDArNmlnYk9kc2QzTEFaVlhKSnlJQjlLOEwrRnYvQUFlNC9FelMvSFhpelZ2aTk4RDdMVWZEbDY5b1BEV2w2VHE1dEp0TmlpVnhPTG01bHRwZnRUeXNVS3NrVUNvRkkybk9hQVA1amY4QWd0ai9BTXBjZjJqZit4LzF2LzBvZXY3Z1ArREprai9oMzc4VlIzLzRXRkovNmJiS3Y4K2I5dVA5cEMxL2JDL2JCK0pQN1V0bHBEYUJGNC84UVgydUpwcnppNWExRjVJWlBMTW9TTU9Wempkc1hQb0svV1QvQUlJVS93REJlVHhuL3dBRWRkZDhWK0V0ZjhKZjhKMThQdkcwbHZkWHVueFhYMk84c3IyMlZrRnhiT3lPamI0MjJTeHVvM2JFSWROcERnSHpuL3dYazhMK0o5Ty80SzhmdEVhaHFPbTNkdEFmR0YxTDVrc0xvdmx6NGFKc2tBYlpGNVE5R0hJeUsvSDZ2Nit2K0M1SC9CeXQ4R2YrQ3AzN0g4WDdLZndtK0dPdGVHbWwxdXgxZWZWTld2WUR0RmtKUUlsaGhENzl4a3p1TWk3Y2REbmorUVdnQW9vb29BS0tLS0FDdjdHditETmY5aUZ2ak4rM0Q0bi9BR3p2Rk5vSk5FK0VXbG0yMDUzSERhM3JTdkNqTG5odkt0RnVOM2RXa2pQSEZmeHkxL3BvL3dEQkF6OXVML2drbi93VE0vNEpaZUdQQTN4RCtPbmhDRHh2cjBkeDR3OFUybHZkbDdwYjYrUldTMTh2YnVNOXZheHdXN3hqSU15TnR6bkpBUDArL3dDQ3EvOEF3U3ovQU9DWi93RHdVcitMZWc2NSsydDhUZFEwVFZ2QldudHA5bm85bDRpc3RPaHQxdW44OTVXdDdpS1J4TE1ESHVmSTNJa2ZIR1Q3bi93U2MvWVAvWVcvNEowZUVQRlB3Vi9ZbCtJRjU0cDA3eEZlSnJkM3AxOXJscnFwdHBvMFdCNTRvN2FPUHl4SXZsSkl4QjNiRUdSZ1oveURQMndmMmxQR1A3WXY3VW5qNzlxUHg4V0dxZU90Y3ZOWGVKbjNpM2pua0podDFKL2dnaTJSSjZLZ0ZmYS8vQkVEOXVwUCtDZUgvQlM3NGIvSDdYcjc3RDRWdUwzK3dmRkRzVDVRMGJWTVF6eXlCUVdaYlppbDBGQXlXaEE1NlVBZlMzL0J5LzhBc1JmOE1WZjhGWHZISytIN0w3SjRXK0ptM3hybzIwWWpIOXB1L3dCc2pHQUZYeTcxSjlzWSs3RVkrQUNLL0J2dzk0ZzF6d2xyOWo0cThNM1V0aHFXbVhFVjNhWE1MRkpZWjRXRHh1akRrTXJBRUVkQ0svdmUvd0NEckQ5cEQvZ21aKzM1K3lSNFIrS243T0h4bDhKZUp2aU44TTlZSWgwNnh2UkpkM3VrYXRzaXVZNGtWZm5lT1pMZVliaUFzYXlrY25CL2dKb0Evd0JlWDQ3cDRiLzRMdS84RzlWLzR2OEFEZG10N3J2anZ3Ui9iVmpiVzY1YUR4WG9tWkd0NHVyQWYyaGJTVzJSeTBiSGpEWXBmK0Nlbmdud3Ivd1JDLzRJRWFaOFFmaXJweHNOVzhMZUVibnh2NGtzN2hUQmNUYTVxYWZhRnNwUWVrNnU4RmdNOTBVZTlmempmOEdtMy9CWW45bkw5bGY0SWZFWDlrWDlzcng1cDNnblI3TFVvdkVYaGk4MWljeFF1YjFmSnZiWldQQzdHaWhtUkI5NHlTdDJOZW5mOEhXSC9CWjc5bUQ5b2Y4QVpBOEpmc2gvc1hmRUxTL0hFWGk3V3Y3VDhVWEdpM0huUlFXT2toWHQ3YVk0QVBuM01pVEtBU1FiYm5HUmtBL2c0K0pIeEI4Vy9GdjRpYS84VmZIOTIyb2E5NG0xRzYxYlVycC92VDNkN0swMDBoOTNkMlkvV3VMb29vQS8yRi8rRGhML0FKUU8vR2YvQUxGN1NQOEEwdnNxL3dBZWl2OEFZWCtNbi9CVUwvZ2c1KzAvK3oxZS9zM2Z0RS9HM3dMNGw4STY3WjJ0dHFlblM2cEpESE9MZDQ1VXkwUmlsWGJMR3JEREtjam51Sy9MTC9objMvZ3pBLzUvL2gxLzRVMnFmL0psQUgrWnJSWDlaMy9Cd2Y4QURML2dnejRJL1oyOEQ2aC93U2F1dkMwM2k2YnhHMGVzcm9Xclh1b1Qvd0JtL1pwU0M2WEU4eUtubWhQbUFEWklBNHpYOG1OQUJSUlJRQVVVVVVBRkZGRkFILy9TL3dBLytpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BLy85UC9BRC82S0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnRC8vMlE9PSIgYWx0PSJXaWxzb24gUHJvZmVzc2lvbmFsIEFWTCI+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4=[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_wrap=”wrap” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” hide_on_mobile=”small-visibility” status=”published” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” 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″ video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” pattern_bg=”none” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_blend_mode=”normal” mask_bg=”none” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_transition_offset=”0″ scroll_offset=”0″ animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ 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″ admin_label=”Mobile”][fusion_builder_row][fusion_builder_column type=”1_1″ type=”1_1″ layout=”1_1″ align_self=”auto” content_layout=”column” align_content=”flex-start” valign_content=”flex-start” content_wrap=”wrap” center_content=”no” column_tag=”div” target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” order_medium=”0″ order_small=”0″ hover_type=”none” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ background_type=”single” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ lazy_load=”avada” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” 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″ sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” absolute=”off” 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″ transition_duration=”300″ transition_easing=”ease” scroll_motion_devices=”small-visibility,medium-visibility,large-visibility” animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ last=”true” border_position=”all” first=”true” min_height=”” link=””][fusion_code]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSIgLz4KPHRpdGxlPkRNWCBBZGRyZXNzIE1hcHBlcjwvdGl0bGU+Cgo8IS0tIOKUgOKUgCBTdHlsZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPgo8c3R5bGU+Cjpyb290ewogIC0tYmx1ZTojMDA3YmZmOyAtLXJlZDojZDk1MzRmOyAtLWdyYXk6I2YxZjFmMTsKfQoqe2JveC1zaXppbmc6Ym9yZGVyLWJveDt9CmJvZHl7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7bWFyZ2luOjEuNXJlbTtjb2xvcjojMzMzO30KaDF7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEuOXJlbTttYXJnaW4tYm90dG9tOjEuMnJlbTt9CgovKiBDb250cm9scyBiYXIgKi8KLmNvbnRyb2xze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6LjhyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjFyZW07fQouY29udHJvbHMgbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOi45cmVtO21pbi13aWR0aDoxNjBweDt9Ci5jb250cm9scyBzZWxlY3QsLmNvbnRyb2xzIGJ1dHRvbntwYWRkaW5nOi41cmVtO2ZvbnQtc2l6ZToxcmVtO21pbi13aWR0aDoxNTBweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7fQoKLyogQnV0dG9ucyAqLwouYnRue2N1cnNvcjpwb2ludGVyO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZToxcmVtO30KLnByaW1hcnl7YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmO30KLnNlY29uZGFyeXtiYWNrZ3JvdW5kOiM2Yzc1N2Q7Y29sb3I6I2ZmZjt9Ci5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1yZWQpO2NvbG9yOiNmZmY7fQoKLyogVGFibGUgKi8KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luLXRvcDouNzVyZW07fQp0aGVhZHtiYWNrZ3JvdW5kOnZhcigtLWdyYXkpO30KdGgsdGR7cGFkZGluZzouNDVyZW0gLjZyZW07Ym9yZGVyOjFweCBzb2xpZCAjZGRkO3RleHQtYWxpZ246Y2VudGVyO30KCi8qIEFjdGlvbiBiYXIgKi8KLmFjdGlvbi1iYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDouN3JlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MXJlbTt9CgovKiBNb2RhbHMgJiBkcmFnZ2FibGUgcGFuZWxzICovCi5tb2RhbHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6IzAwMDY7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO30KLmhpZGRlbntkaXNwbGF5Om5vbmU7fQoubW9kYWwtY29udGVudHsKICBwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxcmVtO2JvcmRlci1yYWRpdXM6NnB4OwogIGN1cnNvcjptb3ZlO3VzZXItc2VsZWN0Om5vbmU7bWluLXdpZHRoOjI4MHB4O2JveC1zaGFkb3c6MCA2cHggMThweCByZ2JhKDAsMCwwLC4zKTsKfQouY2xvc2UtYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDouM3JlbTtyaWdodDouNXJlbTtmb250LXNpemU6MS40cmVtO2JvcmRlcjpub25lO2JhY2tncm91bmQ6bm9uZTtjdXJzb3I6cG9pbnRlcjt9CgovKiBLZXlwYWQgKi8KI2tleXBhZERpc3BsYXl7CiAgdGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MS42cmVtO3BhZGRpbmc6LjNyZW0gLjVyZW07Ym9yZGVyOjFweCBzb2xpZCAjY2NjO21hcmdpbi1ib3R0b206LjZyZW07Cn0KLmtleXBhZHsKICBkaXNwbGF5OmdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDYwcHgpOwogIGdhcDouNHJlbTsKICBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwp9Ci5rZXlwYWQgYnV0dG9uewogIHdpZHRoOjYwcHg7aGVpZ2h0OjQ0cHg7CiAgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogIGJhY2tncm91bmQ6dmFyKC0tZ3JheSk7CiAgYm9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NHB4OwogIGZvbnQtc2l6ZToxLjE1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMDAwOwogIGN1cnNvcjpwb2ludGVyOwp9CgovKiBDdXN0b20gZml4dHVyZSByb3dzICovCiNjdXN0b21Nb2RlcyAubW9kZS1yb3d7ZGlzcGxheTpmbGV4O2dhcDouNHJlbTttYXJnaW4tYm90dG9tOi40cmVtO30KI2N1c3RvbU1vZGVzIGlucHV0e2ZsZXg6MTtwYWRkaW5nOi40cmVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDt9CiNjdXN0b21Nb2RlcyAucm17YmFja2dyb3VuZDp2YXIoLS1yZWQpO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzowIC42cmVtO30KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGgxPkRNWCBBZGRyZXNzIE1hcHBlcjwvaDE+Cgo8IS0tIOKUgOKUgCBDb250cm9scyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+CjxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICA8bGFiZWw+TWFudWZhY3R1cmVyCiAgICA8c2VsZWN0IGlkPSJtYW51ZmFjdHVyZXJTZWxlY3QiPjxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1hbnVmYWN0dXJlcjwvb3B0aW9uPjwvc2VsZWN0PgogIDwvbGFiZWw+CiAgPGxhYmVsPkZpeHR1cmUKICAgIDxzZWxlY3QgaWQ9ImZpeHR1cmVTZWxlY3QiIGRpc2FibGVkPjxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IEZpeHR1cmU8L29wdGlvbj48L3NlbGVjdD4KICA8L2xhYmVsPgogIDxsYWJlbD5Nb2RlCiAgICA8c2VsZWN0IGlkPSJtb2RlU2VsZWN0IiBkaXNhYmxlZD48b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBNb2RlPC9vcHRpb24+PC9zZWxlY3Q+CiAgPC9sYWJlbD4KCiAgPGJ1dHRvbiBpZD0icXR5QnRuIiAgICAgICAgICAgY2xhc3M9ImJ0biBzZWNvbmRhcnkiPlF0eTogMTwvYnV0dG9uPgogIDxidXR0b24gaWQ9ImFkZEJ0biIgICAgICAgICAgIGNsYXNzPSJidG4gcHJpbWFyeSIgIGRpc2FibGVkPkFkZCBGaXh0dXJlczwvYnV0dG9uPgogIDxidXR0b24gaWQ9ImRlbGV0ZUZpeHR1cmVCdG4iIGNsYXNzPSJidG4gZGFuZ2VyIiAgIGRpc2FibGVkPkRlbGV0ZSBGaXh0dXJlPC9idXR0b24+CiAgPGJ1dHRvbiBpZD0iY3VzdG9tQnRuIiAgICAgICAgY2xhc3M9ImJ0biBwcmltYXJ5Ij4rIEN1c3RvbSBGaXh0dXJlPC9idXR0b24+CjwvZGl2PgoKPCEtLSDilIDilIAgTWFwcGluZyBUYWJsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+Cjx0YWJsZSBpZD0ibWFwcGluZ1RhYmxlIj4KICA8dGhlYWQ+CiAgICA8dHI+PHRoPiM8L3RoPjx0aD5Vbml2ZXJzZTwvdGg+PHRoPlN0YXJ0PC90aD48dGg+RW5kPC90aD4KICAgICAgICA8dGg+TWFudWZhY3R1cmVyPC90aD48dGg+Rml4dHVyZTwvdGg+PHRoPk1vZGU8L3RoPjx0aD7wn5eR77iPPC90aD48L3RyPgogIDwvdGhlYWQ+CiAgPHRib2R5PjwvdGJvZHk+CjwvdGFibGU+Cgo8IS0tIOKUgOKUgCBBY3Rpb24gQnV0dG9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+CjxkaXYgY2xhc3M9ImFjdGlvbi1iYXIiPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IiBvbmNsaWNrPSJleHBvcnRDU1YoKSI+RXhwb3J0IENTVjwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IiBvbmNsaWNrPSJlbWFpbERhdGEoKSI+RW1haWwgTWFwcGluZzwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IGFkbWluLW9ubHkiIG9uY2xpY2s9ImltcG9ydEZpbGUuY2xpY2soKSI+SW1wb3J0IEpTT048L2J1dHRvbj4KICA8YnV0dG9uIGNsYXNzPSJidG4gcHJpbWFyeSBhZG1pbi1vbmx5IiBvbmNsaWNrPSJzYXZlRml4dHVyZUxpc3QoKSI+U2F2ZSBGaXh0dXJlIExpc3Q8L2J1dHRvbj4KICA8YnV0dG9uIGNsYXNzPSJidG4gZGFuZ2VyIiBvbmNsaWNrPSJjb25maXJtQ2xlYXIoKSI+Q2xlYXIgQWxsIEZpeHR1cmVzPC9idXR0b24+CjwvZGl2Pgo8aW5wdXQgaWQ9ImltcG9ydEZpbGUiIHR5cGU9ImZpbGUiIGFjY2VwdD0iLmpzb24iIHN0eWxlPSJkaXNwbGF5Om5vbmUiIC8+Cgo8IS0tIOKUgOKUgCBRdHkgS2V5cGFkIE1vZGFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT4KPGRpdiBpZD0ia2V5cGFkTW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRkZW4iPgogIDxkaXYgaWQ9ImtleXBhZFBhbmVsIiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICA8ZGl2IGlkPSJrZXlwYWREaXNwbGF5Ij4xPC9kaXY+CiAgICA8ZGl2IGlkPSJrZXlwYWRLZXlzIiBjbGFzcz0ia2V5cGFkIj48L2Rpdj4KICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6LjZyZW07Ij4KICAgICAgPGJ1dHRvbiBpZD0ia2V5cGFkT2siICAgICBjbGFzcz0iYnRuIHByaW1hcnkiIHN0eWxlPSJtYXJnaW4tcmlnaHQ6LjVyZW07Ij5PSzwvYnV0dG9uPgogICAgICA8YnV0dG9uIGlkPSJrZXlwYWRDYW5jZWwiIGNsYXNzPSJidG4gZGFuZ2VyIj5DYW5jZWw8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0g4pSA4pSAIEN1c3RvbSBGaXh0dXJlIE1vZGFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT4KPGRpdiBpZD0iY3VzdG9tTW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRkZW4iPgogIDxkaXYgaWQ9ImN1c3RvbVBhbmVsIiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICA8YnV0dG9uIGlkPSJjdXN0b21DbG9zZSIgY2xhc3M9ImNsb3NlLWJ0biI+w5c8L2J1dHRvbj4KICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowOyI+QWRkIEN1c3RvbSBGaXh0dXJlPC9oMj4KCiAgICA8bGFiZWw+TWFudWZhY3R1cmVyIDxpbnB1dCBpZD0iY3VzdG9tTWFuIiBwbGFjZWhvbGRlcj0iZS5nLiBBREoiPjwvbGFiZWw+CiAgICA8bGFiZWw+TW9kZWwgICAgICAgIDxpbnB1dCBpZD0iY3VzdG9tTW9kZWwiIHBsYWNlaG9sZGVyPSJlLmcuIFNwb3QgMjUwIj48L2xhYmVsPgoKICAgIDxkaXYgaWQ9ImN1c3RvbU1vZGVzIj48L2Rpdj4KICAgIDxidXR0b24gaWQ9ImN1c3RvbUFkZE1vZGUiIGNsYXNzPSJidG4gc2Vjb25kYXJ5IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTouNnJlbTsiPisgQWRkIE1vZGU8L2J1dHRvbj4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOi42cmVtO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOi4zcmVtOyI+CiAgICAgIDxidXR0b24gaWQ9ImN1c3RvbUNhbmNlbCIgY2xhc3M9ImJ0biBkYW5nZXIiPkNhbmNlbDwvYnV0dG9uPgogICAgICA8YnV0dG9uIGlkPSJjdXN0b21TYXZlIiAgIGNsYXNzPSJidG4gcHJpbWFyeSI+QWRkIEZpeHR1cmU8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0g4pSA4pSAIFNDUklQVCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+CjxzY3JpcHQ+Ci8qIOKUgOKUgCAxKSBSZXZlYWwgYWRtaW4tb25seSBidXR0b25zIGlmIFdvcmRQcmVzcyBzYXlzIHNvIOKUgOKUgCAqLwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gewogIGlmICh3aW5kb3cuRE1YX01BUFBFUiAmJiBETVhfTUFQUEVSLmNhbl9lZGl0KSB7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRtaW4tb25seScpLmZvckVhY2goZWwgPT4gZWwuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snKTsKICB9Cn0pOwoKLyog4pSA4pSAIDIpIENvbmZpZyAmIFN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBKU09OX1VSTCAgICAgICAgPSAnaHR0cHM6Ly93aWxzb25wcm9hdmwuY29tL3Rvb2xzL2ZpeHR1cmVzX2NvbWJpbmVkLmpzb24nOwpjb25zdCBJTVBPUlRfUEFTU1dPUkQgPSAnTXcxOTcxMDAxNyEnOwoKbGV0IGZpeHR1cmVEYXRhID0gW10sIG1hcHBpbmcgPSBbXSwgcXR5ID0gMTsKCi8qIOKUgOKUgCAzKSBET00gcmVmcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KY29uc3QgbWFuU2VsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWZhY3R1cmVyU2VsZWN0Jyk7CmNvbnN0IGZpeFNlbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpeHR1cmVTZWxlY3QnKTsKY29uc3QgbW9kZVNlbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZVNlbGVjdCcpOwpjb25zdCBhZGRCdG4gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGRCdG4nKTsKY29uc3QgZGVsQnRuICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlRml4dHVyZUJ0bicpOwpjb25zdCBxdHlCdG4gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdHlCdG4nKTsKY29uc3QgdGJvZHkgICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbWFwcGluZ1RhYmxlIHRib2R5Jyk7CmNvbnN0IGltcG9ydEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1wb3J0RmlsZScpOwoKLyog4pSA4pSAIDQpIEhlbHBlcjogc2FmZSBtYW51ZmFjdHVyZXIgbmFtZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KY29uc3QgbWFuTmFtZSA9IGYgPT4KICB0eXBlb2YgZi5tYW51ZmFjdHVyZXIgPT09ICdzdHJpbmcnID8gZi5tYW51ZmFjdHVyZXIgOgogIHR5cGVvZiBmLk1hbnVmYWN0dXJlciA9PT0gJ3N0cmluZycgPyBmLk1hbnVmYWN0dXJlciA6CiAgdHlwZW9mIGYuYnJhbmQgICAgICAgID09PSAnc3RyaW5nJyA/IGYuYnJhbmQgOgogIGYubWFudWZhY3R1cmVyPy5uYW1lICB8fCAnJzsKCi8qIOKUgOKUgCA1KSBMb2FkIEZpeHR1cmUgTGlicmFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KZmV0Y2goSlNPTl9VUkwpCiAgLnRoZW4ociA9PiByLmpzb24oKSkKICAudGhlbihqID0+IHsKICAgIGZpeHR1cmVEYXRhID0gQXJyYXkuaXNBcnJheShqKSA/IGogOiAoai5maXh0dXJlcyB8fCBqLmRhdGEgfHwgW10pOwogICAgcmVmcmVzaE1hbigpOwogIH0pCiAgLmNhdGNoKCgpID0+IGFsZXJ0KCdGYWlsZWQgdG8gbG9hZCBmaXh0dXJlIGxpc3QnKSk7CgovKiDilIDilIAgNikgRHJvcGRvd24gc2V0dXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmZ1bmN0aW9uIHJlZnJlc2hNYW4oKSB7CiAgbWFuU2VsLmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBNYW51ZmFjdHVyZXI8L29wdGlvbj4nOwogIFsuLi5uZXcgU2V0KGZpeHR1cmVEYXRhLm1hcChtYW5OYW1lKS5maWx0ZXIoQm9vbGVhbikpXS5zb3J0KCkKICAgICAgIC5mb3JFYWNoKG0gPT4gbWFuU2VsLmFkZChuZXcgT3B0aW9uKG0sIG0pKSk7CiAgZml4U2VsLmlubmVySFRNTCAgPSAnPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3QgRml4dHVyZTwvb3B0aW9uPic7IGZpeFNlbC5kaXNhYmxlZCAgPSB0cnVlOwogIG1vZGVTZWwuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1vZGU8L29wdGlvbj4nOyAgICBtb2RlU2VsLmRpc2FibGVkID0gdHJ1ZTsKICBhZGRCdG4uZGlzYWJsZWQgPSBkZWxCdG4uZGlzYWJsZWQgPSB0cnVlOwp9CgptYW5TZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogIGZpeFNlbC5pbm5lckhUTUwgID0gJzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IEZpeHR1cmU8L29wdGlvbj4nOwogIG1vZGVTZWwuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1vZGU8L29wdGlvbj4nOwogIGZpeFNlbC5kaXNhYmxlZCA9IG1vZGVTZWwuZGlzYWJsZWQgPSBhZGRCdG4uZGlzYWJsZWQgPSBkZWxCdG4uZGlzYWJsZWQgPSB0cnVlOwoKICBmaXh0dXJlRGF0YS5maWx0ZXIoZiA9PiBtYW5OYW1lKGYpID09PSBtYW5TZWwudmFsdWUpCiAgICAgICAgICAgICAuZm9yRWFjaChmID0+IGZpeFNlbC5hZGQobmV3IE9wdGlvbihmLm1vZGVsLCBmLm1vZGVsKSkpOwogIGZpeFNlbC5kaXNhYmxlZCA9IGZpeFNlbC5sZW5ndGggPD0gMTsKfSk7CgpmaXhTZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogIG1vZGVTZWwuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1vZGU8L29wdGlvbj4nOwogIGNvbnN0IGYgPSBmaXh0dXJlRGF0YS5maW5kKHggPT4gbWFuTmFtZSh4KSA9PT0gbWFuU2VsLnZhbHVlICYmIHgubW9kZWwgPT09IGZpeFNlbC52YWx1ZSk7CiAgZj8ubW9kZXMuZm9yRWFjaChtID0+IG1vZGVTZWwuYWRkKG5ldyBPcHRpb24oYCR7bS5uYW1lfSAoJHttLmNoYW5uZWxzfSBjaClgLCBtLm5hbWUpKSk7CiAgbW9kZVNlbC5kaXNhYmxlZCA9ICFmOwogIGFkZEJ0bi5kaXNhYmxlZCA9ICFtb2RlU2VsLnZhbHVlOwogIGRlbEJ0bi5kaXNhYmxlZCA9ICFmOwp9KTsKCm1vZGVTZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gYWRkQnRuLmRpc2FibGVkID0gIW1vZGVTZWwudmFsdWUpOwoKLyog4pSA4pSAIDcpIE1hcHBpbmcgJiByZW5kZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmNvbnN0IGNoYW5uZWxzID0gKG1hbiwgbW9kLCBtb2RlKSA9PgogIGZpeHR1cmVEYXRhLmZpbmQoZiA9PiBtYW5OYW1lKGYpID09PSBtYW4gJiYgZi5tb2RlbCA9PT0gbW9kKQogICAgICAgICAgICAgPy5tb2Rlcy5maW5kKG0gPT4gbS5uYW1lID09PSBtb2RlKT8uY2hhbm5lbHMgfHwgMDsKCmZ1bmN0aW9uIGNvbmZpcm1EZWxldGUoaW5kZXgpIHsgICAgICAgICAgIC8vIE5FVyBoZWxwZXIKICBjb25zdCBmID0gbWFwcGluZ1tpbmRleF07CiAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmaXh0dXJlICIke2YubW9kZWx9IiAoJHtmLm1hbnVmYWN0dXJlcn0pIGluIFVuaXZlcnNlICR7Zi51bml9P2ApKSB7CiAgICBtYXBwaW5nLnNwbGljZShpbmRleCwgMSk7CiAgICByZW5kZXIoKTsKICB9Cn0KCmZ1bmN0aW9uIHJlbmRlcigpIHsKICB0Ym9keS5pbm5lckhUTUwgPSAnJzsKICBsZXQgdW5pID0gMSwgYWRkciA9IDE7CiAgbWFwcGluZy5mb3JFYWNoKChtLCBpKSA9PiB7CiAgICBjb25zdCBjaCA9IGNoYW5uZWxzKG0ubWFudWZhY3R1cmVyLCBtLm1vZGVsLCBtLm1vZGUpOwogICAgaWYgKGFkZHIgKyBjaCAtIDEgPiA1MTIpIHsgdW5pKys7IGFkZHIgPSAxOyB9CiAgICBPYmplY3QuYXNzaWduKG0sIHsgdW5pLCBzdGFydDogYWRkciwgZW5kOiBhZGRyICsgY2ggLSAxIH0pOwogICAgYWRkciA9IG0uZW5kICsgMTsKCiAgICBjb25zdCByb3cgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKICAgIGNvbnN0IG1vZGVTID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CiAgICBmaXh0dXJlRGF0YS5maW5kKGYgPT4gbWFuTmFtZShmKSA9PT0gbS5tYW51ZmFjdHVyZXIgJiYgZi5tb2RlbCA9PT0gbS5tb2RlbCkKICAgICAgICAgICAgICAgPy5tb2Rlcy5mb3JFYWNoKG1kID0+IHsKICAgICAgICAgICAgICAgICBjb25zdCBvID0gbmV3IE9wdGlvbihtZC5uYW1lLCBtZC5uYW1lKTsKICAgICAgICAgICAgICAgICBpZiAobWQubmFtZSA9PT0gbS5tb2RlKSBvLnNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtb2RlUy5hZGQobyk7CiAgICAgICAgICAgICAgIH0pOwogICAgbW9kZVMub25jaGFuZ2UgPSAoKSA9PiB7CiAgICAgIG1hcHBpbmcuZm9yRWFjaCh4ID0+IHsKICAgICAgICBpZiAoeC5tYW51ZmFjdHVyZXIgPT09IG0ubWFudWZhY3R1cmVyICYmIHgubW9kZWwgPT09IG0ubW9kZWwpCiAgICAgICAgICB4Lm1vZGUgPSBtb2RlUy52YWx1ZTsKICAgICAgfSk7CiAgICAgIHJlbmRlcigpOwogICAgfTsKCiAgICByb3cuaW5uZXJIVE1MID0KICAgICAgYDx0ZD4ke2krMX08L3RkPjx0ZD4ke20udW5pfTwvdGQ+PHRkPiR7bS5zdGFydH08L3RkPjx0ZD4ke20uZW5kfTwvdGQ+CiAgICAgICA8dGQ+JHttLm1hbnVmYWN0dXJlcn08L3RkPjx0ZD4ke20ubW9kZWx9PC90ZD48dGQ+PC90ZD4KICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPSJidG4gZGFuZ2VyIiBvbmNsaWNrPSJjb25maXJtRGVsZXRlKCR7aX0pIj7wn5eR77iPPC9idXR0b24+PC90ZD5gOwogICAgcm93LmNoaWxkcmVuWzZdLmFwcGVuZENoaWxkKG1vZGVTKTsKICAgIHRib2R5LmFwcGVuZENoaWxkKHJvdyk7CiAgfSk7Cn0KCi8qIOKUgOKUgCA4KSBBZGQgJiBEZWxldGUgZml4dHVyZXMgdmlhIGNvbnRyb2xzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwphZGRCdG4ub25jbGljayA9ICgpID0+IHsKICBmb3IgKGxldCBpID0gMDsgaSA8IHF0eTsgaSsrKQogICAgbWFwcGluZy5wdXNoKHsgbWFudWZhY3R1cmVyOiBtYW5TZWwudmFsdWUsIG1vZGVsOiBmaXhTZWwudmFsdWUsIG1vZGU6IG1vZGVTZWwudmFsdWUgfSk7CiAgcmVuZGVyKCk7Cn07CgpkZWxCdG4ub25jbGljayA9ICgpID0+IHsKICBpZiAoIW1hblNlbC52YWx1ZSB8fCAhZml4U2VsLnZhbHVlKSByZXR1cm47CiAgY29uc3QgbXNnID0gYERlbGV0ZSBmaXh0dXJlICIke2ZpeFNlbC52YWx1ZX0iIGZyb20gJHttYW5TZWwudmFsdWV9IGVudGlyZWx5IChsaWJyYXJ5ICYgbWFwcGluZyk/YDsKICBpZiAoIWNvbmZpcm0obXNnKSkgcmV0dXJuOwoKICBmaXh0dXJlRGF0YSA9IGZpeHR1cmVEYXRhLmZpbHRlcihmID0+ICEobWFuTmFtZShmKSA9PT0gbWFuU2VsLnZhbHVlICYmIGYubW9kZWwgPT09IGZpeFNlbC52YWx1ZSkpOwogIG1hcHBpbmcgICAgID0gbWFwcGluZy5maWx0ZXIobSA9PiAhKG0ubWFudWZhY3R1cmVyID09PSBtYW5TZWwudmFsdWUgJiYgbS5tb2RlbCA9PT0gZml4U2VsLnZhbHVlKSk7CiAgcmVuZGVyKCk7IHJlZnJlc2hNYW4oKTsgYWxlcnQoJ0ZpeHR1cmUgcmVtb3ZlZCcpOwp9OwoKLyog4pSA4pSAIDkpIEV4cG9ydCAvIEVtYWlsIC8gQ2xlYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmZ1bmN0aW9uIGV4cG9ydENTVigpIHsKICBpZiAoIW1hcHBpbmcubGVuZ3RoKSByZXR1cm4gYWxlcnQoJ05vIGZpeHR1cmVzJyk7CiAgY29uc3QgY3N2ID0gJ0luZGV4LFVuaXZlcnNlLFN0YXJ0LEVuZCxNYW51ZmFjdHVyZXIsRml4dHVyZSxNb2RlXG4nICsKICAgICAgICAgICAgICBtYXBwaW5nLm1hcCgobSxpKT0+CiAgICAgICAgICAgICAgICBgJHtpKzF9LCR7bS51bml9LCR7bS5zdGFydH0sJHttLmVuZH0sJHttLm1hbnVmYWN0dXJlcn0sJHttLm1vZGVsfSwke20ubW9kZX1gKQogICAgICAgICAgICAgICAgICAgICAuam9pbignXG4nKTsKICBjb25zdCB1ID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbY3N2XSx7dHlwZTondGV4dC9jc3YnfSkpOwogIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpLHtocmVmOnUsZG93bmxvYWQ6J2RteC1tYXBwaW5nLmNzdid9KS5jbGljaygpOwogIFVSTC5yZXZva2VPYmplY3RVUkwodSk7Cn0KZnVuY3Rpb24gZW1haWxEYXRhKCkgewogIGlmICghbWFwcGluZy5sZW5ndGgpIHJldHVybiBhbGVydCgnTm8gZml4dHVyZXMnKTsKICBjb25zdCBib2R5ID0gbWFwcGluZy5tYXAoKG0saSk9PmAjJHtpKzF9OiBVJHttLnVuaX0gJHttLnN0YXJ0fS0ke20uZW5kfSAke20ubWFudWZhY3R1cmVyfSAke20ubW9kZWx9ICgke20ubW9kZX0pYCkuam9pbignXG4nKTsKICBsb2NhdGlvbi5ocmVmID0gYG1haWx0bzo/c3ViamVjdD1ETVglMjBNYXBwaW5nJmJvZHk9JHtlbmNvZGVVUklDb21wb25lbnQoYm9keSl9YDsKfQpmdW5jdGlvbiBjb25maXJtQ2xlYXIoKXsKICBpZiAobWFwcGluZy5sZW5ndGggJiYgY29uZmlybSgnQ2xlYXIgYWxsIGZpeHR1cmVzIGZyb20gdGhlIG1hcHBpbmcgdGFibGU/JykpewogICAgbWFwcGluZz1bXTsgcmVuZGVyKCk7CiAgfQp9CgovKiDilIDilIAgMTApIFNhdmUgRml4dHVyZSBMaXN0IChhZG1pbi1vbmx5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KZnVuY3Rpb24gc2F2ZUZpeHR1cmVMaXN0KCkgewogIGlmICghY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZml4dHVyZSBsaXN0IG9uIHRoZSBzZXJ2ZXI/JykpIHJldHVybjsKCiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh7Zml4dHVyZXM6Zml4dHVyZURhdGF9LG51bGwsMildLHt0eXBlOidhcHBsaWNhdGlvbi9qc29uJ30pOwogIGNvbnN0IHVybCAgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpLHtocmVmOnVybCxkb3dubG9hZDonZml4dHVyZXNfY29tYmluZWQuanNvbid9KS5jbGljaygpOwogIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKCiAgZmV0Y2goJ2h0dHBzOi8vd2lsc29ucHJvYXZsLmNvbS90b29scy9zYXZlLWZpeHR1cmVzLnBocCcsewogICAgbWV0aG9kOidQT1NUJywKICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ30sCiAgICBib2R5OkpTT04uc3RyaW5naWZ5KHtmaXh0dXJlczpmaXh0dXJlRGF0YX0pCiAgfSkKICAudGhlbihyPT57IGlmKHIuc3RhdHVzPT09NDAxKSB0aHJvdyAnVXBsb2FkIGNhbmNlbGVkIG9yIHVuYXV0aG9yaXplZCc7IGlmKCFyLm9rKSB0aHJvdyAnVXBsb2FkIGZhaWxlZCc7IHJldHVybiByLnRleHQoKTsgfSkKICAudGhlbihtc2c9PmFsZXJ0KG1zZ3x8J1VwbG9hZGVkIHRvIHNlcnZlcicpKQogIC5jYXRjaChlcnI9PmFsZXJ0KGVycikpOwp9CgovKiDilIDilIAgMTEpIEltcG9ydCBKU09OIChhZG1pbi1vbmx5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KaW1wb3J0RmlsZS5vbmNoYW5nZSA9IGUgPT4gewogIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsgaWYgKCFmaWxlKSByZXR1cm47CiAgaWYgKHByb21wdCgnRW50ZXIgaW1wb3J0IHBhc3N3b3JkOicpICE9PSBJTVBPUlRfUEFTU1dPUkQpIHsgYWxlcnQoJ1dyb25nIHBhc3N3b3JkJyk7IGUudGFyZ2V0LnZhbHVlPScnOyByZXR1cm47IH0KICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogIHJlYWRlci5vbmxvYWQgPSBldiA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShldi50YXJnZXQucmVzdWx0KTsKICAgICAgZml4dHVyZURhdGEgPSBBcnJheS5pc0FycmF5KGouZml4dHVyZXMpP2ouZml4dHVyZXMgOiBBcnJheS5pc0FycmF5KGopP2ogOiBqLmRhdGF8fFtdOwogICAgICByZWZyZXNoTWFuKCk7IGFsZXJ0KCdJbXBvcnRlZCcpOwogICAgfSBjYXRjaCB7IGFsZXJ0KCdJbnZhbGlkIEpTT04nKTsgfQogIH07CiAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7IGUudGFyZ2V0LnZhbHVlPScnOwp9OwoKLyog4pSA4pSAIDEyKSBRdHkgS2V5cGFkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBrZXlwYWRNb2RhbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZE1vZGFsJyk7CmNvbnN0IGtleXBhZFBhbmVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5cGFkUGFuZWwnKTsKY29uc3Qga2V5cGFkRGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXlwYWREaXNwbGF5Jyk7CmNvbnN0IGtleXBhZEtleXMgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5cGFkS2V5cycpOwoKcXR5QnRuLm9uY2xpY2sgPSAoKSA9PiB7CiAga2V5cGFkRGlzcGxheS50ZXh0Q29udGVudCA9IHF0eTsKICBrZXlwYWRNb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKfTsKWycxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCcwJywn4oaQJywnQyddLmZvckVhY2goaz0+ewogIGNvbnN0IGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IGIudGV4dENvbnRlbnQ9azsKICBiLm9uY2xpY2s9KCk9PnsKICAgIGlmKGs9PT0nQycpIGtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9JzAnOwogICAgZWxzZSBpZihrPT09J+KGkCcpIGtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9a2V5cGFkRGlzcGxheS50ZXh0Q29udGVudC5zbGljZSgwLC0xKXx8JzAnOwogICAgZWxzZSBrZXlwYWREaXNwbGF5LnRleHRDb250ZW50PWtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9PT0nMCc/azprZXlwYWREaXNwbGF5LnRleHRDb250ZW50K2s7CiAgfTsKICBrZXlwYWRLZXlzLmFwcGVuZENoaWxkKGIpOwp9KTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZE9rJykub25jbGljayA9ICgpID0+IHsKICBxdHkgPSBNYXRoLm1heCgxLCtrZXlwYWREaXNwbGF5LnRleHRDb250ZW50KTsKICBxdHlCdG4udGV4dENvbnRlbnQgPSBgUXR5OiAke3F0eX1gOwogIGtleXBhZE1vZGFsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpOwp9Owpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5cGFkQ2FuY2VsJykub25jbGljayA9ICgpID0+IGtleXBhZE1vZGFsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpOwoKLyog4pSA4pSAIDEzKSBDdXN0b20gRml4dHVyZSBNb2RhbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KY29uc3QgY3VzdG9tTW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tTW9kYWwnKTsKY29uc3QgY3VzdG9tUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tUGFuZWwnKTsKCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21CdG4nKS5vbmNsaWNrID0gKCkgPT4gewogIGN1c3RvbU1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwogIGlmKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW9kZS1yb3cnKSkgYWRkTW9kZVJvdygpOwp9Owpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tQ2xvc2UnKS5vbmNsaWNrID0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUNhbmNlbCcpLm9uY2xpY2sgPSAoKSA9PiB7CiAgY3VzdG9tTW9kYWwuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbU1vZGVzJykuaW5uZXJIVE1MPScnOwp9OwoKZnVuY3Rpb24gYWRkTW9kZVJvdyhuYW1lPScnLGNoPScnKSB7CiAgY29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByLmNsYXNzTmFtZT0nbW9kZS1yb3cnOwogIHIuaW5uZXJIVE1MID0gYDxpbnB1dCBwbGFjZWhvbGRlcj0iTW9kZSIgdmFsdWU9IiR7bmFtZX0iPgogICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMSIgbWF4PSI1MTIiIHZhbHVlPSIke2NofSIgcGxhY2Vob2xkZXI9IkNoIj4KICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJybSI+w5c8L2J1dHRvbj5gOwogIHIucXVlcnlTZWxlY3RvcignLnJtJykub25jbGljayA9ICgpID0+IHIucmVtb3ZlKCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbU1vZGVzJykuYXBwZW5kQ2hpbGQocik7Cn0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUFkZE1vZGUnKS5vbmNsaWNrID0gKCkgPT4gYWRkTW9kZVJvdygpOwoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbVNhdmUnKS5vbmNsaWNrID0gKCkgPT4gewogIGNvbnN0IG1hbiAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbU1hbicpLnZhbHVlLnRyaW0oKTsKICBjb25zdCBtb2RlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21Nb2RlbCcpLnZhbHVlLnRyaW0oKTsKICBjb25zdCBtb2RlcyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY3VzdG9tTW9kZXMgLm1vZGUtcm93JyldLm1hcChyID0+ICh7CiAgICBuYW1lOiByLmNoaWxkcmVuWzBdLnZhbHVlLnRyaW0oKSwKICAgIGNoYW5uZWxzOiArci5jaGlsZHJlblsxXS52YWx1ZSB8fCAwCiAgfSkpLmZpbHRlcihtPT5tLm5hbWUgJiYgbS5jaGFubmVscz4wKTsKICBpZiAoIW1hbiB8fCAhbW9kZWwgfHwgIW1vZGVzLmxlbmd0aCkgcmV0dXJuIGFsZXJ0KCdBbGwgZmllbGRzIHJlcXVpcmVkJyk7CgogIGxldCBmeCA9IGZpeHR1cmVEYXRhLmZpbmQoZiA9PiBtYW5OYW1lKGYpID09PSBtYW4gJiYgZi5tb2RlbCA9PT0gbW9kZWwpOwogIGlmICghZngpIHsgZnggPSB7bWFudWZhY3R1cmVyOm1hbiwgbW9kZWw6bW9kZWwsIG1vZGVzOltdfTsgZml4dHVyZURhdGEucHVzaChmeCk7IH0KICBtb2Rlcy5mb3JFYWNoKG0gPT4gewogICAgY29uc3QgZXggPSBmeC5tb2Rlcy5maW5kKHggPT4geC5uYW1lID09PSBtLm5hbWUpOwogICAgZXggPyBleC5jaGFubmVscyA9IG0uY2hhbm5lbHMgOiBmeC5tb2Rlcy5wdXNoKG0pOwogIH0pOwogIHJlZnJlc2hNYW4oKTsKICBjdXN0b21Nb2RhbC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tTW9kZXMnKS5pbm5lckhUTUw9Jyc7CiAgYWxlcnQoJ0N1c3RvbSBmaXh0dXJlIHNhdmVkJyk7Cn07CgovKiDilIDilIAgMTQpIE1ha2UgbW9kYWxzIGRyYWdnYWJsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KWydrZXlwYWRQYW5lbCcsJ2N1c3RvbVBhbmVsJ10uZm9yRWFjaChpZD0+ewogIGNvbnN0IHBhbmVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICBsZXQgZHJhZz1mYWxzZSxveD0wLG95PTA7CiAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyxlPT57CiAgICBpZihlLnRhcmdldC5jbG9zZXN0KCcuY2xvc2UtYnRuJykpIHJldHVybjsKICAgIGRyYWc9dHJ1ZTsgb3g9ZS5jbGllbnRYLXBhbmVsLm9mZnNldExlZnQ7IG95PWUuY2xpZW50WS1wYW5lbC5vZmZzZXRUb3A7CiAgfSk7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxlPT57CiAgICBpZihkcmFnKXsgcGFuZWwuc3R5bGUubGVmdD1gJHtlLmNsaWVudFgtb3h9cHhgOyBwYW5lbC5zdHlsZS50b3A9YCR7ZS5jbGllbnRZLW95fXB4YDsgfQogIH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCgpPT5kcmFnPWZhbHNlKTsKfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_wrap=”wrap” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” 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″ video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” pattern_bg=”none” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_blend_mode=”normal” mask_bg=”none” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_transition_offset=”0″ scroll_offset=”0″ animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ 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″ type=”1_1″ layout=”1_1″ align_self=”auto” content_layout=”column” align_content=”flex-start” valign_content=”flex-start” content_wrap=”wrap” center_content=”no” column_tag=”div” target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” order_medium=”0″ order_small=”0″ hover_type=”none” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ background_type=”single” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ lazy_load=”avada” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” 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″ sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” absolute=”off” 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″ transition_duration=”300″ transition_easing=”ease” scroll_motion_devices=”small-visibility,medium-visibility,large-visibility” animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ last=”true” border_position=”all” first=”true” element_content=”” min_height=”” link=””][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]