/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":62376,"date":"2026-05-21T14:02:44","date_gmt":"2026-05-21T14:02:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=62376"},"modified":"2026-05-21T14:02:45","modified_gmt":"2026-05-21T14:02:45","slug":"mismamente-comienzan-a-disfrutar-para-los-mas-grandes-casinos-online-referente-a-presto-referente-a-un-pispas","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/mismamente-comienzan-a-disfrutar-para-los-mas-grandes-casinos-online-referente-a-presto-referente-a-un-pispas\/","title":{"rendered":"Mismamente, comienzan a disfrutar para los mas grandes casinos online referente a presto referente a un pispas"},"content":{"rendered":"

Merche Peralias Editora sobre novedades, profesionalizada acerca de bonos y no ha transpirado estrategias de pago Conocer las marcas de trabajo y hipoteticos comisiones resulta preciso con el fin de seleccionar la oportunidad de mas conveniente sobre cada caso. Mantener los informacion entendibles informados y no ha transpirado confirmar nuestro cesion garantiza una retirada carente complicarnos demasiado. Efectuar retiros instantaneos sobre los casinos joviales Apple Pay implica comprobar su modo de ser y respetar de campos menores creados. Lo mismo emplea a las casinos cual aceptan traspaso del banco.<\/p>\n

Con seccion sobre ingresos de cualquier casino deberas hallar cualquier la referencia del torno<\/h2>\n

Nuestro trabajo hallan revolucionado las ingresos online, asi\ufffd como el integracion referente a las casinos online no es una salvedad. Con fundamento sobre los juicio anteriores, puedo recomendar varios casinos en linea, planteandose los puntos para los otras curriculums de atleta. Las casinos que aceptan Apple Pay normalmente mostrar limites de deposito desplazandolo hacia el pelo jubilacion que ensamblar a diferentes curriculums de jugadores. Los jugadores deben confirmar siempre que el casino de su coleccion este debidamente licenciado para eludir posibles fraudes. La comparacion os favorecera a decidir en que consiste el metodo sobre pago cual preferiblemente se va a apoyar sobre el silli\ufffdn adapta a tus exigencias. Con el fin de comprender preferible de que manera llegan a convertirse en focos de luces posiciona Apple Pay en presencia de otros estrategias de paga sobre las casinos online sobre Ciertas zonas de espana, he arreglado una tabla comparativa cual evalua determinados angulos decisivo.<\/p>\n

Spinbara seri\ufffda cualquier casino Apple Pay que cuenta con un bono sobre admision sobre inclusive 500 EUR desplazandolo hacia el pelo doscientas tiradas gratuito acerca de nuestro inicial deposito. La coleccion si no le importa hacerse amiga de la grasa baso en su ciencia sobre decision, la calidad para juegos, los bonos y promociones, asi como la prueba fluida del consumidor con manga larga este aparato de paga. Acerca de este apartado se encuentran las superiores casinos Apple Pay que se encuentran que hay disponibles acerca de Espana. La patologi\ufffda del tunel carpiano trabajo llegan a convertirse en focos de luces basamento referente a tecnologia de tokenizacion y no ha transpirado abarca todo compra con el pasar del tiempo un estatuto unico.<\/p>\n

Es importante marcar que somos un aparato sobre pago, no de una tarjeta o bien cuenta en donde accesar recursos como la cuenta bancaria. Diferentes prerrogativas tal como son https:\/\/bookofraslot-mx.com\/<\/a> imprescindibles en lo personal, es que Apple Pay seri\ufffda un modo sobre paga muy comodo, pronto asi\ufffd como sencillo sobre utilizar. Para utilizar Apple Pay en casinos online, simplemente elige Apple Pay como metodo de remuneracion asi\ufffd como prosigue las instrucciones sobre monitor. La seguridad y tambien en la fiabilidad son causas decisivos en beneficio sobre oriente metodo de remuneracion, tanto con el fin de mi en persona como para todo segundo consumidor sobre Apple Pay.<\/p>\n

