public override void Init(GDbTabWrapper <TKey, ReadableTuple <TKey> > tab, DisplayableProperty <TKey, ReadableTuple <TKey> > dp)
        {
            _textBox              = new TextBox();
            _textBox.Margin       = new Thickness(3);
            _textBox.TextChanged += new TextChangedEventHandler(_textBox_TextChanged);

            _tab = tab;

            DisplayableProperty <TKey, ReadableTuple <TKey> > .RemoveUndoAndRedoEvents(_textBox, _tab);

            dp.AddResetField(_textBox);

            _grid = new Grid();
            _grid.SetValue(Grid.RowProperty, _row);
            _grid.SetValue(Grid.ColumnProperty, _column);
            _grid.ColumnDefinitions.Add(new ColumnDefinition());
            _grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });

            _textPreview                   = new TextBlock();
            _textPreview.Margin            = new Thickness(0, 3, 3, 3);
            _textPreview.Visibility        = Visibility.Collapsed;
            _textPreview.VerticalAlignment = VerticalAlignment.Center;
            _textPreview.TextAlignment     = TextAlignment.Right;
            _textPreview.Foreground        = Brushes.DarkGray;
            _textPreview.SetValue(Grid.ColumnProperty, 1);
            _textBox.SetValue(Grid.ColumnProperty, 0);

            _grid.Children.Add(_textBox);
            _grid.Children.Add(_textPreview);

            _parent = _parent ?? tab.PropertiesGrid;
            _parent.Children.Add(_grid);

            dp.AddUpdateAction(new Action <ReadableTuple <TKey> >(item => _textBox.Dispatch(delegate {
                try {
                    string sval = item.GetValue <string>(_attribute);

                    if (sval == _textBox.Text)
                    {
                        return;
                    }

                    _textBox.Text      = sval;
                    _textBox.UndoLimit = 0;
                    _textBox.UndoLimit = int.MaxValue;
                }
                catch { }
            })));

            _onInitalized();
        }
        public override void Init(GDbTabWrapper <TKey, ReadableTuple <TKey> > tab, DisplayableProperty <TKey, ReadableTuple <TKey> > dp)
        {
            if (_textBox == null)
            {
                _textBox = new TextBox();
            }

            _textBox.Margin       = new Thickness(3);
            _textBox.TextChanged += new TextChangedEventHandler(_textBox_TextChanged);
            _textBox.TabIndex     = dp.ZIndex++;

            _tab = tab;

            DisplayableProperty <TKey, ReadableTuple <TKey> > .RemoveUndoAndRedoEvents(_textBox, _tab);

            dp.AddResetField(_textBox);

            _grid = new Grid();
            _grid.SetValue(Grid.RowProperty, _row);
            _grid.SetValue(Grid.ColumnProperty, _column);
            _grid.ColumnDefinitions.Add(new ColumnDefinition());
            _grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });

            _button         = new Button();
            _button.Width   = 22;
            _button.Height  = 22;
            _button.Margin  = new Thickness(0, 3, 3, 3);
            _button.Content = "...";
            _button.Click  += _button_Click;
            _button.SetValue(Grid.ColumnProperty, 1);
            _textBox.SetValue(Grid.ColumnProperty, 0);
            _textBox.VerticalAlignment = VerticalAlignment.Center;

            _grid.Children.Add(_textBox);
            _grid.Children.Add(_button);

            _parent = _parent ?? tab.PropertiesGrid;
            _parent.Children.Add(_grid);

            dp.AddUpdateAction(new Action <ReadableTuple <TKey> >(_updateAction));
            _onInitalized();
        }
        public override void Init(GDbTabWrapper <TKey, ReadableTuple <TKey> > tab, DisplayableProperty <TKey, ReadableTuple <TKey> > dp)
        {
            _tab = tab;

            Grid grid = new Grid();

            WpfUtilities.SetGridPosition(grid, _row, null, _column - 1, 2);

            for (int i = 0; i < _numOfItems; i++)
            {
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = new GridLength(-1, GridUnitType.Auto)
                });
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = new GridLength(0)
                });
            }

            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });

            for (int i = 0; i < _numOfItems; i++)
            {
                Label label = new Label();
                label.Content           = "ID" + (i + 1);
                label.VerticalAlignment = VerticalAlignment.Center;
                label.Margin            = new Thickness(3);
                label.Padding           = new Thickness(0);
                label.SetValue(Grid.RowProperty, 2 * i);
                label.SetValue(TextBlock.ForegroundProperty, Application.Current.Resources["TextForeground"] as Brush);

                Label spacer = new Label();
                spacer.Height  = 3;
                spacer.Content = "";
                spacer.SetValue(Grid.RowProperty, 2 * i + 1);

                TextBlock preview = new TextBlock();
                preview.HorizontalAlignment = HorizontalAlignment.Left;
                preview.VerticalAlignment   = VerticalAlignment.Center;
                preview.Margin  = new Thickness(7, 0, 4, 0);
                preview.Padding = new Thickness(0);
                preview.SetValue(Grid.RowProperty, 2 * i);
                preview.Foreground = Application.Current.Resources["TextBoxOverlayBrush"] as SolidColorBrush;
                preview.SetValue(Grid.ColumnProperty, 1);
                preview.IsHitTestVisible = false;

                Button button = new Button();
                button.Width   = 22;
                button.Height  = 22;
                button.Margin  = new Thickness(0, 3, 3, 3);
                button.Content = new Image {
                    Stretch = Stretch.None, Source = ApplicationManager.PreloadResourceImage("arrowdown.png")
                };
                button.Click += new RoutedEventHandler(_button_Click);
                button.SetValue(Grid.ColumnProperty, 2);
                button.SetValue(Grid.RowProperty, 2 * i);

                button.ContextMenu                 = new ContextMenu();
                button.ContextMenu.Placement       = PlacementMode.Bottom;
                button.ContextMenu.PlacementTarget = button;
                button.PreviewMouseRightButtonUp  += delegate(object sender, MouseButtonEventArgs e) { e.Handled = true; };

                MenuItem select = new MenuItem();
                select.Header = "Select ''";
                select.Icon   = new Image {
                    Source = ApplicationManager.PreloadResourceImage("find.png"), Stretch = Stretch.Uniform, Width = 16, Height = 16
                };
                select.Click += _select_Click;
                select.Tag    = button;

                MenuItem selectFromList = new MenuItem();
                selectFromList.Header = "Select...";
                selectFromList.Icon   = new Image {
                    Source = ApplicationManager.PreloadResourceImage("treeList.png"), Stretch = Stretch.None
                };
                selectFromList.Click += _selectFromList_Click;
                selectFromList.Tag    = button;

                button.ContextMenu.Items.Add(select);
                button.ContextMenu.Items.Add(selectFromList);

                TextBox textBox = new TextBox();
                textBox.Margin       = new Thickness(3);
                textBox.TextChanged += new TextChangedEventHandler(_textBox_TextChanged);
                textBox.SetValue(Grid.ColumnProperty, 1);
                textBox.SetValue(Grid.RowProperty, 2 * i);
                textBox.TextChanged += new TextChangedEventHandler(_textBox2_TextChanged);
                dp.AddResetField(textBox);
                button.Tag  = textBox;
                textBox.Tag = preview;

                textBox.GotFocus += delegate {
                    preview.Visibility = Visibility.Collapsed;
                    textBox.Foreground = Application.Current.Resources["TextForeground"] as Brush;
                };
                textBox.LostFocus += (sender, e) => _textBox2_TextChanged(sender, null);

                _boxes.Add(textBox);

                grid.Children.Add(spacer);
                grid.Children.Add(textBox);
                grid.Children.Add(button);
                grid.Children.Add(label);
                grid.Children.Add(preview);

                DisplayableProperty <TKey, ReadableTuple <TKey> > .RemoveUndoAndRedoEvents(textBox, _tab);
            }

            tab.PropertiesGrid.Children.Add(grid);

            dp.AddUpdateAction(new Action <ReadableTuple <TKey> >(item => grid.Dispatch(delegate {
                try {
                    TextBox textBox;
                    string value         = item.GetValue <string>(_attribute);
                    List <string> values = value.Split(':').ToList();

                    while (values.Count < _numOfItems)
                    {
                        values.Add("");
                    }

                    for (int i = 0; i < _numOfItems; i++)
                    {
                        textBox      = _boxes[i];
                        textBox.Text = values[i];

                        textBox.UndoLimit = 0;
                        textBox.UndoLimit = int.MaxValue;
                    }
                }
#if SDE_DEBUG
                catch (Exception err) {
                    Debug.PrintStack(err);
#else
                catch {
#endif
                }
            })));
        public void Init(GDbTabWrapper <TKey, TValue> tab, DisplayableProperty <TKey, TValue> dp)
        {
            _tab = tab;

            DisplayableProperty <TKey, TValue> .RemoveUndoAndRedoEvents(_textBox, _tab);

            //_autocompleteService = new AutocompleteService(_tab.List, _tbIdResource, _tbUnResource, _tbIdDisplayName, _tbUnDisplayName, _tbIdDesc, _tbUnDesc);

            dp.AddResetField(_textBox);
            dp.AddResetField(_realBox);

            Border border = new Border();

            border.BorderBrush     = SystemColors.ActiveBorderBrush;
            border.BorderThickness = new Thickness(1);
            border.Child           = _textBox;

            border.SetValue(Grid.RowProperty, _gridRow);
            border.SetValue(Grid.ColumnProperty, _gridColumn + 1);
            border.Margin = new Thickness(3);

            _tab.PropertiesGrid.Children.Add(border);

            StackPanel panel = new StackPanel();

            panel.SetValue(Grid.RowProperty, _gridRow);
            panel.SetValue(Grid.ColumnProperty, _gridColumn);

            Label label = new Label {
                Content = "Description"
            };

            label.SetValue(TextBlock.ForegroundProperty, Application.Current.Resources["TextForeground"] as Brush);

            Button button = new Button();

            button.Margin = new Thickness(3);

            panel.Children.Add(label);
            panel.Children.Add(button);
            _textBox.GotFocus += delegate { _lastAccessed = _textBox; };

            if (_quickEdit)
            {
                _tab.List.SelectionChanged += new SelectionChangedEventHandler(_list_SelectionChanged);
                button.Content              = "Quick edit...";
                button.Click += new RoutedEventHandler(_buttonQuickEdit_Click);

                TextEditorColorControl colorControl = new TextEditorColorControl();
                Label label2 = new Label {
                    Content = "Color picker"
                };
                label2.SetValue(TextBlock.ForegroundProperty, Application.Current.Resources["TextForeground"] as Brush);

                _tecc         = colorControl;
                _lastAccessed = _textBox;
                colorControl.Init(_getActive);

                Button itemScript = new Button {
                    Margin = new Thickness(3), Content = "Item bonus"
                };
                itemScript.Click += delegate {
                    itemScript.IsEnabled = false;

                    var meta = _tab.GetMetaTable <int>(ServerDbs.Items);
                    var item = _tab._listView.SelectedItem as ReadableTuple <int>;

                    _update = new Func <ReadableTuple <int>, string>(tuple => {
                        var output = new StringBuilder();

                        if (tuple != null)
                        {
                            var entry = meta.TryGetTuple(tuple.Key);

                            if (entry != null)
                            {
                                output.AppendLine("-- Script --");
                                output.AppendLine(entry.GetValue <string>(ServerItemAttributes.Script));
                                output.AppendLine("-- OnEquipScript --");
                                output.AppendLine(entry.GetValue <string>(ServerItemAttributes.OnEquipScript));
                                output.AppendLine("-- OnUnequipScript --");
                                output.AppendLine(entry.GetValue <string>(ServerItemAttributes.OnUnequipScript));
                            }
                            else
                            {
                                output.AppendLine("-- Not found in item_db_m --");
                            }
                        }
                        else
                        {
                            output.AppendLine("-- No entry selected --");
                        }

                        return(output.ToString());
                    });

                    _scriptEdit         = new ScriptEditDialog(_update(item));
                    _scriptEdit.Closed += delegate {
                        itemScript.IsEnabled = true;
                        _scriptEdit          = null;
                    };

                    _scriptEdit._textEditor.IsReadOnly = true;
                    _scriptEdit.DisableOk();
                    _scriptEdit.Show();
                    _scriptEdit.Owner = WpfUtilities.FindParentControl <Window>(_tab);
                };

                panel.Children.Add(itemScript);
                panel.Children.Add(label2);
                panel.Children.Add(colorControl);
            }
            else
            {
                if (_tecc != null)
                {
                    var t = _lastAccessed;
                    _lastAccessed = _textBox;
                    _tecc.Init(_getActive);
                    _lastAccessed = t;
                }

                button.Content = "Copy >";
                button.Click  += new RoutedEventHandler(_buttonAutocomplete_Click);
            }

            tab.PropertiesGrid.Children.Add(panel);

            dp.AddUpdateAction(new Action <TValue>(item => _textBox.Dispatch(delegate {
                Debug.Ignore(() => _realBox.Text = item.GetValue <string>(_attribute));
                //Debug.Ignore(() => _textBox.Text = item.GetValue<string>(_attribute));
                _realBox.UndoLimit = 0;
                _realBox.UndoLimit = int.MaxValue;

                //Debug.Ignore(() => _textBox.Text = item.GetValue<string>(_attribute));
                _textBox.Document.UndoStack.SizeLimit = 0;
                _textBox.Document.UndoStack.SizeLimit = int.MaxValue;
            })));

            _realBox.TextChanged += delegate {
                WpfUtilities.UpdateRtb(_previewTextBox, _realBox.Text, true);
                if (_avalonUpdate)
                {
                    return;
                }
                _textBox.Text = _realBox.Text;
            };
        }
        public void Init(GDbTabWrapper <TKey, TValue> tab, DisplayableProperty <TKey, TValue> dp)
        {
            _tab = tab;
            DisplayableProperty <TKey, TValue> .RemoveUndoAndRedoEvents(_textBox, _tab);

            dp.AddResetField(_textBox);

            Grid grid = new Grid();

            grid.SetValue(Grid.RowProperty, _gridRow);
            grid.SetValue(Grid.ColumnProperty, _gridColumn);
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });

            _imageResource.SetValue(Grid.ColumnProperty, 2);

            Button button = new Button();

            button.Width   = 22;
            button.Height  = 22;
            button.Margin  = new Thickness(3);
            button.Content = "...";
            button.Click  += new RoutedEventHandler(_button_Click);
            button.SetValue(Grid.ColumnProperty, 3);
            _button = button;
            _textBox.SetValue(Grid.ColumnProperty, 0);

            Image image = new Image();

            image.Visibility = Visibility.Collapsed;
            image.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.NearestNeighbor);
            image.Source            = ApplicationManager.GetResourceImage("warning16.png");
            image.Width             = 16;
            image.Height            = 16;
            image.VerticalAlignment = VerticalAlignment.Center;
            image.Margin            = new Thickness(1);
            image.ToolTip           = "Invalid encoding detected. Click this button to correct the value.";
            image.SetValue(Grid.ColumnProperty, 1);
            _image = image;

            _image.MouseLeftButtonUp += new MouseButtonEventHandler(_image_MouseLeftButtonUp);

            WpfUtils.AddMouseInOutEffects(image);

            grid.Children.Add(_imageResource);
            grid.Children.Add(_textBox);
            grid.Children.Add(button);
            grid.Children.Add(image);

            tab.PropertiesGrid.Children.Add(grid);

            dp.AddUpdateAction(new Action <TValue>(item => _textBox.Dispatch(delegate {
                try {
                    string sval = item.GetValue <string>(_attribute);

                    if (sval == _textBox.Text)
                    {
                        return;
                    }

                    _textBox.Text      = sval;
                    _textBox.UndoLimit = 0;
                    _textBox.UndoLimit = int.MaxValue;
                }
                catch {
                }
            })));

            _button.ContextMenu           = new ContextMenu();
            _button.ContextMenu.Placement = PlacementMode.Bottom;

            MenuItem fromGrf = new MenuItem();

            fromGrf.Header = "Select from GRF...";
            fromGrf.Icon   = new Image {
                Source = ApplicationManager.PreloadResourceImage("find.png"), Stretch = Stretch.Uniform, Width = 16, Height = 16
            };
            fromGrf.Click += _selectFromGrf_Click;

            MenuItem selectFromList = new MenuItem();

            selectFromList.Header = "Autocomplete";
            selectFromList.Icon   = new Image {
                Source = ApplicationManager.PreloadResourceImage("revisionUpdate.png"), Stretch = Stretch.None
            };
            selectFromList.Click += _autocomplete_Click;

            button.ContextMenu.Items.Add(fromGrf);
            button.ContextMenu.Items.Add(selectFromList);

            _button.ContextMenu.PlacementTarget = _button;
            _button.PreviewMouseRightButtonUp  += _disableButton;
        }
        public override void Init(GDbTabWrapper <int, ReadableTuple <int> > tab, DisplayableProperty <int, ReadableTuple <int> > dp)
        {
            _parent = _parent ?? tab.PropertiesGrid;

            _textBox              = new TextBox();
            _textBox.Margin       = new Thickness(3);
            _textBox.TextChanged += new TextChangedEventHandler(_textBox_TextChanged);
            _textBox.TabIndex     = dp.ZIndex++;

            _tab = tab;

            DisplayableProperty <int, ReadableTuple <int> > .RemoveUndoAndRedoEvents(_textBox, _tab);

            dp.AddResetField(_textBox);

            Grid grid = new Grid();

            grid.SetValue(Grid.RowProperty, _row);
            grid.SetValue(Grid.ColumnProperty, _column);
            grid.ColumnDefinitions.Add(new ColumnDefinition());

            _textBox.SetValue(Grid.ColumnProperty, 0);

            _textPreview                   = new TextBlock();
            _textPreview.Margin            = new Thickness(7, 0, 0, 0);
            _textPreview.VerticalAlignment = VerticalAlignment.Center;
            _textPreview.TextAlignment     = TextAlignment.Left;
            _textPreview.Foreground        = Brushes.DarkGray;
            _textPreview.SetValue(Grid.ColumnProperty, 0);
            _textPreview.IsHitTestVisible = false;

            dp.Deployed += delegate {
                try {
                    if (_attribute.AttachedObject != null)
                    {
                        foreach (var attribute in (DbAttribute[])_attribute.AttachedObject)
                        {
                            var textBox = DisplayablePropertyHelper.Find <TextBox>(_parent, attribute).First();
                            textBox.TextChanged += (e, a) => OnUpdate();
                        }
                    }
                    else
                    {
                        var textBox = DisplayablePropertyHelper.Find <TextBox>(_parent, _attribute.AttachedAttribute as DbAttribute).First();
                        textBox.TextChanged += (e, a) => OnUpdate();
                    }
                }
                catch (Exception err) {
                    ErrorHandler.HandleException(err);
                }
            };

            grid.Children.Add(_textBox);
            grid.Children.Add(_textPreview);

            _parent.Children.Add(grid);

            dp.AddUpdateAction(new Action <ReadableTuple <int> >(item => _textBox.Dispatch(delegate {
                try {
                    string sval = item.GetValue <string>(_attribute);

                    if (sval == _textBox.Text)
                    {
                        return;
                    }

                    _textBox.Text      = sval;
                    _textBox.UndoLimit = 0;
                    _textBox.UndoLimit = int.MaxValue;
                }
                catch {
                }

                OnUpdate();
            })));

            _textBox.GotFocus += delegate { _textPreview.Visibility = Visibility.Collapsed; };

            _textBox.LostFocus += delegate { OnUpdate(); };
        }
        public override void Init(GDbTabWrapper <TKey, ReadableTuple <TKey> > tab, DisplayableProperty <TKey, ReadableTuple <TKey> > dp)
        {
            _tab = tab;

            Grid grid = new Grid();

            WpfUtilities.SetGridPosition(grid, _row, null, _column - 1, 2);

            for (int i = 0; i < _numOfItems; i++)
            {
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = new GridLength(-1, GridUnitType.Auto)
                });
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = new GridLength(0)
                });
            }

            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(100)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(-1, GridUnitType.Auto)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition());

            for (int i = 0; i < _numOfItems; i++)
            {
                Label label = new Label();
                label.Content           = "ID" + (i + 1);
                label.VerticalAlignment = VerticalAlignment.Center;
                label.Margin            = new Thickness(3);
                label.Padding           = new Thickness(0);
                label.SetValue(Grid.RowProperty, 2 * i);

                Label spacer = new Label();
                spacer.Height  = 3;
                spacer.Content = "";
                spacer.SetValue(Grid.RowProperty, 2 * i + 1);

                Label preview = new Label();
                preview.Content             = "";
                preview.HorizontalAlignment = HorizontalAlignment.Left;
                preview.VerticalAlignment   = VerticalAlignment.Center;
                preview.Margin  = new Thickness(3);
                preview.Padding = new Thickness(0);
                preview.SetValue(Grid.RowProperty, 2 * i);
                preview.SetValue(Grid.ColumnProperty, 3);

                Button button = new Button();
                button.Width   = 22;
                button.Height  = 22;
                button.Margin  = new Thickness(0, 3, 3, 3);
                button.Content = new Image {
                    Stretch = Stretch.None, Source = ApplicationManager.PreloadResourceImage("arrowdown.png") as ImageSource
                };
                button.Click += new RoutedEventHandler(_button_Click);
                button.SetValue(Grid.ColumnProperty, 2);
                button.SetValue(Grid.RowProperty, 2 * i);
                button.TabIndex = dp.ZIndex++;

                TextBox textBox = new TextBox();
                textBox.Margin       = new Thickness(3);
                textBox.TextChanged += new TextChangedEventHandler(_textBox_TextChanged);
                textBox.SetValue(Grid.ColumnProperty, 1);
                textBox.SetValue(Grid.RowProperty, 2 * i);
                textBox.TextChanged += new TextChangedEventHandler(_textBox2_TextChanged);
                dp.AddResetField(textBox);
                button.Tag  = textBox;
                textBox.Tag = preview;

                _boxes.Add(textBox);

                grid.Children.Add(spacer);
                grid.Children.Add(button);
                grid.Children.Add(label);
                grid.Children.Add(textBox);
                grid.Children.Add(preview);

                DisplayableProperty <TKey, ReadableTuple <TKey> > .RemoveUndoAndRedoEvents(textBox, _tab);
            }

            tab.PropertiesGrid.Children.Add(grid);

            dp.AddUpdateAction(new Action <ReadableTuple <TKey> >(item => grid.Dispatch(delegate {
                try {
                    TextBox textBox;
                    string value         = item.GetValue <string>(_attribute);
                    List <string> values = value.Split(':').ToList();

                    while (values.Count < _numOfItems)
                    {
                        values.Add("");
                    }

                    for (int i = 0; i < _numOfItems; i++)
                    {
                        textBox      = _boxes[i];
                        textBox.Text = values[i];

                        textBox.UndoLimit = 0;
                        textBox.UndoLimit = int.MaxValue;
                    }
                }
#if SDE_DEBUG
                catch (Exceptionerr) {
                    Debug.PrintStack(err);
#else
                catch {
#endif
                }
            })));