[Tween-svn] [1351] DynamicQueryをマージ

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 1月 13日 (木) 23:03:38 JST


Revision: 1351
          http://sourceforge.jp/projects/tween/svn/view?view=rev&revision=1351
Author:   syo68k
Date:     2011-01-13 23:03:38 +0900 (Thu, 13 Jan 2011)

Log Message:
-----------
DynamicQueryをマージ

Modified Paths:
--------------
    trunk/LICENSE.ja.txt
    trunk/LICENSE.txt
    trunk/Tween/FilterDialog.Designer.vb
    trunk/Tween/FilterDialog.resx
    trunk/Tween/FilterDialog.vb
    trunk/Tween/MyLists.vb
    trunk/Tween/StatusDictionary.vb
    trunk/Tween/Tween.vb
    trunk/Tween/Tween.vbproj
    trunk/Tween/Twitter.vb
    trunk/Tween.sln

Added Paths:
-----------
    trunk/Microsoft Public License.txt
    trunk/Tween/Dynamic.vb
    trunk/Tween/DynamicQuery.txt

Property Changed:
----------------
    trunk/


-------------- next part --------------

Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/tm:782-794
/branches/editlist:667-697
/branches/SettingDialog:1216-1230
/branches/panelswitch:447-572
/branches/APIchangeevent:723-746
/branches/UserStream:1077-1144
/branches/FixedImage:787-910

   + /branches/APIchangeevent:723-746
/branches/FixedImage:787-910
/branches/SettingDialog:1216-1230
/branches/UserStream:1077-1144
/branches/editlist:667-697
/branches/panelswitch:447-572
/branches/query:1307-1350
/branches/tm:782-794

Modified: trunk/LICENSE.ja.txt
===================================================================
--- trunk/LICENSE.ja.txt	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/LICENSE.ja.txt	2011-01-13 14:03:38 UTC (rev 1351)
@@ -25,6 +25,18 @@
 によってライセンスされていません。上記のファイルに対する問い合わせは、
 Tween の著作者ではなくアイコンの著者にお問い合わせください。
 
+
+また、Tweenディレクトリの以下のファイル:
+    Dynamic.vb
+はMicrosoftによって作成され、Microsoft Public License(Ms-PL)に基づき配布されます。
+Copyright © Microsoft Corporation.  All Rights Reserved.
+This code released under the terms of the Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
+
+このファイルの入手元は次のURIです:
+http://code.msdn.microsoft.com/vb2010samples
+Microsoft Public License(Ms-PL)の原文は次のURIへ:
+http://opensource.org/licenses/ms-pl.html
+
 謝辞終わり。
 
 GNU General Public License (GPL) (GNU 一般公衆利用許諾書) の非公式な

Modified: trunk/LICENSE.txt
===================================================================
--- trunk/LICENSE.txt	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/LICENSE.txt	2011-01-13 14:03:38 UTC (rev 1351)
@@ -24,6 +24,53 @@
 Please inquire about these files not to copyright holders of Tween, but
 to the author of the icons.
 