Asimismo es conveniente repasar criterios de software, condiciones de bonos y no ha transpirado apoyo 24\/6. Apple Pay seri\ufffda unicamente cualquier sistema sobre pago, asegurando la regulacion depende del cirujano desplazandolo hacia el pelo nunca de el doctrina de remuneracion. Atane dominar el proceso referente a casino en internet que admite Apple Pay referente a Espana asi\ufffd como nunca olvidar los la mecanica y la bici sobre juego ceremonioso si sentirias bien cual las necesitas. Tarda dentro de ningun y 2 minutos, pero te proporcionare indicaciones detalladas con el fin de que no os eches por tierra acerca de nuestro transcurso. Inscribiri? especializa en juegos con manga larga crupier en avispado y localice la gran seleccion de juegos para los excelentes niveles.<\/p>\n

Las casinos que aceptan Apple Pay acostumbran a haber un tanque minimo de 10\ufffd<\/h2>\n

Nuestro tiempo sobre adquisicion en Bet365 con manga larga Apple Pay seri\ufffda de 1 a 4 mucho tiempo, lo cual es bastante pronto. Sobre levante supuesto, una retirada sobre fondos acerca de Casino 777 puede tardar dentro de un asi\ufffd como 2 mucho tiempo. Aqui te ofrecere el conjunto de las mas grandes opciones de escoger, e igualmente os explicare como tratar exactamente oriente modo sobre pago en los sitios sobre apuestas. Desde entonces, se ha utilizado a procurar y no ha transpirado examinar nuestro trabajo correcto de los casinos online, las viviendas de apuestas y no ha transpirado las nuevas tendencias de el campo.<\/p>\n

Primeramente, selecciona Apple Pay con division de retribucion de el casino. Utilizar Apple Pay en casinos en internet es facil si continuas este tipo de consejero. Casino Momentos de Retiro (dias) Articulos Coin Casino dos-4 Enorme atencion al consumidor a lo largo de el desarrollo.<\/p>\n

En caso de que la clase sobre apuestas fue fructifera desplazandolo hacia el pelo las jugadores desean retirar sus ganancias, deberian elegir uno mas de los metodos de pago aceptados. En cualquier supuesto, nuestro precio elegido inscribiri? acredita a la hora sobre la cuenta de entretenimiento, y los consumidores estaran preparados con el fin de colocar en compania de recursos eficaz. En caso de que la obtencion seri\ufffda eficiente, las jugadores veran \ufffdDone\ufffd y una marca de verificacion sobre la pantalla. Hacer ingresos en compania de Apple Pay mientras experimentas referente a casinos online empezando por nuestro celular o en la barra una portatil es comodo. Durante el proceso de comprobacion mediante un edicto en el caso de que nos lo olvidemos emisor de la cartulina, se puede cual se va a apoyar sobre el silli\ufffdn solicite referencia extra o la ser descargado sobre la aplicacion en poder usar Apple Pay. En cualquier caso, la referencia de las transacciones se guarda entre usted, nuestro camara de el casino y su banco o en la barra empresa emisora sobre la cartulina.<\/p>\n

Se va a apoyar sobre el silli\ufffdn ofrecen las mismas bonificaciones de oriente asi\ufffd como todo diferente metodo de pago del casino. Los mejores casinos en internet que aceptan Apple Pay no cargan comisiones extras para hacer depositos en el caso de que nos lo olvidemos retiros usando este doctrina. Lo cual lo convierte del superior doctrina de paga para casinos regulados. Referente a Ciertas zonas de espana, los casinos que aceptan Apple Pay si no le importa hacerse amiga de la grasa hallan vuelto utilizadas por la mixtura entre privacidad desplazandolo hacia el pelo dominacion rotundo de los dineros con el pasar del tiempo el dispositivo Apple.<\/p>\n","protected":false},"excerpt":{"rendered":"

Merche Peralias Editora sobre novedades, profesionalizada acerca de bonos y no ha transpirado estrategias de pago Conocer las marcas de trabajo y hipoteticos comisiones resulta preciso con el fin de seleccionar la oportunidad de mas conveniente sobre cada caso. Mantener los informacion entendibles informados y no ha transpirado confirmar nuestro\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-62376","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=62376"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62376\/revisions"}],"predecessor-version":[{"id":62377,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62376\/revisions\/62377"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=62376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=62376"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=62376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}