+In this software, below files in Tween directory:
+    Dynamic.vb
+is made by Microsoft Corporation, and distributed on Microsoft Public License(Ms-PL). 
+
+
+Microsoft Public License (Ms-PL)
+
+This license governs use of the accompanying software. If you use the software, you accept this 
+license. If you do not accept the license, do not use the software.
+
+1. Definitions
+The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning 
+here as under U.S. copyright law.
+A "contribution" is the original software, or any additions or changes to the software.
+A "contributor" is any person that distributes its contribution under this license.
+"Licensed patents" are a contributor's patent claims that read directly on its contribution.
+
+2. Grant of Rights
+(A) Copyright Grant- Subject to the terms of this license, including the license conditions and 
+limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free 
+copyright license to reproduce its contribution, prepare derivative works of its contribution, and 
+distribute its contribution or any derivative works that you create.
+(B) Patent Grant- Subject to the terms of this license, including the license conditions and 
+limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free 
+license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or 
+otherwise dispose of its contribution in the software or derivative works of the contribution in the
+ software.
+
+3. Conditions and Limitations
+(A) No Trademark License- This license does not grant you rights to use any contributors' name, 
+logo, or trademarks.
+(B) If you bring a patent claim against any contributor over patents that you claim are infringed by
+ the software, your patent license from such contributor to the software ends automatically.
+(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark,
+ and attribution notices that are present in the software.
+(D) If you distribute any portion of the software in source code form, you may do so only under this
+ license by including a complete copy of this license with your distribution. If you distribute any 
+portion of the software in compiled or object code form, you may only do so under a license that 
+complies with this license.
+(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no 
+express warranties, guarantees or conditions. You may have additional consumer rights under your 
+local laws which this license cannot change. To the extent permitted under your local laws, the 
+contributors exclude the implied warranties of merchantability, fitness for a particular purpose and
+ non-infringement.
+
+
+
 END OF ACKNOWLEDGEMENT. BELOW IS THE LICENSE OF CODES OF THE SOFTWARE.
 
 
@@ -702,3 +749,4 @@
 Public License instead of this License.  But first, please read
 <http://www.gnu.org/philosophy/why-not-lgpl.html>.
 
+

Copied: trunk/Microsoft Public License.txt (from rev 1350, branches/query/Microsoft Public License.txt)
===================================================================
--- trunk/Microsoft Public License.txt	                        (rev 0)
+++ trunk/Microsoft Public License.txt	2011-01-13 14:03:38 UTC (rev 1351)
@@ -0,0 +1,39 @@
+Microsoft Public License (Ms-PL)
+
+This license governs use of the accompanying software. If you use the software, you accept this 
+license. If you do not accept the license, do not use the software.
+
+1. Definitions
+The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning 
+here as under U.S. copyright law.
+A "contribution" is the original software, or any additions or changes to the software.
+A "contributor" is any person that distributes its contribution under this license.
+"Licensed patents" are a contributor's patent claims that read directly on its contribution.
+
+2. Grant of Rights
+(A) Copyright Grant- Subject to the terms of this license, including the license conditions and 
+limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free 
+copyright license to reproduce its contribution, prepare derivative works of its contribution, and 
+distribute its contribution or any derivative works that you create.
+(B) Patent Grant- Subject to the terms of this license, including the license conditions and 
+limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free 
+license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or 
+otherwise dispose of its contribution in the software or derivative works of the contribution in the
+ software.
+
+3. Conditions and Limitations
+(A) No Trademark License- This license does not grant you rights to use any contributors' name, 
+logo, or trademarks.
+(B) If you bring a patent claim against any contributor over patents that you claim are infringed by
+ the software, your patent license from such contributor to the software ends automatically.
+(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark,
+ and attribution notices that are present in the software.
+(D) If you distribute any portion of the software in source code form, you may do so only under this
+ license by including a complete copy of this license with your distribution. If you distribute any 
+portion of the software in compiled or object code form, you may only do so under a license that 
+complies with this license.
+(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no 
+express warranties, guarantees or conditions. You may have additional consumer rights under your 
+local laws which this license cannot change. To the extent permitted under your local laws, the 
+contributors exclude the implied warranties of merchantability, fitness for a particular purpose and
+ non-infringement.
\ No newline at end of file

Copied: trunk/Tween/Dynamic.vb (from rev 1350, branches/query/Tween/Dynamic.vb)
===================================================================
--- trunk/Tween/Dynamic.vb	                        (rev 0)
+++ trunk/Tween/Dynamic.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -0,0 +1,1949 @@
+' Copyright © Microsoft Corporation.  All Rights Reserved.
+' This code released under the terms of the 
+' Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
+'
+Option Strict On
+Option Explicit On
+
+Imports System.Collections.Generic
+Imports System.Text
+Imports System.Linq
+Imports System.Linq.Expressions
+Imports System.Reflection
+Imports System.Reflection.Emit
+Imports System.Threading
+Imports System.Runtime.CompilerServices
+Imports System.Text.RegularExpressions
+
+
+Public Module DynamicQueryable
+
+    Const Id As String = "DynamicQueryModule Copyright © Microsoft Corporation.  All Rights Reserved." + _
+                         " This code released under the terms of the Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.) "
+
+    <Extension()> _
+    Public Function Where(Of T)(ByVal source As IQueryable(Of T), ByVal predicate As String, ByVal ParamArray values() As Object) As IQueryable(Of T)
+        Return DirectCast(Where(DirectCast(source, IQueryable), predicate, values), IQueryable(Of T))
+    End Function
+
+    <Extension()> _
+    Public Function Where(ByVal source As IQueryable, ByVal predicate As String, ByVal ParamArray values() As Object) As IQueryable
+        If source Is Nothing Then Throw New ArgumentNullException("source")
+        If predicate Is Nothing Then Throw New ArgumentNullException("predicate")
+        Dim lambda As LambdaExpression = DynamicExpression.ParseLambda(source.ElementType, GetType(Boolean), predicate, values)
+        Return source.Provider.CreateQuery( _
+                                           Expression.Call( _
+                                                           GetType(Queryable), "Where", _
+                                                           New Type() {source.ElementType}, _
+                                                           source.Expression, Expression.Quote(lambda)))
+    End Function
+
+    <Extension()> _
+    Public Function [Select](ByVal source As IQueryable, ByVal selector As String, ByVal ParamArray values() As Object) As IQueryable
+        If source Is Nothing Then Throw New ArgumentNullException("source")
+        If selector Is Nothing Then Throw New ArgumentNullException("selector")
+        Dim lambda As LambdaExpression = DynamicExpression.ParseLambda(source.ElementType, Nothing, selector, values)
+        Return source.Provider.CreateQuery( _
+                                           Expression.Call( _
+                                                           GetType(Queryable), "Select", _
+                                                           New Type() {source.ElementType, lambda.Body.Type}, _
+                                                           source.Expression, Expression.Quote(lambda)))
+    End Function
+
+    <Extension()> _
+    Public Function OrderBy(Of T)(ByVal source As IQueryable(Of T), ByVal ordering As String, ByVal ParamArray values() As Object) As IQueryable(Of T)
+        Return DirectCast(OrderBy(DirectCast(source, IQueryable), ordering, values), IQueryable(Of T))
+    End Function
+
+    <Extension()> _
+    Public Function OrderBy(ByVal source As IQueryable, ByVal ordering As String, ByVal ParamArray values() As Object) As IQueryable
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        If (ordering Is Nothing) Then Throw New ArgumentNullException("ordering")
+        Dim parameters = New ParameterExpression() { _
+                                                       Expression.Parameter(source.ElementType, "")}
+        Dim parser As New ExpressionParser(parameters, ordering, values)
+        Dim orderings As IEnumerable(Of DynamicOrdering) = parser.ParseOrdering()
+        Dim queryExpr As Expression = source.Expression
+        Dim methodAsc = "OrderBy"
+        Dim methodDesc = "OrderByDescending"
+        For Each o As DynamicOrdering In orderings
+            queryExpr = Expression.Call( _
+                                        GetType(Queryable), If(o.Ascending, methodAsc, methodDesc), _
+                                        New Type() {source.ElementType, o.Selector.Type}, _
+                                        queryExpr, Expression.Quote(Expression.Lambda(o.Selector, parameters)))
+            methodAsc = "ThenBy"
+            methodDesc = "ThenByDescending"
+        Next o
+        Return source.Provider.CreateQuery(queryExpr)
+    End Function
+
+    <Extension()> _
+    Public Function Take(ByVal source As IQueryable, ByVal count As Integer) As IQueryable
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        Return source.Provider.CreateQuery( _
+                                           Expression.Call( _
+                                                           GetType(Queryable), "Take", _
+                                                           New Type() {source.ElementType}, _
+                                                           source.Expression, Expression.Constant(count)))
+    End Function
+
+    <Extension()> _
+    Public Function Skip(ByVal source As IQueryable, ByVal count As Integer) As IQueryable
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        Return source.Provider.CreateQuery( _
+                                           Expression.Call( _
+                                                           GetType(Queryable), "Skip", _
+                                                           New Type() {source.ElementType}, _
+                                                           source.Expression, Expression.Constant(count)))
+    End Function
+
+    <Extension()> _
+    Public Function GroupBy(ByVal source As IQueryable, ByVal keySelector As String, ByVal elementSelector As String, ByVal ParamArray values() As Object) As IQueryable
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        If (keySelector Is Nothing) Then Throw New ArgumentNullException("keySelector")
+        If (elementSelector Is Nothing) Then Throw New ArgumentNullException("elementSelector")
+        Dim keyLambda As LambdaExpression = DynamicExpression.ParseLambda(source.ElementType, Nothing, keySelector, values)
+        Dim elementLambda As LambdaExpression = DynamicExpression.ParseLambda(source.ElementType, Nothing, elementSelector, values)
+        Return source.Provider.CreateQuery( _
+                                           Expression.Call( _
+                                                           GetType(Queryable), "GroupBy", _
+                                                           New Type() {source.ElementType, keyLambda.Body.Type, elementLambda.Body.Type}, _
+                                                           source.Expression, Expression.Quote(keyLambda), Expression.Quote(elementLambda)))
+    End Function
+
+    <Extension()> _
+    Public Function Any(ByVal source As IQueryable) As Boolean
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        Return CBool(source.Provider.Execute( _
+                                             Expression.Call( _
+                                                             GetType(Queryable), "Any", _
+                                                             New Type() {source.ElementType}, source.Expression)))
+    End Function
+
+    <Extension()> _
+    Public Function Count(ByVal source As IQueryable) As Integer
+        If (source Is Nothing) Then Throw New ArgumentNullException("source")
+        Return CInt(source.Provider.Execute( _
+                                            Expression.Call( _
+                                                            GetType(Queryable), "Count", _
+                                                            New Type() {source.ElementType}, source.Expression)))
+    End Function
+End Module
+
+Public MustInherit Class DynamicClass
+    Public Overrides Function ToString() As String
+        Dim props = Me.GetType().GetProperties(BindingFlags.Instance Or BindingFlags.Public)
+        Dim sb As New StringBuilder()
+        sb.Append("{")
+        For i As Integer = 0 To props.Length - 1
+            If (i > 0) Then sb.Append(", ")
+            sb.Append(props(i).Name)
+            sb.Append("=")
+            sb.Append(props(i).GetValue(Me, Nothing))
+        Next i
+
+        sb.Append("}")
+
+        Return sb.ToString()
+    End Function
+End Class
+
+Public Class DynamicProperty
+    Private _name As String
+    Private _type As Type
+
+    Public Sub New(ByVal name As String, ByVal type As Type)
+        If (name Is Nothing) Then Throw New ArgumentNullException("name")
+        If (type Is Nothing) Then Throw New ArgumentNullException("type")
+        Me._name = name
+        Me._type = type
+    End Sub
+
+    Public ReadOnly Property Name() As String
+        Get
+            Return _name
+        End Get
+    End Property
+
+    Public ReadOnly Property Type() As Type
+        Get
+            Return _type
+        End Get
+    End Property
+End Class
+
+Public Module DynamicExpression
+    Public Function Parse(ByVal resultType As Type, ByVal expression As String, ByVal ParamArray values() As Object) As Expression
+        Dim parser As New ExpressionParser(Nothing, expression, values)
+        Return parser.Parse(resultType)
+    End Function
+
+    Public Function ParseLambda(ByVal itType As Type, ByVal resultType As Type, ByVal expressionStr As String, ByVal ParamArray values() As Object) As LambdaExpression
+        Return ParseLambda(New ParameterExpression() {Expression.Parameter(itType, "")}, resultType, expressionStr, values)
+    End Function
+
+    Public Function ParseLambda(ByVal parameters() As ParameterExpression, ByVal resultType As Type, ByVal expressionStr As String, ByVal ParamArray values() As Object) As LambdaExpression
+        Dim parser As New ExpressionParser(parameters, expressionStr, values)
+        Return Expression.Lambda(parser.Parse(resultType), parameters)
+    End Function
+
+    Public Function ParseLambda(Of T, S)(ByVal expression As String, ByVal ParamArray values() As Object) As Expression(Of Func(Of T, S))
+        Return DirectCast(ParseLambda(GetType(T), GetType(S), expression, values), Expression(Of Func(Of T, S)))
+    End Function
+
+    Public Function CreateClass(ByVal ParamArray properties() As DynamicProperty) As Type
+        Return ClassFactory.Instance.GetDynamicClass(properties)
+    End Function
+
+    Public Function CreateClass(ByVal properties As IEnumerable(Of DynamicProperty)) As Type
+        Return ClassFactory.Instance.GetDynamicClass(properties)
+    End Function
+End Module
+
+Friend Class DynamicOrdering
+    Public Selector As Expression
+    Public Ascending As Boolean
+End Class
+
+Friend Class Signature : Implements IEquatable(Of Signature)
+    Public properties() As DynamicProperty
+    Public hashCode As Integer
+
+    Public Sub New(ByVal properties As IEnumerable(Of DynamicProperty))
+        Me.properties = properties.ToArray()
+        hashCode = 0
+        For Each p As DynamicProperty In Me.properties
+            hashCode = hashCode Xor p.Name.GetHashCode() Xor p.Type.GetHashCode()
+        Next p
+    End Sub
+
+    Public Overrides Function GetHashCode() As Integer
+        Return hashCode
+    End Function
+
+    Public Overrides Function Equals(ByVal obj As Object) As Boolean
+        Dim cast = TryCast(obj, Signature)
+        Return If(cast IsNot Nothing, Equals(cast), False)
+    End Function
+
+    Public Overloads Function Equals(ByVal other As Signature) As Boolean Implements IEquatable(Of Signature).Equals
+        If (properties.Length <> other.properties.Length) Then Return False
+        For i As Integer = 0 To properties.Length - 1
+            If (properties(i).Name <> other.properties(i).Name OrElse _
+                Not properties(i).Type.Equals(other.properties(i).Type)) Then
+                Return False
+            End If
+        Next i
+        Return True
+    End Function
+End Class
+
+Friend Class ClassFactory
+    Public Shared ReadOnly Instance As New ClassFactory()
+
+    Shared Sub New()
+        ' Trigger lazy initialization of static fields
+    End Sub
+
+    Private [module] As ModuleBuilder
+    Private classes As Dictionary(Of Signature, Type)
+    Private classCount As Integer
+    Private rwLock As ReaderWriterLock
+
+    Private Sub New()
+        Dim name As New AssemblyName("DynamicClasses")
+        Dim assembly As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run)
+#If ENABLE_LINQ_PARTIAL_TRUST Then
+            call new ReflectionPermission(PermissionState.Unrestricted).Assert()
+#End If
+        Try
+            [module] = assembly.DefineDynamicModule("Module")
+        Finally
+#If ENABLE_LINQ_PARTIAL_TRUST Then
+                PermissionSet.RevertAssert()
+#End If
+        End Try
+        classes = New Dictionary(Of Signature, Type)()
+        rwLock = New ReaderWriterLock()
+    End Sub
+
+    Public Function GetDynamicClass(ByVal properties As IEnumerable(Of DynamicProperty)) As Type
+        rwLock.AcquireReaderLock(Timeout.Infinite)
+
+        Try
+            Dim signature As New Signature(properties)
+            Dim type As Type = Nothing
+            If Not classes.TryGetValue(signature, type) Then
+                type = CreateDynamicClass(signature.properties)
+                classes.Add(signature, type)
+            End If
+            Return type
+        Finally
+            rwLock.ReleaseReaderLock()
+        End Try
+    End Function
+
+    Private Function CreateDynamicClass(ByVal properties() As DynamicProperty) As Type
+        Dim cookie As LockCookie = rwLock.UpgradeToWriterLock(Timeout.Infinite)
+        Try
+            Dim typeName = "DynamicClass" & (classCount + 1)
+#If ENABLE_LINQ_PARTIAL_TRUST Then
+                Call New ReflectionPermission(PermissionState.Unrestricted).Assert()
+#End If
+            Try
+                Dim tb As TypeBuilder = Me.module.DefineType(typeName, TypeAttributes.Class Or _
+                                                                       TypeAttributes.Public, GetType(DynamicClass))
+                Dim fields() As FieldInfo = GenerateProperties(tb, properties)
+                GenerateEquals(tb, fields)
+                GenerateGetHashCode(tb, fields)
+                Dim result As Type = tb.CreateType()
+                classCount += 1
+                Return result
+            Finally
+#If ENABLE_LINQ_PARTIAL_TRUST Then
+                    PermissionSet.RevertAssert()
+#End If
+            End Try
+        Finally
+            rwLock.DowngradeFromWriterLock(cookie)
+        End Try
+    End Function
+
+    Private Function GenerateProperties(ByVal tb As TypeBuilder, ByVal properties() As DynamicProperty) As FieldInfo()
+        Dim fields(properties.Length - 1) As FieldInfo
+
+        For i As Integer = 0 To properties.Length - 1
+            Dim dp As DynamicProperty = properties(i)
+            Dim fb As FieldBuilder = tb.DefineField("_" & dp.Name, dp.Type, FieldAttributes.Private)
+            Dim pb As PropertyBuilder = tb.DefineProperty(dp.Name, PropertyAttributes.HasDefault, dp.Type, Nothing)
+            Dim mbGet As MethodBuilder = tb.DefineMethod("get_" + dp.Name, _
+                                                         MethodAttributes.Public Or MethodAttributes.SpecialName Or MethodAttributes.HideBySig, _
+                                                         dp.Type, System.Type.EmptyTypes)
+            Dim genGet As ILGenerator = mbGet.GetILGenerator()
+            genGet.Emit(OpCodes.Ldarg_0)
+            genGet.Emit(OpCodes.Ldfld, fb)
+            genGet.Emit(OpCodes.Ret)
+            Dim mbSet As MethodBuilder = tb.DefineMethod("set_" & dp.Name, _
+                                                         MethodAttributes.Public Or MethodAttributes.SpecialName Or MethodAttributes.HideBySig, _
+                                                         Nothing, New Type() {dp.Type})
+            Dim genSet As ILGenerator = mbSet.GetILGenerator()
+            genSet.Emit(OpCodes.Ldarg_0)
+            genSet.Emit(OpCodes.Ldarg_1)
+            genSet.Emit(OpCodes.Stfld, fb)
+            genSet.Emit(OpCodes.Ret)
+            pb.SetGetMethod(mbGet)
+            pb.SetSetMethod(mbSet)
+            fields(i) = fb
+        Next i
+
+        Return fields
+    End Function
+
+    Private Sub GenerateEquals(ByVal tb As TypeBuilder, ByVal fields As FieldInfo())
+        Dim mb As MethodBuilder = tb.DefineMethod("Equals", _
+                                                  MethodAttributes.Public Or MethodAttributes.ReuseSlot Or _
+                                                  MethodAttributes.Virtual Or MethodAttributes.HideBySig, _
+                                                  GetType(Boolean), New Type() {GetType(Object)})
+        Dim gen As ILGenerator = mb.GetILGenerator()
+        Dim other As LocalBuilder = gen.DeclareLocal(tb)
+        Dim [next] As Label = gen.DefineLabel()
+        gen.Emit(OpCodes.Ldarg_1)
+        gen.Emit(OpCodes.Isinst, tb)
+        gen.Emit(OpCodes.Stloc, other)
+        gen.Emit(OpCodes.Ldloc, other)
+        gen.Emit(OpCodes.Brtrue_S, [next])
+        gen.Emit(OpCodes.Ldc_I4_0)
+        gen.Emit(OpCodes.Ret)
+        gen.MarkLabel([next])
+        For Each field As FieldInfo In fields
+            Dim ft As Type = field.FieldType
+            Dim ct As Type = GetType(EqualityComparer(Of Object)).GetGenericTypeDefinition().MakeGenericType(ft)
+            [next] = gen.DefineLabel()
+            gen.EmitCall(OpCodes.Call, ct.GetMethod("get_Default"), Nothing)
+            gen.Emit(OpCodes.Ldarg_0)
+            gen.Emit(OpCodes.Ldfld, field)
+            gen.Emit(OpCodes.Ldloc, other)
+            gen.Emit(OpCodes.Ldfld, field)
+            gen.EmitCall(OpCodes.Callvirt, ct.GetMethod("Equals", New Type() {ft, ft}), Nothing)
+            gen.Emit(OpCodes.Brtrue_S, [next])
+            gen.Emit(OpCodes.Ldc_I4_0)
+            gen.Emit(OpCodes.Ret)
+            gen.MarkLabel([next])
+        Next
+        gen.Emit(OpCodes.Ldc_I4_1)
+        gen.Emit(OpCodes.Ret)
+    End Sub
+
+    Private Sub GenerateGetHashCode(ByVal tb As TypeBuilder, ByVal fields As FieldInfo())
+        Dim mb As MethodBuilder = tb.DefineMethod("GetHashCode", _
+                                                  MethodAttributes.Public Or MethodAttributes.ReuseSlot Or _
+                                                  MethodAttributes.Virtual Or MethodAttributes.HideBySig, _
+                                                  GetType(Integer), System.Type.EmptyTypes)
+        Dim gen As ILGenerator = mb.GetILGenerator()
+        gen.Emit(OpCodes.Ldc_I4_0)
+        For Each field As FieldInfo In fields
+            Dim ft As Type = field.FieldType
+            Dim ct As Type = GetType(EqualityComparer(Of Object)).GetGenericTypeDefinition().MakeGenericType(ft)
+            gen.EmitCall(OpCodes.Call, ct.GetMethod("get_Default"), Nothing)
+            gen.Emit(OpCodes.Ldarg_0)
+            gen.Emit(OpCodes.Ldfld, field)
+            gen.EmitCall(OpCodes.Callvirt, ct.GetMethod("GetHashCode", New Type() {ft}), Nothing)
+            gen.Emit(OpCodes.Xor)
+        Next
+        gen.Emit(OpCodes.Ret)
+    End Sub
+End Class
+
+Public NotInheritable Class ParseException : Inherits Exception
+    Private positionValue As Integer
+
+    Public Sub New(ByVal message As String, ByVal position As Integer)
+        MyBase.New(message)
+        Me.positionValue = position
+    End Sub
+
+    Public ReadOnly Property Position() As Integer
+        Get
+            Return positionValue
+        End Get
+    End Property
+
+    Public Overrides Function ToString() As String
+        Return String.Format(Res.ParseExceptionFormat, Message, Position)
+    End Function
+End Class
+
+Class ExpressionParser
+    Structure Token
+        Public id As TokenId
+        Public text As String
+        Public pos As Integer
+    End Structure
+
+    Enum TokenId
+        Unknown
+        [End]
+        Identifier
+        StringLiteral
+        IntegerLiteral
+        RealLiteral
+        Exclamation
+        Percent
+        Amphersand
+        OpenParen
+        CloseParen
+        Asterisk
+        Plus
+        Comma
+        Minus
+        Dot
+        Slash
+        Colon
+        LessThan
+        Equal
+        GreaterThan
+        Question
+        OpenBracket
+        CloseBracket
+        Bar
+        ExclamationEqual
+        DoubleAmphersand
+        LessThanEqual
+        LessGreater
+        DoubleEqual
+        GreaterThanEqual
+        DoubleBar
+    End Enum
+
+    Interface ILogicalSignatures
+        Sub F(ByVal x As Boolean, ByVal y As Boolean)
+        Sub F(ByVal x? As Boolean, ByVal y? As Boolean)
+    End Interface
+
+    Interface IArithmeticSignatures
+        Sub F(ByVal x As Integer, ByVal y As Integer)
+        Sub F(ByVal x As UInteger, ByVal y As UInteger)
+        Sub F(ByVal x As Long, ByVal y As Long)
+        Sub F(ByVal x As ULong, ByVal y As ULong)
+        Sub F(ByVal x As Single, ByVal y As Single)
+        Sub F(ByVal x As Double, ByVal y As Double)
+        Sub F(ByVal x As Decimal, ByVal y As Decimal)
+        Sub F(ByVal x? As Integer, ByVal y? As Integer)
+        Sub F(ByVal x? As UInteger, ByVal y? As UInteger)
+        Sub F(ByVal x? As Long, ByVal y? As Long)
+        Sub F(ByVal x? As ULong, ByVal y? As ULong)
+        Sub F(ByVal x? As Single, ByVal y? As Single)
+        Sub F(ByVal x? As Double, ByVal y? As Double)
+        Sub F(ByVal x? As Decimal, ByVal y? As Decimal)
+    End Interface
+
+    Interface IRelationalSignatures : Inherits IArithmeticSignatures
+        Overloads Sub F(ByVal x As String, ByVal y As String)
+        Overloads Sub F(ByVal x As Char, ByVal y As Char)
+        Overloads Sub F(ByVal x As DateTime, ByVal y As DateTime)
+        Overloads Sub F(ByVal x As TimeSpan, ByVal y As TimeSpan)
+        Overloads Sub F(ByVal x? As Char, ByVal y? As Char)
+        Overloads Sub F(ByVal x? As DateTime, ByVal y? As DateTime)
+        Overloads Sub F(ByVal x? As TimeSpan, ByVal y? As TimeSpan)
+    End Interface
+
+    Interface IEqualitySignatures : Inherits IRelationalSignatures
+        Overloads Sub F(ByVal x As Boolean, ByVal y As Boolean)
+        Overloads Sub F(ByVal x? As Boolean, ByVal y? As Boolean)
+    End Interface
+
+    Interface IAddSignatures : Inherits IArithmeticSignatures
+        Overloads Sub F(ByVal x As DateTime, ByVal y As TimeSpan)
+        Overloads Sub F(ByVal x As TimeSpan, ByVal y As TimeSpan)
+        Overloads Sub F(ByVal x? As DateTime, ByVal y? As TimeSpan)
+        Overloads Sub F(ByVal x? As TimeSpan, ByVal y? As TimeSpan)
+    End Interface
+
+    Interface ISubtractSignatures : Inherits IAddSignatures
+        Overloads Sub F(ByVal x As DateTime, ByVal y As DateTime)
+        Overloads Sub F(ByVal x? As DateTime, ByVal y? As DateTime)
+    End Interface
+
+    Interface INegationSignatures
+        Sub F(ByVal x As Integer)
+        Sub F(ByVal x As Long)
+        Sub F(ByVal x As Single)
+        Sub F(ByVal x As Double)
+        Sub F(ByVal x As Decimal)
+        Sub F(ByVal x As Integer?)
+        Sub F(ByVal x As Long?)
+        Sub F(ByVal x As Single?)
+        Sub F(ByVal x As Double?)
+        Sub F(ByVal x As Decimal?)
+    End Interface
+
+    Interface INotSignatures
+        Sub F(ByVal x As Boolean)
+        Sub F(ByVal x? As Boolean)
+    End Interface
+
+    Interface IEnumerableSignatures
+        Sub Where(ByVal predicate As Boolean)
+        Sub Any()
+        Sub Any(ByVal predicate As Boolean)
+        Sub All(ByVal predicate As Boolean)
+        Sub Count()
+        Sub Count(ByVal predicate As Boolean)
+        Sub Min(ByVal selector As Object)
+        Sub Max(ByVal selector As Object)
+        Sub Sum(ByVal selector As Integer)
+        Sub Sum(ByVal selector? As Integer)
+        Sub Sum(ByVal selector As Long)
+        Sub Sum(ByVal selector? As Long)
+        Sub Sum(ByVal selector As Single)
+        Sub Sum(ByVal selector? As Single)
+        Sub Sum(ByVal selector As Double)
+        Sub Sum(ByVal selector? As Double)
+        Sub Sum(ByVal selector As Decimal)
+        Sub Sum(ByVal selector? As Decimal)
+        Sub Average(ByVal selector As Integer)
+        Sub Average(ByVal selector? As Integer)
+        Sub Average(ByVal selector As Long)
+        Sub Average(ByVal selector? As Long)
+        Sub Average(ByVal selector As Single)
+        Sub Average(ByVal selector? As Single)
+        Sub Average(ByVal selector As Double)
+        Sub Average(ByVal selector? As Double)
+        Sub Average(ByVal selector As Decimal)
+        Sub Average(ByVal selector? As Decimal)
+    End Interface
+
+    Shared ReadOnly predefinedTypes As Type() = { _
+                                                    GetType(Object), _
+                                                    GetType(Boolean), _
+                                                    GetType(Char), _
+                                                    GetType(String), _
+                                                    GetType(SByte), _
+                                                    GetType(Byte), _
+                                                    GetType(Int16), _
+                                                    GetType(UInt16), _
+                                                    GetType(Int32), _
+                                                    GetType(UInt32), _
+                                                    GetType(Int64), _
+                                                    GetType(UInt64), _
+                                                    GetType(Single), _
+                                                    GetType(Double), _
+                                                    GetType(Decimal), _
+                                                    GetType(DateTime), _
+                                                    GetType(TimeSpan), _
+                                                    GetType(Guid), _
+                                                    GetType(Math), _
+                                                    GetType(Convert), _
+                                                    GetType(Regex) _
+                                                }
+
+    Shared ReadOnly trueLiteral As Expression = Expression.Constant(True)
+    Shared ReadOnly falseLiteral As Expression = Expression.Constant(False)
+    Shared ReadOnly nullLiteral As Expression = Expression.Constant(Nothing)
+
+    Shared ReadOnly keywordIt As String = "it"
+    Shared ReadOnly keywordIif As String = "iif"
+    Shared ReadOnly keywordNew As String = "new"
+
+    Shared keywords As Dictionary(Of String, Object)
+
+    Dim symbols As Dictionary(Of String, Object)
+    Dim externals As IDictionary(Of String, Object)
+    Dim literals As Dictionary(Of Expression, String)
+    Dim it As ParameterExpression
+    Dim text As String
+    Dim textPos As Integer
+    Dim textLen As Integer
+    Dim ch As Char
+    Dim tokenVal As Token
+
+    Public Sub New(ByVal parameters As ParameterExpression(), ByVal expression As String, ByVal values As Object())
+        If expression Is Nothing Then Throw New ArgumentNullException("expression")
+        If keywords Is Nothing Then keywords = CreateKeywords()
+        symbols = New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase)
+        literals = New Dictionary(Of Expression, String)()
+        If parameters IsNot Nothing Then ProcessParameters(parameters)
+        If values IsNot Nothing Then ProcessValues(values)
+        text = expression
+        textLen = text.Length
+        SetTextPos(0)
+        NextToken()
+    End Sub
+
+    Sub ProcessParameters(ByVal parameters As ParameterExpression())
+        For Each pe As ParameterExpression In parameters
+            If Not String.IsNullOrEmpty(pe.Name) Then
+                AddSymbol(pe.Name, pe)
+            End If
+        Next
+
+        If (parameters.Length = 1 AndAlso String.IsNullOrEmpty(parameters(0).Name)) Then
+            it = parameters(0)
+        End If
+    End Sub
+
+    Sub ProcessValues(ByVal values As Object())
+        For i As Integer = 0 To values.Length - 1
+            Dim value As Object = values(i)
+            If i = values.Length - 1 AndAlso TryCast(value, IDictionary(Of String, Object)) IsNot Nothing Then
+                externals = DirectCast(value, IDictionary(Of String, Object))
+            Else
+                AddSymbol("@" & i.ToString(System.Globalization.CultureInfo.InvariantCulture), value)
+            End If
+        Next
+    End Sub
+
+    Sub AddSymbol(ByVal name As String, ByVal value As Object)
+        If (symbols.ContainsKey(name)) Then
+            Throw ParseError(Res.DuplicateIdentifier, name)
+        End If
+        symbols.Add(name, value)
+    End Sub
+
+    Public Function Parse(ByVal resultType As Type) As Expression
+        Dim exprPos As Integer = tokenVal.pos
+        Dim expr As Expression = ParseExpression()
+        If resultType IsNot Nothing Then
+            expr = PromoteExpression(expr, resultType, True)
+            If expr Is Nothing Then
+                Throw ParseError(exprPos, Res.ExpressionTypeMismatch, GetTypeName(resultType))
+            End If
+        End If
+        ValidateToken(TokenId.End, Res.SyntaxError)
+        Return expr
+    End Function
+
+    Public Function ParseOrdering() As IEnumerable(Of DynamicOrdering)
+        Dim orderings As List(Of DynamicOrdering) = New List(Of DynamicOrdering)()
+        Do
+            Dim expr As Expression = ParseExpression()
+            Dim ascending As Boolean = True
+            If TokenIdentifierIs("asc") OrElse TokenIdentifierIs("ascending") Then
+                NextToken()
+            ElseIf TokenIdentifierIs("desc") OrElse TokenIdentifierIs("descending") Then
+                NextToken()
+                ascending = False
+            End If
+            orderings.Add(New DynamicOrdering() With {.Selector = expr, .Ascending = ascending})
+            If tokenVal.id <> TokenId.Comma Then Exit Do
+            NextToken()
+        Loop
+        ValidateToken(TokenId.End, Res.SyntaxError)
+        Return orderings
+    End Function
+    '#pragma warning restore 0219
+
+    ' ?: operator
+    Function ParseExpression() As Expression
+        Dim errorPos As Integer = tokenVal.pos
+        Dim expr As Expression = ParseLogicalOr()
+        If tokenVal.id = TokenId.Question Then
+            NextToken()
+            Dim expr1 As Expression = ParseExpression()
+            ValidateToken(TokenId.Colon, Res.ColonExpected)
+            NextToken()
+            Dim expr2 As Expression = ParseExpression()
+            expr = GenerateConditional(expr, expr1, expr2, errorPos)
+        End If
+        Return expr
+    End Function
+
+    ' ||, or,orelse operator
+    Function ParseLogicalOr() As Expression
+        Dim left As Expression = ParseLogicalAnd()
+        Do While tokenVal.id = TokenId.DoubleBar OrElse TokenIdentifierIs("or") OrElse TokenIdentifierIs("orelse")
+            Dim op As Token = tokenVal
+            NextToken()
+            Dim right As Expression = ParseLogicalAnd()
+            CheckAndPromoteOperands(GetType(ILogicalSignatures), op.text, left, right, op.pos)
+            left = Expression.OrElse(left, right)
+        Loop
+        Return left
+    End Function
+
+    ' &&, and, andalso operator
+    Function ParseLogicalAnd() As Expression
+        Dim left As Expression = ParseComparison()
+        Do While tokenVal.id = TokenId.DoubleAmphersand OrElse TokenIdentifierIs("and") OrElse TokenIdentifierIs("andalso")
+            Dim op As Token = tokenVal
+            NextToken()
+            Dim right As Expression = ParseComparison()
+            CheckAndPromoteOperands(GetType(ILogicalSignatures), op.text, left, right, op.pos)
+            left = Expression.AndAlso(left, right)
+        Loop
+        Return left
+    End Function
+
+    ' =, ==, !=, <>, >, >=, <, <= operators
+    Function ParseComparison() As Expression
+        Dim left As Expression = ParseAdditive()
+        Do While tokenVal.id = TokenId.Equal OrElse tokenVal.id = TokenId.DoubleEqual OrElse _
+                 tokenVal.id = TokenId.ExclamationEqual OrElse tokenVal.id = TokenId.LessGreater OrElse _
+                 tokenVal.id = TokenId.GreaterThan OrElse tokenVal.id = TokenId.GreaterThanEqual OrElse _
+                 tokenVal.id = TokenId.LessThan OrElse tokenVal.id = TokenId.LessThanEqual
+            Dim op As Token = tokenVal
+            NextToken()
+            Dim right As Expression = ParseAdditive()
+            Dim isEquality As Boolean = (op.id = TokenId.Equal OrElse op.id = TokenId.DoubleEqual OrElse _
+                                         op.id = TokenId.ExclamationEqual OrElse op.id = TokenId.LessGreater)
+            If isEquality AndAlso Not left.Type.IsValueType AndAlso Not right.Type.IsValueType Then
+                If Not left.Type.Equals(right.Type) Then
+                    If left.Type.IsAssignableFrom(right.Type) Then
+                        right = Expression.Convert(right, left.Type)
+                    ElseIf right.Type.IsAssignableFrom(left.Type) Then
+                        left = Expression.Convert(left, right.Type)
+                    Else
+                        Throw IncompatibleOperandsError(op.text, left, right, op.pos)
+                    End If
+                End If
+            ElseIf IsEnumType(left.Type) OrElse IsEnumType(right.Type) Then
+                If Not left.Type.Equals(right.Type) Then
+                    Dim e As Expression = PromoteExpression(right, left.Type, True)
+                    If e IsNot Nothing Then
+                        right = e
+                    Else
+                        e = PromoteExpression(left, right.Type, True)
+                        If e Is Nothing Then
+                            Throw IncompatibleOperandsError(op.text, left, right, op.pos)
+                        End If
+                        left = e
+                    End If
+                End If
+            Else
+                CheckAndPromoteOperands(If(isEquality, GetType(IEqualitySignatures), GetType(IRelationalSignatures)), _
+                                        op.text, left, right, op.pos)
+            End If
+            Select Case op.id
+                Case TokenId.Equal, TokenId.DoubleEqual
+                    left = GenerateEqual(left, right)
+                Case TokenId.ExclamationEqual, TokenId.LessGreater
+                    left = GenerateNotEqual(left, right)
+                Case TokenId.GreaterThan
+                    left = GenerateGreaterThan(left, right)
+                Case TokenId.GreaterThanEqual
+                    left = GenerateGreaterThanEqual(left, right)
+                Case TokenId.LessThan
+                    left = GenerateLessThan(left, right)
+                Case TokenId.LessThanEqual
+                    left = GenerateLessThanEqual(left, right)
+            End Select
+        Loop
+        Return left
+    End Function
+
+    ' +, -, & operators
+    Function ParseAdditive() As Expression
+        Dim left = ParseMultiplicative()
+        Do While tokenVal.id = TokenId.Plus OrElse tokenVal.id = TokenId.Minus OrElse _
+                 tokenVal.id = TokenId.Amphersand
+            Dim op = tokenVal
+            NextToken()
+            Dim right = ParseMultiplicative()
+            Select Case op.id
+                Case TokenId.Plus
+                    If left.Type.Equals(GetType(String)) OrElse right.Type.Equals(GetType(String)) Then
+                        GoTo amphersand
+                    End If
+                    CheckAndPromoteOperands(GetType(IAddSignatures), op.text, left, right, op.pos)
+                    left = GenerateAdd(left, right)
+                Case TokenId.Minus
+                    CheckAndPromoteOperands(GetType(ISubtractSignatures), op.text, left, right, op.pos)
+                    left = GenerateSubtract(left, right)
+                Case TokenId.Amphersand
+amphersand:
+                    left = GenerateStringConcat(left, right)
+            End Select
+        Loop
+        Return left
+    End Function
+
+    ' *, /, %, mod operators
+    Function ParseMultiplicative() As Expression
+        Dim left = ParseUnary()
+        Do While tokenVal.id = TokenId.Asterisk OrElse tokenVal.id = TokenId.Slash OrElse _
+                 tokenVal.id = TokenId.Percent OrElse TokenIdentifierIs("mod")
+            Dim op = tokenVal
+            NextToken()
+            Dim right = ParseUnary()
+            CheckAndPromoteOperands(GetType(IArithmeticSignatures), op.text, left, right, op.pos)
+            Select Case op.id
+                Case TokenId.Asterisk
+                    left = Expression.Multiply(left, right)
+                Case TokenId.Slash
+                    left = Expression.Divide(left, right)
+                Case TokenId.Percent, TokenId.Identifier
+                    left = Expression.Modulo(left, right)
+            End Select
+        Loop
+        Return left
+    End Function
+
+    ' -, !, not unary operators
+    Function ParseUnary() As Expression
+        If tokenVal.id = TokenId.Minus OrElse tokenVal.id = TokenId.Exclamation OrElse _
+           TokenIdentifierIs("not") Then
+
+            Dim op = tokenVal
+            NextToken()
+            If op.id = TokenId.Minus AndAlso (tokenVal.id = TokenId.IntegerLiteral OrElse _
+                                              tokenVal.id = TokenId.RealLiteral) Then
+                tokenVal.text = "-" & tokenVal.text
+                tokenVal.pos = op.pos
+                Return ParsePrimary()
+            End If
+            Dim expr = ParseUnary()
+            If op.id = TokenId.Minus Then
+                CheckAndPromoteOperand(GetType(INegationSignatures), op.text, expr, op.pos)
+                expr = Expression.Negate(expr)
+            Else
+                CheckAndPromoteOperand(GetType(INotSignatures), op.text, expr, op.pos)
+                expr = Expression.Not(expr)
+            End If
+            Return expr
+        End If
+        Return ParsePrimary()
+    End Function
+
+    Function ParsePrimary() As Expression
+        Dim expr = ParsePrimaryStart()
+        Do
+            If tokenVal.id = TokenId.Dot Then
+                NextToken()
+                expr = ParseMemberAccess(Nothing, expr)
+            ElseIf tokenVal.id = TokenId.OpenBracket Then
+                expr = ParseElementAccess(expr)
+            Else
+                Exit Do
+            End If
+        Loop
+        Return expr
+    End Function
+
+    Function ParsePrimaryStart() As Expression
+        Select Case tokenVal.id
+            Case TokenId.Identifier
+                Return ParseIdentifier()
+            Case TokenId.StringLiteral
+                Return ParseStringLiteral()
+            Case TokenId.IntegerLiteral
+                Return ParseIntegerLiteral()
+            Case TokenId.RealLiteral
+                Return ParseRealLiteral()
+            Case TokenId.OpenParen
+                Return ParseParenExpression()
+            Case Else
+                Throw ParseError(Res.ExpressionExpected)
+        End Select
+    End Function
+
+    Function ParseStringLiteral() As Expression
+        ValidateToken(TokenId.StringLiteral)
+
+        Dim quote = tokenVal.text(0)
+        Dim s = tokenVal.text.Substring(1, tokenVal.text.Length - 2)
+        Dim start = 0
+
+        Do
+            Dim i = s.IndexOf(quote, start)
+            If i < 0 Then Exit Do
+            s = s.Remove(i, 1)
+            start = i + 1
+        Loop
+
+        If quote = "'" Then
+            If s.Length <> 1 Then
+                Throw ParseError(Res.InvalidCharacterLiteral)
+            End If
+            NextToken()
+            Return CreateLiteral(s(0), s)
+        End If
+        NextToken()
+        Return CreateLiteral(s, s)
+    End Function
+
+    Function ParseIntegerLiteral() As Expression
+        ValidateToken(TokenId.IntegerLiteral)
+        Dim text = tokenVal.text
+        If text(0) <> "-" Then
+            Dim value As ULong = 0
+            If Not UInt64.TryParse(text, value) Then
+                Throw ParseError(Res.InvalidIntegerLiteral, text)
+            End If
+
+            NextToken()
+            If value <= CULng(Int32.MaxValue) Then Return CreateLiteral(CInt(value), text)
+            If value <= CULng(UInt32.MaxValue) Then Return CreateLiteral(CUInt(value), text)
+            If value <= CULng(Int64.MaxValue) Then Return CreateLiteral(CLng(value), text)
+            Return CreateLiteral(value, text)
+        Else
+            Dim value As Long = 0
+            If Not Int64.TryParse(text, value) Then
+                Throw ParseError(Res.InvalidIntegerLiteral, text)
+            End If
+            NextToken()
+            If (value >= Int32.MinValue AndAlso value <= Int32.MaxValue) Then
+                Return CreateLiteral(CInt(value), text)
+            End If
+            Return CreateLiteral(value, text)
+        End If
+    End Function
+
+    Function ParseRealLiteral() As Expression
+        ValidateToken(TokenId.RealLiteral)
+        Dim text = tokenVal.text
+        Dim value As Object = Nothing
+        Dim last = text(text.Length - 1)
+        If last = "f" Or last = "F" Then
+            Dim f As Single
+            If Single.TryParse(text.Substring(0, text.Length - 1), f) Then value = f
+
+        Else
+            Dim d As Double
+            If Double.TryParse(text, d) Then value = d
+        End If
+
+        If value Is Nothing Then Throw ParseError(Res.InvalidRealLiteral, text)
+        NextToken()
+        Return CreateLiteral(value, text)
+    End Function
+
+    Function CreateLiteral(ByVal value As Object, ByVal text As String) As Expression
+        Dim expr = Expression.Constant(value)
+        literals.Add(expr, text)
+        Return expr
+    End Function
+
+    Function ParseParenExpression() As Expression
+        ValidateToken(TokenId.OpenParen, Res.OpenParenExpected)
+        NextToken()
+        Dim e = ParseExpression()
+        ValidateToken(TokenId.CloseParen, Res.CloseParenOrOperatorExpected)
+        NextToken()
+        Return e
+    End Function
+
+    Function ParseIdentifier() As Expression
+        ValidateToken(TokenId.Identifier)
+        Dim value As Object = Nothing
+        If keywords.TryGetValue(tokenVal.text, value) Then
+            If TryCast(value, Type) IsNot Nothing Then Return ParseTypeAccess(DirectCast(value, Type))
+            If value Is keywordIt Then Return ParseIt()
+            If value Is keywordIif Then Return ParseIif()
+            If value Is keywordNew Then Return ParseNew()
+            NextToken()
+            Return DirectCast(value, Expression)
+        End If
+
+        If symbols.TryGetValue(tokenVal.text, value) OrElse _
+           externals IsNot Nothing AndAlso externals.TryGetValue(tokenVal.text, value) Then
+            Dim expr = TryCast(value, Expression)
+            If expr Is Nothing Then
+                expr = Expression.Constant(value)
+            Else
+                Dim lambda = TryCast(expr, LambdaExpression)
+                If lambda IsNot Nothing Then Return ParseLambdaInvocation(lambda)
+            End If
+            NextToken()
+            Return expr
+        End If
+        If it IsNot Nothing Then Return ParseMemberAccess(Nothing, it)
+        Throw ParseError(Res.UnknownIdentifier, tokenVal.text)
+    End Function
+
+    Function ParseIt() As Expression
+        If it Is Nothing Then Throw ParseError(Res.NoItInScope)
+        NextToken()
+        Return it
+    End Function
+
+    Function ParseIif() As Expression
+        Dim errorPos = tokenVal.pos
+        NextToken()
+        Dim args As Expression() = ParseArgumentList()
+        If args.Length <> 3 Then
+            Throw ParseError(errorPos, Res.IifRequiresThreeArgs)
+        End If
+        Return GenerateConditional(args(0), args(1), args(2), errorPos)
+    End Function
+
+    Function GenerateConditional(ByVal test As Expression, ByVal expr1 As Expression, ByVal expr2 As Expression, ByVal errorPos As Integer) As Expression
+        If Not test.Type.Equals(GetType(Boolean)) Then
+            Throw ParseError(errorPos, Res.FirstExprMustBeBool)
+        End If
+        If Not expr1.Type.Equals(expr2.Type) Then
+            Dim expr1as2 As Expression = If(Not expr2.Equals(nullLiteral), PromoteExpression(expr1, expr2.Type, True), Nothing)
+            Dim expr2as1 As Expression = If(Not expr1.Equals(nullLiteral), PromoteExpression(expr2, expr1.Type, True), Nothing)
+            If expr1as2 IsNot Nothing And expr2as1 Is Nothing Then
+                expr1 = expr1as2
+            ElseIf expr2as1 IsNot Nothing And expr1as2 Is Nothing Then
+                expr2 = expr2as1
+            Else
+                Dim type1 = If(Not expr1.Equals(nullLiteral), expr1.Type.Name, "null")
+                Dim type2 = If(Not expr2.Equals(nullLiteral), expr2.Type.Name, "null")
+                If expr1as2 IsNot Nothing And expr2as1 IsNot Nothing Then
+                    Throw ParseError(errorPos, Res.BothTypesConvertToOther, type1, type2)
+                End If
+                Throw ParseError(errorPos, Res.NeitherTypeConvertsToOther, type1, type2)
+            End If
+        End If
+        Return Expression.Condition(test, expr1, expr2)
+    End Function
+
+    Function ParseNew() As Expression
+        NextToken()
+        ValidateToken(TokenId.OpenParen, Res.OpenParenExpected)
+        NextToken()
+        Dim properties As New List(Of DynamicProperty)()
+        Dim expressions As New List(Of Expression)()
+        Do
+            Dim exprPos = tokenVal.pos
+            Dim expr = ParseExpression()
+            Dim propName As String
+            If TokenIdentifierIs("as") Then
+                NextToken()
+                propName = GetIdentifier()
+                NextToken()
+            Else
+                Dim [me] As MemberExpression = TryCast(expr, MemberExpression)
+                If [me] Is Nothing Then Throw ParseError(exprPos, Res.MissingAsClause)
+                propName = [me].Member.Name
+            End If
+            expressions.Add(expr)
+            properties.Add(New DynamicProperty(propName, expr.Type))
+            If tokenVal.id <> TokenId.Comma Then Exit Do
+            NextToken()
+        Loop
+        ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected)
+        NextToken()
+        Dim type As Type = DynamicExpression.CreateClass(properties)
+        Dim bindings(properties.Count - 1) As MemberBinding
+        For i As Integer = 0 To bindings.Length - 1
+            bindings(i) = Expression.Bind(type.GetProperty(properties(i).Name), expressions(i))
+        Next
+        Return Expression.MemberInit(Expression.[New](type), bindings)
+    End Function
+
+    Function ParseLambdaInvocation(ByVal lambda As LambdaExpression) As Expression
+        Dim errorPos = tokenVal.pos
+        NextToken()
+        Dim args As Expression() = ParseArgumentList()
+        Dim method As MethodBase = Nothing
+        If FindMethod(lambda.Type, "Invoke", False, args, method) <> 1 Then
+            Throw ParseError(errorPos, Res.ArgsIncompatibleWithLambda)
+        End If
+        Return Expression.Invoke(lambda, args)
+    End Function
+
+    Function ParseTypeAccess(ByVal type As Type) As Expression
+        Dim errorPos = tokenVal.pos
+        NextToken()
+
+        If tokenVal.id = TokenId.Question Then
+            If (Not type.IsValueType) OrElse IsNullableType(type) Then
+                Throw ParseError(errorPos, Res.TypeHasNoNullableForm, GetTypeName(type))
+            End If
+            type = GetType(Nullable(Of Integer)).GetGenericTypeDefinition().MakeGenericType(type)
+            NextToken()
+        End If
+        If tokenVal.id = TokenId.OpenParen Then
+            Dim args As Expression() = ParseArgumentList()
+            Dim method As MethodBase = Nothing
+            Select Case FindBestMethod(type.GetConstructors(), args, method)
+                Case 0
+                    If args.Length = 1 Then
+                        Return GenerateConversion(args(0), type, errorPos)
+                    End If
+                    Throw ParseError(errorPos, Res.NoMatchingConstructor, GetTypeName(type))
+                Case 1
+                    Return Expression.[New](DirectCast(method, ConstructorInfo), args)
+                Case Else
+                    Throw ParseError(errorPos, Res.AmbiguousConstructorInvocation, GetTypeName(type))
+            End Select
+        End If
+        ValidateToken(TokenId.Dot, Res.DotOrOpenParenExpected)
+        NextToken()
+        Return ParseMemberAccess(type, Nothing)
+    End Function
+
+    Function GenerateConversion(ByVal expr As Expression, ByVal type As Type, ByVal errorPos As Integer) As Expression
+        Dim exprType = expr.Type
+        If exprType.Equals(type) Then Return expr
+        If exprType.IsValueType AndAlso type.IsValueType Then
+            If (IsNullableType(exprType) OrElse IsNullableType(type)) AndAlso _
+               GetNonNullableType(exprType).Equals(GetNonNullableType(type)) Then
+
+                Return Expression.Convert(expr, type)
+            End If
+            If (IsNumericType(exprType) OrElse IsEnumType(exprType)) AndAlso _
+               (IsNumericType(type) OrElse IsEnumType(type)) Then
+
+                Return Expression.ConvertChecked(expr, type)
+            End If
+        End If
+        If exprType.IsAssignableFrom(type) OrElse type.IsAssignableFrom(exprType) OrElse _
+           exprType.IsInterface OrElse type.IsInterface Then
+            Return Expression.Convert(expr, type)
+        End If
+        Throw ParseError(errorPos, Res.CannotConvertValue, _
+                         GetTypeName(exprType), GetTypeName(type))
+    End Function
+
+
+    Function ParseMemberAccess(ByVal type As Type, ByVal instance As Expression) As Expression
+        If instance IsNot Nothing Then type = instance.Type
+        Dim errorPos = tokenVal.pos
+        Dim id = GetIdentifier()
+        NextToken()
+        If tokenVal.id = TokenId.OpenParen Then
+            If instance IsNot Nothing AndAlso Not type.Equals(GetType(String)) Then
+                Dim enumerableType As Type = FindGenericType(GetType(IEnumerable(Of Object)).GetGenericTypeDefinition(), type)
+                If enumerableType IsNot Nothing Then
+                    Dim elementType As Type = enumerableType.GetGenericArguments()(0)
+                    Return ParseAggregate(instance, elementType, id, errorPos)
+                End If
+            End If
+            Dim args As Expression() = ParseArgumentList()
+            Dim mb As MethodBase = Nothing
+            Select Case FindMethod(type, id, instance Is Nothing, args, mb)
+                Case 0
+                    Throw ParseError(errorPos, Res.NoApplicableMethod, id, GetTypeName(type))
+                Case 1
+                    Dim method = DirectCast(mb, MethodInfo)
+                    If (Not IsPredefinedType(method.DeclaringType)) Then
+                        Throw ParseError(errorPos, Res.MethodsAreInaccessible, GetTypeName(method.DeclaringType))
+                    End If
+                    If method.ReturnType.Equals(GetType(Void)) Then
+                        Throw ParseError(errorPos, Res.MethodIsVoid, id, GetTypeName(method.DeclaringType))
+                    End If
+                    Return Expression.Call(instance, DirectCast(method, MethodInfo), args)
+                Case Else
+                    Throw ParseError(errorPos, Res.AmbiguousMethodInvocation, id, GetTypeName(type))
+            End Select
+        Else
+            Dim member As MemberInfo = FindPropertyOrField(type, id, instance Is Nothing)
+            If member Is Nothing Then
+                Throw ParseError(errorPos, Res.UnknownPropertyOrField, id, GetTypeName(type))
+            End If
+            Return If(TryCast(member, PropertyInfo) IsNot Nothing, _
+                      Expression.Property(instance, DirectCast(member, PropertyInfo)), _
+                      Expression.Field(instance, DirectCast(member, FieldInfo)))
+        End If
+    End Function
+
+    Shared Function FindGenericType(ByVal generic As Type, ByVal type As Type) As Type
+        Do While type IsNot Nothing AndAlso Not type.Equals(GetType(Object))
+            If type.IsGenericType AndAlso type.GetGenericTypeDefinition().Equals(generic) Then Return type
+            If generic.IsInterface Then
+                For Each intfType As Type In type.GetInterfaces()
+                    Dim found As Type = FindGenericType(generic, intfType)
+                    If found IsNot Nothing Then Return found
+                Next
+            End If
+            type = type.BaseType
+        Loop
+        Return Nothing
+    End Function
+
+    Function ParseAggregate(ByVal instance As Expression, ByVal elementType As Type, ByVal methodName As String, ByVal errorPos As Integer) As Expression
+        Dim outerIt As ParameterExpression = it
+        Dim innerIt As ParameterExpression = Expression.Parameter(elementType, "")
+        it = innerIt
+        Dim args As Expression() = ParseArgumentList()
+        it = outerIt
+        Dim signature As MethodBase = Nothing
+        If FindMethod(GetType(IEnumerableSignatures), methodName, False, args, signature) <> 1 Then
+            Throw ParseError(errorPos, Res.NoApplicableAggregate, methodName)
+        End If
+        Dim typeArgs As Type()
+        If signature.Name = "Min" OrElse signature.Name = "Max" Then
+            typeArgs = New Type() {elementType, args(0).Type}
+        Else
+            typeArgs = New Type() {elementType}
+        End If
+
+        If args.Length = 0 Then
+            args = New Expression() {instance}
+        Else
+            args = New Expression() {instance, Expression.Lambda(args(0), innerIt)}
+        End If
+        Return Expression.Call(GetType(Enumerable), signature.Name, typeArgs, args)
+    End Function
+
+    Function ParseArgumentList() As Expression()
+        ValidateToken(TokenId.OpenParen, Res.OpenParenExpected)
+        NextToken()
+        Dim args As Expression() = If(tokenVal.id <> TokenId.CloseParen, ParseArguments(), New Expression(-1) {})
+        ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected)
+        NextToken()
+        Return args
+    End Function
+
+    Function ParseArguments() As Expression()
+        Dim argList As New List(Of Expression)()
+        Do
+            argList.Add(ParseExpression())
+            If tokenVal.id <> TokenId.Comma Then Exit Do
+            NextToken()
+        Loop
+        Return argList.ToArray()
+    End Function
+
+    Function ParseElementAccess(ByVal expr As Expression) As Expression
+        Dim errorPos As Integer = tokenVal.pos
+        ValidateToken(TokenId.OpenBracket, Res.OpenParenExpected)
+        NextToken()
+        Dim args As Expression() = ParseArguments()
+        ValidateToken(TokenId.CloseBracket, Res.CloseBracketOrCommaExpected)
+        NextToken()
+        If expr.Type.IsArray Then
+            If expr.Type.GetArrayRank() <> 1 OrElse args.Length <> 1 Then
+                Throw ParseError(errorPos, Res.CannotIndexMultiDimArray)
+            End If
+            Dim index As Expression = PromoteExpression(args(0), GetType(Integer), True)
+            If index Is Nothing Then
+                Throw ParseError(errorPos, Res.InvalidIndex)
+            End If
+            Return Expression.ArrayIndex(expr, index)
+        Else
+            Dim mb As MethodBase = Nothing
+            Select Case FindIndexer(expr.Type, args, mb)
+                Case 0
+                    Throw ParseError(errorPos, Res.NoApplicableIndexer, GetTypeName(expr.Type))
+                Case 1
+                    Return Expression.Call(expr, DirectCast(mb, MethodInfo), args)
+                Case Else
+                    Throw ParseError(errorPos, Res.AmbiguousIndexerInvocation, GetTypeName(expr.Type))
+            End Select
+        End If
+    End Function
+
+    Shared Function IsPredefinedType(ByVal type As Type) As Boolean
+        For Each t As Type In predefinedTypes
+            If t.Equals(type) Then Return True
+        Next
+
+        Return False
+    End Function
+
+    Shared Function IsNullableType(ByVal type As Type) As Boolean
+        Return type.IsGenericType AndAlso type.GetGenericTypeDefinition().Equals(GetType(Nullable(Of Integer)).GetGenericTypeDefinition())
+    End Function
+
+    Shared Function GetNonNullableType(ByVal type As Type) As Type
+        Return If(IsNullableType(type), type.GetGenericArguments()(0), type)
+    End Function
+
+    Shared Function GetTypeName(ByVal type As Type) As String
+        Dim baseType = GetNonNullableType(type)
+        Dim s = baseType.Name
+        If Not type.Equals(baseType) Then s &= "?"
+        Return s
+    End Function
+
+    Shared Function IsNumericType(ByVal type As Type) As Boolean
+        Return GetNumericTypeKind(type) <> 0
+    End Function
+
+    Shared Function IsSignedIntegralType(ByVal type As Type) As Boolean
+        Return GetNumericTypeKind(type) = 2
+    End Function
+
+    Shared Function IsUnsignedIntegralType(ByVal type As Type) As Boolean
+        Return GetNumericTypeKind(type) = 3
+    End Function
+
+    Shared Function GetNumericTypeKind(ByVal type As Type) As Integer
+        type = GetNonNullableType(type)
+        If type.IsEnum Then Return 0
+        Select Case type.GetTypeCode(type)
+            Case TypeCode.Char, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                Return 1
+            Case TypeCode.SByte, TypeCode.Int16, TypeCode.Int32, TypeCode.Int64
+                Return 2
+            Case TypeCode.Byte, TypeCode.UInt16, TypeCode.UInt32, TypeCode.UInt64
+                Return 3
+            Case Else
+                Return 0
+        End Select
+    End Function
+
+    Shared Function IsEnumType(ByVal type As Type) As Boolean
+        Return GetNonNullableType(type).IsEnum
+    End Function
+
+    Sub CheckAndPromoteOperand(ByVal signatures As Type, ByVal opName As String, ByRef expr As Expression, ByVal errorPos As Integer)
+        Dim args As Expression() = New Expression() {expr}
+        Dim method As MethodBase = Nothing
+        If FindMethod(signatures, "F", False, args, method) <> 1 Then
+            Throw ParseError(errorPos, Res.IncompatibleOperand, opName, GetTypeName(args(0).Type))
+        End If
+        expr = args(0)
+    End Sub
+
+    Sub CheckAndPromoteOperands(ByVal signatures As Type, ByVal opName As String, ByRef left As Expression, ByRef right As Expression, ByVal errorPos As Integer)
+        Dim args As Expression() = New Expression() {left, right}
+        Dim method As MethodBase = Nothing
+        If FindMethod(signatures, "F", False, args, method) <> 1 Then
+            Throw IncompatibleOperandsError(opName, left, right, errorPos)
+        End If
+        left = args(0)
+        right = args(1)
+    End Sub
+
+    Function IncompatibleOperandsError(ByVal opName As String, ByVal left As Expression, ByVal right As Expression, ByVal pos As Integer) As Exception
+        Return ParseError(pos, Res.IncompatibleOperands, opName, GetTypeName(left.Type), GetTypeName(right.Type))
+    End Function
+
+    Function FindPropertyOrField(ByVal type As Type, ByVal memberName As String, ByVal staticAccess As Boolean) As MemberInfo
+        Dim flags As BindingFlags = BindingFlags.Public Or BindingFlags.DeclaredOnly Or _
+                                    If(staticAccess, BindingFlags.Static, BindingFlags.Instance)
+        For Each t As Type In SelfAndBaseTypes(type)
+            Dim members As MemberInfo() = t.FindMembers(MemberTypes.Property Or MemberTypes.Field, _
+                                                        flags, type.FilterNameIgnoreCase, memberName)
+            If members.Length <> 0 Then Return members(0)
+        Next
+        Return Nothing
+    End Function
+
+    Function FindMethod(ByVal type As Type, ByVal methodName As String, ByVal staticAccess As Boolean, ByVal args As Expression(), ByRef method As MethodBase) As Integer
+        Dim flags As BindingFlags = BindingFlags.Public Or BindingFlags.DeclaredOnly Or _
+                                    If(staticAccess, BindingFlags.Static, BindingFlags.Instance)
+        For Each t As Type In SelfAndBaseTypes(type)
+            Dim members As MemberInfo() = t.FindMembers(MemberTypes.Method, _
+                                                        flags, type.FilterNameIgnoreCase, methodName)
+            Dim count As Integer = FindBestMethod(members.Cast(Of MethodBase)(), args, method)
+            If count <> 0 Then Return count
+        Next
+        method = Nothing
+        Return 0
+    End Function
+
+    Function FindIndexer(ByVal type As Type, ByVal args As Expression(), ByRef method As MethodBase) As Integer
+        For Each t As Type In SelfAndBaseTypes(type)
+            Dim members As MemberInfo() = t.GetDefaultMembers()
+            If members.Length <> 0 Then
+                Dim methods As IEnumerable(Of MethodBase) = members. _
+                        OfType(Of PropertyInfo)(). _
+                        Select(Function(p) DirectCast(p.GetGetMethod(), MethodBase)). _
+                        Where(Function(m) m IsNot Nothing)
+                Dim count As Integer = FindBestMethod(methods, args, method)
+                If count <> 0 Then Return count
+            End If
+        Next
+        method = Nothing
+        Return 0
+    End Function
+
+    Shared Function SelfAndBaseTypes(ByVal type As Type) As IEnumerable(Of Type)
+        If type.IsInterface Then
+            Dim types As New List(Of Type)()
+            AddInterface(types, type)
+            Return types
+        End If
+        Return SelfAndBaseClasses(type)
+    End Function
+
+    Shared Function SelfAndBaseClasses(ByVal type As Type) As IEnumerable(Of Type)
+        Dim results As New LinkedList(Of Type)()
+
+        Do While type IsNot Nothing
+            results.AddLast(type)
+            type = type.BaseType
+        Loop
+
+        Return results
+    End Function
+
+    Shared Sub AddInterface(ByVal types As List(Of Type), ByVal type As Type)
+        If Not types.Contains(type) Then
+            types.Add(type)
+        End If
+        For Each t As Type In type.GetInterfaces()
+            AddInterface(types, t)
+        Next
+    End Sub
+
+    Class MethodData
+        Public MethodBase As MethodBase
+        Public Parameters As ParameterInfo()
+        Public Args As Expression()
+    End Class
+
+    Function FindBestMethod(ByVal methods As IEnumerable(Of MethodBase), ByVal args As Expression(), ByRef method As MethodBase) As Integer
+        Dim applicable As MethodData() = methods. _
+                Select(Function(m) New MethodData With {.MethodBase = m, .Parameters = m.GetParameters()}). _
+                Where(Function(m) IsApplicable(m, args)). _
+                ToArray()
+        If applicable.Length > 1 Then
+            applicable = applicable. _
+                Where(Function(m) applicable.All(Function(n) m Is n OrElse IsBetterThan(args, m, n))). _
+                ToArray()
+        End If
+        If applicable.Length = 1 Then
+            Dim md As MethodData = applicable(0)
+            For i As Integer = 0 To args.Length - 1
+                args(i) = md.Args(i)
+            Next
+            method = md.MethodBase
+        Else
+            method = Nothing
+        End If
+        Return applicable.Length
+    End Function
+
+    Function IsApplicable(ByVal method As MethodData, ByVal args As Expression()) As Boolean
+        If method.Parameters.Length <> args.Length Then Return False
+        Dim promotedArgs As Expression() = New Expression(args.Length - 1) {}
+
+        For i As Integer = 0 To args.Length - 1
+            Dim pi As ParameterInfo = method.Parameters(i)
+            If pi.IsOut Then Return False
+            Dim promoted As Expression = PromoteExpression(args(i), pi.ParameterType, False)
+            If promoted Is Nothing Then Return False
+            promotedArgs(i) = promoted
+        Next i
+        method.Args = promotedArgs
+
+        Return True
+    End Function
+
+    Function PromoteExpression(ByVal expr As Expression, ByVal type As Type, ByVal exact As Boolean) As Expression
+        If expr.Type.Equals(type) Then Return expr
+        If TryCast(expr, ConstantExpression) IsNot Nothing Then
+            Dim ce = DirectCast(expr, ConstantExpression)
+            If ce.Equals(nullLiteral) Then
+                If Not type.IsValueType OrElse IsNullableType(type) Then
+                    Return Expression.Constant(Nothing, type)
+                End If
+            Else
+                Dim text As String = Nothing
+                If literals.TryGetValue(ce, text) Then
+                    Dim target As Type = GetNonNullableType(type)
+                    Dim value As Object = Nothing
+                    Select Case type.GetTypeCode(ce.Type)
+                        Case TypeCode.Int32, TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64
+                            value = ParseNumber(text, target)
+                        Case TypeCode.Double
+                            If target.Equals(GetType(Decimal)) Then value = ParseNumber(text, target)
+                        Case TypeCode.String
+                            value = ParseEnum(text, target)
+                    End Select
+                    If value IsNot Nothing Then Return Expression.Constant(value, type)
+                End If
+            End If
+        End If
+
+        If IsCompatibleWith(expr.Type, type) Then
+            If type.IsValueType OrElse exact Then Return Expression.Convert(expr, type)
+            Return expr
+        End If
+        Return Nothing
+    End Function
+
+    Shared Function ParseNumber(ByVal text As String, ByVal type As Type) As Object
+        Select Case type.GetTypeCode(GetNonNullableType(type))
+            Case TypeCode.SByte
+                Dim sb As SByte
+                If SByte.TryParse(text, sb) Then Return sb
+            Case TypeCode.Byte
+                Dim b As Byte
+                If Byte.TryParse(text, b) Then Return b
+            Case TypeCode.Int16
+                Dim s As Short
+                If Short.TryParse(text, s) Then Return s
+            Case TypeCode.UInt16
+                Dim us As UShort
+                If UShort.TryParse(text, us) Then Return us
+            Case TypeCode.Int32
+                Dim i As Integer
+                If Integer.TryParse(text, i) Then Return i
+            Case TypeCode.UInt32
+                Dim ui As UInteger
+                If UInteger.TryParse(text, ui) Then Return ui
+            Case TypeCode.Int64
+                Dim l As Long
+                If Long.TryParse(text, l) Then Return l
+            Case TypeCode.UInt64
+                Dim ul As ULong
+                If ULong.TryParse(text, ul) Then Return ul
+            Case TypeCode.Single
+                Dim f As Single
+                If Single.TryParse(text, f) Then Return f
+            Case TypeCode.Double
+                Dim d As Double
+                If Double.TryParse(text, d) Then Return d
+            Case TypeCode.Decimal
+                Dim e As Decimal
+                If Decimal.TryParse(text, e) Then Return e
+        End Select
+        Return Nothing
+    End Function
+
+    Shared Function ParseEnum(ByVal name As String, ByVal type As Type) As Object
+        If type.IsEnum Then
+            Dim memberInfos As MemberInfo() = type.FindMembers(MemberTypes.Field, _
+                                                               BindingFlags.Public Or BindingFlags.DeclaredOnly Or BindingFlags.Static, _
+                                                               type.FilterNameIgnoreCase, name)
+            If memberInfos.Length <> 0 Then Return DirectCast(memberInfos(0), FieldInfo).GetValue(Nothing)
+        End If
+        Return Nothing
+    End Function
+
+    Shared Function IsCompatibleWith(ByVal source As Type, ByVal target As Type) As Boolean
+        If source.Equals(target) Then Return True
+        If Not target.IsValueType Then Return target.IsAssignableFrom(source)
+        Dim st As Type = GetNonNullableType(source)
+        Dim tt As Type = GetNonNullableType(target)
+        If Not st.Equals(source) AndAlso tt.Equals(target) Then Return False
+        Dim sc As TypeCode = If(st.IsEnum, TypeCode.Object, System.Type.GetTypeCode(st))
+        Dim tc As TypeCode = If(tt.IsEnum, TypeCode.Object, System.Type.GetTypeCode(tt))
+
+        Select Case sc
+            Case TypeCode.SByte
+                Select Case tc
+                    Case TypeCode.SByte, TypeCode.Int16, TypeCode.Int32, TypeCode.Int64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.Byte
+                Select Case tc
+                    Case TypeCode.Byte, TypeCode.Int16, TypeCode.UInt16, TypeCode.Int32, TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.Int16
+                Select Case tc
+                    Case TypeCode.Int16, TypeCode.Int32, TypeCode.Int64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.UInt16
+                Select Case tc
+                    Case TypeCode.UInt16, TypeCode.Int32, TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.Int32
+                Select Case tc
+                    Case TypeCode.Int32, TypeCode.Int64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.UInt32
+                Select Case tc
+                    Case TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.Int64
+                Select Case tc
+                    Case TypeCode.Int64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.UInt64
+                Select Case tc
+                    Case TypeCode.UInt64, TypeCode.Single, TypeCode.Double, TypeCode.Decimal
+                        Return True
+                End Select
+            Case TypeCode.Single
+                Select Case tc
+                    Case TypeCode.Single, TypeCode.Double
+                        Return True
+                End Select
+            Case Else
+                If st.Equals(tt) Then Return True
+        End Select
+        Return False
+    End Function
+
+    Shared Function IsBetterThan(ByVal args As Expression(), ByVal m1 As MethodData, ByVal m2 As MethodData) As Boolean
+        Dim better = False
+        For i As Integer = 0 To args.Length - 1
+            Dim c As Integer = CompareConversions(args(i).Type, _
+                                                  m1.Parameters(i).ParameterType, _
+                                                  m2.Parameters(i).ParameterType)
+            If c < 0 Then Return False
+            If c > 0 Then better = True
+        Next i
+        Return better
+    End Function
+
+    ' Return 1 if s -> t1 is a better conversion than s -> t2
+    ' Return -1 if s -> t2 is a better conversion than s -> t1
+    ' Return 0 if neither conversion is better
+    Shared Function CompareConversions(ByVal s As Type, ByVal t1 As Type, ByVal t2 As Type) As Integer
+        If t1.Equals(t2) Then Return 0
+        If s.Equals(t1) Then Return 1
+        If s.Equals(t2) Then Return -1
+        Dim t1t2 As Boolean = IsCompatibleWith(t1, t2)
+        Dim t2t1 As Boolean = IsCompatibleWith(t2, t1)
+        If t1t2 AndAlso Not t2t1 Then Return 1
+        If t2t1 AndAlso Not t1t2 Then Return -1
+        If IsSignedIntegralType(t1) AndAlso IsUnsignedIntegralType(t2) Then Return 1
+        If IsSignedIntegralType(t2) AndAlso IsUnsignedIntegralType(t1) Then Return -1
+        Return 0
+    End Function
+
+    Function GenerateEqual(ByVal left As Expression, ByVal right As Expression) As Expression
+        Return Expression.Equal(left, right)
+    End Function
+
+    Function GenerateNotEqual(ByVal left As Expression, ByVal right As Expression) As Expression
+        Return Expression.NotEqual(left, right)
+    End Function
+
+    Function GenerateGreaterThan(ByVal left As Expression, ByVal right As Expression) As Expression
+        If left.Type.Equals(GetType(String)) Then
+            Return Expression.GreaterThan( _
+                                          GenerateStaticMethodCall("Compare", left, right), _
+                                          Expression.Constant(0))
+        End If
+        Return Expression.GreaterThan(left, right)
+    End Function
+
+    Function GenerateGreaterThanEqual(ByVal left As Expression, ByVal right As Expression) As Expression
+        If left.Type.Equals(GetType(String)) Then
+            Return Expression.GreaterThanOrEqual( _
+                                                 GenerateStaticMethodCall("Compare", left, right), _
+                                                 Expression.Constant(0))
+        End If
+        Return Expression.GreaterThanOrEqual(left, right)
+    End Function
+
+    Function GenerateLessThan(ByVal left As Expression, ByVal right As Expression) As Expression
+        If left.Type.Equals(GetType(String)) Then
+            Return Expression.LessThan( _
+                                       GenerateStaticMethodCall("Compare", left, right), _
+                                       Expression.Constant(0))
+        End If
+        Return Expression.LessThan(left, right)
+    End Function
+
+    Function GenerateLessThanEqual(ByVal left As Expression, ByVal right As Expression) As Expression
+        If left.Type.Equals(GetType(String)) Then
+            Return Expression.LessThanOrEqual( _
+                                              GenerateStaticMethodCall("Compare", left, right), _
+                                              Expression.Constant(0))
+        End If
+        Return Expression.LessThanOrEqual(left, right)
+    End Function
+
+    Function GenerateAdd(ByVal left As Expression, ByVal right As Expression) As Expression
+        If left.Type.Equals(GetType(String)) AndAlso right.Type.Equals(GetType(String)) Then
+            Return GenerateStaticMethodCall("Concat", left, right)
+        End If
+        Return Expression.Add(left, right)
+    End Function
+
+    Function GenerateSubtract(ByVal left As Expression, ByVal right As expression) As Expression
+        Return Expression.Subtract(left, right)
+    End Function
+
+    Function GenerateStringConcat(ByVal left As Expression, ByVal right As Expression) As Expression
+        Return Expression.Call( _
+                               Nothing, _
+                               GetType(String).GetMethod("Concat", New Type() {GetType(Object), GetType(Object)}), _
+                               New Expression() {left, right})
+    End Function
+
+    Function GetStaticMethod(ByVal methodName As String, ByVal left As expression, ByVal right As expression) As MethodInfo
+        Return left.Type.GetMethod(methodName, New Type() {left.Type, right.Type})
+    End Function
+
+    Function GenerateStaticMethodCall(ByVal methodName As String, ByVal left As Expression, ByVal right As Expression) As Expression
+        Return Expression.Call(Nothing, GetStaticMethod(methodName, left, right), New Expression() {left, right})
+    End Function
+
+    Sub SetTextPos(ByVal pos As Integer)
+        textPos = pos
+        ch = If(textPos < textLen, text(textPos), ChrW(0))
+    End Sub
+
+    Sub NextChar()
+        If textPos < textLen Then textPos += 1
+        ch = If(textPos < textLen, text(textPos), ChrW(0))
+    End Sub
+
+    Sub NextToken()
+        Do While Char.IsWhiteSpace(ch)
+            NextChar()
+        Loop
+
+        Dim t As TokenId
+        Dim tokenPos = textPos
+        Select Case ch
+            Case "!"c
+                NextChar()
+                If ch = "=" Then
+                    NextChar()
+                    t = TokenId.ExclamationEqual
+                Else
+                    t = TokenId.Exclamation
+                End If
+            Case "%"c
+                NextChar()
+                t = TokenId.Percent
+            Case "&"c
+                NextChar()
+                If ch = "&" Then
+                    NextChar()
+                    t = TokenId.DoubleAmphersand
+                Else
+                    t = TokenId.Amphersand
+                End If
+            Case "("c
+                NextChar()
+                t = TokenId.OpenParen
+            Case ")"c
+                NextChar()
+                t = TokenId.CloseParen
+            Case "*"c
+                NextChar()
+                t = TokenId.Asterisk
+            Case "+"c
+                NextChar()
+                t = TokenId.Plus
+            Case ","c
+                NextChar()
+                t = TokenId.Comma
+            Case "-"c
+                NextChar()
+                t = TokenId.Minus
+            Case "."c
+                NextChar()
+                t = TokenId.Dot
+            Case "/"c
+                NextChar()
+                t = TokenId.Slash
+            Case ":"c
+                NextChar()
+                t = TokenId.Colon
+            Case "<"c
+                NextChar()
+                If ch = "=" Then
+                    NextChar()
+                    t = TokenId.LessThanEqual
+                ElseIf ch = ">" Then
+                    NextChar()
+                    t = TokenId.LessGreater
+                Else
+                    t = TokenId.LessThan
+                End If
+            Case "="c
+                NextChar()
+                If ch = "=" Then
+                    NextChar()
+                    t = TokenId.DoubleEqual
+                Else
+                    t = TokenId.Equal
+                End If
+            Case ">"c
+                NextChar()
+                If ch = "=" Then
+                    NextChar()
+                    t = TokenId.GreaterThanEqual
+                Else
+                    t = TokenId.GreaterThan
+                End If
+            Case "?"c
+                NextChar()
+                t = TokenId.Question
+            Case "["c
+                NextChar()
+                t = TokenId.OpenBracket
+            Case "]"c
+                NextChar()
+                t = TokenId.CloseBracket
+            Case "|"c
+                NextChar()
+                If ch = "|" Then
+                    NextChar()
+                    t = TokenId.DoubleBar
+                Else
+                    t = TokenId.Bar
+                End If
+            Case "'"c, """"c
+                Dim quote = ch
+                Do
+                    NextChar()
+                    Do While textPos < textLen AndAlso ch <> quote
+                        NextChar()
+                    Loop
+                    If textPos = textLen Then Throw ParseError(textPos, Res.UnterminatedStringLiteral)
+                    NextChar()
+                Loop While ch = quote
+                t = TokenId.StringLiteral
+            Case Else
+                If Char.IsLetter(ch) OrElse ch = "@" OrElse ch = "_" Then
+                    Do
+                        NextChar()
+                    Loop While Char.IsLetterOrDigit(ch) OrElse ch = "_"
+                    t = TokenId.Identifier
+                    Exit Select
+                End If
+
+                If Char.IsDigit(ch) Then
+                    t = TokenId.IntegerLiteral
+                    Do
+                        NextChar()
+                    Loop While Char.IsDigit(ch)
+                    If ch = "." Then
+                        t = TokenId.RealLiteral
+                        NextChar()
+                        ValidateDigit()
+                        Do
+                            NextChar()
+                        Loop While Char.IsDigit(ch)
+                    End If
+                    If ch = "E" OrElse ch = "e" Then
+                        t = TokenId.RealLiteral
+                        NextChar()
+                        If ch = "+" OrElse ch = "-" Then NextChar()
+                        ValidateDigit()
+                        Do
+                            NextChar()
+                        Loop While Char.IsDigit(ch)
+                    End If
+                    If ch = "F" Or ch = "f" Then NextChar()
+                    Exit Select
+                End If
+                If textPos = textLen Then
+                    t = TokenId.End
+                    Exit Select
+                End If
+                Throw ParseError(textPos, Res.InvalidCharacter, ch)
+        End Select
+        tokenVal.id = t
+        tokenVal.text = text.Substring(tokenPos, textPos - tokenPos)
+        tokenVal.pos = tokenPos
+    End Sub
+
+    Function TokenIdentifierIs(ByVal id As String) As Boolean
+        Return tokenVal.id = TokenId.Identifier AndAlso String.Equals(id, tokenVal.text, StringComparison.OrdinalIgnoreCase)
+    End Function
+
+    Function GetIdentifier() As String
+        ValidateToken(TokenId.Identifier, Res.IdentifierExpected)
+        Dim id = tokenVal.text
+        If id.Length > 1 AndAlso id(0) = "@" Then id = id.Substring(1)
+        Return id
+    End Function
+
+    Sub ValidateDigit()
+        If Not Char.IsDigit(ch) Then Throw ParseError(textPos, Res.DigitExpected)
+    End Sub
+
+    Sub ValidateToken(ByVal t As TokenId, ByVal errorMessage As String)
+        If tokenVal.id <> t Then Throw ParseError(errorMessage)
+    End Sub
+
+    Sub ValidateToken(ByVal t As TokenId)
+        If tokenVal.id <> t Then Throw ParseError(Res.SyntaxError)
+    End Sub
+
+    Overloads Function ParseError(ByVal format As String, ByVal ParamArray args As Object()) As Exception
+        Return ParseError(tokenVal.pos, format, args)
+    End Function
+
+    Overloads Function ParseError(ByVal pos As Integer, ByVal format As String, ByVal ParamArray args As Object()) As Exception
+        Return New ParseException(String.Format(System.Globalization.CultureInfo.CurrentCulture, format, args), pos)
+    End Function
+
+    Shared Function CreateKeywords() As Dictionary(Of String, Object)
+        Dim d As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase)
+
+        d.Add("true", trueLiteral)
+        d.Add("false", falseLiteral)
+        d.Add("null", nullLiteral)
+        d.Add(keywordIt, keywordIt)
+        d.Add(keywordIif, keywordIif)
+        d.Add(keywordNew, keywordNew)
+
+        For Each type As Type In predefinedTypes
+            d.Add(type.Name, type)
+        Next
+
+        Return d
+    End Function
+End Class
+
+Class Res
+    Public Const DuplicateIdentifier As String = "The identifier '{0}' was defined more than once"
+    Public Const ExpressionTypeMismatch As String = "Expression of type '{0}' expected"
+    Public Const ExpressionExpected As String = "Expression expected"
+    Public Const InvalidCharacterLiteral As String = "Character literal must contain exactly one character"
+    Public Const InvalidIntegerLiteral As String = "Invalid integer literal '{0}'"
+    Public Const InvalidRealLiteral As String = "Invalid real literal '{0}'"
+    Public Const UnknownIdentifier As String = "Unknown identifier '{0}'"
+    Public Const NoItInScope As String = "No 'it' is in scope"
+    Public Const IifRequiresThreeArgs As String = "The 'iif' function requires three arguments"
+    Public Const FirstExprMustBeBool As String = "The first expression must be of type 'Boolean'"
+    Public Const BothTypesConvertToOther As String = "Both of the types '{0}' and '{1}' convert to the other"
+    Public Const NeitherTypeConvertsToOther As String = "Neither of the types '{0}' and '{1}' converts to the other"
+    Public Const MissingAsClause As String = "Expression is missing an 'as' clause"
+    Public Const ArgsIncompatibleWithLambda As String = "Argument list incompatible with lambda expression"
+    Public Const TypeHasNoNullableForm As String = "Type '{0}' has no nullable form"
+    Public Const NoMatchingConstructor As String = "No matching constructor in type '{0}'"
+    Public Const AmbiguousConstructorInvocation As String = "Ambiguous invocation of '{0}' constructor"
+    Public Const CannotConvertValue As String = "A value of type '{0}' cannot be converted to type '{1}'"
+    Public Const NoApplicableMethod As String = "No applicable method '{0}' exists in type '{1}'"
+    Public Const MethodsAreInaccessible As String = "Methods on type '{0}' are not accessible"
+    Public Const MethodIsVoid As String = "Method '{0}' in type '{1}' does not return a value"
+    Public Const AmbiguousMethodInvocation As String = "Ambiguous invocation of method '{0}' in type '{1}'"
+    Public Const UnknownPropertyOrField As String = "No property or field '{0}' exists in type '{1}'"
+    Public Const NoApplicableAggregate As String = "No applicable aggregate method '{0}' exists"
+    Public Const CannotIndexMultiDimArray As String = "Indexing of multi-dimensional arrays is not supported"
+    Public Const InvalidIndex As String = "Array index must be an integer expression"
+    Public Const NoApplicableIndexer As String = "No applicable indexer exists in type '{0}'"
+    Public Const AmbiguousIndexerInvocation As String = "Ambiguous invocation of indexer in type '{0}'"
+    Public Const IncompatibleOperand As String = "Operator '{0}' incompatible with operand type '{1}'"
+    Public Const IncompatibleOperands As String = "Operator '{0}' incompatible with operand types '{1}' and '{2}'"
+    Public Const UnterminatedStringLiteral As String = "Unterminated string literal"
+    Public Const InvalidCharacter As String = "Syntax error '{0}'"
+    Public Const DigitExpected As String = "Digit expected"
+    Public Const SyntaxError As String = "Syntax error"
+    Public Const TokenExpected As String = "{0} expected"
+    Public Const ParseExceptionFormat As String = "{0} (at index {1})"
+    Public Const ColonExpected As String = "':' expected"
+    Public Const OpenParenExpected As String = "'(' expected"
+    Public Const CloseParenOrOperatorExpected As String = "')' or operator expected"
+    Public Const CloseParenOrCommaExpected As String = "')' or ',' expected"
+    Public Const DotOrOpenParenExpected As String = "'.' or '(' expected"
+    Public Const OpenBracketExpected As String = "'[' expected"
+    Public Const CloseBracketOrCommaExpected As String = "']' or ',' expected"
+    Public Const IdentifierExpected As String = "Identifier expected"
+End Class
\ No newline at end of file

Copied: trunk/Tween/DynamicQuery.txt (from rev 1350, branches/query/Tween/DynamicQuery.txt)
===================================================================
(Binary files differ)

Modified: trunk/Tween/FilterDialog.Designer.vb
===================================================================
--- trunk/Tween/FilterDialog.Designer.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/FilterDialog.Designer.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -87,6 +87,8 @@
         Me.GroupTab = New System.Windows.Forms.GroupBox()
         Me.LabelTabType = New System.Windows.Forms.Label()
         Me.Label13 = New System.Windows.Forms.Label()
+        Me.CheckExLambDa = New System.Windows.Forms.CheckBox()
+        Me.CheckLambda = New System.Windows.Forms.CheckBox()
         Me.EditFilterGroup.SuspendLayout()
         Me.GroupExclude.SuspendLayout()
         Me.GroupMatch.SuspendLayout()
@@ -104,8 +106,8 @@
         '
         'ListFilters
         '
+        Me.ListFilters.FormattingEnabled = True
         resources.ApplyResources(Me.ListFilters, "ListFilters")
-        Me.ListFilters.FormattingEnabled = True
         Me.ListFilters.Name = "ListFilters"
         Me.ListFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
         '
@@ -128,7 +130,7 @@
         '
         'GroupExclude
         '
-        resources.ApplyResources(Me.GroupExclude, "GroupExclude")
+        Me.GroupExclude.Controls.Add(Me.CheckExLambDa)
         Me.GroupExclude.Controls.Add(Me.TextExSource)
         Me.GroupExclude.Controls.Add(Me.Label12)
         Me.GroupExclude.Controls.Add(Me.CheckExRetweet)
@@ -144,6 +146,7 @@
         Me.GroupExclude.Controls.Add(Me.ExUID)
         Me.GroupExclude.Controls.Add(Me.ExMSG1)
         Me.GroupExclude.Controls.Add(Me.ExMSG2)
+        resources.ApplyResources(Me.GroupExclude, "GroupExclude")
         Me.GroupExclude.Name = "GroupExclude"
         Me.GroupExclude.TabStop = False
         '
@@ -217,9 +220,9 @@
         '
         'ExUID
         '
-        resources.ApplyResources(Me.ExUID, "ExUID")
         Me.ExUID.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend
         Me.ExUID.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource
+        resources.ApplyResources(Me.ExUID, "ExUID")
         Me.ExUID.Name = "ExUID"
         '
         'ExMSG1
@@ -234,7 +237,7 @@
         '
         'GroupMatch
         '
-        resources.ApplyResources(Me.GroupMatch, "GroupMatch")
+        Me.GroupMatch.Controls.Add(Me.CheckLambda)
         Me.GroupMatch.Controls.Add(Me.TextSource)
         Me.GroupMatch.Controls.Add(Me.Label5)
         Me.GroupMatch.Controls.Add(Me.CheckRetweet)
@@ -250,6 +253,7 @@
         Me.GroupMatch.Controls.Add(Me.UID)
         Me.GroupMatch.Controls.Add(Me.MSG1)
         Me.GroupMatch.Controls.Add(Me.MSG2)
+        resources.ApplyResources(Me.GroupMatch, "GroupMatch")
         Me.GroupMatch.Name = "GroupMatch"
         Me.GroupMatch.TabStop = False
         '
@@ -323,9 +327,9 @@
         '
         'UID
         '
-        resources.ApplyResources(Me.UID, "UID")
         Me.UID.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend
         Me.UID.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource
+        resources.ApplyResources(Me.UID, "UID")
         Me.UID.Name = "UID"
         '
         'MSG1
@@ -340,10 +344,10 @@
         '
         'GroupBox1
         '
-        resources.ApplyResources(Me.GroupBox1, "GroupBox1")
         Me.GroupBox1.Controls.Add(Me.CheckMark)
         Me.GroupBox1.Controls.Add(Me.OptCopy)
         Me.GroupBox1.Controls.Add(Me.OptMove)
+        resources.ApplyResources(Me.GroupBox1, "GroupBox1")
         Me.GroupBox1.Name = "GroupBox1"
         Me.GroupBox1.TabStop = False
         '
@@ -438,8 +442,8 @@
         '
         'ListTabs
         '
+        Me.ListTabs.FormattingEnabled = True
         resources.ApplyResources(Me.ListTabs, "ListTabs")
-        Me.ListTabs.FormattingEnabled = True
         Me.ListTabs.Name = "ListTabs"
         '
         'ButtonAddTab
@@ -474,8 +478,8 @@
         '
         'ComboSound
         '
+        Me.ComboSound.FormattingEnabled = True
         resources.ApplyResources(Me.ComboSound, "ComboSound")
-        Me.ComboSound.FormattingEnabled = True
         Me.ComboSound.Name = "ComboSound"
         '
         'Label10
@@ -497,7 +501,6 @@
         '
         'GroupTab
         '
-        resources.ApplyResources(Me.GroupTab, "GroupTab")
         Me.GroupTab.Controls.Add(Me.LabelTabType)
         Me.GroupTab.Controls.Add(Me.Label13)
         Me.GroupTab.Controls.Add(Me.ListTabs)
@@ -510,6 +513,7 @@
         Me.GroupTab.Controls.Add(Me.ComboSound)
         Me.GroupTab.Controls.Add(Me.CheckManageRead)
         Me.GroupTab.Controls.Add(Me.CheckNotifyNew)
+        resources.ApplyResources(Me.GroupTab, "GroupTab")
         Me.GroupTab.Name = "GroupTab"
         Me.GroupTab.TabStop = False
         '
@@ -523,6 +527,18 @@
         resources.ApplyResources(Me.Label13, "Label13")
         Me.Label13.Name = "Label13"
         '
+        'CheckExLambDa
+        '
+        resources.ApplyResources(Me.CheckExLambDa, "CheckExLambDa")
+        Me.CheckExLambDa.Name = "CheckExLambDa"
+        Me.CheckExLambDa.UseVisualStyleBackColor = True
+        '
+        'CheckLambda
+        '
+        resources.ApplyResources(Me.CheckLambda, "CheckLambda")
+        Me.CheckLambda.Name = "CheckLambda"
+        Me.CheckLambda.UseVisualStyleBackColor = True
+        '
         'FilterDialog
         '
         resources.ApplyResources(Me, "$this")
@@ -615,5 +631,7 @@
     Friend WithEvents ButtonRuleCopy As System.Windows.Forms.Button
     Friend WithEvents LabelTabType As System.Windows.Forms.Label
     Friend WithEvents Label13 As System.Windows.Forms.Label
+    Friend WithEvents CheckExLambDa As System.Windows.Forms.CheckBox
+    Friend WithEvents CheckLambda As System.Windows.Forms.CheckBox
 
 End Class

Modified: trunk/Tween/FilterDialog.resx
===================================================================
--- trunk/Tween/FilterDialog.resx	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/FilterDialog.resx	2011-01-13 14:03:38 UTC (rev 1351)
@@ -118,1677 +118,1746 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="Label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="ButtonClose.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
   </data>
-  <data name="&gt;&gt;ButtonRenameTab.Parent" xml:space="preserve">
-    <value>GroupTab</value>
-  </data>
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="ButtonAddTab.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 237</value>
+  <data name="ButtonClose.Location" type="System.Drawing.Point, System.Drawing">
+    <value>682, 553</value>
   </data>
-  <data name="RadioExPLUS.Text" xml:space="preserve">
-    <value>単一条件</value>
-  </data>
-  <data name="&gt;&gt;CheckMark.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="ButtonUp.Size" type="System.Drawing.Size, System.Drawing">
-    <value>34, 23</value>
-  </data>
-  <data name="Label6.Location" type="System.Drawing.Point, System.Drawing">
-    <value>87, 14</value>
-  </data>
   <data name="ButtonClose.Size" type="System.Drawing.Size, System.Drawing">
     <value>75, 23</value>
   </data>
-  <data name="Label7.Size" type="System.Drawing.Size, System.Drawing">
-    <value>29, 12</value>
-  </data>
-  <data name="RadioExAnd.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 28</value>
-  </data>
   <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="CheckExRegex.TabIndex" type="System.Int32, mscorlib">
-    <value>11</value>
+  <data name="ButtonClose.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;Label1.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="ButtonClose.Text" xml:space="preserve">
+    <value>閉じる(&amp;C)</value>
   </data>
-  <data name="ButtonOK.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="&gt;&gt;ButtonClose.Name" xml:space="preserve">
+    <value>ButtonClose</value>
   </data>
-  <data name="&gt;&gt;CheckExURL.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ButtonClose.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;RadioPLUS.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="&gt;&gt;ButtonClose.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="CheckRetweet.Size" type="System.Drawing.Size, System.Drawing">
-    <value>84, 16</value>
+  <data name="&gt;&gt;ButtonClose.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="RadioExAnd.Size" type="System.Drawing.Size, System.Drawing">
-    <value>71, 16</value>
-  </data>
-  <data name="Label2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>87, 51</value>
-  </data>
-  <data name="Label13.AutoSize" type="System.Boolean, mscorlib">
+  <data name="ListFilters.HorizontalScrollbar" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;GroupExclude.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="ListFilters.ItemHeight" type="System.Int32, mscorlib">
+    <value>12</value>
   </data>
-  <data name="&gt;&gt;Label4.ZOrder" xml:space="preserve">
-    <value>11</value>
+  <data name="ListFilters.Location" type="System.Drawing.Point, System.Drawing">
+    <value>9, 19</value>
   </data>
-  <data name="Label13.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
+  <data name="ListFilters.Size" type="System.Drawing.Size, System.Drawing">
+    <value>597, 184</value>
   </data>
-  <data name="Label8.Location" type="System.Drawing.Point, System.Drawing">
-    <value>187, 14</value>
+  <data name="ListFilters.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="CheckExRetweet.Text" xml:space="preserve">
-    <value>公式RTのみ</value>
+  <data name="&gt;&gt;ListFilters.Name" xml:space="preserve">
+    <value>ListFilters</value>
   </data>
-  <data name="GroupTab.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="&gt;&gt;ListFilters.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonEdit.Name" xml:space="preserve">
-    <value>ButtonEdit</value>
+  <data name="&gt;&gt;ListFilters.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="Label1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>187, 14</value>
+  <data name="&gt;&gt;ListFilters.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;Label5.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="EditFilterGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
   </data>
-  <data name="&gt;&gt;ButtonCancel.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="Label11.Location" type="System.Drawing.Point, System.Drawing">
+    <value>436, 152</value>
   </data>
-  <data name="&gt;&gt;Label13.Name" xml:space="preserve">
-    <value>Label13</value>
+  <data name="Label11.Size" type="System.Drawing.Size, System.Drawing">
+    <value>157, 74</value>
   </data>
-  <data name="Label6.Text" xml:space="preserve">
-    <value>ユーザーID</value>
+  <data name="Label11.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="&gt;&gt;ButtonUp.Name" xml:space="preserve">
-    <value>ButtonUp</value>
+  <data name="Label11.Text" xml:space="preserve">
+    <value>除外ルールのみ設定すると、タブ全体への除外設定となります。</value>
   </data>
-  <data name="ButtonUp.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 207</value>
+  <data name="&gt;&gt;Label11.Name" xml:space="preserve">
+    <value>Label11</value>
   </data>
-  <data name="&gt;&gt;Label12.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;Label11.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;LabelTabType.Name" xml:space="preserve">
-    <value>LabelTabType</value>
+  <data name="&gt;&gt;Label11.Parent" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="&gt;&gt;GroupTab.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;Label11.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleUp.Name" xml:space="preserve">
-    <value>ButtonRuleUp</value>
+  <data name="CheckExLambDa.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;CheckExCaseSensitive.Name" xml:space="preserve">
-    <value>CheckExCaseSensitive</value>
+  <data name="CheckExLambDa.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="ButtonCancel.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="CheckExLambDa.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 106</value>
   </data>
-  <data name="ListFilters.Size" type="System.Drawing.Size, System.Drawing">
-    <value>597, 184</value>
+  <data name="CheckExLambDa.Size" type="System.Drawing.Size, System.Drawing">
+    <value>63, 16</value>
   </data>
-  <data name="&gt;&gt;GroupExclude.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExLambDa.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
   </data>
-  <data name="ListTabs.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 18</value>
+  <data name="CheckExLambDa.Text" xml:space="preserve">
+    <value>ラムダ式</value>
   </data>
-  <data name="ButtonClose.Text" xml:space="preserve">
-    <value>閉じる(&amp;C)</value>
+  <data name="&gt;&gt;CheckExLambDa.Name" xml:space="preserve">
+    <value>CheckExLambDa</value>
   </data>
-  <data name="ButtonEdit.Text" xml:space="preserve">
-    <value>編集(&amp;E)</value>
+  <data name="&gt;&gt;CheckExLambDa.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label1.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="&gt;&gt;CheckExLambDa.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="RadioExPLUS.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
+  <data name="&gt;&gt;CheckExLambDa.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="GroupBox2.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="TextExSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>89, 93</value>
   </data>
-  <data name="&gt;&gt;OptCopy.Name" xml:space="preserve">
-    <value>OptCopy</value>
+  <data name="TextExSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>96, 19</value>
   </data>
-  <data name="&gt;&gt;CheckExRegex.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="TextExSource.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
   </data>
-  <data name="ExMSG1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>103, 19</value>
+  <data name="&gt;&gt;TextExSource.Name" xml:space="preserve">
+    <value>TextExSource</value>
   </data>
-  <data name="OptMove.Location" type="System.Drawing.Point, System.Drawing">
-    <value>15, 18</value>
+  <data name="&gt;&gt;TextExSource.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label13.Text" xml:space="preserve">
-    <value>タブの種類</value>
+  <data name="&gt;&gt;TextExSource.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="CheckExRegex.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="&gt;&gt;TextExSource.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="Label12.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="Label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;ButtonCancel.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="Label12.Location" type="System.Drawing.Point, System.Drawing">
+    <value>43, 96</value>
   </data>
-  <data name="CheckExCaseSensitive.Size" type="System.Drawing.Size, System.Drawing">
-    <value>102, 16</value>
+  <data name="Label12.Size" type="System.Drawing.Size, System.Drawing">
+    <value>40, 12</value>
   </data>
-  <data name="Label3.Text" xml:space="preserve">
-    <value>AND</value>
+  <data name="Label12.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
   </data>
-  <data name="ButtonRenameTab.Text" xml:space="preserve">
-    <value>タブ名変更</value>
+  <data name="Label12.Text" xml:space="preserve">
+    <value>Source</value>
   </data>
-  <data name="&gt;&gt;Label4.Name" xml:space="preserve">
-    <value>Label4</value>
+  <data name="&gt;&gt;Label12.Name" xml:space="preserve">
+    <value>Label12</value>
   </data>
-  <data name="&gt;&gt;ButtonCancel.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="&gt;&gt;Label12.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonAddTab.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="&gt;&gt;Label12.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleMove.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label12.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;Label7.ZOrder" xml:space="preserve">
-    <value>10</value>
+  <data name="CheckExRetweet.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;Label6.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="CheckExRetweet.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;CheckManageRead.ZOrder" xml:space="preserve">
-    <value>10</value>
+  <data name="CheckExRetweet.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 84</value>
   </data>
-  <data name="ButtonRuleDown.Font" type="System.Drawing.Font, System.Drawing">
-    <value>Marlett, 9pt, style=Bold</value>
+  <data name="CheckExRetweet.Size" type="System.Drawing.Size, System.Drawing">
+    <value>84, 16</value>
   </data>
-  <data name="&gt;&gt;RadioAND.Type" xml:space="preserve">
-    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExRetweet.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
   </data>
-  <data name="ButtonUp.Text" xml:space="preserve">
-    <value>5</value>
+  <data name="CheckExRetweet.Text" xml:space="preserve">
+    <value>公式RTのみ</value>
   </data>
-  <data name="ButtonNew.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="&gt;&gt;CheckExRetweet.Name" xml:space="preserve">
+    <value>CheckExRetweet</value>
   </data>
-  <data name="&gt;&gt;Label5.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;CheckExRetweet.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckExRetweet.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;CheckExRetweet.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ButtonRenameTab.Name" xml:space="preserve">
-    <value>ButtonRenameTab</value>
+  <data name="&gt;&gt;CheckExRetweet.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="&gt;&gt;ButtonOK.Name" xml:space="preserve">
-    <value>ButtonOK</value>
+  <data name="CheckExCaseSensitive.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="Label9.Size" type="System.Drawing.Size, System.Drawing">
-    <value>114, 12</value>
+  <data name="CheckExCaseSensitive.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;CheckRetweet.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExCaseSensitive.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 62</value>
   </data>
-  <data name="&gt;&gt;UID.Name" xml:space="preserve">
-    <value>UID</value>
+  <data name="CheckExCaseSensitive.Size" type="System.Drawing.Size, System.Drawing">
+    <value>102, 16</value>
   </data>
-  <data name="ButtonDelete.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="CheckExCaseSensitive.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
   </data>
-  <data name="&gt;&gt;CheckCaseSensitive.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExCaseSensitive.Text" xml:space="preserve">
+    <value>大/小文字区別</value>
   </data>
-  <data name="&gt;&gt;Label5.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;CheckExCaseSensitive.Name" xml:space="preserve">
+    <value>CheckExCaseSensitive</value>
   </data>
-  <data name="Label10.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
+  <data name="&gt;&gt;CheckExCaseSensitive.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;RadioExPLUS.Parent" xml:space="preserve">
+  <data name="&gt;&gt;CheckExCaseSensitive.Parent" xml:space="preserve">
     <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ButtonDown.Name" xml:space="preserve">
-    <value>ButtonDown</value>
+  <data name="&gt;&gt;CheckExCaseSensitive.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="$this.Text" xml:space="preserve">
-    <value>振り分けルール</value>
+  <data name="RadioExAnd.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="ButtonCancel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="RadioExAnd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="ButtonUp.Font" type="System.Drawing.Font, System.Drawing">
-    <value>Marlett, 9pt, style=Bold</value>
+  <data name="RadioExAnd.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 28</value>
   </data>
-  <data name="&gt;&gt;CheckManageRead.Name" xml:space="preserve">
-    <value>CheckManageRead</value>
+  <data name="RadioExAnd.Size" type="System.Drawing.Size, System.Drawing">
+    <value>71, 16</value>
   </data>
-  <data name="ButtonRuleDown.Location" type="System.Drawing.Point, System.Drawing">
-    <value>131, 209</value>
+  <data name="RadioExAnd.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;Label9.ZOrder" xml:space="preserve">
-    <value>9</value>
+  <data name="RadioExAnd.Text" xml:space="preserve">
+    <value>複合条件</value>
   </data>
-  <data name="&gt;&gt;GroupBox2.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;RadioExAnd.Name" xml:space="preserve">
+    <value>RadioExAnd</value>
   </data>
-  <data name="&gt;&gt;TextSource.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;RadioExAnd.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="RadioAND.Text" xml:space="preserve">
-    <value>複合条件</value>
+  <data name="&gt;&gt;RadioExAnd.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;CheckRegex.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;RadioExAnd.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="GroupTab.Text" xml:space="preserve">
-    <value>タブ</value>
+  <data name="Label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="TextExSource.Location" type="System.Drawing.Point, System.Drawing">
-    <value>89, 89</value>
+  <data name="Label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;UID.ZOrder" xml:space="preserve">
-    <value>12</value>
+  <data name="Label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>187, 14</value>
   </data>
-  <data name="GroupMatch.Text" xml:space="preserve">
-    <value>マッチルール</value>
+  <data name="Label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>53, 12</value>
   </data>
-  <data name="&gt;&gt;ButtonRenameTab.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="Label1.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;Label6.Type" xml:space="preserve">
+  <data name="Label1.Text" xml:space="preserve">
+    <value>発言内容</value>
+  </data>
+  <data name="&gt;&gt;Label1.Name" xml:space="preserve">
+    <value>Label1</value>
+  </data>
+  <data name="&gt;&gt;Label1.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;RadioExAnd.Type" xml:space="preserve">
-    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label1.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ButtonOK.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;Label1.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="&gt;&gt;Label4.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExURL.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="CheckCaseSensitive.Size" type="System.Drawing.Size, System.Drawing">
-    <value>102, 16</value>
+  <data name="CheckExURL.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;GroupTab.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="CheckExURL.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 40</value>
   </data>
-  <data name="CheckRegex.Text" xml:space="preserve">
-    <value>正規表現</value>
+  <data name="CheckExURL.Size" type="System.Drawing.Size, System.Drawing">
+    <value>70, 16</value>
   </data>
   <data name="CheckExURL.TabIndex" type="System.Int32, mscorlib">
     <value>12</value>
   </data>
-  <data name="Label9.Text" xml:space="preserve">
-    <value>ユーザーIDか発言内容</value>
+  <data name="CheckExURL.Text" xml:space="preserve">
+    <value>URL検索</value>
   </data>
-  <data name="MSG2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>89, 64</value>
+  <data name="&gt;&gt;CheckExURL.Name" xml:space="preserve">
+    <value>CheckExURL</value>
   </data>
-  <data name="ButtonRuleUp.Size" type="System.Drawing.Size, System.Drawing">
-    <value>34, 23</value>
+  <data name="&gt;&gt;CheckExURL.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonRenameTab.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;CheckExURL.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ExMSG2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;CheckExURL.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
-  <data name="&gt;&gt;ButtonClose.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;UID.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="Label2.AutoSize" type="System.Boolean, mscorlib">
+  <data name="RadioExPLUS.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="Label2.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
+  <data name="RadioExPLUS.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="Label10.Text" xml:space="preserve">
-    <value>新着サウンド</value>
+  <data name="RadioExPLUS.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 65</value>
   </data>
-  <data name="&gt;&gt;CheckNotifyNew.Name" xml:space="preserve">
-    <value>CheckNotifyNew</value>
+  <data name="RadioExPLUS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>71, 16</value>
   </data>
-  <data name="&gt;&gt;CheckExURL.ZOrder" xml:space="preserve">
+  <data name="RadioExPLUS.TabIndex" type="System.Int32, mscorlib">
     <value>6</value>
   </data>
-  <data name="GroupTab.Size" type="System.Drawing.Size, System.Drawing">
-    <value>127, 459</value>
+  <data name="RadioExPLUS.Text" xml:space="preserve">
+    <value>単一条件</value>
   </data>
-  <data name="&gt;&gt;TextExSource.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;RadioExPLUS.Name" xml:space="preserve">
+    <value>RadioExPLUS</value>
   </data>
-  <data name="&gt;&gt;TextSource.Name" xml:space="preserve">
-    <value>TextSource</value>
+  <data name="&gt;&gt;RadioExPLUS.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label12.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
+  <data name="&gt;&gt;RadioExPLUS.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="RadioAND.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="&gt;&gt;RadioExPLUS.ZOrder" xml:space="preserve">
+    <value>8</value>
   </data>
-  <data name="ButtonUp.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="CheckExRegex.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="CheckRetweet.Text" xml:space="preserve">
-    <value>公式RTのみ</value>
+  <data name="CheckExRegex.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;Label1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckExRegex.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 18</value>
   </data>
-  <data name="ListTabs.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="CheckExRegex.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 16</value>
   </data>
-  <data name="&gt;&gt;CheckNotifyNew.Type" xml:space="preserve">
+  <data name="CheckExRegex.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
+  </data>
+  <data name="CheckExRegex.Text" xml:space="preserve">
+    <value>正規表現</value>
+  </data>
+  <data name="&gt;&gt;CheckExRegex.Name" xml:space="preserve">
+    <value>CheckExRegex</value>
+  </data>
+  <data name="&gt;&gt;CheckExRegex.Type" xml:space="preserve">
     <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label5.AutoSize" type="System.Boolean, mscorlib">
+  <data name="&gt;&gt;CheckExRegex.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
+  </data>
+  <data name="&gt;&gt;CheckExRegex.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="Label2.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;CheckExURL.Name" xml:space="preserve">
-    <value>CheckExURL</value>
+  <data name="Label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="ButtonEdit.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="Label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>87, 51</value>
   </data>
-  <data name="CheckRegex.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="Label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>114, 12</value>
   </data>
-  <data name="Label7.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="Label2.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
   </data>
-  <data name="Label7.Location" type="System.Drawing.Point, System.Drawing">
-    <value>156, 29</value>
+  <data name="Label2.Text" xml:space="preserve">
+    <value>ユーザーIDか発言内容</value>
   </data>
-  <data name="&gt;&gt;ListTabs.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label2.Name" xml:space="preserve">
+    <value>Label2</value>
   </data>
-  <data name="CheckRetweet.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;Label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="OptCopy.Text" xml:space="preserve">
-    <value>Recentからコピーする</value>
+  <data name="&gt;&gt;Label2.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="GroupMatch.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 18</value>
+  <data name="&gt;&gt;Label2.ZOrder" xml:space="preserve">
+    <value>10</value>
   </data>
-  <data name="ExMSG2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>204, 19</value>
+  <data name="Label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="CheckExURL.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 40</value>
+  <data name="Label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="TextSource.Size" type="System.Drawing.Size, System.Drawing">
-    <value>96, 19</value>
+  <data name="Label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>156, 29</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleDown.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="Label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>29, 12</value>
   </data>
-  <data name="&gt;&gt;Label12.Name" xml:space="preserve">
-    <value>Label12</value>
+  <data name="Label3.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="&gt;&gt;Label7.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="Label3.Text" xml:space="preserve">
+    <value>AND</value>
   </data>
-  <data name="&gt;&gt;GroupBox1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label3.Name" xml:space="preserve">
+    <value>Label3</value>
   </data>
-  <data name="Label6.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="&gt;&gt;Label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;TextExSource.Parent" xml:space="preserve">
+  <data name="&gt;&gt;Label3.Parent" xml:space="preserve">
     <value>GroupExclude</value>
   </data>
-  <data name="ButtonOK.Location" type="System.Drawing.Point, System.Drawing">
-    <value>436, 234</value>
+  <data name="&gt;&gt;Label3.ZOrder" xml:space="preserve">
+    <value>11</value>
   </data>
-  <data name="CheckExRetweet.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 84</value>
+  <data name="Label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;ButtonNew.Name" xml:space="preserve">
-    <value>ButtonNew</value>
+  <data name="Label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="GroupMatch.Size" type="System.Drawing.Size, System.Drawing">
-    <value>424, 116</value>
+  <data name="Label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>87, 14</value>
   </data>
-  <data name="&gt;&gt;Label1.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="Label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>56, 12</value>
   </data>
-  <data name="&gt;&gt;ExMSG2.ZOrder" xml:space="preserve">
-    <value>14</value>
+  <data name="Label4.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;ButtonClose.Name" xml:space="preserve">
-    <value>ButtonClose</value>
+  <data name="Label4.Text" xml:space="preserve">
+    <value>ユーザーID</value>
   </data>
-  <data name="&gt;&gt;Label3.Name" xml:space="preserve">
-    <value>Label3</value>
+  <data name="&gt;&gt;Label4.Name" xml:space="preserve">
+    <value>Label4</value>
   </data>
-  <data name="ButtonDown.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;Label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckManageRead.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
+  <data name="&gt;&gt;Label4.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="UID.Location" type="System.Drawing.Point, System.Drawing">
+  <data name="&gt;&gt;Label4.ZOrder" xml:space="preserve">
+    <value>12</value>
+  </data>
+  <data name="ExUID.Location" type="System.Drawing.Point, System.Drawing">
     <value>89, 26</value>
   </data>
-  <data name="&gt;&gt;ButtonClose.ZOrder" xml:space="preserve">
+  <data name="ExUID.Size" type="System.Drawing.Size, System.Drawing">
+    <value>61, 19</value>
+  </data>
+  <data name="ExUID.TabIndex" type="System.Int32, mscorlib">
     <value>2</value>
   </data>
-  <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ExUID.Name" xml:space="preserve">
+    <value>ExUID</value>
   </data>
-  <data name="Label10.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 412</value>
+  <data name="&gt;&gt;ExUID.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ExMSG1.Name" xml:space="preserve">
-    <value>ExMSG1</value>
+  <data name="&gt;&gt;ExUID.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="ButtonRuleMove.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="&gt;&gt;ExUID.ZOrder" xml:space="preserve">
+    <value>13</value>
   </data>
-  <data name="OptMove.Size" type="System.Drawing.Size, System.Drawing">
-    <value>120, 16</value>
+  <data name="ExMSG1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>189, 26</value>
   </data>
-  <data name="&gt;&gt;GroupBox1.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="ExMSG1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 19</value>
   </data>
-  <data name="ButtonRuleUp.Location" type="System.Drawing.Point, System.Drawing">
-    <value>90, 209</value>
+  <data name="ExMSG1.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="Label4.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="&gt;&gt;ExMSG1.Name" xml:space="preserve">
+    <value>ExMSG1</value>
   </data>
-  <data name="&gt;&gt;MSG1.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;ExMSG1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonAddTab.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ExMSG1.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;ComboSound.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ExMSG1.ZOrder" xml:space="preserve">
+    <value>14</value>
   </data>
-  <data name="&gt;&gt;Label3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ExMSG2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>89, 64</value>
   </data>
-  <data name="&gt;&gt;GroupExclude.Name" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="ExMSG2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>204, 19</value>
   </data>
-  <data name="&gt;&gt;ButtonCancel.Name" xml:space="preserve">
-    <value>ButtonCancel</value>
+  <data name="ExMSG2.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
   </data>
-  <data name="ButtonRuleMove.Text" xml:space="preserve">
-    <value>移動</value>
+  <data name="&gt;&gt;ExMSG2.Name" xml:space="preserve">
+    <value>ExMSG2</value>
   </data>
-  <data name="CheckURL.Size" type="System.Drawing.Size, System.Drawing">
-    <value>70, 16</value>
+  <data name="&gt;&gt;ExMSG2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="EditFilterGroup.Text" xml:space="preserve">
-    <value>ルール編集</value>
+  <data name="&gt;&gt;ExMSG2.Parent" xml:space="preserve">
+    <value>GroupExclude</value>
   </data>
-  <data name="&gt;&gt;MSG1.ZOrder" xml:space="preserve">
-    <value>13</value>
+  <data name="&gt;&gt;ExMSG2.ZOrder" xml:space="preserve">
+    <value>15</value>
   </data>
-  <data name="Label10.Size" type="System.Drawing.Size, System.Drawing">
-    <value>66, 12</value>
+  <data name="GroupExclude.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 152</value>
   </data>
-  <data name="Label8.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="GroupExclude.Size" type="System.Drawing.Size, System.Drawing">
+    <value>424, 134</value>
   </data>
-  <data name="Label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="GroupExclude.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;Label3.ZOrder" xml:space="preserve">
-    <value>10</value>
+  <data name="GroupExclude.Text" xml:space="preserve">
+    <value>除外ルール</value>
   </data>
-  <data name="&gt;&gt;Label2.Parent" xml:space="preserve">
+  <data name="&gt;&gt;GroupExclude.Name" xml:space="preserve">
     <value>GroupExclude</value>
   </data>
-  <data name="ButtonDown.Font" type="System.Drawing.Font, System.Drawing">
-    <value>Marlett, 9pt, style=Bold</value>
+  <data name="&gt;&gt;GroupExclude.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;EditFilterGroup.Name" xml:space="preserve">
+  <data name="&gt;&gt;GroupExclude.Parent" xml:space="preserve">
     <value>EditFilterGroup</value>
   </data>
-  <data name="&gt;&gt;ListTabs.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="&gt;&gt;GroupExclude.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;CheckMark.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckLambda.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;EditFilterGroup.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="CheckLambda.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;Label6.Name" xml:space="preserve">
-    <value>Label6</value>
+  <data name="CheckLambda.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 106</value>
   </data>
-  <data name="CheckNotifyNew.Size" type="System.Drawing.Size, System.Drawing">
-    <value>96, 16</value>
+  <data name="CheckLambda.Size" type="System.Drawing.Size, System.Drawing">
+    <value>63, 16</value>
   </data>
-  <data name="ExMSG2.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
+  <data name="CheckLambda.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
   </data>
-  <data name="&gt;&gt;CheckExRegex.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="CheckLambda.Text" xml:space="preserve">
+    <value>ラムダ式</value>
   </data>
-  <data name="&gt;&gt;ButtonEdit.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;CheckLambda.Name" xml:space="preserve">
+    <value>CheckLambda</value>
   </data>
-  <data name="&gt;&gt;ButtonAddTab.Name" xml:space="preserve">
-    <value>ButtonAddTab</value>
+  <data name="&gt;&gt;CheckLambda.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="ButtonRuleCopy.Text" xml:space="preserve">
-    <value>コピー</value>
+  <data name="&gt;&gt;CheckLambda.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleDown.Name" xml:space="preserve">
-    <value>ButtonRuleDown</value>
+  <data name="&gt;&gt;CheckLambda.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;CheckRegex.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="TextSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>89, 93</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleUp.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="TextSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>96, 19</value>
   </data>
-  <data name="CheckExURL.Size" type="System.Drawing.Size, System.Drawing">
-    <value>70, 16</value>
+  <data name="TextSource.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
   </data>
-  <data name="EditFilterGroup.Location" type="System.Drawing.Point, System.Drawing">
-    <value>9, 238</value>
+  <data name="&gt;&gt;TextSource.Name" xml:space="preserve">
+    <value>TextSource</value>
   </data>
-  <data name="CheckExRegex.Text" xml:space="preserve">
-    <value>正規表現</value>
+  <data name="&gt;&gt;TextSource.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label4.Location" type="System.Drawing.Point, System.Drawing">
-    <value>87, 14</value>
+  <data name="&gt;&gt;TextSource.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;GroupBox2.Name" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="&gt;&gt;TextSource.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="RadioExPLUS.AutoSize" type="System.Boolean, mscorlib">
+  <data name="Label5.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;MSG1.Name" xml:space="preserve">
-    <value>MSG1</value>
+  <data name="Label5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="ButtonRuleCopy.Location" type="System.Drawing.Point, System.Drawing">
-    <value>261, 209</value>
+  <data name="Label5.Location" type="System.Drawing.Point, System.Drawing">
+    <value>43, 96</value>
   </data>
-  <data name="GroupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>155, 98</value>
+  <data name="Label5.Size" type="System.Drawing.Size, System.Drawing">
+    <value>40, 12</value>
   </data>
-  <data name="Label8.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="Label5.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
   </data>
-  <data name="ButtonDeleteTab.Text" xml:space="preserve">
-    <value>タブ削除</value>
+  <data name="Label5.Text" xml:space="preserve">
+    <value>Source</value>
   </data>
-  <data name="Label3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>156, 29</value>
+  <data name="&gt;&gt;Label5.Name" xml:space="preserve">
+    <value>Label5</value>
   </data>
-  <data name="EditFilterGroup.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
+  <data name="&gt;&gt;Label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckNotifyNew.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;Label5.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;GroupMatch.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;Label5.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="ButtonRenameTab.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
-  </data>
-  <data name="Label13.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 12</value>
-  </data>
-  <data name="ButtonRuleMove.Location" type="System.Drawing.Point, System.Drawing">
-    <value>342, 209</value>
-  </data>
-  <data name="CheckCaseSensitive.AutoSize" type="System.Boolean, mscorlib">
+  <data name="CheckRetweet.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="ButtonDelete.Location" type="System.Drawing.Point, System.Drawing">
-    <value>531, 210</value>
-  </data>
-  <data name="CheckNotifyNew.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="CheckRetweet.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="RadioExAnd.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="CheckRetweet.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 84</value>
   </data>
-  <data name="ButtonDown.Text" xml:space="preserve">
-    <value>6</value>
+  <data name="CheckRetweet.Size" type="System.Drawing.Size, System.Drawing">
+    <value>84, 16</value>
   </data>
-  <data name="ButtonEdit.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="CheckRetweet.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
   </data>
-  <data name="ListTabs.ItemHeight" type="System.Int32, mscorlib">
-    <value>12</value>
+  <data name="CheckRetweet.Text" xml:space="preserve">
+    <value>公式RTのみ</value>
   </data>
-  <data name="&gt;&gt;TextExSource.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;CheckRetweet.Name" xml:space="preserve">
+    <value>CheckRetweet</value>
   </data>
-  <data name="CheckRetweet.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;CheckRetweet.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="ExMSG1.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="&gt;&gt;CheckRetweet.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;ButtonOK.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="&gt;&gt;CheckRetweet.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="&gt;&gt;ButtonUp.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="CheckCaseSensitive.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
   <data name="CheckCaseSensitive.Location" type="System.Drawing.Point, System.Drawing">
     <value>299, 62</value>
   </data>
-  <data name="RadioExAnd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="CheckCaseSensitive.Size" type="System.Drawing.Size, System.Drawing">
+    <value>102, 16</value>
   </data>
-  <data name="Label4.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="CheckCaseSensitive.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
   </data>
-  <data name="&gt;&gt;Label8.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckCaseSensitive.Text" xml:space="preserve">
+    <value>大/小文字区別</value>
   </data>
-  <data name="ButtonAddTab.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="&gt;&gt;CheckCaseSensitive.Name" xml:space="preserve">
+    <value>CheckCaseSensitive</value>
   </data>
-  <data name="&gt;&gt;CheckURL.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name="&gt;&gt;CheckCaseSensitive.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ListTabs.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;CheckCaseSensitive.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
+  <data name="&gt;&gt;CheckCaseSensitive.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="RadioAND.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
   <data name="RadioAND.Location" type="System.Drawing.Point, System.Drawing">
     <value>8, 28</value>
   </data>
-  <data name="&gt;&gt;ButtonDelete.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="RadioAND.Size" type="System.Drawing.Size, System.Drawing">
+    <value>71, 16</value>
   </data>
-  <data name="&gt;&gt;CheckExRegex.Name" xml:space="preserve">
-    <value>CheckExRegex</value>
+  <data name="RadioAND.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="ButtonRuleUp.Font" type="System.Drawing.Font, System.Drawing">
-    <value>Marlett, 9pt, style=Bold</value>
+  <data name="RadioAND.Text" xml:space="preserve">
+    <value>複合条件</value>
   </data>
-  <data name="&gt;&gt;OptCopy.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;RadioAND.Name" xml:space="preserve">
+    <value>RadioAND</value>
   </data>
-  <data name="ButtonRenameTab.TabIndex" type="System.Int32, mscorlib">
+  <data name="&gt;&gt;RadioAND.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RadioAND.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
+  </data>
+  <data name="&gt;&gt;RadioAND.ZOrder" xml:space="preserve">
     <value>5</value>
   </data>
-  <data name="CheckURL.AutoSize" type="System.Boolean, mscorlib">
+  <data name="Label8.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;GroupTab.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="Label8.Location" type="System.Drawing.Point, System.Drawing">
+    <value>187, 14</value>
   </data>
-  <data name="&gt;&gt;Label9.Name" xml:space="preserve">
-    <value>Label9</value>
+  <data name="Label8.Size" type="System.Drawing.Size, System.Drawing">
+    <value>53, 12</value>
   </data>
-  <data name="GroupExclude.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="Label8.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="ButtonDeleteTab.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 266</value>
+  <data name="Label8.Text" xml:space="preserve">
+    <value>発言内容</value>
   </data>
-  <data name="&gt;&gt;GroupBox2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label8.Name" xml:space="preserve">
+    <value>Label8</value>
   </data>
-  <data name="Label7.AutoSize" type="System.Boolean, mscorlib">
+  <data name="&gt;&gt;Label8.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;Label8.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
+  </data>
+  <data name="&gt;&gt;Label8.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="CheckURL.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="GroupBox2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>142, 9</value>
+  <data name="CheckURL.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 40</value>
   </data>
+  <data name="CheckURL.Size" type="System.Drawing.Size, System.Drawing">
+    <value>70, 16</value>
+  </data>
+  <data name="CheckURL.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="CheckURL.Text" xml:space="preserve">
+    <value>URL検索</value>
+  </data>
   <data name="&gt;&gt;CheckURL.Name" xml:space="preserve">
     <value>CheckURL</value>
   </data>
-  <data name="&gt;&gt;Label1.Name" xml:space="preserve">
-    <value>Label1</value>
+  <data name="&gt;&gt;CheckURL.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonUp.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;CheckURL.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;CheckExRetweet.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="&gt;&gt;CheckURL.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
-  <data name="ComboSound.Size" type="System.Drawing.Size, System.Drawing">
-    <value>113, 20</value>
+  <data name="RadioPLUS.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="Label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="RadioPLUS.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 65</value>
   </data>
-  <data name="&gt;&gt;ButtonAddTab.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="RadioPLUS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>71, 16</value>
   </data>
-  <data name="&gt;&gt;CheckRegex.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="RadioPLUS.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
   </data>
-  <data name="CheckExRetweet.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="RadioPLUS.Text" xml:space="preserve">
+    <value>単一条件</value>
   </data>
-  <data name="&gt;&gt;RadioExAnd.Name" xml:space="preserve">
-    <value>RadioExAnd</value>
+  <data name="&gt;&gt;RadioPLUS.Name" xml:space="preserve">
+    <value>RadioPLUS</value>
   </data>
-  <data name="ButtonRuleUp.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;RadioPLUS.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label12.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;RadioPLUS.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;GroupMatch.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="&gt;&gt;RadioPLUS.ZOrder" xml:space="preserve">
+    <value>8</value>
   </data>
-  <data name="CheckExURL.Text" xml:space="preserve">
-    <value>URL検索</value>
+  <data name="CheckRegex.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;CheckExRegex.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="CheckRegex.Location" type="System.Drawing.Point, System.Drawing">
+    <value>299, 18</value>
   </data>
-  <data name="&gt;&gt;ExMSG1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckRegex.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 16</value>
   </data>
-  <data name="&gt;&gt;GroupBox2.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="CheckRegex.TabIndex" type="System.Int32, mscorlib">
+    <value>11</value>
   </data>
-  <data name="&gt;&gt;Label10.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="CheckRegex.Text" xml:space="preserve">
+    <value>正規表現</value>
   </data>
-  <data name="GroupExclude.Text" xml:space="preserve">
-    <value>除外ルール</value>
+  <data name="&gt;&gt;CheckRegex.Name" xml:space="preserve">
+    <value>CheckRegex</value>
   </data>
-  <data name="&gt;&gt;CheckExRetweet.Type" xml:space="preserve">
+  <data name="&gt;&gt;CheckRegex.Type" xml:space="preserve">
     <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="ButtonDelete.Text" xml:space="preserve">
-    <value>削除(&amp;D)</value>
+  <data name="&gt;&gt;CheckRegex.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;Label10.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;CheckRegex.ZOrder" xml:space="preserve">
+    <value>9</value>
   </data>
-  <data name="&gt;&gt;MSG2.ZOrder" xml:space="preserve">
-    <value>14</value>
+  <data name="Label9.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;Label13.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="Label9.Location" type="System.Drawing.Point, System.Drawing">
+    <value>87, 51</value>
   </data>
-  <data name="CheckCaseSensitive.Text" xml:space="preserve">
-    <value>大/小文字区別</value>
+  <data name="Label9.Size" type="System.Drawing.Size, System.Drawing">
+    <value>114, 12</value>
   </data>
-  <data name="&gt;&gt;OptCopy.Parent" xml:space="preserve">
-    <value>GroupBox1</value>
+  <data name="Label9.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
   </data>
-  <data name="ListFilters.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="Label9.Text" xml:space="preserve">
+    <value>ユーザーIDか発言内容</value>
   </data>
-  <data name="&gt;&gt;CheckCaseSensitive.Parent" xml:space="preserve">
+  <data name="&gt;&gt;Label9.Name" xml:space="preserve">
+    <value>Label9</value>
+  </data>
+  <data name="&gt;&gt;Label9.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;Label9.Parent" xml:space="preserve">
     <value>GroupMatch</value>
   </data>
-  <data name="Label9.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
+  <data name="&gt;&gt;Label9.ZOrder" xml:space="preserve">
+    <value>10</value>
   </data>
-  <data name="ExUID.Size" type="System.Drawing.Size, System.Drawing">
-    <value>61, 19</value>
+  <data name="Label7.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="CheckMark.Location" type="System.Drawing.Point, System.Drawing">
-    <value>44, 62</value>
+  <data name="Label7.Location" type="System.Drawing.Point, System.Drawing">
+    <value>156, 29</value>
   </data>
-  <data name="RadioExPLUS.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 65</value>
+  <data name="Label7.Size" type="System.Drawing.Size, System.Drawing">
+    <value>29, 12</value>
   </data>
-  <data name="Label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="Label7.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="&gt;&gt;ListFilters.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="Label7.Text" xml:space="preserve">
+    <value>AND</value>
   </data>
-  <data name="&gt;&gt;GroupMatch.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label7.Name" xml:space="preserve">
+    <value>Label7</value>
   </data>
-  <data name="RadioAND.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;Label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label11.Text" xml:space="preserve">
-    <value>除外ルールのみ設定すると、タブ全体への除外設定となります。</value>
+  <data name="&gt;&gt;Label7.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;Label11.Parent" xml:space="preserve">
-    <value>EditFilterGroup</value>
+  <data name="&gt;&gt;Label7.ZOrder" xml:space="preserve">
+    <value>11</value>
   </data>
-  <data name="CheckManageRead.AutoSize" type="System.Boolean, mscorlib">
+  <data name="Label6.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;CheckExRetweet.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="Label6.Location" type="System.Drawing.Point, System.Drawing">
+    <value>87, 14</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleDown.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="Label6.Size" type="System.Drawing.Size, System.Drawing">
+    <value>56, 12</value>
   </data>
-  <data name="Label3.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="Label6.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="Label2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>114, 12</value>
+  <data name="Label6.Text" xml:space="preserve">
+    <value>ユーザーID</value>
   </data>
-  <data name="ButtonDelete.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
+  <data name="&gt;&gt;Label6.Name" xml:space="preserve">
+    <value>Label6</value>
   </data>
-  <data name="OptCopy.Size" type="System.Drawing.Size, System.Drawing">
-    <value>123, 16</value>
+  <data name="&gt;&gt;Label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;MSG2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;Label6.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="GroupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>436, 18</value>
+  <data name="&gt;&gt;Label6.ZOrder" xml:space="preserve">
+    <value>12</value>
   </data>
-  <data name="Label11.Location" type="System.Drawing.Point, System.Drawing">
-    <value>436, 152</value>
+  <data name="UID.Location" type="System.Drawing.Point, System.Drawing">
+    <value>89, 26</value>
   </data>
-  <data name="&gt;&gt;ButtonDelete.Name" xml:space="preserve">
-    <value>ButtonDelete</value>
+  <data name="UID.Size" type="System.Drawing.Size, System.Drawing">
+    <value>61, 19</value>
   </data>
-  <data name="&gt;&gt;RadioAND.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
-  </data>
-  <data name="ButtonRuleUp.TabIndex" type="System.Int32, mscorlib">
+  <data name="UID.TabIndex" type="System.Int32, mscorlib">
     <value>2</value>
   </data>
-  <data name="ExMSG2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>89, 64</value>
+  <data name="&gt;&gt;UID.Name" xml:space="preserve">
+    <value>UID</value>
   </data>
-  <data name="CheckRegex.TabIndex" type="System.Int32, mscorlib">
-    <value>11</value>
+  <data name="&gt;&gt;UID.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;TextExSource.Name" xml:space="preserve">
-    <value>TextExSource</value>
+  <data name="&gt;&gt;UID.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="ListFilters.Location" type="System.Drawing.Point, System.Drawing">
-    <value>9, 19</value>
+  <data name="&gt;&gt;UID.ZOrder" xml:space="preserve">
+    <value>13</value>
   </data>
-  <data name="CheckMark.Size" type="System.Drawing.Size, System.Drawing">
-    <value>70, 16</value>
+  <data name="MSG1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>189, 26</value>
   </data>
-  <data name="ComboSound.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
+  <data name="MSG1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 19</value>
   </data>
-  <data name="&gt;&gt;CheckExURL.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="MSG1.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="CheckExCaseSensitive.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;MSG1.Name" xml:space="preserve">
+    <value>MSG1</value>
   </data>
-  <data name="ButtonNew.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="&gt;&gt;MSG1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckExCaseSensitive.Text" xml:space="preserve">
-    <value>大/小文字区別</value>
+  <data name="&gt;&gt;MSG1.Parent" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;ButtonEdit.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;MSG1.ZOrder" xml:space="preserve">
+    <value>14</value>
   </data>
-  <data name="CheckManageRead.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 371</value>
+  <data name="MSG2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>89, 64</value>
   </data>
-  <data name="RadioAND.Size" type="System.Drawing.Size, System.Drawing">
-    <value>71, 16</value>
+  <data name="MSG2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>204, 19</value>
   </data>
-  <data name="MSG1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>189, 26</value>
+  <data name="MSG2.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
   </data>
-  <data name="CheckNotifyNew.Text" xml:space="preserve">
-    <value>新着通知表示</value>
+  <data name="&gt;&gt;MSG2.Name" xml:space="preserve">
+    <value>MSG2</value>
   </data>
-  <data name="OptCopy.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="&gt;&gt;MSG2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleCopy.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
-  </data>
-  <data name="&gt;&gt;CheckRetweet.Parent" xml:space="preserve">
+  <data name="&gt;&gt;MSG2.Parent" xml:space="preserve">
     <value>GroupMatch</value>
   </data>
-  <data name="RadioPLUS.Size" type="System.Drawing.Size, System.Drawing">
-    <value>71, 16</value>
+  <data name="&gt;&gt;MSG2.ZOrder" xml:space="preserve">
+    <value>15</value>
   </data>
-  <data name="&gt;&gt;Label2.ZOrder" xml:space="preserve">
-    <value>9</value>
+  <data name="GroupMatch.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 18</value>
   </data>
-  <data name="CheckExRegex.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="GroupMatch.Size" type="System.Drawing.Size, System.Drawing">
+    <value>424, 128</value>
   </data>
   <data name="GroupMatch.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
   </data>
-  <data name="&gt;&gt;ExMSG1.ZOrder" xml:space="preserve">
-    <value>13</value>
+  <data name="GroupMatch.Text" xml:space="preserve">
+    <value>マッチルール</value>
   </data>
-  <data name="CheckExURL.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;GroupMatch.Name" xml:space="preserve">
+    <value>GroupMatch</value>
   </data>
-  <data name="&gt;&gt;CheckExCaseSensitive.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="&gt;&gt;GroupMatch.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonDeleteTab.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;GroupMatch.Parent" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="&gt;&gt;ExUID.ZOrder" xml:space="preserve">
-    <value>12</value>
+  <data name="&gt;&gt;GroupMatch.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="ListFilters.HorizontalScrollbar" type="System.Boolean, mscorlib">
+  <data name="CheckMark.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
+  <data name="CheckMark.Location" type="System.Drawing.Point, System.Drawing">
+    <value>44, 62</value>
+  </data>
+  <data name="CheckMark.Size" type="System.Drawing.Size, System.Drawing">
+    <value>70, 16</value>
+  </data>
   <data name="CheckMark.TabIndex" type="System.Int32, mscorlib">
     <value>2</value>
   </data>
-  <data name="&gt;&gt;ButtonDown.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckMark.Text" xml:space="preserve">
+    <value>マークする</value>
   </data>
-  <data name="Label4.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 12</value>
+  <data name="&gt;&gt;CheckMark.Name" xml:space="preserve">
+    <value>CheckMark</value>
   </data>
-  <data name="GroupBox1.Text" xml:space="preserve">
-    <value>マッチ時の追加動作(&amp;E)</value>
+  <data name="&gt;&gt;CheckMark.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckExCaseSensitive.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
+  <data name="&gt;&gt;CheckMark.Parent" xml:space="preserve">
+    <value>GroupBox1</value>
   </data>
-  <data name="&gt;&gt;ButtonDeleteTab.Name" xml:space="preserve">
-    <value>ButtonDeleteTab</value>
+  <data name="&gt;&gt;CheckMark.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="GroupExclude.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 140</value>
-  </data>
-  <data name="Label9.AutoSize" type="System.Boolean, mscorlib">
+  <data name="OptCopy.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;RadioExPLUS.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="OptCopy.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 40</value>
   </data>
-  <data name="OptMove.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="OptCopy.Size" type="System.Drawing.Size, System.Drawing">
+    <value>123, 16</value>
   </data>
-  <data name="&gt;&gt;ComboSound.ZOrder" xml:space="preserve">
-    <value>9</value>
+  <data name="OptCopy.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="ButtonAddTab.Text" xml:space="preserve">
-    <value>タブ作成</value>
+  <data name="OptCopy.Text" xml:space="preserve">
+    <value>Recentからコピーする</value>
   </data>
-  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
-    <value>766, 553</value>
+  <data name="&gt;&gt;OptCopy.Name" xml:space="preserve">
+    <value>OptCopy</value>
   </data>
-  <data name="Label9.Location" type="System.Drawing.Point, System.Drawing">
-    <value>87, 51</value>
+  <data name="&gt;&gt;OptCopy.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;Label3.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="&gt;&gt;OptCopy.Parent" xml:space="preserve">
+    <value>GroupBox1</value>
   </data>
-  <data name="ButtonRuleDown.Text" xml:space="preserve">
-    <value>6</value>
+  <data name="&gt;&gt;OptCopy.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;TextSource.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="CheckExCaseSensitive.AutoSize" type="System.Boolean, mscorlib">
+  <data name="OptMove.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;Label5.Name" xml:space="preserve">
-    <value>Label5</value>
+  <data name="OptMove.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 18</value>
   </data>
-  <data name="CheckExRegex.Size" type="System.Drawing.Size, System.Drawing">
-    <value>72, 16</value>
+  <data name="OptMove.Size" type="System.Drawing.Size, System.Drawing">
+    <value>120, 16</value>
   </data>
-  <data name="GroupBox2.Text" xml:space="preserve">
-    <value>振り分けルール</value>
+  <data name="OptMove.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleCopy.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="OptMove.Text" xml:space="preserve">
+    <value>Recentから移動する</value>
   </data>
-  <data name="&gt;&gt;CheckURL.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;OptMove.Name" xml:space="preserve">
+    <value>OptMove</value>
   </data>
-  <data name="ButtonRuleDown.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
-  </data>
-  <data name="&gt;&gt;ListFilters.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
   <data name="&gt;&gt;OptMove.Type" xml:space="preserve">
     <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;GroupExclude.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;OptMove.Parent" xml:space="preserve">
+    <value>GroupBox1</value>
   </data>
-  <data name="ButtonDown.TabIndex" type="System.Int32, mscorlib">
+  <data name="&gt;&gt;OptMove.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="CheckExRegex.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 18</value>
+  <data name="GroupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>436, 18</value>
   </data>
-  <data name="&gt;&gt;CheckRegex.Name" xml:space="preserve">
-    <value>CheckRegex</value>
+  <data name="GroupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>155, 98</value>
   </data>
-  <data name="CheckExURL.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="GroupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;RadioPLUS.Type" xml:space="preserve">
-    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="GroupBox1.Text" xml:space="preserve">
+    <value>マッチ時の追加動作(&amp;E)</value>
   </data>
-  <data name="ButtonDown.Location" type="System.Drawing.Point, System.Drawing">
-    <value>87, 207</value>
+  <data name="&gt;&gt;GroupBox1.Name" xml:space="preserve">
+    <value>GroupBox1</value>
   </data>
-  <data name="&gt;&gt;ExMSG2.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="&gt;&gt;GroupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="LabelTabType.Size" type="System.Drawing.Size, System.Drawing">
-    <value>76, 12</value>
+  <data name="&gt;&gt;GroupBox1.Parent" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="Label4.Text" xml:space="preserve">
-    <value>ユーザーID</value>
+  <data name="&gt;&gt;GroupBox1.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="TextSource.Location" type="System.Drawing.Point, System.Drawing">
-    <value>89, 89</value>
+  <data name="ButtonCancel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>516, 264</value>
   </data>
-  <data name="&gt;&gt;ExUID.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="ButtonCancel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
-  <data name="&gt;&gt;RadioAND.Name" xml:space="preserve">
-    <value>RadioAND</value>
+  <data name="ButtonCancel.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;Label6.ZOrder" xml:space="preserve">
-    <value>11</value>
+  <data name="ButtonCancel.Text" xml:space="preserve">
+    <value>キャンセル</value>
   </data>
-  <data name="ComboSound.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 427</value>
+  <data name="&gt;&gt;ButtonCancel.Name" xml:space="preserve">
+    <value>ButtonCancel</value>
   </data>
-  <data name="CheckRetweet.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 84</value>
+  <data name="&gt;&gt;ButtonCancel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="GroupBox2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>612, 508</value>
+  <data name="&gt;&gt;ButtonCancel.Parent" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="&gt;&gt;TextSource.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;ButtonCancel.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;$this.Name" xml:space="preserve">
-    <value>FilterDialog</value>
+  <data name="ButtonOK.Location" type="System.Drawing.Point, System.Drawing">
+    <value>438, 264</value>
   </data>
-  <data name="&gt;&gt;MSG2.Name" xml:space="preserve">
-    <value>MSG2</value>
+  <data name="ButtonOK.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
-  <data name="&gt;&gt;ButtonOK.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonOK.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="CheckRegex.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 18</value>
+  <data name="ButtonOK.Text" xml:space="preserve">
+    <value>OK</value>
   </data>
-  <data name="&gt;&gt;OptMove.Parent" xml:space="preserve">
-    <value>GroupBox1</value>
+  <data name="&gt;&gt;ButtonOK.Name" xml:space="preserve">
+    <value>ButtonOK</value>
   </data>
-  <data name="&gt;&gt;ExUID.Name" xml:space="preserve">
-    <value>ExUID</value>
+  <data name="&gt;&gt;ButtonOK.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label11.Size" type="System.Drawing.Size, System.Drawing">
-    <value>157, 74</value>
+  <data name="&gt;&gt;ButtonOK.Parent" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="LabelTabType.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;ButtonOK.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="Label1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>53, 12</value>
+  <data name="EditFilterGroup.Location" type="System.Drawing.Point, System.Drawing">
+    <value>9, 238</value>
   </data>
-  <data name="&gt;&gt;CheckRetweet.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="EditFilterGroup.Size" type="System.Drawing.Size, System.Drawing">
+    <value>600, 293</value>
   </data>
-  <data name="MSG2.TabIndex" type="System.Int32, mscorlib">
+  <data name="EditFilterGroup.TabIndex" type="System.Int32, mscorlib">
     <value>8</value>
   </data>
-  <data name="&gt;&gt;ListTabs.Name" xml:space="preserve">
-    <value>ListTabs</value>
+  <data name="EditFilterGroup.Text" xml:space="preserve">
+    <value>ルール編集</value>
   </data>
-  <data name="&gt;&gt;ButtonClose.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="&gt;&gt;EditFilterGroup.Name" xml:space="preserve">
+    <value>EditFilterGroup</value>
   </data>
-  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
-    <value>6, 12</value>
+  <data name="&gt;&gt;EditFilterGroup.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;Label12.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
-  </data>
   <data name="&gt;&gt;EditFilterGroup.Parent" xml:space="preserve">
     <value>GroupBox2</value>
   </data>
-  <data name="OptCopy.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;EditFilterGroup.ZOrder" xml:space="preserve">
+    <value>8</value>
   </data>
-  <data name="LabelTabType.Text" xml:space="preserve">
-    <value>LabelTabType</value>
+  <data name="ButtonNew.Location" type="System.Drawing.Point, System.Drawing">
+    <value>9, 209</value>
   </data>
-  <data name="&gt;&gt;GroupMatch.Name" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="ButtonNew.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
-  <data name="ListFilters.ItemHeight" type="System.Int32, mscorlib">
-    <value>12</value>
+  <data name="ButtonNew.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="Label11.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="ButtonNew.Text" xml:space="preserve">
+    <value>新規(&amp;N)</value>
   </data>
-  <data name="&gt;&gt;Label12.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ButtonNew.Name" xml:space="preserve">
+    <value>ButtonNew</value>
   </data>
-  <data name="EditFilterGroup.Size" type="System.Drawing.Size, System.Drawing">
-    <value>597, 263</value>
+  <data name="&gt;&gt;ButtonNew.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label6.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;ButtonNew.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="Label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;ButtonNew.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
-  <data name="ButtonNew.Location" type="System.Drawing.Point, System.Drawing">
-    <value>9, 209</value>
+  <data name="ButtonDelete.Location" type="System.Drawing.Point, System.Drawing">
+    <value>531, 210</value>
   </data>
-  <data name="RadioExAnd.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="ButtonDelete.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
-  <data name="CheckNotifyNew.TabIndex" type="System.Int32, mscorlib">
+  <data name="ButtonDelete.TabIndex" type="System.Int32, mscorlib">
     <value>7</value>
   </data>
-  <data name="RadioPLUS.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 65</value>
+  <data name="ButtonDelete.Text" xml:space="preserve">
+    <value>削除(&amp;D)</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleUp.Type" xml:space="preserve">
+  <data name="&gt;&gt;ButtonDelete.Name" xml:space="preserve">
+    <value>ButtonDelete</value>
+  </data>
+  <data name="&gt;&gt;ButtonDelete.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="MSG2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>204, 19</value>
+  <data name="&gt;&gt;ButtonDelete.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="&gt;&gt;Label13.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;ButtonDelete.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="&gt;&gt;ButtonDelete.Type" xml:space="preserve">
+  <data name="ButtonEdit.Location" type="System.Drawing.Point, System.Drawing">
+    <value>173, 209</value>
+  </data>
+  <data name="ButtonEdit.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="ButtonEdit.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="ButtonEdit.Text" xml:space="preserve">
+    <value>編集(&amp;E)</value>
+  </data>
+  <data name="&gt;&gt;ButtonEdit.Name" xml:space="preserve">
+    <value>ButtonEdit</value>
+  </data>
+  <data name="&gt;&gt;ButtonEdit.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;CheckNotifyNew.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;ButtonEdit.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="ButtonCancel.Location" type="System.Drawing.Point, System.Drawing">
-    <value>516, 234</value>
+  <data name="&gt;&gt;ButtonEdit.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="CheckManageRead.Text" xml:space="preserve">
-    <value>未読管理</value>
+  <data name="GroupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
   </data>
-  <data name="&gt;&gt;UID.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="ButtonRuleMove.Location" type="System.Drawing.Point, System.Drawing">
+    <value>342, 209</value>
   </data>
-  <data name="&gt;&gt;Label9.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleMove.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
   <data name="ButtonRuleMove.TabIndex" type="System.Int32, mscorlib">
     <value>6</value>
   </data>
-  <data name="RadioExPLUS.Size" type="System.Drawing.Size, System.Drawing">
-    <value>71, 16</value>
+  <data name="ButtonRuleMove.Text" xml:space="preserve">
+    <value>移動</value>
   </data>
-  <data name="Label1.Text" xml:space="preserve">
-    <value>発言内容</value>
+  <data name="&gt;&gt;ButtonRuleMove.Name" xml:space="preserve">
+    <value>ButtonRuleMove</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleCopy.Name" xml:space="preserve">
-    <value>ButtonRuleCopy</value>
+  <data name="&gt;&gt;ButtonRuleMove.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;RadioExPLUS.Name" xml:space="preserve">
-    <value>RadioExPLUS</value>
+  <data name="&gt;&gt;ButtonRuleMove.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="RadioPLUS.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
+  <data name="&gt;&gt;ButtonRuleMove.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;ButtonDeleteTab.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleCopy.Location" type="System.Drawing.Point, System.Drawing">
+    <value>261, 209</value>
   </data>
-  <data name="&gt;&gt;LabelTabType.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleCopy.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
   </data>
-  <data name="Label6.Size" type="System.Drawing.Size, System.Drawing">
-    <value>56, 12</value>
+  <data name="ButtonRuleCopy.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;CheckExCaseSensitive.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleCopy.Text" xml:space="preserve">
+    <value>コピー</value>
   </data>
-  <data name="Label5.Location" type="System.Drawing.Point, System.Drawing">
-    <value>43, 92</value>
+  <data name="&gt;&gt;ButtonRuleCopy.Name" xml:space="preserve">
+    <value>ButtonRuleCopy</value>
   </data>
-  <data name="ButtonRuleDown.Size" type="System.Drawing.Size, System.Drawing">
-    <value>34, 23</value>
+  <data name="&gt;&gt;ButtonRuleCopy.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckExCaseSensitive.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 62</value>
+  <data name="&gt;&gt;ButtonRuleCopy.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
-    <value>CenterParent</value>
+  <data name="&gt;&gt;ButtonRuleCopy.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleMove.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="ButtonRuleDown.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Marlett, 9pt, style=Bold</value>
   </data>
-  <data name="Label5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="ButtonRuleDown.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="CheckNotifyNew.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 393</value>
+  <data name="ButtonRuleDown.Location" type="System.Drawing.Point, System.Drawing">
+    <value>131, 209</value>
   </data>
-  <data name="&gt;&gt;Label7.Name" xml:space="preserve">
-    <value>Label7</value>
+  <data name="ButtonRuleDown.Size" type="System.Drawing.Size, System.Drawing">
+    <value>34, 23</value>
   </data>
-  <data name="Label12.Location" type="System.Drawing.Point, System.Drawing">
-    <value>43, 92</value>
+  <data name="ButtonRuleDown.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="GroupTab.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 9</value>
+  <data name="ButtonRuleDown.Text" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="CheckManageRead.Size" type="System.Drawing.Size, System.Drawing">
-    <value>72, 16</value>
+  <data name="&gt;&gt;ButtonRuleDown.Name" xml:space="preserve">
+    <value>ButtonRuleDown</value>
   </data>
-  <data name="Label7.Text" xml:space="preserve">
-    <value>AND</value>
-  </data>
-  <data name="&gt;&gt;ButtonNew.Type" xml:space="preserve">
+  <data name="&gt;&gt;ButtonRuleDown.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="RadioExPLUS.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;ButtonRuleDown.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="ButtonRuleCopy.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="&gt;&gt;ButtonRuleDown.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="ExUID.Location" type="System.Drawing.Point, System.Drawing">
-    <value>89, 26</value>
+  <data name="ButtonRuleUp.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Marlett, 9pt, style=Bold</value>
   </data>
-  <data name="&gt;&gt;EditFilterGroup.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleUp.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;MSG2.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="ButtonRuleUp.Location" type="System.Drawing.Point, System.Drawing">
+    <value>90, 209</value>
   </data>
-  <data name="&gt;&gt;OptMove.Name" xml:space="preserve">
-    <value>OptMove</value>
+  <data name="ButtonRuleUp.Size" type="System.Drawing.Size, System.Drawing">
+    <value>34, 23</value>
   </data>
-  <data name="&gt;&gt;CheckManageRead.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRuleUp.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
   </data>
   <data name="ButtonRuleUp.Text" xml:space="preserve">
     <value>5</value>
   </data>
-  <data name="ButtonEdit.Location" type="System.Drawing.Point, System.Drawing">
-    <value>173, 209</value>
+  <data name="&gt;&gt;ButtonRuleUp.Name" xml:space="preserve">
+    <value>ButtonRuleUp</value>
   </data>
-  <data name="RadioExAnd.Text" xml:space="preserve">
-    <value>複合条件</value>
+  <data name="&gt;&gt;ButtonRuleUp.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleCopy.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;ButtonRuleUp.Parent" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="&gt;&gt;ButtonUp.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ButtonRuleUp.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="MSG1.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="GroupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>142, 9</value>
   </data>
-  <data name="Label3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>29, 12</value>
+  <data name="GroupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>615, 538</value>
   </data>
-  <data name="&gt;&gt;Label11.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="GroupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;Label4.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="GroupBox2.Text" xml:space="preserve">
+    <value>振り分けルール</value>
   </data>
-  <data name="&gt;&gt;LabelTabType.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;GroupBox2.Name" xml:space="preserve">
+    <value>GroupBox2</value>
   </data>
-  <data name="&gt;&gt;RadioExPLUS.Type" xml:space="preserve">
-    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;GroupBox2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="ExUID.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="&gt;&gt;GroupBox2.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleMove.Name" xml:space="preserve">
-    <value>ButtonRuleMove</value>
+  <data name="&gt;&gt;GroupBox2.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="MSG1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>103, 19</value>
+  <data name="ListTabs.ItemHeight" type="System.Int32, mscorlib">
+    <value>12</value>
   </data>
-  <data name="CheckRegex.Size" type="System.Drawing.Size, System.Drawing">
-    <value>72, 16</value>
+  <data name="ListTabs.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 18</value>
   </data>
-  <data name="Label8.Size" type="System.Drawing.Size, System.Drawing">
-    <value>53, 12</value>
+  <data name="ListTabs.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 184</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleMove.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="ListTabs.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="CheckCaseSensitive.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
+  <data name="&gt;&gt;ListTabs.Name" xml:space="preserve">
+    <value>ListTabs</value>
   </data>
-  <data name="&gt;&gt;Label10.Name" xml:space="preserve">
-    <value>Label10</value>
+  <data name="&gt;&gt;ListTabs.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;ButtonDown.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="&gt;&gt;ListTabs.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="&gt;&gt;OptCopy.Type" xml:space="preserve">
-    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;ListTabs.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="Label13.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 327</value>
+  <data name="ButtonAddTab.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 237</value>
   </data>
-  <data name="Label3.TabIndex" type="System.Int32, mscorlib">
+  <data name="ButtonAddTab.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 23</value>
+  </data>
+  <data name="ButtonAddTab.TabIndex" type="System.Int32, mscorlib">
     <value>3</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleUp.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="ButtonAddTab.Text" xml:space="preserve">
+    <value>タブ作成</value>
   </data>
-  <data name="TextSource.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
+  <data name="&gt;&gt;ButtonAddTab.Name" xml:space="preserve">
+    <value>ButtonAddTab</value>
   </data>
-  <data name="ButtonDown.Size" type="System.Drawing.Size, System.Drawing">
-    <value>34, 23</value>
+  <data name="&gt;&gt;ButtonAddTab.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;Label8.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;ButtonAddTab.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="RadioPLUS.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;ButtonAddTab.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="TextExSource.Size" type="System.Drawing.Size, System.Drawing">
-    <value>96, 19</value>
+  <data name="ButtonDeleteTab.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="Label12.Size" type="System.Drawing.Size, System.Drawing">
-    <value>40, 12</value>
+  <data name="ButtonDeleteTab.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 266</value>
   </data>
-  <data name="&gt;&gt;ListFilters.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonDeleteTab.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 23</value>
   </data>
-  <data name="Label2.Text" xml:space="preserve">
-    <value>ユーザーIDか発言内容</value>
+  <data name="ButtonDeleteTab.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;ButtonEdit.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
+  <data name="ButtonDeleteTab.Text" xml:space="preserve">
+    <value>タブ削除</value>
   </data>
-  <data name="&gt;&gt;CheckManageRead.Parent" xml:space="preserve">
-    <value>GroupTab</value>
+  <data name="&gt;&gt;ButtonDeleteTab.Name" xml:space="preserve">
+    <value>ButtonDeleteTab</value>
   </data>
-  <data name="ButtonClose.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="&gt;&gt;ButtonDeleteTab.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;Label2.Name" xml:space="preserve">
-    <value>Label2</value>
+  <data name="&gt;&gt;ButtonDeleteTab.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="GroupExclude.Size" type="System.Drawing.Size, System.Drawing">
-    <value>424, 116</value>
+  <data name="&gt;&gt;ButtonDeleteTab.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="&gt;&gt;Label11.Name" xml:space="preserve">
-    <value>Label11</value>
+  <data name="ButtonRenameTab.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;MSG1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonRenameTab.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 295</value>
   </data>
-  <data name="&gt;&gt;Label10.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="ButtonRenameTab.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 23</value>
   </data>
-  <data name="&gt;&gt;CheckMark.Name" xml:space="preserve">
-    <value>CheckMark</value>
+  <data name="ButtonRenameTab.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;RadioPLUS.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="ButtonRenameTab.Text" xml:space="preserve">
+    <value>タブ名変更</value>
   </data>
-  <data name="ButtonOK.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="&gt;&gt;ButtonRenameTab.Name" xml:space="preserve">
+    <value>ButtonRenameTab</value>
   </data>
-  <data name="&gt;&gt;OptMove.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="&gt;&gt;ButtonRenameTab.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;CheckCaseSensitive.Name" xml:space="preserve">
-    <value>CheckCaseSensitive</value>
+  <data name="&gt;&gt;ButtonRenameTab.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="&gt;&gt;LabelTabType.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;ButtonRenameTab.ZOrder" xml:space="preserve">
+    <value>8</value>
   </data>
-  <data name="&gt;&gt;CheckRetweet.Name" xml:space="preserve">
-    <value>CheckRetweet</value>
+  <data name="CheckManageRead.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;Label7.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="CheckManageRead.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 371</value>
   </data>
-  <data name="Label1.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="CheckManageRead.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 16</value>
   </data>
-  <data name="&gt;&gt;ButtonDeleteTab.ZOrder" xml:space="preserve">
+  <data name="CheckManageRead.TabIndex" type="System.Int32, mscorlib">
     <value>6</value>
   </data>
-  <data name="Label8.Text" xml:space="preserve">
-    <value>発言内容</value>
+  <data name="CheckManageRead.Text" xml:space="preserve">
+    <value>未読管理</value>
   </data>
-  <data name="ButtonAddTab.Size" type="System.Drawing.Size, System.Drawing">
-    <value>113, 23</value>
+  <data name="&gt;&gt;CheckManageRead.Name" xml:space="preserve">
+    <value>CheckManageRead</value>
   </data>
-  <data name="Label10.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;CheckManageRead.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckExRetweet.TabIndex" type="System.Int32, mscorlib">
-    <value>14</value>
+  <data name="&gt;&gt;CheckManageRead.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="ButtonDeleteTab.Size" type="System.Drawing.Size, System.Drawing">
-    <value>113, 23</value>
+  <data name="&gt;&gt;CheckManageRead.ZOrder" xml:space="preserve">
+    <value>10</value>
   </data>
-  <data name="ButtonDeleteTab.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="CheckNotifyNew.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="ButtonRuleCopy.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="CheckNotifyNew.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="&gt;&gt;ExMSG2.Name" xml:space="preserve">
-    <value>ExMSG2</value>
+  <data name="CheckNotifyNew.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 393</value>
   </data>
-  <data name="&gt;&gt;ExUID.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="CheckNotifyNew.Size" type="System.Drawing.Size, System.Drawing">
+    <value>96, 16</value>
   </data>
-  <data name="&gt;&gt;RadioAND.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="CheckNotifyNew.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
   </data>
-  <data name="ButtonRenameTab.Location" type="System.Drawing.Point, System.Drawing">
-    <value>8, 295</value>
+  <data name="CheckNotifyNew.Text" xml:space="preserve">
+    <value>新着通知表示</value>
   </data>
-  <data name="ButtonNew.Text" xml:space="preserve">
-    <value>新規(&amp;N)</value>
+  <data name="&gt;&gt;CheckNotifyNew.Name" xml:space="preserve">
+    <value>CheckNotifyNew</value>
   </data>
-  <data name="&gt;&gt;Label8.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;CheckNotifyNew.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="CheckMark.Text" xml:space="preserve">
-    <value>マークする</value>
+  <data name="&gt;&gt;CheckNotifyNew.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="&gt;&gt;GroupBox1.Name" xml:space="preserve">
-    <value>GroupBox1</value>
+  <data name="&gt;&gt;CheckNotifyNew.ZOrder" xml:space="preserve">
+    <value>11</value>
   </data>
-  <data name="ButtonRuleDown.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="ComboSound.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 427</value>
   </data>
-  <data name="Label5.Size" type="System.Drawing.Size, System.Drawing">
-    <value>40, 12</value>
+  <data name="ComboSound.Size" type="System.Drawing.Size, System.Drawing">
+    <value>113, 20</value>
   </data>
-  <data name="&gt;&gt;Label9.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="ComboSound.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
   </data>
-  <data name="&gt;&gt;CheckURL.Parent" xml:space="preserve">
-    <value>GroupMatch</value>
+  <data name="&gt;&gt;ComboSound.Name" xml:space="preserve">
+    <value>ComboSound</value>
   </data>
-  <data name="&gt;&gt;RadioExAnd.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="&gt;&gt;ComboSound.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name="&gt;&gt;ComboSound.Parent" xml:space="preserve">
     <value>GroupTab</value>
   </data>
-  <data name="UID.Size" type="System.Drawing.Size, System.Drawing">
-    <value>61, 19</value>
+  <data name="&gt;&gt;ComboSound.ZOrder" xml:space="preserve">
+    <value>9</value>
   </data>
-  <data name="&gt;&gt;Label11.Type" xml:space="preserve">
+  <data name="Label10.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="Label10.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 412</value>
+  </data>
+  <data name="Label10.Size" type="System.Drawing.Size, System.Drawing">
+    <value>66, 12</value>
+  </data>
+  <data name="Label10.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
+  </data>
+  <data name="Label10.Text" xml:space="preserve">
+    <value>新着サウンド</value>
+  </data>
+  <data name="&gt;&gt;Label10.Name" xml:space="preserve">
+    <value>Label10</value>
+  </data>
+  <data name="&gt;&gt;Label10.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="Label12.Text" xml:space="preserve">
-    <value>Source</value>
+  <data name="&gt;&gt;Label10.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="CheckExRetweet.Size" type="System.Drawing.Size, System.Drawing">
-    <value>84, 16</value>
+  <data name="&gt;&gt;Label10.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
-  <data name="UID.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="ButtonUp.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Marlett, 9pt, style=Bold</value>
   </data>
-  <data name="&gt;&gt;ButtonDelete.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name="ButtonUp.Location" type="System.Drawing.Point, System.Drawing">
+    <value>8, 207</value>
   </data>
-  <data name="&gt;&gt;ButtonRuleDown.Type" xml:space="preserve">
+  <data name="ButtonUp.Size" type="System.Drawing.Size, System.Drawing">
+    <value>34, 23</value>
+  </data>
+  <data name="ButtonUp.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="ButtonUp.Text" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;ButtonUp.Name" xml:space="preserve">
+    <value>ButtonUp</value>
+  </data>
+  <data name="&gt;&gt;ButtonUp.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;Label8.Name" xml:space="preserve">
-    <value>Label8</value>
+  <data name="&gt;&gt;ButtonUp.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="ExMSG1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>189, 26</value>
+  <data name="&gt;&gt;ButtonUp.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;RadioExAnd.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="ButtonDown.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Marlett, 9pt, style=Bold</value>
   </data>
-  <data name="ButtonDeleteTab.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="ButtonDown.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="CheckMark.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="ButtonDown.Location" type="System.Drawing.Point, System.Drawing">
+    <value>87, 207</value>
   </data>
-  <data name="&gt;&gt;Label13.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonDown.Size" type="System.Drawing.Size, System.Drawing">
+    <value>34, 23</value>
   </data>
-  <data name="&gt;&gt;Label2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="ButtonDown.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
   </data>
+  <data name="ButtonDown.Text" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;ButtonDown.Name" xml:space="preserve">
+    <value>ButtonDown</value>
+  </data>
+  <data name="&gt;&gt;ButtonDown.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
   <data name="&gt;&gt;ButtonDown.Parent" xml:space="preserve">
     <value>GroupTab</value>
   </data>
-  <data name="Label5.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
+  <data name="&gt;&gt;ButtonDown.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="OptMove.AutoSize" type="System.Boolean, mscorlib">
+  <data name="LabelTabType.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="&gt;&gt;CheckNotifyNew.ZOrder" xml:space="preserve">
-    <value>11</value>
+  <data name="LabelTabType.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 344</value>
   </data>
-  <data name="&gt;&gt;ExMSG1.Parent" xml:space="preserve">
-    <value>GroupExclude</value>
+  <data name="LabelTabType.Size" type="System.Drawing.Size, System.Drawing">
+    <value>76, 12</value>
   </data>
-  <data name="ButtonRenameTab.Size" type="System.Drawing.Size, System.Drawing">
-    <value>113, 23</value>
-  </data>
-  <data name="OptMove.Text" xml:space="preserve">
-    <value>Recentから移動する</value>
-  </data>
   <data name="LabelTabType.TabIndex" type="System.Int32, mscorlib">
     <value>11</value>
   </data>
-  <data name="CheckRetweet.TabIndex" type="System.Int32, mscorlib">
-    <value>14</value>
+  <data name="LabelTabType.Text" xml:space="preserve">
+    <value>LabelTabType</value>
   </data>
-  <data name="ButtonClose.Location" type="System.Drawing.Point, System.Drawing">
-    <value>679, 523</value>
+  <data name="&gt;&gt;LabelTabType.Name" xml:space="preserve">
+    <value>LabelTabType</value>
   </data>
-  <data name="&gt;&gt;ComboSound.Name" xml:space="preserve">
-    <value>ComboSound</value>
+  <data name="&gt;&gt;LabelTabType.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="ButtonCancel.Text" xml:space="preserve">
-    <value>キャンセル</value>
+  <data name="&gt;&gt;LabelTabType.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="Label5.Text" xml:space="preserve">
-    <value>Source</value>
+  <data name="&gt;&gt;LabelTabType.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;CheckExRetweet.Name" xml:space="preserve">
-    <value>CheckExRetweet</value>
+  <data name="Label13.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="CheckURL.TabIndex" type="System.Int32, mscorlib">
-    <value>12</value>
+  <data name="Label13.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 327</value>
   </data>
-  <data name="CheckURL.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 40</value>
+  <data name="Label13.Size" type="System.Drawing.Size, System.Drawing">
+    <value>56, 12</value>
   </data>
-  <data name="GroupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="Label13.TabIndex" type="System.Int32, mscorlib">
+    <value>10</value>
   </data>
-  <data name="&gt;&gt;ListFilters.Name" xml:space="preserve">
-    <value>ListFilters</value>
+  <data name="Label13.Text" xml:space="preserve">
+    <value>タブの種類</value>
   </data>
-  <data name="&gt;&gt;GroupBox1.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="&gt;&gt;Label13.Name" xml:space="preserve">
+    <value>Label13</value>
   </data>
-  <data name="OptCopy.Location" type="System.Drawing.Point, System.Drawing">
-    <value>15, 40</value>
+  <data name="&gt;&gt;Label13.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;CheckExCaseSensitive.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="&gt;&gt;Label13.Parent" xml:space="preserve">
+    <value>GroupTab</value>
   </data>
-  <data name="&gt;&gt;RadioPLUS.Name" xml:space="preserve">
-    <value>RadioPLUS</value>
+  <data name="&gt;&gt;Label13.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="CheckURL.Text" xml:space="preserve">
-    <value>URL検索</value>
+  <data name="GroupTab.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 9</value>
   </data>
-  <data name="&gt;&gt;CheckMark.Parent" xml:space="preserve">
-    <value>GroupBox1</value>
+  <data name="GroupTab.Size" type="System.Drawing.Size, System.Drawing">
+    <value>127, 459</value>
   </data>
-  <data name="&gt;&gt;ButtonNew.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="GroupTab.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;CheckCaseSensitive.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="GroupTab.Text" xml:space="preserve">
+    <value>タブ</value>
   </data>
-  <data name="&gt;&gt;ButtonNew.Parent" xml:space="preserve">
-    <value>GroupBox2</value>
-  </data>
   <data name="&gt;&gt;GroupTab.Name" xml:space="preserve">
     <value>GroupTab</value>
   </data>
-  <data name="ButtonOK.Text" xml:space="preserve">
-    <value>OK</value>
+  <data name="&gt;&gt;GroupTab.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="LabelTabType.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 344</value>
+  <data name="&gt;&gt;GroupTab.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="RadioPLUS.Text" xml:space="preserve">
-    <value>単一条件</value>
+  <data name="&gt;&gt;GroupTab.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="ListTabs.Size" type="System.Drawing.Size, System.Drawing">
-    <value>113, 184</value>
-  </data>
-  <data name="TextExSource.TabIndex" type="System.Int32, mscorlib">
-    <value>10</value>
-  </data>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>39</value>
   </metadata>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 12</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>769, 583</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>振り分けルール</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>FilterDialog</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
 </root>
\ No newline at end of file

Modified: trunk/Tween/FilterDialog.vb
===================================================================
--- trunk/Tween/FilterDialog.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/FilterDialog.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -22,6 +22,7 @@
 ' Boston, MA 02110-1301, USA.
 
 Imports System.Collections.Specialized
+Imports System.Linq.Expressions
 
 Public Class FilterDialog
 
@@ -155,6 +156,7 @@
         CheckURL.Checked = False
         CheckCaseSensitive.Checked = False
         CheckRetweet.Checked = False
+        CheckLambda.Checked = False
 
         RadioExAnd.Checked = True
         RadioExPLUS.Checked = False
@@ -172,6 +174,7 @@
         CheckExURL.Checked = False
         CheckExCaseSensitive.Checked = False
         CheckExRetweet.Checked = False
+        CheckExLambDa.Checked = False
 
         OptCopy.Checked = True
         CheckMark.Checked = True
@@ -208,6 +211,7 @@
         CheckURL.Checked = False
         CheckCaseSensitive.Checked = False
         CheckRetweet.Checked = False
+        CheckLambda.Checked = False
 
         RadioExAnd.Checked = True
         RadioExPLUS.Checked = False
@@ -222,6 +226,7 @@
         CheckExURL.Checked = False
         CheckExCaseSensitive.Checked = False
         CheckExRetweet.Checked = False
+        CheckExLambDa.Checked = False
 
         OptCopy.Checked = True
         CheckMark.Checked = True
@@ -348,6 +353,7 @@
             CheckURL.Checked = fc.SearchUrl
             CheckCaseSensitive.Checked = fc.CaseSensitive
             CheckRetweet.Checked = fc.IsRt
+            CheckLambda.Checked = fc.UseLambda
 
             If fc.ExSearchBoth Then
                 RadioExAnd.Checked = True
@@ -384,6 +390,7 @@
             CheckExURL.Checked = fc.ExSearchUrl
             CheckExCaseSensitive.Checked = fc.ExCaseSensitive
             CheckExRetweet.Checked = fc.IsExRt
+            CheckExLambDa.Checked = fc.ExUseLambda
 
             If fc.MoveFrom Then
                 OptMove.Checked = True
@@ -412,6 +419,7 @@
             CheckURL.Checked = False
             CheckCaseSensitive.Checked = False
             CheckRetweet.Checked = False
+            CheckLambda.Checked = False
 
             RadioExAnd.Checked = True
             RadioExPLUS.Checked = False
@@ -426,6 +434,7 @@
             CheckExURL.Checked = False
             CheckExCaseSensitive.Checked = False
             CheckExRetweet.Checked = False
+            CheckExLambDa.Checked = False
 
             OptCopy.Checked = True
             CheckMark.Checked = True
@@ -485,7 +494,7 @@
         End If
         ft.Source = TextSource.Text.Trim
 
-        If CheckRegex.Checked Then
+        If CheckRegex.Checked OrElse CheckLambda.Checked Then
             ft.BodyFilter.Add(bdy)
         Else
             Dim bf() As String = bdy.Trim.Split(Chr(32))
@@ -498,6 +507,7 @@
         ft.SearchUrl = CheckURL.Checked
         ft.CaseSensitive = CheckCaseSensitive.Checked
         ft.IsRt = CheckRetweet.Checked
+        ft.UseLambda = CheckLambda.Checked
 
         bdy = ""
         If RadioExAnd.Checked Then
@@ -511,7 +521,7 @@
         End If
         ft.ExSource = TextExSource.Text.Trim
 
-        If CheckExRegex.Checked Then
+        If CheckExRegex.Checked OrElse CheckExLambDa.Checked Then
             ft.ExBodyFilter.Add(bdy)
         Else
             Dim bf() As String = bdy.Trim.Split(Chr(32))
@@ -524,6 +534,7 @@
         ft.ExSearchUrl = CheckExURL.Checked
         ft.ExCaseSensitive = CheckExCaseSensitive.Checked
         ft.IsExRt = CheckExRetweet.Checked
+        ft.ExUseLambda = CheckExLambDa.Checked
 
         If _mode = EDITMODE.AddNew Then
             If Not _sts.Tabs(ListTabs.SelectedItem.ToString()).AddFilter(ft) Then
@@ -548,60 +559,71 @@
         End If
     End Sub
 
+    Private Function IsValidLambdaExp(ByVal text As String) As Boolean
+        If text = "" Then Return True
+        Try
+            Dim expr As LambdaExpression
+            expr = ParseLambda(Of PostClass, Boolean)(text, New PostClass)
+        Catch ex As ParseException
+            MessageBox.Show("構文エラー:" + ex.Message, "ラムダ式構文チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
+            Return False
+        End Try
+        Return True
+    End Function
+
+    Private Function IsValidRegexp(ByVal text As String) As Boolean
+        Try
+            Dim rgx As New System.Text.RegularExpressions.Regex(text)
+        Catch ex As Exception
+            MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
+            Return False
+        End Try
+        Return True
+    End Function
+
     Private Function CheckMatchRule(ByRef isBlank As Boolean) As Boolean
         isBlank = False
         TextSource.Text = TextSource.Text.Trim()
         If RadioAND.Checked Then
             MSG1.Text = MSG1.Text.Trim
             UID.Text = UID.Text.Trim()
-            If Not CheckRegex.Checked Then MSG1.Text = MSG1.Text.Replace(" ", " ")
+            If Not CheckRegex.Checked AndAlso Not CheckLambda.Checked Then MSG1.Text = MSG1.Text.Replace(" ", " ")
 
             If UID.Text = "" AndAlso MSG1.Text = "" AndAlso TextSource.Text = "" AndAlso CheckRetweet.Checked = False Then
                 isBlank = True
                 Return True
             End If
-            If CheckRegex.Checked Then
-                If UID.Text <> "" Then
-                    Try
-                        Dim rgx As New System.Text.RegularExpressions.Regex(UID.Text)
-                    Catch ex As Exception
-                        MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                        Return False
-                    End Try
+            If CheckLambda.Checked Then
+                If Not IsValidLambdaExp(UID.Text) Then
+                    Return False
                 End If
-                If MSG1.Text <> "" Then
-                    Try
-                        Dim rgx As New System.Text.RegularExpressions.Regex(MSG1.Text)
-                    Catch ex As Exception
-                        MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                        Return False
-                    End Try
+                If Not IsValidLambdaExp(MSG1.Text) Then
+                    Return False
                 End If
+            ElseIf CheckRegex.Checked Then
+                If Not IsValidRegexp(UID.Text) Then
+                    Return False
+                End If
+                If Not IsValidRegexp(MSG1.Text) Then
+                    Return False
+                End If
             End If
         Else
             MSG2.Text = MSG2.Text.Trim
-            If Not CheckRegex.Checked Then MSG2.Text = MSG2.Text.Replace(" ", " ")
+            If Not CheckRegex.Checked AndAlso Not CheckLambda.Checked Then MSG2.Text = MSG2.Text.Replace(" ", " ")
             If MSG2.Text = "" AndAlso TextSource.Text = "" AndAlso CheckRetweet.Checked = False Then
                 isBlank = True
                 Return True
             End If
-            If CheckRegex.Checked AndAlso MSG2.Text <> "" Then
-                Try
-                    Dim rgx As New System.Text.RegularExpressions.Regex(MSG2.Text)
-                Catch ex As Exception
-                    MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                    Return False
-                End Try
+            If CheckLambda.Checked AndAlso Not IsValidLambdaExp(MSG2.Text) Then
+                Return False
+            ElseIf CheckRegex.Checked AndAlso Not IsValidRegexp(MSG2.Text) Then
+                Return False
             End If
         End If
 
-        If CheckRegex.Checked AndAlso TextSource.Text <> "" Then
-            Try
-                Dim rgx As New System.Text.RegularExpressions.Regex(TextSource.Text)
-            Catch ex As Exception
-                MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                Return False
-            End Try
+        If CheckRegex.Checked AndAlso Not IsValidRegexp(TextSource.Text) Then
+            Return False
         End If
         Return True
     End Function
@@ -611,54 +633,43 @@
         TextExSource.Text = TextExSource.Text.Trim
         If RadioExAnd.Checked Then
             ExMSG1.Text = ExMSG1.Text.Trim
-            If Not CheckExRegex.Checked Then ExMSG1.Text = ExMSG1.Text.Replace(" ", " ")
+            If Not CheckExRegex.Checked AndAlso Not CheckExLambDa.Checked Then ExMSG1.Text = ExMSG1.Text.Replace(" ", " ")
             ExUID.Text = ExUID.Text.Trim()
             If ExUID.Text = "" AndAlso ExMSG1.Text = "" AndAlso TextExSource.Text = "" AndAlso CheckExRetweet.Checked = False Then
                 isBlank = True
                 Return True
             End If
-            If CheckExRegex.Checked Then
-                If ExUID.Text <> "" Then
-                    Try
-                        Dim rgx As New System.Text.RegularExpressions.Regex(ExUID.Text)
-                    Catch ex As Exception
-                        MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                        Return False
-                    End Try
+            If CheckExLambDa.Checked Then
+                If Not IsValidLambdaExp(ExUID.Text) Then
+                    Return False
                 End If
-                If ExMSG1.Text <> "" Then
-                    Try
-                        Dim rgx As New System.Text.RegularExpressions.Regex(ExMSG1.Text)
-                    Catch ex As Exception
-                        MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                        Return False
-                    End Try
+                If Not IsValidLambdaExp(ExMSG1.Text) Then
+                    Return False
                 End If
+            ElseIf CheckExRegex.Checked Then
+                If Not IsValidRegexp(ExUID.Text) Then
+                    Return False
+                End If
+                If Not IsValidRegexp(ExMSG1.Text) Then
+                    Return False
+                End If
             End If
         Else
             ExMSG2.Text = ExMSG2.Text.Trim
-            If Not CheckExRegex.Checked Then ExMSG2.Text = ExMSG2.Text.Replace(" ", " ")
+            If Not CheckExRegex.Checked AndAlso Not CheckExLambDa.Checked Then ExMSG2.Text = ExMSG2.Text.Replace(" ", " ")
             If ExMSG2.Text = "" AndAlso TextExSource.Text = "" AndAlso CheckExRetweet.Checked = False Then
                 isBlank = True
                 Return True
             End If
-            If CheckExRegex.Checked AndAlso ExMSG2.Text <> "" Then
-                Try
-                    Dim rgx As New System.Text.RegularExpressions.Regex(ExMSG2.Text)
-                Catch ex As Exception
-                    MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                    Return False
-                End Try
+            If CheckExLambDa.Checked AndAlso Not IsValidLambdaExp(ExMSG2.Text) Then
+                Return False
+            ElseIf CheckExRegex.Checked AndAlso Not IsValidRegexp(ExMSG2.Text) Then
+                Return False
             End If
         End If
 
-        If CheckExRegex.Checked AndAlso TextExSource.Text <> "" Then
-            Try
-                Dim rgx As New System.Text.RegularExpressions.Regex(TextExSource.Text)
-            Catch ex As Exception
-                MessageBox.Show(My.Resources.ButtonOK_ClickText3 + ex.Message, My.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
-                Return False
-            End Try
+        If CheckExRegex.Checked AndAlso Not IsValidRegexp(TextExSource.Text) Then
+            Return False
         End If
 
         Return True
@@ -677,13 +688,6 @@
     End Sub
 
     Private Sub FilterDialog_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
-#If 0 Then
-        If e.KeyCode = Keys.Enter Then
-            If EditFilterGroup.Enabled Then
-                ButtonOK_Click(Nothing, Nothing)
-            End If
-        End If
-#End If
         If e.KeyCode = Keys.Escape Then
             If EditFilterGroup.Enabled Then
                 ButtonCancel_Click(Nothing, Nothing)

Modified: trunk/Tween/MyLists.vb
===================================================================
--- trunk/Tween/MyLists.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/MyLists.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -50,8 +50,8 @@
             Dim listNewistPostCreatedAt As DateTime = DateTime.MinValue
 
             For Each post As PostClass In listPost
-                If post.Uid > 0 AndAlso Not listPostUserIDs.Contains(post.Uid) Then
-                    listPostUserIDs.Add(post.Uid)
+                If post.UserId > 0 AndAlso Not listPostUserIDs.Contains(post.UserId) Then
+                    listPostUserIDs.Add(post.UserId)
                 End If
                 If post.Name IsNot Nothing AndAlso Not listPostUserNames.Contains(post.Name) Then
                     listPostUserNames.Add(post.Name)

Modified: trunk/Tween/StatusDictionary.vb
===================================================================
--- trunk/Tween/StatusDictionary.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/StatusDictionary.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -23,10 +23,13 @@
 
 Imports System.Collections.Generic
 Imports System.Collections.ObjectModel
+Imports System.Linq.Expressions
 Imports Tween.TweenCustomControl
 Imports System.Text.RegularExpressions
 Imports System.Web.HttpUtility
 Imports System.Text
+Imports System.Linq
+Imports System.Linq.Expressions.DynamicExpression
 
 Public NotInheritable Class PostClass
     Implements ICloneable
@@ -45,19 +48,20 @@
     Private _IsOWL As Boolean
     Private _IsMark As Boolean
     Private _InReplyToUser As String
-    Private _InReplyToId As Long
+    Private _InReplyToStatusId As Long
     Private _Source As String
     Private _SourceHtml As String
     Private _ReplyToList As New List(Of String)
     Private _IsMe As Boolean
     Private _IsDm As Boolean
     Private _statuses As Statuses = Statuses.None
-    Private _Uid As Long
+    Private _UserId As Long
     Private _FilterHit As Boolean
     Private _RetweetedBy As String = ""
     Private _RetweetedId As Long = 0
-    Private _searchTabName As String = ""
-    Private _isDeleted As Boolean = False
+    Private _SearchTabName As String = ""
+    Private _IsDeleted As Boolean = False
+    Private _InReplyToUserId As Long = 0
 
     <FlagsAttribute()> _
     Private Enum Statuses
@@ -83,13 +87,13 @@
             ByVal IsOwl As Boolean, _
             ByVal IsMark As Boolean, _
             ByVal InReplyToUser As String, _
-            ByVal InReplyToId As Long, _
+            ByVal InReplyToStatusId As Long, _
             ByVal Source As String, _
             ByVal SourceHtml As String, _
             ByVal ReplyToList As List(Of String), _
             ByVal IsMe As Boolean, _
             ByVal IsDm As Boolean, _
-            ByVal Uid As Long, _
+            ByVal userId As Long, _
             ByVal FilterHit As Boolean, _
             ByVal RetweetedBy As String, _
             ByVal RetweetedId As Long)
@@ -108,13 +112,13 @@
         _IsOWL = IsOwl
         _IsMark = IsMark
         _InReplyToUser = InReplyToUser
-        _InReplyToId = InReplyToId
+        _InReplyToStatusId = InReplyToStatusId
         _Source = Source
         _SourceHtml = SourceHtml
         _ReplyToList = ReplyToList
         _IsMe = IsMe
         _IsDm = IsDm
-        _Uid = Uid
+        _UserId = userId
         _FilterHit = FilterHit
         _RetweetedBy = RetweetedBy
         _RetweetedId = RetweetedId
@@ -265,14 +269,23 @@
             _InReplyToUser = value
         End Set
     End Property
-    Public Property InReplyToId() As Long
+    Public Property InReplyToStatusId() As Long
         Get
-            Return _InReplyToId
+            Return _InReplyToStatusId
         End Get
         Set(ByVal value As Long)
-            _InReplyToId = value
+            _InReplyToStatusId = value
         End Set
     End Property
+
+    Public Property InReplyToUserId() As Long
+        Get
+            Return _inReplyToUserId
+        End Get
+        Set(ByVal value As Long)
+            _inReplyToUserId = value
+        End Set
+    End Property
     Public Property Source() As String
         Get
             Return _Source
@@ -313,17 +326,17 @@
             _IsDm = value
         End Set
     End Property
-    Public ReadOnly Property StatusIndex() As Integer
+    'Public ReadOnly Property StatusIndex() As Integer
+    '    Get
+    '        Return _statuses
+    '    End Get
+    'End Property
+    Public Property UserId() As Long
         Get
-            Return _statuses
+            Return _UserId
         End Get
-    End Property
-    Public Property Uid() As Long
-        Get
-            Return _Uid
-        End Get
         Set(ByVal value As Long)
-            _Uid = value
+            _UserId = value
         End Set
     End Property
     Public Property FilterHit() As Boolean
@@ -352,24 +365,25 @@
     End Property
     Public Property RelTabName() As String
         Get
-            Return _searchTabName
+            Return _SearchTabName
         End Get
         Set(ByVal value As String)
-            _searchTabName = value
+            _SearchTabName = value
         End Set
     End Property
     Public Property IsDeleted As Boolean
         Get
-            Return _isDeleted
+            Return _IsDeleted
         End Get
         Set(ByVal value As Boolean)
             If value Then
-                Me.InReplyToId = 0
+                Me.InReplyToStatusId = 0
                 Me.InReplyToUser = ""
+                Me.InReplyToUserId = 0
                 Me.IsReply = False
                 Me.ReplyToList = New List(Of String)
             End If
-            _isDeleted = value
+            _IsDeleted = value
         End Set
     End Property
     Public Property FavoritedCount As Integer
@@ -1020,13 +1034,13 @@
                         item.IsOwl, _
                         item.IsMark, _
                         item.InReplyToUser, _
-                        item.InReplyToId, _
+                        item.InReplyToStatusId, _
                         item.Source, _
                         item.SourceHtml, _
                         item.ReplyToList, _
                         item.IsMe, _
                         item.IsDm, _
-                        item.Uid, _
+                        item.UserId, _
                         item.FilterHit, _
                         "", _
                         0 _
@@ -1465,11 +1479,11 @@
         SyncLock LockObj
             If follower.Count > 0 Then
                 For Each post As PostClass In _statuses.Values
-                    'If post.Uid = 0 OrElse post.IsDm Then Continue For
+                    'If post.UserId = 0 OrElse post.IsDm Then Continue For
                     If post.IsMe Then
                         post.IsOwl = False
                     Else
-                        post.IsOwl = Not follower.Contains(post.Uid)
+                        post.IsOwl = Not follower.Contains(post.UserId)
                     End If
                 Next
             Else
@@ -1878,6 +1892,7 @@
         original.UseRegex = modified.UseRegex
         original.CaseSensitive = modified.CaseSensitive
         original.IsRt = modified.IsRt
+        original.UseLambda = modified.UseLambda
         original.Source = modified.Source
         original.ExBodyFilter = modified.ExBodyFilter
         original.ExNameFilter = modified.ExNameFilter
@@ -1886,6 +1901,7 @@
         original.ExUseRegex = modified.ExUseRegex
         original.ExCaseSensitive = modified.ExCaseSensitive
         original.IsExRt = modified.IsExRt
+        original.ExUseLambda = modified.ExUseLambda
         original.ExSource = modified.ExSource
         original.MoveFrom = modified.MoveFrom
         original.SetMark = modified.SetMark
@@ -2001,6 +2017,8 @@
     Private _exSource As String = ""
     Private _moveFrom As Boolean = False
     Private _setMark As Boolean = True
+    Private _useLambda As Boolean = False
+    Private _exuseLambda As Boolean = False
 
     Public Sub New()
 
@@ -2044,6 +2062,9 @@
             If _isRt Then
                 fs.Append("RT/")
             End If
+            If _useLambda Then
+                fs.Append("LambdaExp/")
+            End If
             If Not String.IsNullOrEmpty(_source) Then
                 fs.AppendFormat("Src…{0}/", _source)
             End If
@@ -2087,6 +2108,9 @@
             If _isExRt Then
                 fs.Append("RT/")
             End If
+            If _exuseLambda Then
+                fs.Append("LambdaExp/")
+            End If
             If Not String.IsNullOrEmpty(_exSource) Then
                 fs.AppendFormat("Src…{0}/", _exSource)
             End If
@@ -2245,6 +2269,24 @@
         End Set
     End Property
 
+    Public Property UseLambda() As Boolean
+        Get
+            Return _useLambda
+        End Get
+        Set(ByVal value As Boolean)
+            _useLambda = value
+        End Set
+    End Property
+
+    Public Property ExUseLambda() As Boolean
+        Get
+            Return _exuseLambda
+        End Get
+        Set(ByVal value As Boolean)
+            _exuseLambda = value
+        End Set
+    End Property
+
     Public Property UseRegex() As Boolean
         Get
             Return _useRegex
@@ -2303,6 +2345,14 @@
         Return MakeSummary()
     End Function
 
+    Public Function ExecuteLambdaExpression(ByVal expr As String, ByVal post As PostClass) As Boolean
+        Dim dlg As [Delegate]
+        Dim exp As LambdaExpression
+        exp = ParseLambda(Of PostClass, Boolean)(expr, post)
+        dlg = exp.Compile()
+        Return DirectCast(dlg.DynamicInvoke(post), Boolean)
+    End Function
+
     Public Function IsHit(ByVal post As PostClass) As HITRESULT
         Dim bHit As Boolean = True
         Dim tBody As String
@@ -2336,40 +2386,48 @@
                   (Not String.IsNullOrEmpty(post.RetweetedBy) AndAlso Regex.IsMatch(post.RetweetedBy, _name, rgOpt))
                  )
                 ) Then
+                If _useLambda Then
+                    If Not ExecuteLambdaExpression(_body.Item(0), post) Then bHit = False
+                Else
+                    For Each fs As String In _body
+                        If _useRegex Then
+                            If Not Regex.IsMatch(tBody, fs, rgOpt) Then bHit = False
+                        Else
+                            If _caseSensitive Then
+                                If Not tBody.Contains(fs) Then bHit = False
+                            Else
+                                If Not tBody.ToLower().Contains(fs.ToLower()) Then bHit = False
+                            End If
+                        End If
+                        If Not bHit Then Exit For
+                    Next
+                End If
+            Else
+                bHit = False
+            End If
+        Else
+            If _useLambda Then
+                If Not ExecuteLambdaExpression(_body.Item(0), post) Then bHit = False
+            Else
                 For Each fs As String In _body
                     If _useRegex Then
-                        If Not Regex.IsMatch(tBody, fs, rgOpt) Then bHit = False
+                        If Not (Regex.IsMatch(post.Name, fs, rgOpt) OrElse
+                                (Not String.IsNullOrEmpty(post.RetweetedBy) AndAlso Regex.IsMatch(post.RetweetedBy, fs, rgOpt)) OrElse
+                                Regex.IsMatch(tBody, fs, rgOpt)) Then bHit = False
                     Else
                         If _caseSensitive Then
-                            If Not tBody.Contains(fs) Then bHit = False
+                            If Not (post.Name.Contains(fs) OrElse _
+                                    post.RetweetedBy.Contains(fs) OrElse _
+                                    tBody.Contains(fs)) Then bHit = False
                         Else
-                            If Not tBody.ToLower().Contains(fs.ToLower()) Then bHit = False
+                            If Not (post.Name.ToLower().Contains(fs.ToLower()) OrElse _
+                                    post.RetweetedBy.ToLower().Contains(fs.ToLower()) OrElse _
+                                    tBody.ToLower().Contains(fs.ToLower())) Then bHit = False
                         End If
                     End If
                     If Not bHit Then Exit For
                 Next
-            Else
-                bHit = False
             End If
-        Else
-            For Each fs As String In _body
-                If _useRegex Then
-                    If Not (Regex.IsMatch(post.Name, fs, rgOpt) OrElse
-                            (Not String.IsNullOrEmpty(post.RetweetedBy) AndAlso Regex.IsMatch(post.RetweetedBy, fs, rgOpt)) OrElse
-                            Regex.IsMatch(tBody, fs, rgOpt)) Then bHit = False
-                Else
-                    If _caseSensitive Then
-                        If Not (post.Name.Contains(fs) OrElse _
-                                post.RetweetedBy.Contains(fs) OrElse _
-                                tBody.Contains(fs)) Then bHit = False
-                    Else
-                        If Not (post.Name.ToLower().Contains(fs.ToLower()) OrElse _
-                                post.RetweetedBy.ToLower().Contains(fs.ToLower()) OrElse _
-                                tBody.ToLower().Contains(fs.ToLower())) Then bHit = False
-                    End If
-                End If
-                If Not bHit Then Exit For
-            Next
         End If
         If _isRt Then
             If post.RetweetedId = 0 Then bHit = False
@@ -2413,41 +2471,49 @@
                             )
                         ) Then
                         If _exbody.Count > 0 Then
-                            For Each fs As String In _exbody
-                                If _exuseRegex Then
-                                    If Regex.IsMatch(tBody, fs, rgOpt) Then exFlag = True
-                                Else
-                                    If _excaseSensitive Then
-                                        If tBody.Contains(fs) Then exFlag = True
+                            If _exuseLambda Then
+                                If ExecuteLambdaExpression(_exbody.Item(0), post) Then exFlag = True
+                            Else
+                                For Each fs As String In _exbody
+                                    If _exuseRegex Then
+                                        If Regex.IsMatch(tBody, fs, rgOpt) Then exFlag = True
                                     Else
-                                        If tBody.ToLower().Contains(fs.ToLower()) Then exFlag = True
+                                        If _excaseSensitive Then
+                                            If tBody.Contains(fs) Then exFlag = True
+                                        Else
+                                            If tBody.ToLower().Contains(fs.ToLower()) Then exFlag = True
+                                        End If
                                     End If
-                                End If
-                                If exFlag Then Exit For
-                            Next
+                                    If exFlag Then Exit For
+                                Next
+                            End If
                         Else
                             exFlag = True
                         End If
                     End If
                 Else
-                    For Each fs As String In _exbody
-                        If _exuseRegex Then
-                            If Regex.IsMatch(post.Name, fs, rgOpt) OrElse
-                               (Not String.IsNullOrEmpty(post.RetweetedBy) AndAlso Regex.IsMatch(post.RetweetedBy, fs, rgOpt)) OrElse
-                               Regex.IsMatch(tBody, fs, rgOpt) Then exFlag = True
-                        Else
-                            If _excaseSensitive Then
-                                If post.Name.Contains(fs) OrElse _
-                                   post.RetweetedBy.Contains(fs) OrElse _
-                                   tBody.Contains(fs) Then exFlag = True
+                    If _exuseLambda Then
+                        If ExecuteLambdaExpression(_exbody.Item(0), post) Then exFlag = True
+                    Else
+                        For Each fs As String In _exbody
+                            If _exuseRegex Then
+                                If Regex.IsMatch(post.Name, fs, rgOpt) OrElse
+                                   (Not String.IsNullOrEmpty(post.RetweetedBy) AndAlso Regex.IsMatch(post.RetweetedBy, fs, rgOpt)) OrElse
+                                   Regex.IsMatch(tBody, fs, rgOpt) Then exFlag = True
                             Else
-                                If post.Name.ToLower().Contains(fs.ToLower()) OrElse _
-                                   post.RetweetedBy.ToLower().Contains(fs.ToLower()) OrElse _
-                                   tBody.ToLower().Contains(fs.ToLower()) Then exFlag = True
+                                If _excaseSensitive Then
+                                    If post.Name.Contains(fs) OrElse _
+                                       post.RetweetedBy.Contains(fs) OrElse _
+                                       tBody.Contains(fs) Then exFlag = True
+                                Else
+                                    If post.Name.ToLower().Contains(fs.ToLower()) OrElse _
+                                       post.RetweetedBy.ToLower().Contains(fs.ToLower()) OrElse _
+                                       tBody.ToLower().Contains(fs.ToLower()) Then exFlag = True
+                                End If
                             End If
-                        End If
-                        If exFlag Then Exit For
-                    Next
+                            If exFlag Then Exit For
+                        Next
+                    End If
                 End If
             End If
             If _isExRt Then
@@ -2501,20 +2567,22 @@
             If Me.ExBodyFilter(i) <> other.ExBodyFilter(i) Then Return False
         Next
 
-        Return (Me.MoveFrom = other.MoveFrom) And _
-               (Me.SetMark = other.SetMark) And _
-               (Me.NameFilter = other.NameFilter) And _
-               (Me.SearchBoth = other.SearchBoth) And _
-               (Me.SearchUrl = other.SearchUrl) And _
-               (Me.UseRegex = other.UseRegex) And _
-               (Me.ExNameFilter = other.ExNameFilter) And _
-               (Me.ExSearchBoth = other.ExSearchBoth) And _
-               (Me.ExSearchUrl = other.ExSearchUrl) And _
-               (Me.ExUseRegex = other.ExUseRegex) And _
-               (Me.IsRt = other.IsRt) And _
-               (Me.Source = other.Source) And _
-               (Me.IsExRt = other.IsExRt) And _
-               (Me.ExSource = other.ExSource)
+        Return (Me.MoveFrom = other.MoveFrom) And
+               (Me.SetMark = other.SetMark) And
+               (Me.NameFilter = other.NameFilter) And
+               (Me.SearchBoth = other.SearchBoth) And
+               (Me.SearchUrl = other.SearchUrl) And
+               (Me.UseRegex = other.UseRegex) And
+               (Me.ExNameFilter = other.ExNameFilter) And
+               (Me.ExSearchBoth = other.ExSearchBoth) And
+               (Me.ExSearchUrl = other.ExSearchUrl) And
+               (Me.ExUseRegex = other.ExUseRegex) And
+               (Me.IsRt = other.IsRt) And
+               (Me.Source = other.Source) And
+               (Me.IsExRt = other.IsExRt) And
+               (Me.ExSource = other.ExSource) And
+               (Me.UseLambda = other.UseLambda) And
+               (Me.ExUseLambda = other.ExUseLambda)
     End Function
 
     Public Function CopyTo(ByVal destination As FiltersClass) As FiltersClass
@@ -2545,6 +2613,8 @@
         destination.Source = Me.Source
         destination.IsExRt = Me.IsExRt
         destination.ExSource = Me.ExSource
+        destination.UseLambda = Me.UseLambda
+        destination.ExUseLambda = Me.ExUseLambda
         Return destination
     End Function
 
@@ -2554,22 +2624,24 @@
     End Function
 
     Public Overrides Function GetHashCode() As Integer
-        Return Me.MoveFrom.GetHashCode Xor _
-               Me.SetMark.GetHashCode Xor _
-               Me.BodyFilter.GetHashCode Xor _
-               Me.NameFilter.GetHashCode Xor _
-               Me.SearchBoth.GetHashCode Xor _
-               Me.SearchUrl.GetHashCode Xor _
-               Me.UseRegex.GetHashCode Xor _
-               Me.ExBodyFilter.GetHashCode Xor _
-               Me.ExNameFilter.GetHashCode Xor _
-               Me.ExSearchBoth.GetHashCode Xor _
-               Me.ExSearchUrl.GetHashCode Xor _
-               Me.ExUseRegex.GetHashCode Xor _
-               Me.IsRt.GetHashCode Xor _
-               Me.Source.GetHashCode Xor _
-               Me.IsExRt.GetHashCode Xor _
-               Me.ExSource.GetHashCode
+        Return Me.MoveFrom.GetHashCode Xor
+               Me.SetMark.GetHashCode Xor
+               Me.BodyFilter.GetHashCode Xor
+               Me.NameFilter.GetHashCode Xor
+               Me.SearchBoth.GetHashCode Xor
+               Me.SearchUrl.GetHashCode Xor
+               Me.UseRegex.GetHashCode Xor
+               Me.ExBodyFilter.GetHashCode Xor
+               Me.ExNameFilter.GetHashCode Xor
+               Me.ExSearchBoth.GetHashCode Xor
+               Me.ExSearchUrl.GetHashCode Xor
+               Me.ExUseRegex.GetHashCode Xor
+               Me.IsRt.GetHashCode Xor
+               Me.Source.GetHashCode Xor
+               Me.IsExRt.GetHashCode Xor
+               Me.ExSource.GetHashCode Xor
+               Me.UseLambda.GetHashCode Xor
+               Me.ExUseLambda.GetHashCode
     End Function
 End Class
 

Modified: trunk/Tween/Tween.vb
===================================================================
--- trunk/Tween/Tween.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/Tween.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -1441,7 +1441,7 @@
 
     Private Sub NotifyNewPosts(ByVal notifyPosts() As PostClass, ByVal soundFile As String, ByVal addCount As Integer, ByVal newMentions As Boolean)
         If notifyPosts IsNot Nothing AndAlso _
-            notifyPosts.All(Function(post) post.Uid.ToString() = tw.UserIdNo OrElse post.Name = tw.Username) Then
+            notifyPosts.All(Function(post) post.UserId.ToString() = tw.UserIdNo OrElse post.Name = tw.Username) Then
             Exit Sub
         End If
 
@@ -1622,7 +1622,7 @@
 
     Private Function JudgeColor(ByVal BasePost As PostClass, ByVal TargetPost As PostClass) As Color
         Dim cl As Color
-        If TargetPost.Id = BasePost.InReplyToId Then
+        If TargetPost.Id = BasePost.InReplyToStatusId Then
             '@先
             cl = _clAtTo
         ElseIf TargetPost.IsMe Then
@@ -2771,7 +2771,7 @@
         End If
         If _statuses.Tabs(ListTab.SelectedTab.Text).TabType = TabUsageType.PublicSearch _
                             OrElse Not Me.ExistCurrentPost _
-                            OrElse Not _curPost.InReplyToId > 0 Then
+                            OrElse Not _curPost.InReplyToStatusId > 0 Then
             RepliedStatusOpenMenuItem.Enabled = False
         Else
             RepliedStatusOpenMenuItem.Enabled = True
@@ -4737,7 +4737,7 @@
             sb.AppendFormat("Id             : {0}<br>", _curPost.Id.ToString)
             'sb.AppendFormat("ImageIndex     : {0}<br>", _curPost.ImageIndex.ToString)
             sb.AppendFormat("ImageUrl       : {0}<br>", _curPost.ImageUrl)
-            sb.AppendFormat("InReplyToId    : {0}<br>", _curPost.InReplyToId.ToString)
+            sb.AppendFormat("InReplyToStatusId    : {0}<br>", _curPost.InReplyToStatusId.ToString)
             sb.AppendFormat("InReplyToUser  : {0}<br>", _curPost.InReplyToUser)
             sb.AppendFormat("IsDM           : {0}<br>", _curPost.IsDm.ToString)
             sb.AppendFormat("IsFav          : {0}<br>", _curPost.IsFav.ToString)
@@ -4758,7 +4758,7 @@
             sb.AppendFormat("(PlainText)    : <xmp>{0}</xmp><br>", _curPost.OriginalData)
             sb.AppendFormat("PDate          : {0}<br>", _curPost.PDate.ToString)
             sb.AppendFormat("Source         : {0}<br>", _curPost.Source)
-            sb.AppendFormat("Uid            : {0}<br>", _curPost.Uid)
+            sb.AppendFormat("UserId            : {0}<br>", _curPost.UserId)
             sb.AppendFormat("FilterHit      : {0}<br>", _curPost.FilterHit)
             sb.AppendFormat("RetweetedBy    : {0}<br>", _curPost.RetweetedBy)
             sb.AppendFormat("RetweetedId    : {0}<br>", _curPost.RetweetedId)
@@ -5694,11 +5694,11 @@
 
         Dim curTabClass As TabClass = _statuses.Tabs(_curTab.Text)
 
-        If curTabClass.TabType = TabUsageType.PublicSearch AndAlso _curPost.InReplyToId = 0 AndAlso _curPost.Data.Contains("@") Then
+        If curTabClass.TabType = TabUsageType.PublicSearch AndAlso _curPost.InReplyToStatusId = 0 AndAlso _curPost.Data.Contains("@") Then
             Dim post As PostClass = Nothing
             Dim r As String = tw.GetStatusApi(False, _curPost.Id, post)
             If r = "" AndAlso post IsNot Nothing Then
-                _curPost.InReplyToId = post.InReplyToId
+                _curPost.InReplyToStatusId = post.InReplyToStatusId
                 _curPost.InReplyToUser = post.InReplyToUser
                 _curPost.IsReply = post.IsReply
                 _itemCache = Nothing
@@ -5708,16 +5708,16 @@
             End If
         End If
 
-        If Not (Me.ExistCurrentPost AndAlso _curPost.InReplyToUser IsNot Nothing AndAlso _curPost.InReplyToId > 0) Then Return
+        If Not (Me.ExistCurrentPost AndAlso _curPost.InReplyToUser IsNot Nothing AndAlso _curPost.InReplyToStatusId > 0) Then Return
 
         If replyChains Is Nothing OrElse (replyChains.Count > 0 AndAlso replyChains.Peek().InReplyToId <> _curPost.Id) Then
             replyChains = New Stack(Of ReplyChain)
         End If
-        replyChains.Push(New ReplyChain(_curPost.Id, _curPost.InReplyToId, _curTab))
+        replyChains.Push(New ReplyChain(_curPost.Id, _curPost.InReplyToStatusId, _curTab))
 
         Dim inReplyToIndex As Integer
         Dim inReplyToTabName As String
-        Dim inReplyToId As Long = _curPost.InReplyToId
+        Dim inReplyToId As Long = _curPost.InReplyToStatusId
         Dim inReplyToUser As String = _curPost.InReplyToUser
         Dim curTabPosts As Dictionary(Of Long, PostClass)
 
@@ -5741,7 +5741,7 @@
             inReplyToIndex = inReplyPost.Index
         Catch ex As InvalidOperationException
             Dim post As PostClass = Nothing
-            Dim r As String = tw.GetStatusApi(False, _curPost.InReplyToId, post)
+            Dim r As String = tw.GetStatusApi(False, _curPost.InReplyToStatusId, post)
             If r = "" AndAlso post IsNot Nothing Then
                 post.IsRead = True
                 _statuses.AddPost(post)
@@ -5781,10 +5781,10 @@
         Dim curTabPosts As Dictionary(Of Long, PostClass) = DirectCast(IIf(curTabClass.IsInnerStorageTabType, curTabClass.Posts, _statuses.Posts), Dictionary(Of Long, PostClass))
 
         If parallel Then
-            If _curPost.InReplyToId <> 0 Then
+            If _curPost.InReplyToStatusId <> 0 Then
                 Dim posts = From t In _statuses.Tabs
                             From p In DirectCast(IIf(t.Value.IsInnerStorageTabType, t.Value.Posts, _statuses.Posts), Dictionary(Of Long, PostClass))
-                            Where p.Value.Id <> _curPost.Id AndAlso p.Value.InReplyToId = _curPost.InReplyToId
+                            Where p.Value.Id <> _curPost.Id AndAlso p.Value.InReplyToStatusId = _curPost.InReplyToStatusId
                             Let indexOf = t.Value.IndexOf(p.Value.Id)
                             Where indexOf > -1
                             Order By IIf(isForward, indexOf, indexOf * -1)
@@ -5813,7 +5813,7 @@
             If replyChains Is Nothing OrElse replyChains.Count < 1 Then
                 Dim posts = From t In _statuses.Tabs
                             From p In DirectCast(IIf(t.Value.IsInnerStorageTabType, t.Value.Posts, _statuses.Posts), Dictionary(Of Long, PostClass))
-                            Where p.Value.InReplyToId = _curPost.Id
+                            Where p.Value.InReplyToStatusId = _curPost.Id
                             Let indexOf = t.Value.IndexOf(p.Value.Id)
                             Where indexOf > -1
                             Order By indexOf
@@ -7458,22 +7458,22 @@
     End Sub
 
     Private Sub doRepliedStatusOpen()
-        If Me.ExistCurrentPost AndAlso _curPost.InReplyToUser IsNot Nothing AndAlso _curPost.InReplyToId > 0 Then
+        If Me.ExistCurrentPost AndAlso _curPost.InReplyToUser IsNot Nothing AndAlso _curPost.InReplyToStatusId > 0 Then
             If My.Computer.Keyboard.ShiftKeyDown Then
-                OpenUriAsync("http://twitter.com/" + _curPost.InReplyToUser + "/status/" + _curPost.InReplyToId.ToString())
+                OpenUriAsync("http://twitter.com/" + _curPost.InReplyToUser + "/status/" + _curPost.InReplyToStatusId.ToString())
                 Exit Sub
             End If
-            If _statuses.ContainsKey(_curPost.InReplyToId) Then
-                Dim repPost As PostClass = _statuses.Item(_curPost.InReplyToId)
+            If _statuses.ContainsKey(_curPost.InReplyToStatusId) Then
+                Dim repPost As PostClass = _statuses.Item(_curPost.InReplyToStatusId)
                 MessageBox.Show(repPost.Name + " / " + repPost.Nickname + "   (" + repPost.PDate.ToString() + ")" + Environment.NewLine + repPost.Data)
             Else
                 For Each tb As TabClass In _statuses.GetTabsByType(TabUsageType.Lists Or TabUsageType.PublicSearch)
-                    If tb Is Nothing OrElse Not tb.Contains(_curPost.InReplyToId) Then Exit For
-                    Dim repPost As PostClass = _statuses.Item(_curPost.InReplyToId)
+                    If tb Is Nothing OrElse Not tb.Contains(_curPost.InReplyToStatusId) Then Exit For
+                    Dim repPost As PostClass = _statuses.Item(_curPost.InReplyToStatusId)
                     MessageBox.Show(repPost.Name + " / " + repPost.Nickname + "   (" + repPost.PDate.ToString() + ")" + Environment.NewLine + repPost.Data)
                     Exit Sub
                 Next
-                OpenUriAsync("http://twitter.com/" + _curPost.InReplyToUser + "/status/" + _curPost.InReplyToId.ToString())
+                OpenUriAsync("http://twitter.com/" + _curPost.InReplyToUser + "/status/" + _curPost.InReplyToStatusId.ToString())
             End If
         End If
     End Sub
@@ -9182,7 +9182,7 @@
         End If
         If _statuses.Tabs(ListTab.SelectedTab.Text).TabType = TabUsageType.PublicSearch _
                             OrElse Not Me.ExistCurrentPost _
-                            OrElse Not _curPost.InReplyToId > 0 Then
+                            OrElse Not _curPost.InReplyToStatusId > 0 Then
             OpenRepSourceOpMenuItem.Enabled = False
         Else
             OpenRepSourceOpMenuItem.Enabled = True

Modified: trunk/Tween/Tween.vbproj
===================================================================
--- trunk/Tween/Tween.vbproj	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/Tween.vbproj	2011-01-13 14:03:38 UTC (rev 1351)
@@ -142,6 +142,7 @@
     <Compile Include="DetailsListView.vb">
       <SubType>Component</SubType>
     </Compile>
+    <Compile Include="Dynamic.vb" />
     <Compile Include="EventViewerDialog.Designer.vb">
       <DependentUpon>EventViewerDialog.vb</DependentUpon>
     </Compile>
@@ -492,6 +493,7 @@
     <None Include="Resources\4r.ico" />
   </ItemGroup>
   <ItemGroup>
+    <Content Include="DynamicQuery.txt" />
     <Content Include="Resources\1o.ico" />
     <Content Include="tips.txt" />
     <None Include="Resources\5g.ico" />

Modified: trunk/Tween/Twitter.vb
===================================================================
--- trunk/Tween/Twitter.vb	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween/Twitter.vb	2011-01-13 14:03:38 UTC (rev 1351)
@@ -1459,14 +1459,15 @@
             'Source取得(htmlの場合は、中身を取り出し)
             post.Source = retweeted.Source
             'Reply先
-            Long.TryParse(retweeted.InReplyToStatusId, post.InReplyToId)
+            Long.TryParse(retweeted.InReplyToStatusId, post.InReplyToStatusId)
             post.InReplyToUser = retweeted.InReplyToScreenName
+            Long.TryParse(status.InReplyToUserId, post.InReplyToUserId)
             post.IsFav = TabInformations.GetInstance.GetTabByType(TabUsageType.Favorites).Contains(post.RetweetedId)
 
             '以下、ユーザー情報
             Dim user As TwitterDataModel.User = retweeted.User
 
-            post.Uid = user.Id
+            post.UserId = user.Id
             post.Name = user.ScreenName
             post.Nickname = user.Name
             post.ImageUrl = user.ProfileImageUrl
@@ -1481,21 +1482,22 @@
             post.Data = status.Text
             'Source取得(htmlの場合は、中身を取り出し)
             post.Source = status.Source
-            Long.TryParse(status.InReplyToStatusId, post.InReplyToId)
+            Long.TryParse(status.InReplyToStatusId, post.InReplyToStatusId)
             post.InReplyToUser = status.InReplyToScreenName
+            Long.TryParse(status.InReplyToUserId, post.InReplyToUserId)
 
             post.IsFav = status.Favorited
 
             '以下、ユーザー情報
             Dim user As TwitterDataModel.User = status.User
 
-            post.Uid = user.Id
+            post.UserId = user.Id
             post.Name = user.ScreenName
             post.Nickname = user.Name
             post.ImageUrl = user.ProfileImageUrl
             post.IsProtect = user.Protected
             post.IsMe = post.Name.ToLower.Equals(_uid)
-            If post.IsMe Then _UserIdNo = post.Uid.ToString
+            If post.IsMe Then _UserIdNo = post.UserId.ToString
         End If
         'HTMLに整形
         post.OriginalData = CreateHtmlAnchor(post.Data, post.ReplyToList)
@@ -1510,7 +1512,7 @@
         If post.IsMe Then
             post.IsOwl = False
         Else
-            If followerId.Count > 0 Then post.IsOwl = Not followerId.Contains(post.Uid)
+            If followerId.Count > 0 Then post.IsOwl = Not followerId.Contains(post.UserId)
         End If
 
         post.IsDm = False
@@ -1564,8 +1566,13 @@
         Dim res As HttpStatusCode
         Dim content As String = ""
         Dim page As Integer = 0
+        Dim count As Integer = AppendSettingDialog.Instance.CountApi
         Dim count As Integer
         If AppendSettingDialog.Instance.UseAdditionalCount Then
+            If more AndAlso AppendSettingDialog.Instance.MoreCountApi <> 0 Then
+                count = AppendSettingDialog.Instance.MoreCountApi
+            ElseIf startup AndAlso AppendSettingDialog.Instance.FirstCountApi <> 0 Then
+                count = AppendSettingDialog.Instance.FirstCountApi
             count = AppendSettingDialog.Instance.ListCountApi
             If count = 0 Then
                 If more AndAlso AppendSettingDialog.Instance.MoreCountApi <> 0 Then
@@ -1607,10 +1614,10 @@
         Dim tmpPost As PostClass = relPosts(0)
         Dim lastPost As PostClass = Nothing
         Do While tmpPost IsNot Nothing
-            If tmpPost.InReplyToId = 0 Then Return Nothing
+            If tmpPost.InReplyToStatusId = 0 Then Return Nothing
             lastPost = tmpPost
             Dim replyToPost = From p In relPosts
-                             Where p.Id = tmpPost.InReplyToId
+                             Where p.Id = tmpPost.InReplyToStatusId
                              Select p
             tmpPost = replyToPost.FirstOrDefault()
         Loop
@@ -1620,10 +1627,10 @@
     Public Function GetRelatedResult(ByVal read As Boolean, ByVal tab As TabClass) As String
         Dim rslt As String = ""
         Dim relPosts As New List(Of PostClass)
-        If tab.RelationTargetPost.Data.Contains("@") AndAlso tab.RelationTargetPost.InReplyToId = 0 Then
+        If tab.RelationTargetPost.Data.Contains("@") AndAlso tab.RelationTargetPost.InReplyToStatusId = 0 Then
             '検索結果対応
             Dim p As PostClass = TabInformations.GetInstance.Item(tab.RelationTargetPost.Id)
-            If p IsNot Nothing AndAlso p.InReplyToId > 0 Then
+            If p IsNot Nothing AndAlso p.InReplyToStatusId > 0 Then
                 tab.RelationTargetPost = p
             Else
                 rslt = Me.GetStatusApi(read, tab.RelationTargetPost.Id, p)
@@ -1692,8 +1699,8 @@
 
         Dim replyToItem As PostClass = Nothing
         Dim replyToUserName As String = targetItem.InReplyToUser
-        If targetItem.InReplyToId > 0 AndAlso TabInformations.GetInstance.Item(targetItem.InReplyToId) IsNot Nothing Then
-            replyToItem = TabInformations.GetInstance.Item(targetItem.InReplyToId).Copy
+        If targetItem.InReplyToStatusId > 0 AndAlso TabInformations.GetInstance.Item(targetItem.InReplyToStatusId) IsNot Nothing Then
+            replyToItem = TabInformations.GetInstance.Item(targetItem.InReplyToStatusId).Copy
             replyToItem.IsRead = read
             If replyToItem.IsMe AndAlso Not read AndAlso _readOwnPost Then replyToItem.IsRead = True
             replyToItem.RelTabName = tab.TabName
@@ -1704,7 +1711,7 @@
             For Each result As TwitterDataModel.RelatedTweet In relatedData.Results
                 Dim item As PostClass = CreatePostsFromStatusData(result.Status)
                 If item Is Nothing Then Continue For
-                If targetItem.InReplyToId = item.Id Then
+                If targetItem.InReplyToStatusId = item.Id Then
                     replyToItem = Nothing
                     replyAdded = True
                 End If
@@ -1717,10 +1724,10 @@
         Next
         If replyToItem IsNot Nothing Then
             relatedPosts.Add(replyToItem)
-        ElseIf targetItem.InReplyToId > 0 AndAlso Not replyAdded Then
+        ElseIf targetItem.InReplyToStatusId > 0 AndAlso Not replyAdded Then
             Dim p As PostClass = Nothing
             Dim rslt As String = ""
-            rslt = GetStatusApi(read, targetItem.InReplyToId, p)
+            rslt = GetStatusApi(read, targetItem.InReplyToStatusId, p)
             If String.IsNullOrEmpty(rslt) Then
                 p.IsRead = read
                 p.RelTabName = tab.TabName
@@ -1801,13 +1808,14 @@
                 post.Data = xentry.Item("title").InnerText
                 'Source取得(htmlの場合は、中身を取り出し)
                 post.Source = xentry.Item("twitter:source").InnerText
-                post.InReplyToId = 0
+                post.InReplyToStatusId = 0
                 post.InReplyToUser = ""
+                post.InReplyToUserId = 0
                 post.IsFav = False
 
                 '以下、ユーザー情報
                 Dim xUentry As XmlElement = CType(xentry.SelectSingleNode("./search:author", nsmgr), XmlElement)
-                post.Uid = 0
+                post.UserId = 0
                 post.Name = xUentry.Item("name").InnerText.Split(" "c)(0).Trim
                 post.Nickname = xUentry.Item("name").InnerText.Substring(post.Name.Length).Trim
                 If post.Nickname.Length > 2 Then
@@ -1929,7 +1937,7 @@
                     End If
                 End If
 
-                post.Uid = user.Id
+                post.UserId = user.Id
                 post.Name = user.ScreenName
                 post.Nickname = user.Name
                 post.ImageUrl = user.ProfileImageUrl
@@ -2061,13 +2069,14 @@
                     'Source取得(htmlの場合は、中身を取り出し)
                     post.Source = retweeted.Source
                     'Reply先
-                    Long.TryParse(retweeted.InReplyToStatusId, post.InReplyToId)
+                    Long.TryParse(retweeted.InReplyToStatusId, post.InReplyToStatusId)
                     post.InReplyToUser = retweeted.InReplyToScreenName
+                    Long.TryParse(retweeted.InReplyToUserId, post.InReplyToUserId)
                     post.IsFav = retweeted.Favorited
 
                     '以下、ユーザー情報
                     Dim user As TwitterDataModel.User = retweeted.User
-                    post.Uid = user.Id
+                    post.UserId = user.Id
                     post.Name = user.ScreenName
                     post.Nickname = user.Name
                     post.ImageUrl = user.ProfileImageUrl
@@ -2084,20 +2093,21 @@
                     post.Data = status.Text
                     'Source取得(htmlの場合は、中身を取り出し)
                     post.Source = status.Source
-                    Long.TryParse(status.InReplyToStatusId, post.InReplyToId)
+                    Long.TryParse(status.InReplyToStatusId, post.InReplyToStatusId)
                     post.InReplyToUser = status.InReplyToScreenName
+                    Long.TryParse(status.InReplyToUserId, post.InReplyToUserId)
 
                     post.IsFav = status.Favorited
 
                     '以下、ユーザー情報
                     Dim user As TwitterDataModel.User = status.User
-                    post.Uid = user.Id
+                    post.UserId = user.Id
                     post.Name = user.ScreenName
                     post.Nickname = user.Name
                     post.ImageUrl = user.ProfileImageUrl
                     post.IsProtect = user.Protected
                     post.IsMe = post.Name.ToLower.Equals(_uid)
-                    If post.IsMe Then _UserIdNo = post.Uid.ToString
+                    If post.IsMe Then _UserIdNo = post.UserId.ToString
                 End If
                 'HTMLに整形
                 post.OriginalData = CreateHtmlAnchor(post.Data, post.ReplyToList)
@@ -2113,7 +2123,7 @@
                 If post.IsMe Then
                     post.IsOwl = False
                 Else
-                    If followerId.Count > 0 Then post.IsOwl = Not followerId.Contains(post.Uid)
+                    If followerId.Count > 0 Then post.IsOwl = Not followerId.Contains(post.UserId)
                 End If
 
                 post.IsDm = False

Modified: trunk/Tween.sln
===================================================================
--- trunk/Tween.sln	2011-01-13 13:46:48 UTC (rev 1350)
+++ trunk/Tween.sln	2011-01-13 14:03:38 UTC (rev 1351)
@@ -1,6 +1,6 @@
 
 Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Basic Express 2010
+# Visual Studio 2010
 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tween", "Tween\Tween.vbproj", "{41B54F21-5442-47D4-80F0-872D56D9E1FD}"
 EndProject
 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TweenUp", "TweenUp\TweenUp.vbproj", "{EF3CD31B-6669-4932-A0E0-1EA44E4BCE89}"



Tween-svn メーリングリストの案内
Back to archive index