aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@ydb.tech>2023-09-01 20:50:25 +0300
committervvvv <vvvv@ydb.tech>2023-09-01 21:05:22 +0300
commit9328299988a7a924459808b2ec896db5939038af (patch)
tree4cca87264bf4460ef7880693dcffe5503836b34d
parent3e1bd942be74d55745b29634b9555abd8c1441e6 (diff)
downloadydb-9328299988a7a924459808b2ec896db5939038af.tar.gz
Moved tests for most of OSS udfs
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/result.json37
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_ParseFromYdb_/results.txt142
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeCSVWithNames_/results.txt107
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeJSONEachRow_/results.txt107
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquetPartitioned_/results.txt356
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquet_/results.txt113
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeTSVWithNames_/results.txt107
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_YqlType_/results.txt460
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.in2
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.sql7
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in11
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in.attr10
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.sql18
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in11
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in.attr10
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.sql18
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in11
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in.attr10
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.sql18
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in10
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in.attr9
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.sql27
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in11
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in.attr10
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.sql18
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.in0
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.sql30
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/test/ya.make18
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/result.json62
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromStringFormat_/results.txt46
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromString_/results.txt48
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_From_/results.txt88
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Get_/results.txt124
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_RoundTrip_/results.txt139
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOfDay_/results.txt85
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOf_/results.txt109
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Timezone_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_ToString_/results.txt34
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_To_/results.txt119
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedFromString_/results.txt48
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedStartOf_/results.txt184
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/From.in4
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/From.sql8
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/FromString.in4
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/FromString.sql2
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.in1
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.sql5
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/Get.in5
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/Get.sql12
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.in13
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.sql12
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/StartOf.in8
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/StartOf.sql9
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.in1
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.sql8
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/Timezone.in4
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/Timezone.sql7
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/To.in3
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/To.sql12
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/ToString.in3
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/ToString.sql2
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.in4
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.sql2
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.in1
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.sql17
-rw-r--r--ydb/library/yql/udfs/common/datetime/test/ya.make15
-rw-r--r--ydb/library/yql/udfs/common/datetime/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/result.json102
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockGet_/results.txt215
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockTo_/results.txt293
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Format_/results.txt48
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_From_/results.txt148
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Get_/results.txt628
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ImplicitSplit_/results.txt98
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseIso8601_/results.txt53
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseLim_/results.txt238
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Parse_/results.txt242
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Repr_/results.txt46
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Shift_/results.txt459
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake1969_/results.txt88
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake_/results.txt160
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf1969_/results.txt151
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf_/results.txt291
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_To_/results.txt332
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_TzToDate_/results.txt52
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_UpdateTz_/results.txt64
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt236
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_yql-14977_/results.txt33
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in6
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in.attr31
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.sql30
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in10
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in.attr59
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.sql41
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Format.in4
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Format.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Format.sql6
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/From.in12
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/From.in.attr73
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/From.sql14
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Get.in10
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Get.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Get.sql23
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in9
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in.attr52
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.sql20
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in55
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in.attr66
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Parse.sql25
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/ParseIso8601.sql1
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/ParseLim.sql19
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Repr.in0
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Repr.sql4
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in8
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Shift.sql22
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in49
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in.attr52
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.sql18
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.cfg1
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in8
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in.attr52
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.sql18
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in15
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.sql20
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.cfg1
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in3
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.sql20
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/To.in10
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/To.in.attr59
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/To.sql40
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/TzToDate.sql7
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Update.in1
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Update.in.attr17
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/Update.sql25
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/UpdateTz.sql9
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/cases/yql-14977.sql6
-rw-r--r--ydb/library/yql/udfs/common/datetime2/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/datetime2/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/digest/test/canondata/result.json7
-rw-r--r--ydb/library/yql/udfs/common/digest/test/canondata/test.test_Basic_/results.txt495
-rw-r--r--ydb/library/yql/udfs/common/digest/test/cases/Basic.in4
-rw-r--r--ydb/library/yql/udfs/common/digest/test/cases/Basic.sql34
-rw-r--r--ydb/library/yql/udfs/common/digest/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/digest/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/result.json57
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Algorithms_/results.txt476
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Basic_/results.txt338
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Distinct_/results.txt139
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Intervals_/results.txt290
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Linear_/results.txt330
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Logarithmic_/results.txt310
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Methods_/results.txt85
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Normalize_/results.txt338
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Print_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_ToCumulativeDistributionFunction_/results.txt444
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Weights_/results.txt221
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Algorithms.sql16
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Basic.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Distinct.sql9
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Intervals.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Linear.in19
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Linear.sql10
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.in19
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.sql10
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Methods.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Normalize.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Print.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/ToCumulativeDistributionFunction.sql13
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Weights.in16
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/Weights.sql12
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/cases/default.in16
-rw-r--r--ydb/library/yql/udfs/common/histogram/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/histogram/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/test/canondata/result.json7
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/test/canondata/test.test_Basic_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.in6000
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.sql7
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/test/ya.make16
-rw-r--r--ydb/library/yql/udfs/common/hyperloglog/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/canondata/result.json15
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_Basic_/results.txt426
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_CharacterClasses_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.in8
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.sql31
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.in4
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.sql9
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/Error.cfg2
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/cases/Error.sql4
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/test/ya.make17
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/ip_base/test/canondata/result.json7
-rw-r--r--ydb/library/yql/udfs/common/ip_base/test/canondata/test.test_Basic_/results.txt281
-rw-r--r--ydb/library/yql/udfs/common/ip_base/test/cases/Basic.in8
-rw-r--r--ydb/library/yql/udfs/common/ip_base/test/cases/Basic.sql14
-rw-r--r--ydb/library/yql/udfs/common/ip_base/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/ip_base/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/json/test/canondata/result.json7
-rw-r--r--ydb/library/yql/udfs/common/json/test/canondata/test.test_Basic_/results.txt57
-rw-r--r--ydb/library/yql/udfs/common/json/test/cases/Basic.sql12
-rw-r--r--ydb/library/yql/udfs/common/json/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/json/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/result.json42
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_AsJsonNode_/results.txt84
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SerializeParse_/results.txt102
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlExists_/results.txt195
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQueryError_/extracted10
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQuery_/results.txt400
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExistsError_/extracted10
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExists_/results.txt83
-rw-r--r--ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlValue_/results.txt1663
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/AsJsonNode.sql9
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SerializeParse.sql15
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlExists.sql25
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlQuery.sql52
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.cfg1
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.sql7
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlTryExists.sql11
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.cfg1
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.sql7
-rw-r--r--ydb/library/yql/udfs/common/json2/test/cases/SqlValue.sql95
-rw-r--r--ydb/library/yql/udfs/common/json2/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/json2/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/pire/test/canondata/result.json12
-rw-r--r--ydb/library/yql/udfs/common/pire/test/canondata/test.test_Basic_/results.txt508
-rw-r--r--ydb/library/yql/udfs/common/pire/test/canondata/test.test_CharacterClasses_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/pire/test/cases/Basic.in8
-rw-r--r--ydb/library/yql/udfs/common/pire/test/cases/Basic.sql32
-rw-r--r--ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.in4
-rw-r--r--ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.sql9
-rw-r--r--ydb/library/yql/udfs/common/pire/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/pire/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/result.json37
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_BackslashInLike_/results.txt28
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_BasicOptions_/results.txt278
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_Basic_/results.txt257
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_DefOptions_/results.txt266
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_MutableLambda_/results.txt52
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_SkipGroup_/results.txt105
-rw-r--r--ydb/library/yql/udfs/common/re2/test/canondata/test.test_Space_/results.txt28
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/BackslashInLike.sql1
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/Basic.in7
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/Basic.sql21
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.in8
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.sql22
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/DefOptions.sql19
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.in0
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.sql24
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/SkipGroup.sql10
-rw-r--r--ydb/library/yql/udfs/common/re2/test/cases/Space.sql2
-rw-r--r--ydb/library/yql/udfs/common/re2/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/re2/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/result.json47
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDictInDict_/results.txt79
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDict_/results.txt103
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLazyList_/results.txt85
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLimit_/results.txt57
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctSingular_/results.txt115
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctStructInDict_/results.txt71
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctTuple_/results.txt115
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctVariant_/results.txt108
-rw-r--r--ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinct_/results.txt60
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in15
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinct.sql9
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctDict.sql8
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctDictInDict.sql4
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctLazyList.sql9
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in15
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.sql9
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctSingular.sql16
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctStructInDict.sql4
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in15
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.sql9
-rw-r--r--ydb/library/yql/udfs/common/set/test/cases/ListDistinctVariant.sql11
-rw-r--r--ydb/library/yql/udfs/common/set/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/set/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/result.json47
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomByTuple_/results.txt119
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomBy_/results.txt61
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_Bottom_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_TopBy_/results.txt63
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_TopList_/results.txt57
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_TopTuple_/results.txt103
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_TopVariant_/results.txt56
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_Top_/results.txt57
-rw-r--r--ydb/library/yql/udfs/common/top/test/canondata/test.test_Window_/results.txt1030
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Bottom.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Bottom.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Bottom.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomBy.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomBy.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomBy.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Top.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Top.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Top.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopBy.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopBy.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopBy.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopList.sql4
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopTuple.in15
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopTuple.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopTuple.sql9
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/TopVariant.sql5
-rw-r--r--ydb/library/yql/udfs/common/top/test/cases/Window.sql30
-rw-r--r--ydb/library/yql/udfs/common/top/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/top/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/result.json27
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Floats_/results.txt55
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Mode_/results.txt68
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqStruct_/results.txt103
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqTuple_/results.txt97
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreq_/results.txt83
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/Floats.in0
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/Floats.sql10
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in8
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/Mode.sql14
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in16
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.sql14
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in16
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.sql8
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in16
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in.attr30
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.sql8
-rw-r--r--ydb/library/yql/udfs/common/topfreq/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/topfreq/ya.make2
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/result.json67
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Find_/results.txt86
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_IsCategory_/results.txt164
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_List_/results.txt265
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Remove_/results.txt178
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Replace_/results.txt228
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Strip_/results.txt76
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F0_/extracted8
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F1_/extracted8
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F2_/extracted8
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64_/results.txt76
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_To_/results.txt102
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_TryToUint64_/results.txt198
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Unicode_/results.txt509
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Find.sql13
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/IsCategory.sql21
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/List.in6
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/List.in.attr12
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/List.sql12
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Remove.sql9
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Replace.sql11
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Strip.sql9
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/To.in8
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/To.in.attr12
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/To.sql9
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64.sql9
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.cfg2
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.sql3
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.cfg2
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.sql3
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.cfg2
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.sql3
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/TryToUint64.sql17
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.in7
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.sql19
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/cases/default.in5
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/ya.make4
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/result.json47
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockPunycode_/results.txt106
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockTld_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockUrl_/results.txt1212
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Punycode_/results.txt106
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Tld_/results.txt59
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryMaxFieldsErr_/extracted8
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryStrictErr_/extracted8
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQuery_/results.txt1112
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Url_/results.txt1640
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.in4
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.sql10
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.in4
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.sql7
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.in18
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.sql27
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Punycode.in4
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Punycode.sql9
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Tld.in4
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Tld.sql6
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Url.in18
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/Url.sql29
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.in20
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.sql15
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.cfg1
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.sql2
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.cfg1
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.sql2
-rw-r--r--ydb/library/yql/udfs/common/url_base/test/ya.make17
-rw-r--r--ydb/library/yql/udfs/common/url_base/ya.make5
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/result.json167
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AccessJson_/results.txt126
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Access_/results.txt33
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Attrs_/results.txt568
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AutoConvertTo_/results.txt556
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Contains_/results.txt122
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ConvertTo_/results.txt245
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Dicts_/results.txt178
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyDicts_/results.txt103
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyLists_/results.txt50
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Equals_/results.txt124
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_From_/results.txt188
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToEmptyStruct_/results.txt34
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithAutoConvert_/results.txt338
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithNoStrict_/results.txt287
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertTo_/results.txt379
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericFrom_/results.txt345
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GetHash_/results.txt116
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Get_/results.txt57
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GoodForYsonBadForJson_/results.txt82
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ImplicitFromRes_/results.txt41
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_IsType_/results.txt154
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonSerializeSkipMapEntity_/results.txt124
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonWithUtf8_/results.txt67
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lists_/results.txt142
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lookup_/results.txt225
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_NegativeArrayIndex_/results.txt133
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ParseString_/results.txt128
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Scalars_/results.txt462
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_SerializeDouble_/results.txt66
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Serialize_/results.txt70
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WeakYsonRest_/results.txt53
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WithAttrs_/results.txt69
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/canondata/test.test_YPath_/results.txt112
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Access.sql4
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/AccessJson.sql12
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Attrs.sql56
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/AutoConvertTo.sql53
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Contains.sql11
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/ConvertTo.sql34
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Dicts.sql13
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/EmptyDicts.sql9
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/EmptyLists.sql5
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Equals.sql26
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/From.sql21
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertTo.sql19
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToEmptyStruct.sql2
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithAutoConvert.sql15
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithNoStrict.sql15
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GenericFrom.sql21
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Get.sql8
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GetHash.sql27
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/GoodForYsonBadForJson.sql7
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/ImplicitFromRes.sql4
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/IsType.sql12
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/JsonSerializeSkipMapEntity.sql18
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/JsonWithUtf8.sql5
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Lists.sql10
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Lookup.sql29
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/NegativeArrayIndex.sql13
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/ParseString.sql11
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Scalars.sql46
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/Serialize.sql3
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/SerializeDouble.sql13
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in5
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in.attr12
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.sql7
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/WithAttrs.sql6
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/cases/YPath.sql13
-rw-r--r--ydb/library/yql/udfs/common/yson2/test/ya.make12
-rw-r--r--ydb/library/yql/udfs/common/yson2/ya.make4
476 files changed, 40776 insertions, 0 deletions
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/result.json b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/result.json
new file mode 100644
index 0000000000..3e535d26fa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/result.json
@@ -0,0 +1,37 @@
+{
+ "test.test[ParseFromYdb]": [
+ {
+ "uri": "file://test.test_ParseFromYdb_/results.txt"
+ }
+ ],
+ "test.test[SerializeCSVWithNames]": [
+ {
+ "uri": "file://test.test_SerializeCSVWithNames_/results.txt"
+ }
+ ],
+ "test.test[SerializeJSONEachRow]": [
+ {
+ "uri": "file://test.test_SerializeJSONEachRow_/results.txt"
+ }
+ ],
+ "test.test[SerializeParquetPartitioned]": [
+ {
+ "uri": "file://test.test_SerializeParquetPartitioned_/results.txt"
+ }
+ ],
+ "test.test[SerializeParquet]": [
+ {
+ "uri": "file://test.test_SerializeParquet_/results.txt"
+ }
+ ],
+ "test.test[SerializeTSVWithNames]": [
+ {
+ "uri": "file://test.test_SerializeTSVWithNames_/results.txt"
+ }
+ ],
+ "test.test[YqlType]": [
+ {
+ "uri": "file://test.test_YqlType_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_ParseFromYdb_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_ParseFromYdb_/results.txt
new file mode 100644
index 0000000000..deb2ea4846
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_ParseFromYdb_/results.txt
@@ -0,0 +1,142 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "release_date";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "series_id";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "series_info";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "title";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "13182"
+ ];
+ [
+ "1"
+ ];
+ [
+ "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."
+ ];
+ [
+ "IT Crowd"
+ ]
+ ];
+ [
+ [
+ "16166"
+ ];
+ [
+ "2"
+ ];
+ [
+ "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
+ ];
+ [
+ "Silicon Valley"
+ ]
+ ];
+ [
+ [
+ "13182"
+ ];
+ [
+ "1"
+ ];
+ [
+ "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."
+ ];
+ [
+ "IT Crowd"
+ ]
+ ];
+ [
+ [
+ "16166"
+ ];
+ [
+ "2"
+ ];
+ [
+ "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
+ ];
+ [
+ "Silicon Valley"
+ ]
+ ];
+ [
+ [
+ "13182"
+ ];
+ [
+ "1"
+ ];
+ [
+ "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."
+ ];
+ [
+ "IT Crowd"
+ ]
+ ];
+ [
+ [
+ "16166"
+ ];
+ [
+ "2"
+ ];
+ [
+ "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
+ ];
+ [
+ "Silicon Valley"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeCSVWithNames_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeCSVWithNames_/results.txt
new file mode 100644
index 0000000000..3058fe33cd
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeCSVWithNames_/results.txt
@@ -0,0 +1,107 @@
+[
+ {
+ "Label" = "Simple";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\"boolean\",\"number\",\"signed\",\"unsigned\",\"utf\"\n1,0,100,23,\"aaa\"\n\\N,3.14159,-5,\\N,\"ddd\"\n1,2.5,\\N,75,\"abc\"\n\\N,-23.3,-666,150,\"aaa\"\n1,333.3,777,150,\"iii\"\n0,-6.6,-13,150,\"zzz\"\n0,-17,15,200,\"qqq\"\n\\N,1,-200,\\N,\"bbb\"\n\\N,2,\\N,761,\"ccc\"\n0,-5.555,-9,911,\"kkk\"\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Tuples";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\"many\"\n23,100,\"aaa\",0,1\n\\N,-5,\"ddd\",3.14159,\\N\n75,\\N,\"abc\",2.5,1\n150,-666,\"aaa\",-23.3,\\N\n150,777,\"iii\",333.3,1\n150,-13,\"zzz\",-6.6,0\n200,15,\"qqq\",-17,0\n\\N,-200,\"bbb\",1,\\N\n761,\\N,\"ccc\",2,\\N\n911,-9,\"kkk\",-5.555,0\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Lists";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\"boolean\",\"number\",\"signed\",\"unsigned\",\"utf\"\n\"[1,1,1,0,0,0]\",\"[0,3.14159,2.5,-23.3,333.3,-6.6,-17,1,2,-5.555]\",\"[100,-5,-666,777,-13,15,-200,-9]\",\"[23,75,150,150,150,200,761,911]\",\"['aaa','ddd','abc','aaa','iii','zzz','qqq','bbb','ccc','kkk']\"\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeJSONEachRow_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeJSONEachRow_/results.txt
new file mode 100644
index 0000000000..71d1b62f4f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeJSONEachRow_/results.txt
@@ -0,0 +1,107 @@
+[
+ {
+ "Label" = "Simple";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"boolean\":1,\"number\":0,\"signed\":100,\"unsigned\":23,\"utf\":\"aaa\"}\n{\"boolean\":null,\"number\":3.14159,\"signed\":-5,\"unsigned\":null,\"utf\":\"ddd\"}\n{\"boolean\":1,\"number\":2.5,\"signed\":null,\"unsigned\":75,\"utf\":\"abc\"}\n{\"boolean\":null,\"number\":-23.3,\"signed\":-666,\"unsigned\":150,\"utf\":\"aaa\"}\n{\"boolean\":1,\"number\":333.3,\"signed\":777,\"unsigned\":150,\"utf\":\"iii\"}\n{\"boolean\":0,\"number\":-6.6,\"signed\":-13,\"unsigned\":150,\"utf\":\"zzz\"}\n{\"boolean\":0,\"number\":-17,\"signed\":15,\"unsigned\":200,\"utf\":\"qqq\"}\n{\"boolean\":null,\"number\":1,\"signed\":-200,\"unsigned\":null,\"utf\":\"bbb\"}\n{\"boolean\":null,\"number\":2,\"signed\":null,\"unsigned\":761,\"utf\":\"ccc\"}\n{\"boolean\":0,\"number\":-5.555,\"signed\":-9,\"unsigned\":911,\"utf\":\"kkk\"}\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Tuples";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"many\":[23,100,\"aaa\",0,1]}\n{\"many\":[null,-5,\"ddd\",3.14159,null]}\n{\"many\":[75,null,\"abc\",2.5,1]}\n{\"many\":[150,-666,\"aaa\",-23.3,null]}\n{\"many\":[150,777,\"iii\",333.3,1]}\n{\"many\":[150,-13,\"zzz\",-6.6,0]}\n{\"many\":[200,15,\"qqq\",-17,0]}\n{\"many\":[null,-200,\"bbb\",1,null]}\n{\"many\":[761,null,\"ccc\",2,null]}\n{\"many\":[911,-9,\"kkk\",-5.555,0]}\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Lists";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"boolean\":[1,1,1,0,0,0],\"number\":[0,3.14159,2.5,-23.3,333.3,-6.6,-17,1,2,-5.555],\"signed\":[100,-5,-666,777,-13,15,-200,-9],\"unsigned\":[23,75,150,150,150,200,761,911],\"utf\":[\"aaa\",\"ddd\",\"abc\",\"aaa\",\"iii\",\"zzz\",\"qqq\",\"bbb\",\"ccc\",\"kkk\"]}\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquetPartitioned_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquetPartitioned_/results.txt
new file mode 100644
index 0000000000..710e4225d1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquetPartitioned_/results.txt
@@ -0,0 +1,356 @@
+[
+ {
+ "Label" = "Simple";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "aaa";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVEhUWLBUEFQQVBhUGHDYCKAQBAAAAGAQBAAAAAAAACSACAAAAAwEBAgAmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYEFngWgAEmMCYIHDYCKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDwAAAAAAAAAAM3MzMzMTDfAFQAVBhUKLBUEFQQVBhUGHBgIAAAAAAAAAAAYCM3MzMzMTDfAFgAoCAAAAAAAAAAAGAjNzMzMzEw3wAAAAAMIAQMCJtQDHBUKGTUEAAYZGAZudW1iZXIVAhYEFrwBFsQBJtACJpACHBgIAAAAAAAAAAAYCM3MzMzMTDfAFgAoCAAAAAAAAAAAGAjNzMzMzEw3wAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgcZAAAAGb9//8VABUSFRYsFQQVBBUGFQYcGARkAAAAGARm/f//FgAoBGQAAAAYBGb9//8AAAAJIAIAAAAEAQEDAia4BhwVAhk1BAAGGRgGc2lnbmVkFQIWBBaYARagASbIBSaYBRwYBGQAAAAYBGb9//8WACgEZAAAABgEZv3//wAZLBUEFQQVAgAVABUEFQIAAAAVBBUgFSRMFQQVBBIAABA8FwAAAAAAAACWAAAAAAAAABUAFRIVFiwVBBUEFQYVBhwYCJYAAAAAAAAAGAgXAAAAAAAAABYAKAiWAAAAAAAAABgIFwAAAAAAAAAAAAAJIAIAAAAEAQEDAiasCRwVBBk1BAAGGRgIdW5zaWduZWQVAhYEFsgBFtABJpwIJtwHHBgIlgAAAAAAAAAYCBcAAAAAAAAAFgAoCJYAAAAAAAAAGAgXAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhlcNQAYBnNjaGVtYRUIABUCJQIYB2Jvb2xlYW4lFkysEwgSAAAAFQolABgGbnVtYmVyABUCJQIYBnNpZ25lZAAVBCUCGAh1bnNpZ25lZAAWBBkcGUwmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYEFngWgAEmMCYIHDYCKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAACbUAxwVChk1BAAGGRgGbnVtYmVyFQIWBBa8ARbEASbQAiaQAhwYCAAAAAAAAAAAGAjNzMzMzEw3wBYAKAgAAAAAAAAAABgIzczMzMxMN8AAGSwVBBUEFQIAFQAVBBUCAAAAJrgGHBUCGTUEAAYZGAZzaWduZWQVAhYEFpgBFqABJsgFJpgFHBgEZAAAABgEZv3//xYAKARkAAAAGARm/f//ABksFQQVBBUCABUAFQQVAgAAACasCRwVBBk1BAAGGRgIdW5zaWduZWQVAhYEFsgBFtABJpwIJtwHHBgIlgAAAAAAAAAYCBcAAAAAAAAAFgAoCJYAAAAAAAAAGAgXAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWlAUWBCaIARa0BRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAAPEBAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "aaa";
+ #
+ ];
+ [
+ "bbb";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIAACZiHBUCGTUEAAYZGAdib29sZWFuFQIWAhZUFlomJiYIHDYCABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBwAAAAAAADwPxUAFQYVCiwVAhUEFQYVBhwYCAAAAAAAAPA/GAgAAAAAAADwPxYAKAgAAAAAAADwPxgIAAAAAAAA8D8AAAADCAECACaCAxwVChk1BAAGGRgGbnVtYmVyFQIWAhasARa0ASb+ASbOARwYCAAAAAAAAPA/GAgAAAAAAADwPxYAKAgAAAAAAADwPxgIAAAAAAAA8D8AGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDDj///8VABUSFRYsFQIVBBUGFQYcGAQ4////GAQ4////FgAoBDj///8YBDj///8AAAAJIAIAAAACAQECACbeBRwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASbuBCbGBBwYBDj///8YBDj///8WACgEOP///xgEOP///wAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUOFRIsFQIVBBUGFQYcNgIAAAAHGAIAAAACAAAm3AccFQQZNQQABhkYCHVuc2lnbmVkFQIWAhZUFlomoAcmggccNgIAGSwVBBUEFQIAFQAVBBUCAAAAFQIZXDUAGAZzY2hlbWEVCAAVAiUCGAdib29sZWFuJRZMrBMIEgAAABUKJQAYBm51bWJlcgAVAiUCGAZzaWduZWQAFQQlAhgIdW5zaWduZWQAFgIZHBlMJmIcFQIZNQQABhkYB2Jvb2xlYW4VAhYCFlQWWiYmJggcNgIAGSwVBBUEFQIAFQAVBBUCAAAAJoIDHBUKGTUEAAYZGAZudW1iZXIVAhYCFqwBFrQBJv4BJs4BHBgIAAAAAAAA8D8YCAAAAAAAAPA/FgAoCAAAAAAAAPA/GAgAAAAAAADwPwAZLBUEFQQVAgAVABUEFQIAAAAm3gUcFQIZNQQABhkYBnNpZ25lZBUCFgIWkAEWmAEm7gQmxgQcGAQ4////GAQ4////FgAoBDj///8YBDj///8AGSwVBBUEFQIAFQAVBBUCAAAAJtwHHBUEGTUEAAYZGAh1bnNpZ25lZBUCFgIWVBZaJqAHJoIHHDYCABksFQQVBBUCABUAFQQVAgAAABbkAxYCJmIWgAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAAC4AQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "bbb";
+ #
+ ];
+ [
+ "ccc";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVEhUWLBUEFQQVBhUGHDYCKAQBAAAAGAQBAAAAAAAACSACAAAAAwEBAgAmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYEFngWgAEmMCYIHDYCKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDwAAAAAAAAEQAAAAAAAAABAFQAVBhUKLBUEFQQVBhUGHBgIAAAAAAAABEAYCAAAAAAAAABAFgAoCAAAAAAAAARAGAgAAAAAAAAAQAAAAAMIAQMCJtQDHBUKGTUEAAYZGAZudW1iZXIVAhYEFrwBFsQBJtACJpACHBgIAAAAAAAABEAYCAAAAAAAAABAFgAoCAAAAAAAAARAGAgAAAAAAAAAQAAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUOFRIsFQQVBBUGFQYcNgQAAAAHGAIAAAAEAAAm8gUcFQIZNQQABhkYBnNpZ25lZBUCFgQWVBZaJrYFJpgFHDYEABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDxLAAAAAAAAAPkCAAAAAAAAFQAVEhUWLBUEFQQVBhUGHBgI+QIAAAAAAAAYCEsAAAAAAAAAFgAoCPkCAAAAAAAAGAhLAAAAAAAAAAAAAAkgAgAAAAQBAQMCJrIIHBUEGTUEAAYZGAh1bnNpZ25lZBUCFgQWyAEW0AEmogcm4gYcGAj5AgAAAAAAABgISwAAAAAAAAAWACgI+QIAAAAAAAAYCEsAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABUCGVw1ABgGc2NoZW1hFQgAFQIlAhgHYm9vbGVhbiUWTKwTCBIAAAAVCiUAGAZudW1iZXIAFQIlAhgGc2lnbmVkABUEJQIYCHVuc2lnbmVkABYEGRwZTCaIARwVAhk1BAAGGRgHYm9vbGVhbhUCFgQWeBaAASYwJggcNgIoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJtQDHBUKGTUEAAYZGAZudW1iZXIVAhYEFrwBFsQBJtACJpACHBgIAAAAAAAABEAYCAAAAAAAAABAFgAoCAAAAAAAAARAGAgAAAAAAAAAQAAZLBUEFQQVAgAVABUEFQIAAAAm8gUcFQIZNQQABhkYBnNpZ25lZBUCFgQWVBZaJrYFJpgFHDYEABksFQQVBBUCABUAFQQVAgAAACayCBwVBBk1BAAGGRgIdW5zaWduZWQVAhYEFsgBFtABJqIHJuIGHBgI+QIAAAAAAAAYCEsAAAAAAAAAFgAoCPkCAAAAAAAAGAhLAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAW0AQWBCaIARbuBBQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAANcBAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "ccc";
+ #
+ ];
+ [
+ "ddd";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIAACZiHBUCGTUEAAYZGAdib29sZWFuFQIWAhZUFlomJiYIHDYCABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBxuhhvw+SEJQBUAFQYVCiwVAhUEFQYVBhwYCG6GG/D5IQlAGAhuhhvw+SEJQBYAKAhuhhvw+SEJQBgIboYb8PkhCUAAAAADCAECACaCAxwVChk1BAAGGRgGbnVtYmVyFQIWAhasARa0ASb+ASbOARwYCG6GG/D5IQlAGAhuhhvw+SEJQBYAKAhuhhvw+SEJQBgIboYb8PkhCUAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDPv///8VABUSFRYsFQIVBBUGFQYcGAT7////GAT7////FgAoBPv///8YBPv///8AAAAJIAIAAAACAQECACbeBRwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASbuBCbGBBwYBPv///8YBPv///8WACgE+////xgE+////wAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUOFRIsFQIVBBUGFQYcNgIAAAAHGAIAAAACAAAm3AccFQQZNQQABhkYCHVuc2lnbmVkFQIWAhZUFlomoAcmggccNgIAGSwVBBUEFQIAFQAVBBUCAAAAFQIZXDUAGAZzY2hlbWEVCAAVAiUCGAdib29sZWFuJRZMrBMIEgAAABUKJQAYBm51bWJlcgAVAiUCGAZzaWduZWQAFQQlAhgIdW5zaWduZWQAFgIZHBlMJmIcFQIZNQQABhkYB2Jvb2xlYW4VAhYCFlQWWiYmJggcNgIAGSwVBBUEFQIAFQAVBBUCAAAAJoIDHBUKGTUEAAYZGAZudW1iZXIVAhYCFqwBFrQBJv4BJs4BHBgIboYb8PkhCUAYCG6GG/D5IQlAFgAoCG6GG/D5IQlAGAhuhhvw+SEJQAAZLBUEFQQVAgAVABUEFQIAAAAm3gUcFQIZNQQABhkYBnNpZ25lZBUCFgIWkAEWmAEm7gQmxgQcGAT7////GAT7////FgAoBPv///8YBPv///8AGSwVBBUEFQIAFQAVBBUCAAAAJtwHHBUEGTUEAAYZGAh1bnNpZ25lZBUCFgIWVBZaJqAHJoIHHDYCABksFQQVBBUCABUAFQQVAgAAABbkAxYCJmIWgAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAAC4AQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "ddd";
+ #
+ ];
+ [
+ "iii";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVEhUWLBUCFQQVBhUGHDYAKAQBAAAAGAQBAAAAAAAACSACAAAAAgEBAgAmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYCFngWgAEmMCYIHDYAKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBzNzMzMzNR0QBUAFQYVCiwVAhUEFQYVBhwYCM3MzMzM1HRAGAjNzMzMzNR0QBYAKAjNzMzMzNR0QBgIzczMzMzUdEAAAAADCAECACbEAxwVChk1BAAGGRgGbnVtYmVyFQIWAhasARa0ASbAAiaQAhwYCM3MzMzM1HRAGAjNzMzMzNR0QBYAKAjNzMzMzNR0QBgIzczMzMzUdEAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDAkDAAAVABUSFRYsFQIVBBUGFQYcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAAAAJIAIAAAACAQECACagBhwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASawBSaIBRwYBAkDAAAYBAkDAAAWACgECQMAABgECQMAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQIVBBIAAAgclgAAAAAAAAAVABUSFRYsFQIVBBUGFQYcGAiWAAAAAAAAABgIlgAAAAAAAAAWACgIlgAAAAAAAAAYCJYAAAAAAAAAAAAACSACAAAAAgEBAgAmhAkcFQQZNQQABhkYCHVuc2lnbmVkFQIWAha4ARbAASb0BybEBxwYCJYAAAAAAAAAGAiWAAAAAAAAABYAKAiWAAAAAAAAABgIlgAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQIZXDUAGAZzY2hlbWEVCAAVAiUCGAdib29sZWFuJRZMrBMIEgAAABUKJQAYBm51bWJlcgAVAiUCGAZzaWduZWQAFQQlAhgIdW5zaWduZWQAFgIZHBlMJogBHBUCGTUEAAYZGAdib29sZWFuFQIWAhZ4FoABJjAmCBw2ACgEAQAAABgEAQAAAAAZLBUEFQQVAgAVABUEFQIAAAAmxAMcFQoZNQQABhkYBm51bWJlchUCFgIWrAEWtAEmwAImkAIcGAjNzMzMzNR0QBgIzczMzMzUdEAWACgIzczMzMzUdEAYCM3MzMzM1HRAABksFQQVBBUCABUAFQQVAgAAACagBhwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASawBSaIBRwYBAkDAAAYBAkDAAAWACgECQMAABgECQMAAAAZLBUEFQQVAgAVABUEFQIAAAAmhAkcFQQZNQQABhkYCHVuc2lnbmVkFQIWAha4ARbAASb0BybEBxwYCJYAAAAAAAAAGAiWAAAAAAAAABYAKAiWAAAAAAAAABgIlgAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFuwEFgImiAEWjAUUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAADxAQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "iii";
+ #
+ ];
+ [
+ "kkk";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwAAAAAFQAVEhUWLBUEFQQVBhUGHDYAKAQAAAAAGAQAAAAAAAAACSACAAAABAEBBAAmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYEFngWgAEmMCYIHDYAKAQAAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDxmZmZmZmYawLgehetROBbAFQAVBhUKLBUEFQQVBhUGHBgIuB6F61E4FsAYCGZmZmZmZhrAFgAoCLgehetROBbAGAhmZmZmZmYawAAAAAMIAQMCJtQDHBUKGTUEAAYZGAZudW1iZXIVAhYEFrwBFsQBJtACJpACHBgIuB6F61E4FsAYCGZmZmZmZhrAFgAoCLgehetROBbAGAhmZmZmZmYawAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgc8/////f///8VABUSFRYsFQQVBBUGFQYcGAT3////GATz////FgAoBPf///8YBPP///8AAAAJIAIAAAAEAQEDAia4BhwVAhk1BAAGGRgGc2lnbmVkFQIWBBaYARagASbIBSaYBRwYBPf///8YBPP///8WACgE9////xgE8////wAZLBUEFQQVAgAVABUEFQIAAAAVBBUgFSRMFQQVBBIAABA8lgAAAAAAAACPAwAAAAAAABUAFRIVFiwVBBUEFQYVBhwYCI8DAAAAAAAAGAiWAAAAAAAAABYAKAiPAwAAAAAAABgIlgAAAAAAAAAAAAAJIAIAAAAEAQEDAiasCRwVBBk1BAAGGRgIdW5zaWduZWQVAhYEFsgBFtABJpwIJtwHHBgIjwMAAAAAAAAYCJYAAAAAAAAAFgAoCI8DAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhlcNQAYBnNjaGVtYRUIABUCJQIYB2Jvb2xlYW4lFkysEwgSAAAAFQolABgGbnVtYmVyABUCJQIYBnNpZ25lZAAVBCUCGAh1bnNpZ25lZAAWBBkcGUwmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYEFngWgAEmMCYIHDYAKAQAAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAACbUAxwVChk1BAAGGRgGbnVtYmVyFQIWBBa8ARbEASbQAiaQAhwYCLgehetROBbAGAhmZmZmZmYawBYAKAi4HoXrUTgWwBgIZmZmZmZmGsAAGSwVBBUEFQIAFQAVBBUCAAAAJrgGHBUCGTUEAAYZGAZzaWduZWQVAhYEFpgBFqABJsgFJpgFHBgE9////xgE8////xYAKAT3////GATz////ABksFQQVBBUCABUAFQQVAgAAACasCRwVBBk1BAAGGRgIdW5zaWduZWQVAhYEFsgBFtABJpwIJtwHHBgIjwMAAAAAAAAYCJYAAAAAAAAAFgAoCI8DAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWlAUWBCaIARa0BRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAAPEBAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "kkk";
+ #
+ ];
+ [
+ "qqq";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwAAAAAFQAVEhUWLBUCFQQVBhUGHDYAKAQAAAAAGAQAAAAAAAAACSACAAAAAgEBAgAmiAEcFQIZNQQABhkYB2Jvb2xlYW4VAhYCFngWgAEmMCYIHDYAKAQAAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBwAAAAAAAAxwBUAFQYVCiwVAhUEFQYVBhwYCAAAAAAAADHAGAgAAAAAAAAxwBYAKAgAAAAAAAAxwBgIAAAAAAAAMcAAAAADCAECACbEAxwVChk1BAAGGRgGbnVtYmVyFQIWAhasARa0ASbAAiaQAhwYCAAAAAAAADHAGAgAAAAAAAAxwBYAKAgAAAAAAAAxwBgIAAAAAAAAMcAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDA8AAAAVABUSFRYsFQIVBBUGFQYcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAAAAJIAIAAAACAQECACagBhwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASawBSaIBRwYBA8AAAAYBA8AAAAWACgEDwAAABgEDwAAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQIVBBIAAAgcyAAAAAAAAAAVABUSFRYsFQIVBBUGFQYcGAjIAAAAAAAAABgIyAAAAAAAAAAWACgIyAAAAAAAAAAYCMgAAAAAAAAAAAAACSACAAAAAgEBAgAmhAkcFQQZNQQABhkYCHVuc2lnbmVkFQIWAha4ARbAASb0BybEBxwYCMgAAAAAAAAAGAjIAAAAAAAAABYAKAjIAAAAAAAAABgIyAAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQIZXDUAGAZzY2hlbWEVCAAVAiUCGAdib29sZWFuJRZMrBMIEgAAABUKJQAYBm51bWJlcgAVAiUCGAZzaWduZWQAFQQlAhgIdW5zaWduZWQAFgIZHBlMJogBHBUCGTUEAAYZGAdib29sZWFuFQIWAhZ4FoABJjAmCBw2ACgEAAAAABgEAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAmxAMcFQoZNQQABhkYBm51bWJlchUCFgIWrAEWtAEmwAImkAIcGAgAAAAAAAAxwBgIAAAAAAAAMcAWACgIAAAAAAAAMcAYCAAAAAAAADHAABksFQQVBBUCABUAFQQVAgAAACagBhwVAhk1BAAGGRgGc2lnbmVkFQIWAhaQARaYASawBSaIBRwYBA8AAAAYBA8AAAAWACgEDwAAABgEDwAAAAAZLBUEFQQVAgAVABUEFQIAAAAmhAkcFQQZNQQABhkYCHVuc2lnbmVkFQIWAha4ARbAASb0BybEBxwYCMgAAAAAAAAAGAjIAAAAAAAAABYAKAjIAAAAAAAAABgIyAAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFuwEFgImiAEWjAUUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAADxAQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "qqq";
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Tuples";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "aaa";
+ [
+ [
+ "UEFSMRUEFSAVJEwVBBUEEgAAEDwXAAAAAAAAAJYAAAAAAAAAFQAVEhUWLBUEFQQVBhUGHBgIlgAAAAAAAAAYCBcAAAAAAAAAFgAoCJYAAAAAAAAAGAgXAAAAAAAAAAAAAAkgAgAAAAQCAQMCJtgBHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgQWyAEW0AEmSCYIHBgIlgAAAAAAAAAYCBcAAAAAAAAAFgAoCJYAAAAAAAAAGAgXAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgcZAAAAGb9//8VABUSFRYsFQQVBBUGFQYcGARkAAAAGARm/f//FgAoBGQAAAAYBGb9//8AAAAJIAIAAAAEAgEDAibCBBwVAhk1BAAGGSgEbWFueQZtYW55LjEVAhYEFpgBFqABJtIDJqIDHBgEZAAAABgEZv3//xYAKARkAAAAGARm/f//ABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDwAAAAAAAAAAM3MzMzMTDfAFQAVEhUWLBUEFQQVBhUGHBgIAAAAAAAAAAAYCM3MzMzMTDfAFgAoCAAAAAAAAAAAGAjNzMzMzEw3wAAAAAkgAgAAAAQCAQMCJsAHHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgQWyAEW0AEmsAYm8AUcGAgAAAAAAAAAABgIzczMzMxMN8AWACgIAAAAAAAAAAAYCM3MzMzMTDfAABksFQQVBBUCABUAFQQVAgAAABUEFQgVDEwVAhUEEgAABAwBAAAAFQAVFBUYLBUEFQQVBhUGHDYCKAQBAAAAGAQBAAAAAAAACiQDAAAAAwYAAQIAJpAKHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgQWehaCASa2CSaOCRw2AigEAQAAABgEAQAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhlsNQAYBnNjaGVtYRUCADUCGARtYW55FQgAFQQlAhgGbWFueS4wABUCJQIYBm1hbnkuMQAVCiUCGAZtYW55LjIAFQIlAhgGbWFueS4zJRZMrBMIEgAAABYEGRwZTCbYARwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYEFsgBFtABJkgmCBwYCJYAAAAAAAAAGAgXAAAAAAAAABYAKAiWAAAAAAAAABgIFwAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJsIEHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFgQWmAEWoAEm0gMmogMcGARkAAAAGARm/f//FgAoBGQAAAAYBGb9//8AGSwVBBUEFQIAFQAVBBUCAAAAJsAHHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgQWyAEW0AEmsAYm8AUcGAgAAAAAAAAAABgIzczMzMxMN8AWACgIAAAAAAAAAAAYCM3MzMzMTDfAABksFQQVBBUCABUAFQQVAgAAACaQChwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYEFnoWggEmtgkmjgkcNgIoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFqIFFgQm2AEWwgUUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAAAKAgAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "aaa";
+ #
+ ];
+ [
+ "bbb";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIBACZiHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgIWVBZaJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQMOP///xUAFRIVFiwVAhUEFQYVBhwYBDj///8YBDj///8WACgEOP///xgEOP///wAAAAkgAgAAAAICAQIAJu4CHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFgIWkAEWmAEm/gEm1gEcGAQ4////GAQ4////FgAoBDj///8YBDj///8AGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHAAAAAAAAPA/FQAVEhUWLBUCFQQVBhUGHBgIAAAAAAAA8D8YCAAAAAAAAPA/FgAoCAAAAAAAAPA/GAgAAAAAAADwPwAAAAkgAgAAAAICAQIAJtwFHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgIWuAEWwAEmzAQmnAQcGAgAAAAAAADwPxgIAAAAAAAA8D8WACgIAAAAAAAA8D8YCAAAAAAAAPA/ABksFQQVBBUCABUAFQQVAgAAABUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIBACaECBwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYCFlQWWibIByaqBxw2AgAZLBUEFQQVAgAVABUEFQIAAAAVAhlsNQAYBnNjaGVtYRUCADUCGARtYW55FQgAFQQlAhgGbWFueS4wABUCJQIYBm1hbnkuMQAVCiUCGAZtYW55LjIAFQIlAhgGbWFueS4zJRZMrBMIEgAAABYCGRwZTCZiHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgIWVBZaJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAm7gIcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWAhaQARaYASb+ASbWARwYBDj///8YBDj///8WACgEOP///xgEOP///wAZLBUEFQQVAgAVABUEFQIAAAAm3AUcFQoZNQQABhkoBG1hbnkGbWFueS4yFQIWAha4ARbAASbMBCacBBwYCAAAAAAAAPA/GAgAAAAAAADwPxYAKAgAAAAAAADwPxgIAAAAAAAA8D8AGSwVBBUEFQIAFQAVBBUCAAAAJoQIHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgIWVBZaJsgHJqoHHDYCABksFQQVBBUCABUAFQQVAgAAABbwAxYCJmIWjAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAADRAQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "bbb";
+ #
+ ];
+ [
+ "ccc";
+ [
+ [
+ "UEFSMRUEFSAVJEwVBBUEEgAAEDxLAAAAAAAAAPkCAAAAAAAAFQAVEhUWLBUEFQQVBhUGHBgI+QIAAAAAAAAYCEsAAAAAAAAAFgAoCPkCAAAAAAAAGAhLAAAAAAAAAAAAAAkgAgAAAAQCAQMCJtgBHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgQWyAEW0AEmSCYIHBgI+QIAAAAAAAAYCEsAAAAAAAAAFgAoCPkCAAAAAAAAGAhLAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUOFRIsFQQVBBUGFQYcNgQAAAAHGAIAAAAEAQAm/AMcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWBBZUFlomwAMmogMcNgQAGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPAAAAAAAAARAAAAAAAAAAEAVABUSFRYsFQQVBBUGFQYcGAgAAAAAAAAEQBgIAAAAAAAAAEAWACgIAAAAAAAABEAYCAAAAAAAAABAAAAACSACAAAABAIBAwImxgYcFQoZNQQABhkoBG1hbnkGbWFueS4yFQIWBBbIARbQASa2BSb2BBwYCAAAAAAAAARAGAgAAAAAAAAAQBYAKAgAAAAAAAAEQBgIAAAAAAAAAEAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDAEAAAAVABUUFRgsFQQVBBUGFQYcNgIoBAEAAAAYBAEAAAAAAAAKJAMAAAADBgABAgAmlgkcFQIZNQQABhkoBG1hbnkGbWFueS4zFQIWBBZ6FoIBJrwIJpQIHDYCKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAABUCGWw1ABgGc2NoZW1hFQIANQIYBG1hbnkVCAAVBCUCGAZtYW55LjAAFQIlAhgGbWFueS4xABUKJQIYBm1hbnkuMgAVAiUCGAZtYW55LjMlFkysEwgSAAAAFgQZHBlMJtgBHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgQWyAEW0AEmSCYIHBgI+QIAAAAAAAAYCEsAAAAAAAAAFgAoCPkCAAAAAAAAGAhLAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAm/AMcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWBBZUFlomwAMmogMcNgQAGSwVBBUEFQIAFQAVBBUCAAAAJsYGHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgQWyAEW0AEmtgUm9gQcGAgAAAAAAAAEQBgIAAAAAAAAAEAWACgIAAAAAAAABEAYCAAAAAAAAABAABksFQQVBBUCABUAFQQVAgAAACaWCRwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYEFnoWggEmvAgmlAgcNgIoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFt4EFgQm2AEW/AQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAADwAQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "ccc";
+ #
+ ];
+ [
+ "ddd";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIBACZiHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgIWVBZaJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQM+////xUAFRIVFiwVAhUEFQYVBhwYBPv///8YBPv///8WACgE+////xgE+////wAAAAkgAgAAAAICAQIAJu4CHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFgIWkAEWmAEm/gEm1gEcGAT7////GAT7////FgAoBPv///8YBPv///8AGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHG6GG/D5IQlAFQAVEhUWLBUCFQQVBhUGHBgIboYb8PkhCUAYCG6GG/D5IQlAFgAoCG6GG/D5IQlAGAhuhhvw+SEJQAAAAAkgAgAAAAICAQIAJtwFHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgIWuAEWwAEmzAQmnAQcGAhuhhvw+SEJQBgIboYb8PkhCUAWACgIboYb8PkhCUAYCG6GG/D5IQlAABksFQQVBBUCABUAFQQVAgAAABUEFQAVAkwVABUEEgAAABUAFQ4VEiwVAhUEFQYVBhw2AgAAAAcYAgAAAAIBACaECBwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYCFlQWWibIByaqBxw2AgAZLBUEFQQVAgAVABUEFQIAAAAVAhlsNQAYBnNjaGVtYRUCADUCGARtYW55FQgAFQQlAhgGbWFueS4wABUCJQIYBm1hbnkuMQAVCiUCGAZtYW55LjIAFQIlAhgGbWFueS4zJRZMrBMIEgAAABYCGRwZTCZiHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgIWVBZaJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAm7gIcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWAhaQARaYASb+ASbWARwYBPv///8YBPv///8WACgE+////xgE+////wAZLBUEFQQVAgAVABUEFQIAAAAm3AUcFQoZNQQABhkoBG1hbnkGbWFueS4yFQIWAha4ARbAASbMBCacBBwYCG6GG/D5IQlAGAhuhhvw+SEJQBYAKAhuhhvw+SEJQBgIboYb8PkhCUAAGSwVBBUEFQIAFQAVBBUCAAAAJoQIHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgIWVBZaJsgHJqoHHDYCABksFQQVBBUCABUAFQQVAgAAABbwAxYCJmIWjAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAADRAQAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "ddd";
+ #
+ ];
+ [
+ "iii";
+ [
+ [
+ "UEFSMRUEFRAVFEwVAhUEEgAACByWAAAAAAAAABUAFRIVFiwVAhUEFQYVBhwYCJYAAAAAAAAAGAiWAAAAAAAAABYAKAiWAAAAAAAAABgIlgAAAAAAAAAAAAAJIAIAAAACAgECACbIARwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYCFrgBFsABJjgmCBwYCJYAAAAAAAAAGAiWAAAAAAAAABYAKAiWAAAAAAAAABgIlgAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDAkDAAAVABUSFRYsFQIVBBUGFQYcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAAAAJIAIAAAACAgECACaqBBwVAhk1BAAGGSgEbWFueQZtYW55LjEVAhYCFpABFpgBJroDJpIDHBgECQMAABgECQMAABYAKAQJAwAAGAQJAwAAABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBzNzMzMzNR0QBUAFRIVFiwVAhUEFQYVBhwYCM3MzMzM1HRAGAjNzMzMzNR0QBYAKAjNzMzMzNR0QBgIzczMzMzUdEAAAAAJIAIAAAACAgECACaYBxwVChk1BAAGGSgEbWFueQZtYW55LjIVAhYCFrgBFsABJogGJtgFHBgIzczMzMzUdEAYCM3MzMzM1HRAFgAoCM3MzMzM1HRAGAjNzMzMzNR0QAAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQMAQAAABUAFRIVFiwVAhUEFQYVBhw2ACgEAQAAABgEAQAAAAAAAAkgAgAAAAICAQIAJuYJHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgIWeBaAASaOCSbmCBw2ACgEAQAAABgEAQAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhlsNQAYBnNjaGVtYRUCADUCGARtYW55FQgAFQQlAhgGbWFueS4wABUCJQIYBm1hbnkuMQAVCiUCGAZtYW55LjIAFQIlAhgGbWFueS4zJRZMrBMIEgAAABYCGRwZTCbIARwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYCFrgBFsABJjgmCBwYCJYAAAAAAAAAGAiWAAAAAAAAABYAKAiWAAAAAAAAABgIlgAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJqoEHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFgIWkAEWmAEmugMmkgMcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAGSwVBBUEFQIAFQAVBBUCAAAAJpgHHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgIWuAEWwAEmiAYm2AUcGAjNzMzMzNR0QBgIzczMzMzUdEAWACgIzczMzMzUdEAYCM3MzMzM1HRAABksFQQVBBUCABUAFQQVAgAAACbmCRwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYCFngWgAEmjgkm5ggcNgAoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFvgEFgImyAEWmAUUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAAAKAgAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "iii";
+ #
+ ];
+ [
+ "kkk";
+ [
+ [
+ "UEFSMRUEFSAVJEwVBBUEEgAAEDyWAAAAAAAAAI8DAAAAAAAAFQAVEhUWLBUEFQQVBhUGHBgIjwMAAAAAAAAYCJYAAAAAAAAAFgAoCI8DAAAAAAAAGAiWAAAAAAAAAAAAAAkgAgAAAAQCAQMCJtgBHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgQWyAEW0AEmSCYIHBgIjwMAAAAAAAAYCJYAAAAAAAAAFgAoCI8DAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgc8/////f///8VABUSFRYsFQQVBBUGFQYcGAT3////GATz////FgAoBPf///8YBPP///8AAAAJIAIAAAAEAgEDAibCBBwVAhk1BAAGGSgEbWFueQZtYW55LjEVAhYEFpgBFqABJtIDJqIDHBgE9////xgE8////xYAKAT3////GATz////ABksFQQVBBUCABUAFQQVAgAAABUEFSAVJEwVBBUEEgAAEDxmZmZmZmYawLgehetROBbAFQAVEhUWLBUEFQQVBhUGHBgIuB6F61E4FsAYCGZmZmZmZhrAFgAoCLgehetROBbAGAhmZmZmZmYawAAAAAkgAgAAAAQCAQMCJsAHHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgQWyAEW0AEmsAYm8AUcGAi4HoXrUTgWwBgIZmZmZmZmGsAWACgIuB6F61E4FsAYCGZmZmZmZhrAABksFQQVBBUCABUAFQQVAgAAABUEFQgVDEwVAhUEEgAABAwAAAAAFQAVEhUWLBUEFQQVBhUGHDYAKAQAAAAAGAQAAAAAAAAACSACAAAABAIBBAAmjgocFQIZNQQABhkoBG1hbnkGbWFueS4zFQIWBBZ4FoABJrYJJo4JHDYAKAQAAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUCGWw1ABgGc2NoZW1hFQIANQIYBG1hbnkVCAAVBCUCGAZtYW55LjAAFQIlAhgGbWFueS4xABUKJQIYBm1hbnkuMgAVAiUCGAZtYW55LjMlFkysEwgSAAAAFgQZHBlMJtgBHBUEGTUEAAYZKARtYW55Bm1hbnkuMBUCFgQWyAEW0AEmSCYIHBgIjwMAAAAAAAAYCJYAAAAAAAAAFgAoCI8DAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAmwgQcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWBBaYARagASbSAyaiAxwYBPf///8YBPP///8WACgE9////xgE8////wAZLBUEFQQVAgAVABUEFQIAAAAmwAccFQoZNQQABhkoBG1hbnkGbWFueS4yFQIWBBbIARbQASawBibwBRwYCLgehetROBbAGAhmZmZmZmYawBYAKAi4HoXrUTgWwBgIZmZmZmZmGsAAGSwVBBUEFQIAFQAVBBUCAAAAJo4KHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgQWeBaAASa2CSaOCRw2ACgEAAAAABgEAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWoAUWBCbYARbABRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAAAoCAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "kkk";
+ #
+ ];
+ [
+ "qqq";
+ [
+ [
+ "UEFSMRUEFRAVFEwVAhUEEgAACBzIAAAAAAAAABUAFRIVFiwVAhUEFQYVBhwYCMgAAAAAAAAAGAjIAAAAAAAAABYAKAjIAAAAAAAAABgIyAAAAAAAAAAAAAAJIAIAAAACAgECACbIARwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYCFrgBFsABJjgmCBwYCMgAAAAAAAAAGAjIAAAAAAAAABYAKAjIAAAAAAAAABgIyAAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDA8AAAAVABUSFRYsFQIVBBUGFQYcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAAAAJIAIAAAACAgECACaqBBwVAhk1BAAGGSgEbWFueQZtYW55LjEVAhYCFpABFpgBJroDJpIDHBgEDwAAABgEDwAAABYAKAQPAAAAGAQPAAAAABksFQQVBBUCABUAFQQVAgAAABUEFRAVFEwVAhUEEgAACBwAAAAAAAAxwBUAFRIVFiwVAhUEFQYVBhwYCAAAAAAAADHAGAgAAAAAAAAxwBYAKAgAAAAAAAAxwBgIAAAAAAAAMcAAAAAJIAIAAAACAgECACaYBxwVChk1BAAGGSgEbWFueQZtYW55LjIVAhYCFrgBFsABJogGJtgFHBgIAAAAAAAAMcAYCAAAAAAAADHAFgAoCAAAAAAAADHAGAgAAAAAAAAxwAAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQMAAAAABUAFRIVFiwVAhUEFQYVBhw2ACgEAAAAABgEAAAAAAAAAAkgAgAAAAICAQIAJuYJHBUCGTUEAAYZKARtYW55Bm1hbnkuMxUCFgIWeBaAASaOCSbmCBw2ACgEAAAAABgEAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhlsNQAYBnNjaGVtYRUCADUCGARtYW55FQgAFQQlAhgGbWFueS4wABUCJQIYBm1hbnkuMQAVCiUCGAZtYW55LjIAFQIlAhgGbWFueS4zJRZMrBMIEgAAABYCGRwZTCbIARwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYCFrgBFsABJjgmCBwYCMgAAAAAAAAAGAjIAAAAAAAAABYAKAjIAAAAAAAAABgIyAAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJqoEHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFgIWkAEWmAEmugMmkgMcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAGSwVBBUEFQIAFQAVBBUCAAAAJpgHHBUKGTUEAAYZKARtYW55Bm1hbnkuMhUCFgIWuAEWwAEmiAYm2AUcGAgAAAAAAAAxwBgIAAAAAAAAMcAWACgIAAAAAAAAMcAYCAAAAAAAADHAABksFQQVBBUCABUAFQQVAgAAACbmCRwVAhk1BAAGGSgEbWFueQZtYW55LjMVAhYCFngWgAEmjgkm5ggcNgAoBAAAAAAYBAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFvgEFgImyAEWmAUUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAAAKAgAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "qqq";
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Lists";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "aaa";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVHhUiLBUCFQQVBhUGHDYAKAQBAAAAGAQBAAAAAAAADzgCAAAAAgACAAAAAgIBAgAmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWAhaEARaMASYwJggcNgAoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPAAAAAAAAAAAzczMzMxMN8AVABUeFSIsFQQVBBUGFQYcGAgAAAAAAAAAABgIzczMzMxMN8AWACgIAAAAAAAAAAAYCM3MzMzMTDfAAAAADzgCAAAAAwICAAAABAIBAwImjgQcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYEFtQBFtwBJvICJrICHBgIAAAAAAAAAAAYCM3MzMzMTDfAFgAoCAAAAAAAAAAAGAjNzMzMzEw3wAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgcZAAAAGb9//8VABUeFSIsFQQVBBUGFQYcGARkAAAAGARm/f//FgAoBGQAAAAYBGb9//8AAAAPOAIAAAADAgIAAAAEAgEDAiaSBxwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgQWpAEWrAEmlgYm5gUcGARkAAAAGARm/f//FgAoBGQAAAAYBGb9//8AGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPBcAAAAAAAAAlgAAAAAAAAAVABUeFSIsFQQVBBUGFQYcGAiWAAAAAAAAABgIFwAAAAAAAAAWACgIlgAAAAAAAAAYCBcAAAAAAAAAAAAADzgCAAAAAwICAAAABAIBAwImpgocFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgQW1AEW3AEmigkmyggcGAiWAAAAAAAAABgIFwAAAAAAAAAWACgIlgAAAAAAAAAYCBcAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABUCGdw1ABgGc2NoZW1hFQgANQAYB2Jvb2xlYW4VAhUGTDwAAAA1BBgEbGlzdBUCABUCJQIYBGl0ZW0lFkysEwgSAAAANQAYBm51bWJlchUCFQZMPAAAADUEGARsaXN0FQIAFQolAhgEaXRlbQA1ABgGc2lnbmVkFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtADUAGAh1bnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQQlAhgEaXRlbQAWAhkcGUwmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWAhaEARaMASYwJggcNgAoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJo4EHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWBBbUARbcASbyAiayAhwYCAAAAAAAAAAAGAjNzMzMzEw3wBYAKAgAAAAAAAAAABgIzczMzMxMN8AAGSwVBBUEFQIAFQAVBBUCAAAAJpIHHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWBBakARasASaWBibmBRwYBGQAAAAYBGb9//8WACgEZAAAABgEZv3//wAZLBUEFQQVAgAVABUEFQIAAAAmpgocFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgQW1AEW3AEmigkmyggcGAiWAAAAAAAAABgIFwAAAAAAAAAWACgIlgAAAAAAAAAYCBcAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABbQBRYCJpQBFvAFFAAAKB9wYXJxdWV0LWNwcC1hcnJvdyB2ZXJzaW9uIDUuMC4wGUwcAAAcAAAcAAAcAAAAigIAAFBBUjE="
+ ]
+ ]
+ ];
+ [
+ "aaa";
+ #
+ ];
+ [
+ "bbb";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFRoVHiwVAhUEFQYVBhw2AgAAAA0wAgAAAAIAAgAAAAIAACZuHBUCGTUEAAYZOAdib29sZWFuBGxpc3QEaXRlbRUCFgIWYBZmJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQIVBBIAAAgcAAAAAAAA8D8VABUeFSIsFQIVBBUGFQYcGAgAAAAAAADwPxgIAAAAAAAA8D8WACgIAAAAAAAA8D8YCAAAAAAAAPA/AAAADzgCAAAAAgACAAAAAgIBAgAmugMcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYCFsQBFswBJp4CJu4BHBgIAAAAAAAA8D8YCAAAAAAAAPA/FgAoCAAAAAAAAPA/GAgAAAAAAADwPwAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQMOP///xUAFR4VIiwVAhUEFQYVBhwYBDj///8YBDj///8WACgEOP///xgEOP///wAAAA84AgAAAAIAAgAAAAICAQIAJrYGHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWAhacARakASa6BSaSBRwYBDj///8YBDj///8WACgEOP///xgEOP///wAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUaFR4sFQIVBBUGFQYcNgIAAAANMAIAAAACAAIAAAACAAAm1AgcFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgIWYBZmJowIJu4HHDYCABksFQQVBBUCABUAFQQVAgAAABUCGdw1ABgGc2NoZW1hFQgANQAYB2Jvb2xlYW4VAhUGTDwAAAA1BBgEbGlzdBUCABUCJQIYBGl0ZW0lFkysEwgSAAAANQAYBm51bWJlchUCFQZMPAAAADUEGARsaXN0FQIAFQolAhgEaXRlbQA1ABgGc2lnbmVkFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtADUAGAh1bnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQQlAhgEaXRlbQAWAhkcGUwmbhwVAhk1BAAGGTgHYm9vbGVhbgRsaXN0BGl0ZW0VAhYCFmAWZiYmJggcNgIAGSwVBBUEFQIAFQAVBBUCAAAAJroDHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWAhbEARbMASaeAibuARwYCAAAAAAAAPA/GAgAAAAAAADwPxYAKAgAAAAAAADwPxgIAAAAAAAA8D8AGSwVBBUEFQIAFQAVBBUCAAAAJrYGHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWAhacARakASa6BSaSBRwYBDj///8YBDj///8WACgEOP///xgEOP///wAZLBUEFQQVAgAVABUEFQIAAAAm1AgcFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgIWYBZmJowIJu4HHDYCABksFQQVBBUCABUAFQQVAgAAABagBBYCJm4WvAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAABQAgAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "bbb";
+ #
+ ];
+ [
+ "ccc";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVHhUiLBUCFQQVBhUGHDYAKAQBAAAAGAQBAAAAAAAADzgCAAAAAgACAAAAAgIBAgAmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWAhaEARaMASYwJggcNgAoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPAAAAAAAAARAAAAAAAAAAEAVABUeFSIsFQQVBBUGFQYcGAgAAAAAAAAEQBgIAAAAAAAAAEAWACgIAAAAAAAABEAYCAAAAAAAAABAAAAADzgCAAAAAwICAAAABAIBAwImjgQcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYEFtQBFtwBJvICJrICHBgIAAAAAAAABEAYCAAAAAAAAABAFgAoCAAAAAAAAARAGAgAAAAAAAAAQAAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUaFR4sFQIVBBUGFQYcNgIAAAANMAIAAAACAAIAAAACAAAmzAYcFQIZNQQABhk4BnNpZ25lZARsaXN0BGl0ZW0VAhYCFmAWZiaEBibmBRw2AgAZLBUEFQQVAgAVABUEFQIAAAAVBBUgFSRMFQQVBBIAABA8SwAAAAAAAAD5AgAAAAAAABUAFR4VIiwVBBUEFQYVBhwYCPkCAAAAAAAAGAhLAAAAAAAAABYAKAj5AgAAAAAAABgISwAAAAAAAAAAAAAPOAIAAAADAgIAAAAEAgEDAiasCRwVBBk1BAAGGTgIdW5zaWduZWQEbGlzdARpdGVtFQIWBBbUARbcASaQCCbQBxwYCPkCAAAAAAAAGAhLAAAAAAAAABYAKAj5AgAAAAAAABgISwAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQIZ3DUAGAZzY2hlbWEVCAA1ABgHYm9vbGVhbhUCFQZMPAAAADUEGARsaXN0FQIAFQIlAhgEaXRlbSUWTKwTCBIAAAA1ABgGbnVtYmVyFQIVBkw8AAAANQQYBGxpc3QVAgAVCiUCGARpdGVtADUAGAZzaWduZWQVAhUGTDwAAAA1BBgEbGlzdBUCABUCJQIYBGl0ZW0ANQAYCHVuc2lnbmVkFQIVBkw8AAAANQQYBGxpc3QVAgAVBCUCGARpdGVtABYCGRwZTCaUARwVAhk1BAAGGTgHYm9vbGVhbgRsaXN0BGl0ZW0VAhYCFoQBFowBJjAmCBw2ACgEAQAAABgEAQAAAAAZLBUEFQQVAgAVABUEFQIAAAAmjgQcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYEFtQBFtwBJvICJrICHBgIAAAAAAAABEAYCAAAAAAAAABAFgAoCAAAAAAAAARAGAgAAAAAAAAAQAAZLBUEFQQVAgAVABUEFQIAAAAmzAYcFQIZNQQABhk4BnNpZ25lZARsaXN0BGl0ZW0VAhYCFmAWZiaEBibmBRw2AgAZLBUEFQQVAgAVABUEFQIAAAAmrAkcFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgQW1AEW3AEmkAgm0AccGAj5AgAAAAAAABgISwAAAAAAAAAWACgI+QIAAAAAAAAYCEsAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABaMBRYCJpQBFqoFFAAAKB9wYXJxdWV0LWNwcC1hcnJvdyB2ZXJzaW9uIDUuMC4wGUwcAAAcAAAcAAAcAAAAcAIAAFBBUjE="
+ ]
+ ]
+ ];
+ [
+ "ccc";
+ #
+ ];
+ [
+ "ddd";
+ [
+ [
+ "UEFSMRUEFQAVAkwVABUEEgAAABUAFRoVHiwVAhUEFQYVBhw2AgAAAA0wAgAAAAIAAgAAAAIAACZuHBUCGTUEAAYZOAdib29sZWFuBGxpc3QEaXRlbRUCFgIWYBZmJiYmCBw2AgAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQIVBBIAAAgcboYb8PkhCUAVABUeFSIsFQIVBBUGFQYcGAhuhhvw+SEJQBgIboYb8PkhCUAWACgIboYb8PkhCUAYCG6GG/D5IQlAAAAADzgCAAAAAgACAAAAAgIBAgAmugMcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYCFsQBFswBJp4CJu4BHBgIboYb8PkhCUAYCG6GG/D5IQlAFgAoCG6GG/D5IQlAGAhuhhvw+SEJQAAZLBUEFQQVAgAVABUEFQIAAAAVBBUIFQxMFQIVBBIAAAQM+////xUAFR4VIiwVAhUEFQYVBhwYBPv///8YBPv///8WACgE+////xgE+////wAAAA84AgAAAAIAAgAAAAICAQIAJrYGHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWAhacARakASa6BSaSBRwYBPv///8YBPv///8WACgE+////xgE+////wAZLBUEFQQVAgAVABUEFQIAAAAVBBUAFQJMFQAVBBIAAAAVABUaFR4sFQIVBBUGFQYcNgIAAAANMAIAAAACAAIAAAACAAAm1AgcFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgIWYBZmJowIJu4HHDYCABksFQQVBBUCABUAFQQVAgAAABUCGdw1ABgGc2NoZW1hFQgANQAYB2Jvb2xlYW4VAhUGTDwAAAA1BBgEbGlzdBUCABUCJQIYBGl0ZW0lFkysEwgSAAAANQAYBm51bWJlchUCFQZMPAAAADUEGARsaXN0FQIAFQolAhgEaXRlbQA1ABgGc2lnbmVkFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtADUAGAh1bnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQQlAhgEaXRlbQAWAhkcGUwmbhwVAhk1BAAGGTgHYm9vbGVhbgRsaXN0BGl0ZW0VAhYCFmAWZiYmJggcNgIAGSwVBBUEFQIAFQAVBBUCAAAAJroDHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWAhbEARbMASaeAibuARwYCG6GG/D5IQlAGAhuhhvw+SEJQBYAKAhuhhvw+SEJQBgIboYb8PkhCUAAGSwVBBUEFQIAFQAVBBUCAAAAJrYGHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWAhacARakASa6BSaSBRwYBPv///8YBPv///8WACgE+////xgE+////wAZLBUEFQQVAgAVABUEFQIAAAAm1AgcFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgIWYBZmJowIJu4HHDYCABksFQQVBBUCABUAFQQVAgAAABagBBYCJm4WvAQUAAAoH3BhcnF1ZXQtY3BwLWFycm93IHZlcnNpb24gNS4wLjAZTBwAABwAABwAABwAAABQAgAAUEFSMQ=="
+ ]
+ ]
+ ];
+ [
+ "ddd";
+ #
+ ];
+ [
+ "iii";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwBAAAAFQAVHhUiLBUCFQQVBhUGHDYAKAQBAAAAGAQBAAAAAAAADzgCAAAAAgACAAAAAgIBAgAmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWAhaEARaMASYwJggcNgAoBAEAAAAYBAEAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHM3MzMzM1HRAFQAVHhUiLBUCFQQVBhUGHBgIzczMzMzUdEAYCM3MzMzM1HRAFgAoCM3MzMzM1HRAGAjNzMzMzNR0QAAAAA84AgAAAAIAAgAAAAICAQIAJv4DHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWAhbEARbMASbiAiayAhwYCM3MzMzM1HRAGAjNzMzMzNR0QBYAKAjNzMzMzNR0QBgIzczMzMzUdEAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDAkDAAAVABUeFSIsFQIVBBUGFQYcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAAAAPOAIAAAACAAIAAAACAgECACb6BhwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgIWnAEWpAEm/gUm1gUcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHJYAAAAAAAAAFQAVHhUiLBUCFQQVBhUGHBgIlgAAAAAAAAAYCJYAAAAAAAAAFgAoCJYAAAAAAAAAGAiWAAAAAAAAAAAAAA84AgAAAAIAAgAAAAICAQIAJv4JHBUEGTUEAAYZOAh1bnNpZ25lZARsaXN0BGl0ZW0VAhYCFsQBFswBJuIIJrIIHBgIlgAAAAAAAAAYCJYAAAAAAAAAFgAoCJYAAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhncNQAYBnNjaGVtYRUIADUAGAdib29sZWFuFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtJRZMrBMIEgAAADUAGAZudW1iZXIVAhUGTDwAAAA1BBgEbGlzdBUCABUKJQIYBGl0ZW0ANQAYBnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQIlAhgEaXRlbQA1ABgIdW5zaWduZWQVAhUGTDwAAAA1BBgEbGlzdBUCABUEJQIYBGl0ZW0AFgIZHBlMJpQBHBUCGTUEAAYZOAdib29sZWFuBGxpc3QEaXRlbRUCFgIWhAEWjAEmMCYIHDYAKAQBAAAAGAQBAAAAABksFQQVBBUCABUAFQQVAgAAACb+AxwVChk1BAAGGTgGbnVtYmVyBGxpc3QEaXRlbRUCFgIWxAEWzAEm4gImsgIcGAjNzMzMzNR0QBgIzczMzMzUdEAWACgIzczMzMzUdEAYCM3MzMzM1HRAABksFQQVBBUCABUAFQQVAgAAACb6BhwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgIWnAEWpAEm/gUm1gUcGAQJAwAAGAQJAwAAFgAoBAkDAAAYBAkDAAAAGSwVBBUEFQIAFQAVBBUCAAAAJv4JHBUEGTUEAAYZOAh1bnNpZ25lZARsaXN0BGl0ZW0VAhYCFsQBFswBJuIIJrIIHBgIlgAAAAAAAAAYCJYAAAAAAAAAFgAoCJYAAAAAAAAAGAiWAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWqAUWAiaUARbIBRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAAIoCAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "iii";
+ #
+ ];
+ [
+ "kkk";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwAAAAAFQAVHhUiLBUEFQQVBhUGHDYAKAQAAAAAGAQAAAAAAAAADzgCAAAAAwICAAAABAIBBAAmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWBBaEARaMASYwJggcNgAoBAAAAAAYBAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPGZmZmZmZhrAuB6F61E4FsAVABUeFSIsFQQVBBUGFQYcGAi4HoXrUTgWwBgIZmZmZmZmGsAWACgIuB6F61E4FsAYCGZmZmZmZhrAAAAADzgCAAAAAwICAAAABAIBAwImjgQcFQoZNQQABhk4Bm51bWJlcgRsaXN0BGl0ZW0VAhYEFtQBFtwBJvICJrICHBgIuB6F61E4FsAYCGZmZmZmZhrAFgAoCLgehetROBbAGAhmZmZmZmYawAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgc8/////f///8VABUeFSIsFQQVBBUGFQYcGAT3////GATz////FgAoBPf///8YBPP///8AAAAPOAIAAAADAgIAAAAEAgEDAiaSBxwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgQWpAEWrAEmlgYm5gUcGAT3////GATz////FgAoBPf///8YBPP///8AGSwVBBUEFQIAFQAVBBUCAAAAFQQVIBUkTBUEFQQSAAAQPJYAAAAAAAAAjwMAAAAAAAAVABUeFSIsFQQVBBUGFQYcGAiPAwAAAAAAABgIlgAAAAAAAAAWACgIjwMAAAAAAAAYCJYAAAAAAAAAAAAADzgCAAAAAwICAAAABAIBAwImpgocFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgQW1AEW3AEmigkmyggcGAiPAwAAAAAAABgIlgAAAAAAAAAWACgIjwMAAAAAAAAYCJYAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABUCGdw1ABgGc2NoZW1hFQgANQAYB2Jvb2xlYW4VAhUGTDwAAAA1BBgEbGlzdBUCABUCJQIYBGl0ZW0lFkysEwgSAAAANQAYBm51bWJlchUCFQZMPAAAADUEGARsaXN0FQIAFQolAhgEaXRlbQA1ABgGc2lnbmVkFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtADUAGAh1bnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQQlAhgEaXRlbQAWAhkcGUwmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWBBaEARaMASYwJggcNgAoBAAAAAAYBAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJo4EHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWBBbUARbcASbyAiayAhwYCLgehetROBbAGAhmZmZmZmYawBYAKAi4HoXrUTgWwBgIZmZmZmZmGsAAGSwVBBUEFQIAFQAVBBUCAAAAJpIHHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWBBakARasASaWBibmBRwYBPf///8YBPP///8WACgE9////xgE8////wAZLBUEFQQVAgAVABUEFQIAAAAmpgocFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFgQW1AEW3AEmigkmyggcGAiPAwAAAAAAABgIlgAAAAAAAAAWACgIjwMAAAAAAAAYCJYAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABbQBRYCJpQBFvAFFAAAKB9wYXJxdWV0LWNwcC1hcnJvdyB2ZXJzaW9uIDUuMC4wGUwcAAAcAAAcAAAcAAAAigIAAFBBUjE="
+ ]
+ ]
+ ];
+ [
+ "kkk";
+ #
+ ];
+ [
+ "qqq";
+ [
+ [
+ "UEFSMRUEFQgVDEwVAhUEEgAABAwAAAAAFQAVHhUiLBUCFQQVBhUGHDYAKAQAAAAAGAQAAAAAAAAADzgCAAAAAgACAAAAAgIBAgAmlAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWAhaEARaMASYwJggcNgAoBAAAAAAYBAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHAAAAAAAADHAFQAVHhUiLBUCFQQVBhUGHBgIAAAAAAAAMcAYCAAAAAAAADHAFgAoCAAAAAAAADHAGAgAAAAAAAAxwAAAAA84AgAAAAIAAgAAAAICAQIAJv4DHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWAhbEARbMASbiAiayAhwYCAAAAAAAADHAGAgAAAAAAAAxwBYAKAgAAAAAAAAxwBgIAAAAAAAAMcAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVCBUMTBUCFQQSAAAEDA8AAAAVABUeFSIsFQIVBBUGFQYcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAAAAPOAIAAAACAAIAAAACAgECACb6BhwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgIWnAEWpAEm/gUm1gUcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAGSwVBBUEFQIAFQAVBBUCAAAAFQQVEBUUTBUCFQQSAAAIHMgAAAAAAAAAFQAVHhUiLBUCFQQVBhUGHBgIyAAAAAAAAAAYCMgAAAAAAAAAFgAoCMgAAAAAAAAAGAjIAAAAAAAAAAAAAA84AgAAAAIAAgAAAAICAQIAJv4JHBUEGTUEAAYZOAh1bnNpZ25lZARsaXN0BGl0ZW0VAhYCFsQBFswBJuIIJrIIHBgIyAAAAAAAAAAYCMgAAAAAAAAAFgAoCMgAAAAAAAAAGAjIAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVAhncNQAYBnNjaGVtYRUIADUAGAdib29sZWFuFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtJRZMrBMIEgAAADUAGAZudW1iZXIVAhUGTDwAAAA1BBgEbGlzdBUCABUKJQIYBGl0ZW0ANQAYBnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQIlAhgEaXRlbQA1ABgIdW5zaWduZWQVAhUGTDwAAAA1BBgEbGlzdBUCABUEJQIYBGl0ZW0AFgIZHBlMJpQBHBUCGTUEAAYZOAdib29sZWFuBGxpc3QEaXRlbRUCFgIWhAEWjAEmMCYIHDYAKAQAAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAACb+AxwVChk1BAAGGTgGbnVtYmVyBGxpc3QEaXRlbRUCFgIWxAEWzAEm4gImsgIcGAgAAAAAAAAxwBgIAAAAAAAAMcAWACgIAAAAAAAAMcAYCAAAAAAAADHAABksFQQVBBUCABUAFQQVAgAAACb6BhwVAhk1BAAGGTgGc2lnbmVkBGxpc3QEaXRlbRUCFgIWnAEWpAEm/gUm1gUcGAQPAAAAGAQPAAAAFgAoBA8AAAAYBA8AAAAAGSwVBBUEFQIAFQAVBBUCAAAAJv4JHBUEGTUEAAYZOAh1bnNpZ25lZARsaXN0BGl0ZW0VAhYCFsQBFswBJuIIJrIIHBgIyAAAAAAAAAAYCMgAAAAAAAAAFgAoCMgAAAAAAAAAGAjIAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWqAUWAiaUARbIBRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlMHAAAHAAAHAAAHAAAAIoCAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ "qqq";
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquet_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquet_/results.txt
new file mode 100644
index 0000000000..6662cdb27e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeParquet_/results.txt
@@ -0,0 +1,113 @@
+[
+ {
+ "Label" = "Simple";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "UEFSMRUEFRAVFEwVBBUEEgAACBwBAAAAAAAAABUAFRQVGCwVFBUEFQYVBhw2CCgEAQAAABgEAAAAAAAAAAokAwAAAAV1AgEDOCaSARwVAhk1BAAGGRgHYm9vbGVhbhUCFhQWggEWigEmOCYIHDYIKAQBAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFaABFXpMFRQVBBIAAFAAAA0BHG6GG/D5IQlACQ8kBEDNzMzMzEw3wAUIDNR0QGYFAQQawAkgADENCATwPwkQJABAuB6F61E4FsAVABUUFRgsFRQVBBUGFQYcGAjNzMzMzNR0QBgIzczMzMxMN8AWACgIzczMzMzUdEAYCM3MzMzMTDfAAAAACiQEBRAyVHaYAAAAJsYEHBUKGTUEAAYZGAZudW1iZXIVAhYUFswCFqoCJrQDJpwCHBgIzczMzMzUdEAYCM3MzMzMTDfAFgAoCM3MzMzM1HRAGAjNzMzMzEw3wAAZLBUEFQQVAgAVABUEFQIAAAAVBBVAFURMFRAVBBIAACB8ZAAAAPv///9m/f//CQMAAPP///8PAAAAOP////f///8VABUYFRwsFRQVBBUGFQYcGAQJAwAAGARm/f//FgQoBAkDAAAYBGb9//8AAAAMLAMAAAAF+wIDA4jG+ibgBxwVAhk1BAAGGRgGc2lnbmVkFQIWFBbOARbWASbqBiaKBhwYBAkDAAAYBGb9//8WBCgECQMAABgEZv3//wAZLBUEFQQVAgAVABUEFQIAAAAVBBVgFUhMFQwVBBIAADAEFwAJAQBLCQcEAJYNCADIDQg8+QIAAAAAAACPAwAAAAAAABUAFRgVHCwVFBUEFQYVBhwYCI8DAAAAAAAAGAgXAAAAAAAAABYEKAiPAwAAAAAAABgIFwAAAAAAAAAAAAAMLAMAAAAFfQMDA4iksSb+ChwVBBk1BAAGGRgIdW5zaWduZWQVAhYUFo4CFvoBJugJJoQJHBgIjwMAAAAAAAAYCBcAAAAAAAAAFgQoCI8DAAAAAAAAGAgXAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAVBBV+FXZMFRIVBBIAAD8YAwAAAGFhYQEHCGRkZAEHCGFiYwEHCGlpaQEHCHp6egEHCHFxcQEHQGJiYgMAAABjY2MDAAAAa2trFQAVFBUYLBUUFQQVBhUGHDYAKAN6enoYA2FhYQAAAAokBAUQAkNlhwAAACauDhwVDBk1BAAGGRgDdXRmFQIWFBbsARboASbYDSbGDBw2ACgDenp6GANhYWEAGSwVBBUEFQIAFQAVBBUCAAAAFQIZbDUAGAZzY2hlbWEVCgAVAiUCGAdib29sZWFuJRZMrBMIEgAAABUKJQAYBm51bWJlcgAVAiUCGAZzaWduZWQAFQQlAhgIdW5zaWduZWQAFQwlABgDdXRmABYUGRwZXCaSARwVAhk1BAAGGRgHYm9vbGVhbhUCFhQWggEWigEmOCYIHDYIKAQBAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAACbGBBwVChk1BAAGGRgGbnVtYmVyFQIWFBbMAhaqAia0AyacAhwYCM3MzMzM1HRAGAjNzMzMzEw3wBYAKAjNzMzMzNR0QBgIzczMzMxMN8AAGSwVBBUEFQIAFQAVBBUCAAAAJuAHHBUCGTUEAAYZGAZzaWduZWQVAhYUFs4BFtYBJuoGJooGHBgECQMAABgEZv3//xYEKAQJAwAAGARm/f//ABksFQQVBBUCABUAFQQVAgAAACb+ChwVBBk1BAAGGRgIdW5zaWduZWQVAhYUFo4CFvoBJugJJoQJHBgIjwMAAAAAAAAYCBcAAAAAAAAAFgQoCI8DAAAAAAAAGAgXAAAAAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAmrg4cFQwZNQQABhkYA3V0ZhUCFhQW7AEW6AEm2A0mxgwcNgAoA3p6ehgDYWFhABksFQQVBBUCABUAFQQVAgAAABaWCRYUJpIBFuwIFAAAKB9wYXJxdWV0LWNwcC1hcnJvdyB2ZXJzaW9uIDUuMC4wGVwcAAAcAAAcAAAcAAAcAAAAQAIAAFBBUjE="
+ ]
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Tuples";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "UEFSMRUEFWAVSEwVDBUEEgAAMAQXAAkBAEsJBwQAlg0IAMgNCDz5AgAAAAAAAI8DAAAAAAAAFQAVHBUgLBUUFQQVBhUGHBgIjwMAAAAAAAAYCBcAAAAAAAAAFgQoCI8DAAAAAAAAGAgXAAAAAAAAAAAAAA40BQAAAAWmagoAAwOIpLEmhgIcFQQZNQQABhkoBG1hbnkGbWFueS4wFQIWFBaSAhb+ASZsJggcGAiPAwAAAAAAABgIFwAAAAAAAAAWBCgIjwMAAAAAAAAYCBcAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFUAVREwVEBUEEgAAIHxkAAAA+////2b9//8JAwAA8////w8AAAA4////9////xUAFRwVICwVFBUEFQYVBhwYBAkDAAAYBGb9//8WBCgECQMAABgEZv3//wAAAA40BQAAAAWaqgkAAwOIxvomqgUcFQIZNQQABhkoBG1hbnkGbWFueS4xFQIWFBbSARbaASawBCbQAxwYBAkDAAAYBGb9//8WBCgECQMAABgEZv3//wAZLBUEFQQVAgAVABUEFQIAAAAVBBV+FXZMFRIVBBIAAD8YAwAAAGFhYQEHCGRkZAEHCGFiYwEHCGlpaQEHCHp6egEHCHFxcQEHQGJiYgMAAABjY2MDAAAAa2trFQAVIBUkLBUUFQQVBhUGHDYAKAN6enoYA2FhYQAAABA8AgAAABQCBAUQAkNlhwAAACbMCBwVDBk1BAAGGSgEbWFueQZtYW55LjIVAhYUFvgBFvQBJuoHJtgGHDYAKAN6enoYA2FhYQAZLBUEFQQVAgAVABUEFQIAAAAVBBWgARV6TBUUFQQSAABQAAANARxuhhvw+SEJQAkPJARAzczMzMxMN8AFCAzUdEBmBQEEGsAJIAAxDQgE8D8JECQAQLgehetROBbAFQAVIBUkLBUUFQQVBhUGHBgIzczMzMzUdEAYCM3MzMzMTDfAFgAoCM3MzMzM1HRAGAjNzMzMzEw3wAAAABA8AgAAABQCBAUQMlR2mAAAACaUDBwVChk1BAAGGSgEbWFueQZtYW55LjMVAhYUFtgCFrYCJvYKJt4JHBgIzczMzMzUdEAYCM3MzMzMTDfAFgAoCM3MzMzM1HRAGAjNzMzMzEw3wAAZLBUEFQQVAgAVABUEFQIAAAAVBBUQFRRMFQQVBBIAAAgcAQAAAAAAAAAVABUYFRwsFRQVBBUGFQYcNggoBAEAAAAYBAAAAAAAAAAMLAUAAAAFZmoJAAEDOCbwDhwVAhk1BAAGGSgEbWFueQZtYW55LjQVAhYUFoYBFo4BJpIOJuINHDYIKAQBAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUCGXw1ABgGc2NoZW1hFQIANQIYBG1hbnkVCgAVBCUCGAZtYW55LjAAFQIlAhgGbWFueS4xABUMJQIYBm1hbnkuMgAVCiUCGAZtYW55LjMAFQIlAhgGbWFueS40JRZMrBMIEgAAABYUGRwZXCaGAhwVBBk1BAAGGSgEbWFueQZtYW55LjAVAhYUFpICFv4BJmwmCBwYCI8DAAAAAAAAGAgXAAAAAAAAABYEKAiPAwAAAAAAABgIFwAAAAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJqoFHBUCGTUEAAYZKARtYW55Bm1hbnkuMRUCFhQW0gEW2gEmsAQm0AMcGAQJAwAAGARm/f//FgQoBAkDAAAYBGb9//8AGSwVBBUEFQIAFQAVBBUCAAAAJswIHBUMGTUEAAYZKARtYW55Bm1hbnkuMhUCFhQW+AEW9AEm6gcm2AYcNgAoA3p6ehgDYWFhABksFQQVBBUCABUAFQQVAgAAACaUDBwVChk1BAAGGSgEbWFueQZtYW55LjMVAhYUFtgCFrYCJvYKJt4JHBgIzczMzMzUdEAYCM3MzMzMTDfAFgAoCM3MzMzM1HRAGAjNzMzMzEw3wAAZLBUEFQQVAgAVABUEFQIAAAAm8A4cFQIZNQQABhkoBG1hbnkGbWFueS40FQIWFBaGARaOASaSDibiDRw2CCgEAQAAABgEAAAAAAAZLBUEFQQVAgAVABUEFQIAAAAWugkWFCaGAhaQCRQAACgfcGFycXVldC1jcHAtYXJyb3cgdmVyc2lvbiA1LjAuMBlcHAAAHAAAHAAAHAAAHAAAAGQCAABQQVIx"
+ ]
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Lists";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "UEFSMRUEFRAVFEwVBBUEEgAACBwBAAAAAAAAABUAFR4VIiwVDBUEFQYVBhw2ACgEAQAAABgEAAAAAAAAAA84AgAAAAM+AgAAAAwCAQM4JpwBHBUCGTUEAAYZOAdib29sZWFuBGxpc3QEaXRlbRUCFgwWjAEWlAEmOCYIHDYAKAQBAAAAGAQAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFaABFXpMFRQVBBIAAFAAAA0BHG6GG/D5IQlACQ8kBEDNzMzMzEw3wAUIDNR0QGYFAQQawAkgADENCATwPwkQJABAuB6F61E4FsAVABUuFTIsFRQVBBUGFQYcGAjNzMzMzNR0QBgIzczMzMxMN8AWACgIzczMzMzUdEAYCM3MzMzMTDfAAAAAF1gDAAAABf4DAgAAABQCBAUQMlR2mAAAACb+BBwVChk1BAAGGTgGbnVtYmVyBGxpc3QEaXRlbRUCFhQW5gIWxAIm0gMmugIcGAjNzMzMzNR0QBgIzczMzMxMN8AWACgIzczMzMzUdEAYCM3MzMzMTDfAABksFQQVBBUCABUAFQQVAgAAABUEFUAVREwVEBUEEgAAIHxkAAAA+////2b9//8JAwAA8////w8AAAA4////9////xUAFSIVJiwVEBUEFQYVBhwYBAkDAAAYBGb9//8WACgECQMAABgEZv3//wAAABFAAgAAAAP+AgAAABACAwOIxvomtggcFQIZNQQABhk4BnNpZ25lZARsaXN0BGl0ZW0VAhYQFtgBFuABJrYHJtYGHBgECQMAABgEZv3//xYAKAQJAwAAGARm/f//ABksFQQVBBUCABUAFQQVAgAAABUEFWAVSEwVDBUEEgAAMAQXAAkBAEsJBwQAlg0IAMgNCDz5AgAAAAAAAI8DAAAAAAAAFQAVIhUmLBUQFQQVBhUGHBgIjwMAAAAAAAAYCBcAAAAAAAAAFgAoCI8DAAAAAAAAGAgXAAAAAAAAAAAAABFAAgAAAAP+AgAAABACAwOIpLEm8gscFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFhAWmAIWhAIm0gom7gkcGAiPAwAAAAAAABgIFwAAAAAAAAAWACgIjwMAAAAAAAAYCBcAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAABUEFX4VdkwVEhUEEgAAPxgDAAAAYWFhAQcIZGRkAQcIYWJjAQcIaWlpAQcIenp6AQcIcXFxAQdAYmJiAwAAAGNjYwMAAABra2sVABUuFTIsFRQVBBUGFQYcNgAoA3p6ehgDYWFhAAAAF1gDAAAABf4DAgAAABQCBAUQAkNlhwAAACbQDxwVDBk1BAAGGTgDdXRmBGxpc3QEaXRlbRUCFhQWhgIWggIm4A4mzg0cNgAoA3p6ehgDYWFhABksFQQVBBUCABUAFQQVAgAAABUCGfwQNQAYBnNjaGVtYRUKADUAGAdib29sZWFuFQIVBkw8AAAANQQYBGxpc3QVAgAVAiUCGARpdGVtJRZMrBMIEgAAADUAGAZudW1iZXIVAhUGTDwAAAA1BBgEbGlzdBUCABUKJQIYBGl0ZW0ANQAYBnNpZ25lZBUCFQZMPAAAADUEGARsaXN0FQIAFQIlAhgEaXRlbQA1ABgIdW5zaWduZWQVAhUGTDwAAAA1BBgEbGlzdBUCABUEJQIYBGl0ZW0ANQAYA3V0ZhUCFQZMPAAAADUEGARsaXN0FQIAFQwlAhgEaXRlbQAWAhkcGVwmnAEcFQIZNQQABhk4B2Jvb2xlYW4EbGlzdARpdGVtFQIWDBaMARaUASY4JggcNgAoBAEAAAAYBAAAAAAAGSwVBBUEFQIAFQAVBBUCAAAAJv4EHBUKGTUEAAYZOAZudW1iZXIEbGlzdARpdGVtFQIWFBbmAhbEAibSAya6AhwYCM3MzMzM1HRAGAjNzMzMzEw3wBYAKAjNzMzMzNR0QBgIzczMzMxMN8AAGSwVBBUEFQIAFQAVBBUCAAAAJrYIHBUCGTUEAAYZOAZzaWduZWQEbGlzdARpdGVtFQIWEBbYARbgASa2BybWBhwYBAkDAAAYBGb9//8WACgECQMAABgEZv3//wAZLBUEFQQVAgAVABUEFQIAAAAm8gscFQQZNQQABhk4CHVuc2lnbmVkBGxpc3QEaXRlbRUCFhAWmAIWhAIm0gom7gkcGAiPAwAAAAAAABgIFwAAAAAAAAAWACgIjwMAAAAAAAAYCBcAAAAAAAAAABksFQQVBBUCABUAFQQVAgAAACbQDxwVDBk1BAAGGTgDdXRmBGxpc3QEaXRlbRUCFhQWhgIWggIm4A4mzg0cNgAoA3p6ehgDYWFhABksFQQVBBUCABUAFQQVAgAAABboCRYCJpwBFr4JFAAAKB9wYXJxdWV0LWNwcC1hcnJvdyB2ZXJzaW9uIDUuMC4wGVwcAAAcAAAcAAAcAAAcAAAA/wIAAFBBUjE="
+ ]
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeTSVWithNames_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeTSVWithNames_/results.txt
new file mode 100644
index 0000000000..b3a8e88e1c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_SerializeTSVWithNames_/results.txt
@@ -0,0 +1,107 @@
+[
+ {
+ "Label" = "Simple";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "boolean\tnumber\tsigned\tunsigned\tutf\n1\t0\t100\t23\taaa\n\\N\t3.14159\t-5\t\\N\tddd\n1\t2.5\t\\N\t75\tabc\n\\N\t-23.3\t-666\t150\taaa\n1\t333.3\t777\t150\tiii\n0\t-6.6\t-13\t150\tzzz\n0\t-17\t15\t200\tqqq\n\\N\t1\t-200\t\\N\tbbb\n\\N\t2\t\\N\t761\tccc\n0\t-5.555\t-9\t911\tkkk\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Tuples";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "many\n(23,100,'aaa',0,1)\n(NULL,-5,'ddd',3.14159,NULL)\n(75,NULL,'abc',2.5,1)\n(150,-666,'aaa',-23.3,NULL)\n(150,777,'iii',333.3,1)\n(150,-13,'zzz',-6.6,0)\n(200,15,'qqq',-17,0)\n(NULL,-200,'bbb',1,NULL)\n(761,NULL,'ccc',2,NULL)\n(911,-9,'kkk',-5.555,0)\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Label" = "Lists";
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "out";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "boolean\tnumber\tsigned\tunsigned\tutf\n[1,1,1,0,0,0]\t[0,3.14159,2.5,-23.3,333.3,-6.6,-17,1,2,-5.555]\t[100,-5,-666,777,-13,15,-200,-9]\t[23,75,150,150,150,200,761,911]\t['aaa','ddd','abc','aaa','iii','zzz','qqq','bbb','ccc','kkk']\n"
+ ]
+ ];
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_YqlType_/results.txt b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_YqlType_/results.txt
new file mode 100644
index 0000000000..b861d5dfc2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/canondata/test.test_YqlType_/results.txt
@@ -0,0 +1,460 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column17";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column18";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column19";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column20";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column21";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Utf8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "Int8";
+ "Int8"
+ ];
+ [
+ "Uint8";
+ "Uint8"
+ ];
+ [
+ "Int16";
+ "Int16"
+ ];
+ [
+ "Uint16";
+ "Uint16"
+ ];
+ [
+ "Int32";
+ "Int32"
+ ];
+ [
+ "Uint32";
+ "Uint32"
+ ];
+ [
+ "Int64";
+ "Int64"
+ ];
+ [
+ "Uint64";
+ "Uint64"
+ ];
+ [
+ "Float";
+ "Float"
+ ];
+ [
+ "Double";
+ "Double"
+ ];
+ [
+ "String";
+ "String"
+ ];
+ [
+ "String";
+ "String"
+ ];
+ [
+ "TzDate";
+ "TzDate"
+ ];
+ [
+ "TzDatetime";
+ "TzDatetime"
+ ];
+ [
+ "Uuid";
+ "Uuid"
+ ];
+ [
+ "Optional<Int8>";
+ "Optional<Int8>"
+ ];
+ [
+ "Null";
+ "Null"
+ ];
+ [
+ "List<Int8>";
+ "List<Int8>"
+ ];
+ [
+ "EmptyList";
+ "EmptyList"
+ ];
+ [
+ "Tuple<Int32,String>";
+ "Tuple<Int32,String>"
+ ];
+ [
+ "Enum<'a'>";
+ "Enum<'a'>"
+ ];
+ [
+ "Enum<'b'>";
+ "Enum<'b'>"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.in
new file mode 100644
index 0000000000..ccc0a6fa8b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.in
@@ -0,0 +1,2 @@
+{"key"="Single";"subkey"="3";"value"="\x01\x00\x02\xFF\xFF\xFF\xFF\x00\x04\x02\x0C\x72\x65\x6C\x65\x61\x73\x65\x5F\x64\x61\x74\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x7E\x33\x00\x00\x00\x00\x00\x00\x26\x3F\x00\x00\x00\x00\x00\x00\x09\x73\x65\x72\x69\x65\x73\x5F\x69\x64\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0B\x73\x65\x72\x69\x65\x73\x5F\x69\x6E\x66\x6F\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\xB9\x01\x54\x68\x65\x20\x49\x54\x20\x43\x72\x6F\x77\x64\x20\x69\x73\x20\x61\x20\x42\x72\x69\x74\x69\x73\x68\x20\x73\x69\x74\x63\x6F\x6D\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x43\x68\x61\x6E\x6E\x65\x6C\x20\x34\x2C\x20\x77\x72\x69\x74\x74\x65\x6E\x20\x62\x79\x20\x47\x72\x61\x68\x61\x6D\x20\x4C\x69\x6E\x65\x68\x61\x6E\x2C\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x41\x73\x68\x20\x41\x74\x61\x6C\x6C\x61\x20\x61\x6E\x64\x20\x73\x74\x61\x72\x72\x69\x6E\x67\x20\x43\x68\x72\x69\x73\x20\x4F\x27\x44\x6F\x77\x64\x2C\x20\x52\x69\x63\x68\x61\x72\x64\x20\x41\x79\x6F\x61\x64\x65\x2C\x20\x4B\x61\x74\x68\x65\x72\x69\x6E\x65\x20\x50\x61\x72\x6B\x69\x6E\x73\x6F\x6E\x2C\x20\x61\x6E\x64\x20\x4D\x61\x74\x74\x20\x42\x65\x72\x72\x79\x2E\xC5\x01\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x20\x69\x73\x20\x61\x6E\x20\x41\x6D\x65\x72\x69\x63\x61\x6E\x20\x63\x6F\x6D\x65\x64\x79\x20\x74\x65\x6C\x65\x76\x69\x73\x69\x6F\x6E\x20\x73\x65\x72\x69\x65\x73\x20\x63\x72\x65\x61\x74\x65\x64\x20\x62\x79\x20\x4D\x69\x6B\x65\x20\x4A\x75\x64\x67\x65\x2C\x20\x4A\x6F\x68\x6E\x20\x41\x6C\x74\x73\x63\x68\x75\x6C\x65\x72\x20\x61\x6E\x64\x20\x44\x61\x76\x65\x20\x4B\x72\x69\x6E\x73\x6B\x79\x2E\x20\x54\x68\x65\x20\x73\x65\x72\x69\x65\x73\x20\x66\x6F\x63\x75\x73\x65\x73\x20\x6F\x6E\x20\x66\x69\x76\x65\x20\x79\x6F\x75\x6E\x67\x20\x6D\x65\x6E\x20\x77\x68\x6F\x20\x66\x6F\x75\x6E\x64\x65\x64\x20\x61\x20\x73\x74\x61\x72\x74\x75\x70\x20\x63\x6F\x6D\x70\x61\x6E\x79\x20\x69\x6E\x20\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x2E\x05\x74\x69\x74\x6C\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\x08\x49\x54\x20\x43\x72\x6F\x77\x64\x0E\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79"};
+{"key"="Double";"subkey"="4";"value"="\x01\x00\x02\xFF\xFF\xFF\xFF\x00\x04\x02\x0C\x72\x65\x6C\x65\x61\x73\x65\x5F\x64\x61\x74\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x7E\x33\x00\x00\x00\x00\x00\x00\x26\x3F\x00\x00\x00\x00\x00\x00\x09\x73\x65\x72\x69\x65\x73\x5F\x69\x64\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0B\x73\x65\x72\x69\x65\x73\x5F\x69\x6E\x66\x6F\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\xB9\x01\x54\x68\x65\x20\x49\x54\x20\x43\x72\x6F\x77\x64\x20\x69\x73\x20\x61\x20\x42\x72\x69\x74\x69\x73\x68\x20\x73\x69\x74\x63\x6F\x6D\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x43\x68\x61\x6E\x6E\x65\x6C\x20\x34\x2C\x20\x77\x72\x69\x74\x74\x65\x6E\x20\x62\x79\x20\x47\x72\x61\x68\x61\x6D\x20\x4C\x69\x6E\x65\x68\x61\x6E\x2C\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x41\x73\x68\x20\x41\x74\x61\x6C\x6C\x61\x20\x61\x6E\x64\x20\x73\x74\x61\x72\x72\x69\x6E\x67\x20\x43\x68\x72\x69\x73\x20\x4F\x27\x44\x6F\x77\x64\x2C\x20\x52\x69\x63\x68\x61\x72\x64\x20\x41\x79\x6F\x61\x64\x65\x2C\x20\x4B\x61\x74\x68\x65\x72\x69\x6E\x65\x20\x50\x61\x72\x6B\x69\x6E\x73\x6F\x6E\x2C\x20\x61\x6E\x64\x20\x4D\x61\x74\x74\x20\x42\x65\x72\x72\x79\x2E\xC5\x01\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x20\x69\x73\x20\x61\x6E\x20\x41\x6D\x65\x72\x69\x63\x61\x6E\x20\x63\x6F\x6D\x65\x64\x79\x20\x74\x65\x6C\x65\x76\x69\x73\x69\x6F\x6E\x20\x73\x65\x72\x69\x65\x73\x20\x63\x72\x65\x61\x74\x65\x64\x20\x62\x79\x20\x4D\x69\x6B\x65\x20\x4A\x75\x64\x67\x65\x2C\x20\x4A\x6F\x68\x6E\x20\x41\x6C\x74\x73\x63\x68\x75\x6C\x65\x72\x20\x61\x6E\x64\x20\x44\x61\x76\x65\x20\x4B\x72\x69\x6E\x73\x6B\x79\x2E\x20\x54\x68\x65\x20\x73\x65\x72\x69\x65\x73\x20\x66\x6F\x63\x75\x73\x65\x73\x20\x6F\x6E\x20\x66\x69\x76\x65\x20\x79\x6F\x75\x6E\x67\x20\x6D\x65\x6E\x20\x77\x68\x6F\x20\x66\x6F\x75\x6E\x64\x65\x64\x20\x61\x20\x73\x74\x61\x72\x74\x75\x70\x20\x63\x6F\x6D\x70\x61\x6E\x79\x20\x69\x6E\x20\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x2E\x05\x74\x69\x74\x6C\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\x08\x49\x54\x20\x43\x72\x6F\x77\x64\x0E\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x01\x00\x02\xFF\xFF\xFF\xFF\x00\x04\x02\x0C\x72\x65\x6C\x65\x61\x73\x65\x5F\x64\x61\x74\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x7E\x33\x00\x00\x00\x00\x00\x00\x26\x3F\x00\x00\x00\x00\x00\x00\x09\x73\x65\x72\x69\x65\x73\x5F\x69\x64\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x55\x49\x6E\x74\x36\x34\x29\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0B\x73\x65\x72\x69\x65\x73\x5F\x69\x6E\x66\x6F\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\xB9\x01\x54\x68\x65\x20\x49\x54\x20\x43\x72\x6F\x77\x64\x20\x69\x73\x20\x61\x20\x42\x72\x69\x74\x69\x73\x68\x20\x73\x69\x74\x63\x6F\x6D\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x43\x68\x61\x6E\x6E\x65\x6C\x20\x34\x2C\x20\x77\x72\x69\x74\x74\x65\x6E\x20\x62\x79\x20\x47\x72\x61\x68\x61\x6D\x20\x4C\x69\x6E\x65\x68\x61\x6E\x2C\x20\x70\x72\x6F\x64\x75\x63\x65\x64\x20\x62\x79\x20\x41\x73\x68\x20\x41\x74\x61\x6C\x6C\x61\x20\x61\x6E\x64\x20\x73\x74\x61\x72\x72\x69\x6E\x67\x20\x43\x68\x72\x69\x73\x20\x4F\x27\x44\x6F\x77\x64\x2C\x20\x52\x69\x63\x68\x61\x72\x64\x20\x41\x79\x6F\x61\x64\x65\x2C\x20\x4B\x61\x74\x68\x65\x72\x69\x6E\x65\x20\x50\x61\x72\x6B\x69\x6E\x73\x6F\x6E\x2C\x20\x61\x6E\x64\x20\x4D\x61\x74\x74\x20\x42\x65\x72\x72\x79\x2E\xC5\x01\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x20\x69\x73\x20\x61\x6E\x20\x41\x6D\x65\x72\x69\x63\x61\x6E\x20\x63\x6F\x6D\x65\x64\x79\x20\x74\x65\x6C\x65\x76\x69\x73\x69\x6F\x6E\x20\x73\x65\x72\x69\x65\x73\x20\x63\x72\x65\x61\x74\x65\x64\x20\x62\x79\x20\x4D\x69\x6B\x65\x20\x4A\x75\x64\x67\x65\x2C\x20\x4A\x6F\x68\x6E\x20\x41\x6C\x74\x73\x63\x68\x75\x6C\x65\x72\x20\x61\x6E\x64\x20\x44\x61\x76\x65\x20\x4B\x72\x69\x6E\x73\x6B\x79\x2E\x20\x54\x68\x65\x20\x73\x65\x72\x69\x65\x73\x20\x66\x6F\x63\x75\x73\x65\x73\x20\x6F\x6E\x20\x66\x69\x76\x65\x20\x79\x6F\x75\x6E\x67\x20\x6D\x65\x6E\x20\x77\x68\x6F\x20\x66\x6F\x75\x6E\x64\x65\x64\x20\x61\x20\x73\x74\x61\x72\x74\x75\x70\x20\x63\x6F\x6D\x70\x61\x6E\x79\x20\x69\x6E\x20\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79\x2E\x05\x74\x69\x74\x6C\x65\x10\x4E\x75\x6C\x6C\x61\x62\x6C\x65\x28\x53\x74\x72\x69\x6E\x67\x29\x00\x00\x08\x49\x54\x20\x43\x72\x6F\x77\x64\x0E\x53\x69\x6C\x69\x63\x6F\x6E\x20\x56\x61\x6C\x6C\x65\x79"}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.sql
new file mode 100644
index 0000000000..6e2a292b62
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/ParseFromYdb.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $parse = YQL::Udf(AsAtom("ClickHouseClient.ParseFromYdb"), Void(), Struct<'release_date':Uint64?,'series_id':Uint64?,'series_info':String?,'title':Utf8?>);
+ return $parse(YQL::Map($input, ($i)->($i.value)) )
+};
+
+select * from ( process Input using $callable(TableRows()));
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in
new file mode 100644
index 0000000000..97ea9221aa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in
@@ -0,0 +1,11 @@
+{"unsigned"=023u;"signed"=100;"utf"="aaa";"number"=0.;"boolean"=%true};
+{"unsigned"=#;"signed"=-5;"utf"="ddd";"number"=3.14159;"boolean"=#};
+{"unsigned"=075u;"signed"=#;"utf"="abc";"number"=2.5;"boolean"=%true};
+{"unsigned"=150u;"signed"=-666;"utf"="aaa";"number"=-23.3;"boolean"=#};
+{"unsigned"=150u;"signed"=777;"utf"="iii";"number"=333.3;"boolean"=%true};
+{"unsigned"=150u;"signed"=-13;"utf"="zzz";"number"=-6.6;"boolean"=%false};
+{"unsigned"=200u;"signed"=15;"utf"="qqq";"number"=-17.;"boolean"=%false};
+{"unsigned"=#;"signed"=-200;"utf"="bbb";"number"=1.;"boolean"=#};
+{"unsigned"=761u;"signed"=#;"utf"="ccc";"number"=2.;"boolean"=#};
+{"unsigned"=911u;"signed"=-9;"utf"="kkk";"number"=-5.555;"boolean"=%false};
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in.attr b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in.attr
new file mode 100644
index 0000000000..21e3f1cb98
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.in.attr
@@ -0,0 +1,10 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["unsigned";["OptionalType";["DataType";"Uint32"]]];
+ ["signed";["OptionalType";["DataType";"Int32"]]];
+ ["utf";["DataType";"Utf8"]];
+ ["number";["DataType";"Double"]];
+ ["boolean";["OptionalType";["DataType";"Bool"]]]
+ ]];
+}}
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.sql
new file mode 100644
index 0000000000..0ce8339ea8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeCSVWithNames.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $serialize = YQL::Udf(AsAtom("ClickHouseClient.SerializeFormat"), Void(), TupleType(TupleType(TypeOf($input))), AsAtom("csv_with_names"));
+ return Yql::Map($serialize($input), ($out)->(<|out:$out|>));
+};
+
+process Input
+using $callable(TableRows())
+into result `Simple`;
+
+process (select (unsigned, signed, utf, number, boolean) as many from Input)
+using $callable(TableRows())
+into result `Tuples`;
+
+process (select AGG_LIST(unsigned) as unsigned, AGG_LIST(signed) as signed, AGG_LIST(utf) as utf, AGG_LIST(number) as number, AGG_LIST(boolean) as boolean from Input)
+using $callable(TableRows())
+into result `Lists`;
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in
new file mode 100644
index 0000000000..97ea9221aa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in
@@ -0,0 +1,11 @@
+{"unsigned"=023u;"signed"=100;"utf"="aaa";"number"=0.;"boolean"=%true};
+{"unsigned"=#;"signed"=-5;"utf"="ddd";"number"=3.14159;"boolean"=#};
+{"unsigned"=075u;"signed"=#;"utf"="abc";"number"=2.5;"boolean"=%true};
+{"unsigned"=150u;"signed"=-666;"utf"="aaa";"number"=-23.3;"boolean"=#};
+{"unsigned"=150u;"signed"=777;"utf"="iii";"number"=333.3;"boolean"=%true};
+{"unsigned"=150u;"signed"=-13;"utf"="zzz";"number"=-6.6;"boolean"=%false};
+{"unsigned"=200u;"signed"=15;"utf"="qqq";"number"=-17.;"boolean"=%false};
+{"unsigned"=#;"signed"=-200;"utf"="bbb";"number"=1.;"boolean"=#};
+{"unsigned"=761u;"signed"=#;"utf"="ccc";"number"=2.;"boolean"=#};
+{"unsigned"=911u;"signed"=-9;"utf"="kkk";"number"=-5.555;"boolean"=%false};
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in.attr b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in.attr
new file mode 100644
index 0000000000..21e3f1cb98
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.in.attr
@@ -0,0 +1,10 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["unsigned";["OptionalType";["DataType";"Uint32"]]];
+ ["signed";["OptionalType";["DataType";"Int32"]]];
+ ["utf";["DataType";"Utf8"]];
+ ["number";["DataType";"Double"]];
+ ["boolean";["OptionalType";["DataType";"Bool"]]]
+ ]];
+}}
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.sql
new file mode 100644
index 0000000000..ef16d5c101
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeJSONEachRow.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $serialize = YQL::Udf(AsAtom("ClickHouseClient.SerializeFormat"), Void(), TupleType(TupleType(TypeOf($input))), AsAtom("json_each_row"));
+ return Yql::Map($serialize($input), ($out)->(<|out:$out|>));
+};
+
+process Input
+using $callable(TableRows())
+into result `Simple`;
+
+process (select (unsigned, signed, utf, number, boolean) as many from Input)
+using $callable(TableRows())
+into result `Tuples`;
+
+process (select AGG_LIST(unsigned) as unsigned, AGG_LIST(signed) as signed, AGG_LIST(utf) as utf, AGG_LIST(number) as number, AGG_LIST(boolean) as boolean from Input)
+using $callable(TableRows())
+into result `Lists`;
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in
new file mode 100644
index 0000000000..97ea9221aa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in
@@ -0,0 +1,11 @@
+{"unsigned"=023u;"signed"=100;"utf"="aaa";"number"=0.;"boolean"=%true};
+{"unsigned"=#;"signed"=-5;"utf"="ddd";"number"=3.14159;"boolean"=#};
+{"unsigned"=075u;"signed"=#;"utf"="abc";"number"=2.5;"boolean"=%true};
+{"unsigned"=150u;"signed"=-666;"utf"="aaa";"number"=-23.3;"boolean"=#};
+{"unsigned"=150u;"signed"=777;"utf"="iii";"number"=333.3;"boolean"=%true};
+{"unsigned"=150u;"signed"=-13;"utf"="zzz";"number"=-6.6;"boolean"=%false};
+{"unsigned"=200u;"signed"=15;"utf"="qqq";"number"=-17.;"boolean"=%false};
+{"unsigned"=#;"signed"=-200;"utf"="bbb";"number"=1.;"boolean"=#};
+{"unsigned"=761u;"signed"=#;"utf"="ccc";"number"=2.;"boolean"=#};
+{"unsigned"=911u;"signed"=-9;"utf"="kkk";"number"=-5.555;"boolean"=%false};
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in.attr b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in.attr
new file mode 100644
index 0000000000..21e3f1cb98
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.in.attr
@@ -0,0 +1,10 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["unsigned";["OptionalType";["DataType";"Uint32"]]];
+ ["signed";["OptionalType";["DataType";"Int32"]]];
+ ["utf";["DataType";"Utf8"]];
+ ["number";["DataType";"Double"]];
+ ["boolean";["OptionalType";["DataType";"Bool"]]]
+ ]];
+}}
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.sql
new file mode 100644
index 0000000000..84ebf0349a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquet.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $serialize = YQL::Udf(AsAtom("ClickHouseClient.SerializeFormat"), Void(), TupleType(TupleType(TypeOf($input))), AsAtom("parquet"));
+ return Yql::Map($serialize($input), ($out)->(<|out:$out|>));
+};
+
+process Input
+using $callable(TableRows())
+into result `Simple`;
+
+process (select (unsigned, signed, utf, number, boolean) as many from Input)
+using $callable(TableRows())
+into result `Tuples`;
+
+process (select AGG_LIST(unsigned) as unsigned, AGG_LIST(signed) as signed, AGG_LIST(utf) as utf, AGG_LIST(number) as number, AGG_LIST(boolean) as boolean from Input)
+using $callable(TableRows())
+into result `Lists`;
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in
new file mode 100644
index 0000000000..2d3054a24a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in
@@ -0,0 +1,10 @@
+{"unsigned"=023u;"signed"=100;"utf"="aaa";"number"=0.;"boolean"=%true};
+{"unsigned"=#;"signed"=-5;"utf"="ddd";"number"=3.14159;"boolean"=#};
+{"unsigned"=075u;"signed"=#;"utf"="ccc";"number"=2.5;"boolean"=%true};
+{"unsigned"=150u;"signed"=-666;"utf"="aaa";"number"=-23.3;"boolean"=#};
+{"unsigned"=150u;"signed"=777;"utf"="iii";"number"=333.3;"boolean"=%true};
+{"unsigned"=150u;"signed"=-13;"utf"="kkk";"number"=-6.6;"boolean"=%false};
+{"unsigned"=200u;"signed"=15;"utf"="qqq";"number"=-17.;"boolean"=%false};
+{"unsigned"=#;"signed"=-200;"utf"="bbb";"number"=1.;"boolean"=#};
+{"unsigned"=761u;"signed"=#;"utf"="ccc";"number"=2.;"boolean"=#};
+{"unsigned"=911u;"signed"=-9;"utf"="kkk";"number"=-5.555;"boolean"=%false};
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in.attr b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in.attr
new file mode 100644
index 0000000000..d2a523c853
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.in.attr
@@ -0,0 +1,9 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["unsigned";["OptionalType";["DataType";"Uint32"]]];
+ ["signed";["OptionalType";["DataType";"Int32"]]];
+ ["utf";["DataType";"Utf8"]];
+ ["number";["DataType";"Double"]];
+ ["boolean";["OptionalType";["DataType";"Bool"]]]
+ ]];
+}}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.sql
new file mode 100644
index 0000000000..4f6c94ec53
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeParquetPartitioned.sql
@@ -0,0 +1,27 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $serialize = YQL::Udf(AsAtom("ClickHouseClient.SerializeFormat"), Void(), TupleType(TupleType(TypeOf($input))), AsAtom('parquet{"keys":["utf"]}'));
+ return Yql::Map($serialize($input), ($out)->(<|out:$out.0, key:$out.1|>));
+};
+
+$i1 = process Input
+using $callable(TableRows());
+
+select * from $i1
+order by key
+into result `Simple`;
+
+$i2 = process (select (unsigned, signed, number, boolean) as many, utf from Input)
+using $callable(TableRows());
+
+select * from $i2
+order by key
+into result `Tuples`;
+
+$i3 = process (select AGG_LIST(unsigned) as unsigned, AGG_LIST(signed) as signed, utf, AGG_LIST(number) as number, AGG_LIST(boolean) as boolean from Input group by utf)
+using $callable(TableRows());
+
+select * from $i3
+order by key
+into result `Lists`;
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in
new file mode 100644
index 0000000000..97ea9221aa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in
@@ -0,0 +1,11 @@
+{"unsigned"=023u;"signed"=100;"utf"="aaa";"number"=0.;"boolean"=%true};
+{"unsigned"=#;"signed"=-5;"utf"="ddd";"number"=3.14159;"boolean"=#};
+{"unsigned"=075u;"signed"=#;"utf"="abc";"number"=2.5;"boolean"=%true};
+{"unsigned"=150u;"signed"=-666;"utf"="aaa";"number"=-23.3;"boolean"=#};
+{"unsigned"=150u;"signed"=777;"utf"="iii";"number"=333.3;"boolean"=%true};
+{"unsigned"=150u;"signed"=-13;"utf"="zzz";"number"=-6.6;"boolean"=%false};
+{"unsigned"=200u;"signed"=15;"utf"="qqq";"number"=-17.;"boolean"=%false};
+{"unsigned"=#;"signed"=-200;"utf"="bbb";"number"=1.;"boolean"=#};
+{"unsigned"=761u;"signed"=#;"utf"="ccc";"number"=2.;"boolean"=#};
+{"unsigned"=911u;"signed"=-9;"utf"="kkk";"number"=-5.555;"boolean"=%false};
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in.attr b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in.attr
new file mode 100644
index 0000000000..21e3f1cb98
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.in.attr
@@ -0,0 +1,10 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["unsigned";["OptionalType";["DataType";"Uint32"]]];
+ ["signed";["OptionalType";["DataType";"Int32"]]];
+ ["utf";["DataType";"Utf8"]];
+ ["number";["DataType";"Double"]];
+ ["boolean";["OptionalType";["DataType";"Bool"]]]
+ ]];
+}}
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.sql
new file mode 100644
index 0000000000..3fe2a3b086
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/SerializeTSVWithNames.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+$callable = ($input)->{
+ $serialize = YQL::Udf(AsAtom("ClickHouseClient.SerializeFormat"), Void(), TupleType(TupleType(TypeOf($input))), AsAtom("tsv_with_names"));
+ return Yql::Map($serialize($input), ($out)->(<|out:$out|>));
+};
+
+process Input
+using $callable(TableRows())
+into result `Simple`;
+
+process (select (unsigned, signed, utf, number, boolean) as many from Input)
+using $callable(TableRows())
+into result `Tuples`;
+
+process (select AGG_LIST(unsigned) as unsigned, AGG_LIST(signed) as signed, AGG_LIST(utf) as utf, AGG_LIST(number) as number, AGG_LIST(boolean) as boolean from Input)
+using $callable(TableRows())
+into result `Lists`;
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.in b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.in
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.in
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.sql b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.sql
new file mode 100644
index 0000000000..60dfff679f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/cases/YqlType.sql
@@ -0,0 +1,30 @@
+/* syntax version 1 */
+$f = ($name)->{
+ $type = Unwrap(ClickHouseClient::ToYqlType($name,"UTC"u), $name);
+ return ($type, FormatType(ParseTypeHandle(CAST($type AS String))));
+};
+
+select
+ $f("Int8"u),
+ $f("UInt8"u),
+ $f("Int16"u),
+ $f("UInt16"u),
+ $f("Int32"u),
+ $f("UInt32"u),
+ $f("Int64"u),
+ $f("UInt64"u),
+ $f("Float32"u),
+ $f("Float64"u),
+ $f("String"u),
+ $f("FixedString(10)"u),
+ $f("Date"u),
+ $f("Datetime"u),
+ $f("UUID"u),
+ $f("Nullable(Int8)"u),
+ $f("Nullable(Nothing)"u),
+ $f("Array(Int8)"u),
+ $f("Array(Nothing)"u),
+ $f("Tuple(Int32,String)"u),
+ $f("Enum8('a'=1)"u),
+ $f("Enum16('b'=1000)"u)
+;
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/test/ya.make b/ydb/library/yql/udfs/common/clickhouse/client/test/ya.make
new file mode 100644
index 0000000000..a225d1f1ff
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/test/ya.make
@@ -0,0 +1,18 @@
+IF (OS_LINUX AND CLANG AND NOT WITH_VALGRIND)
+
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/clickhouse/client)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
+
+ENDIF()
+
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/ya.make b/ydb/library/yql/udfs/common/clickhouse/client/ya.make
index 5b4510b478..1d6b728e46 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/ya.make
+++ b/ydb/library/yql/udfs/common/clickhouse/client/ya.make
@@ -442,3 +442,7 @@ ELSE()
LIBRARY()
END()
ENDIF()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/result.json b/ydb/library/yql/udfs/common/datetime/test/canondata/result.json
new file mode 100644
index 0000000000..8357acf5bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/result.json
@@ -0,0 +1,62 @@
+{
+ "test.test[FromStringFormat]": [
+ {
+ "uri": "file://test.test_FromStringFormat_/results.txt"
+ }
+ ],
+ "test.test[FromString]": [
+ {
+ "uri": "file://test.test_FromString_/results.txt"
+ }
+ ],
+ "test.test[From]": [
+ {
+ "uri": "file://test.test_From_/results.txt"
+ }
+ ],
+ "test.test[Get]": [
+ {
+ "uri": "file://test.test_Get_/results.txt"
+ }
+ ],
+ "test.test[RoundTrip]": [
+ {
+ "uri": "file://test.test_RoundTrip_/results.txt"
+ }
+ ],
+ "test.test[StartOfDay]": [
+ {
+ "uri": "file://test.test_StartOfDay_/results.txt"
+ }
+ ],
+ "test.test[StartOf]": [
+ {
+ "uri": "file://test.test_StartOf_/results.txt"
+ }
+ ],
+ "test.test[Timezone]": [
+ {
+ "uri": "file://test.test_Timezone_/results.txt"
+ }
+ ],
+ "test.test[ToString]": [
+ {
+ "uri": "file://test.test_ToString_/results.txt"
+ }
+ ],
+ "test.test[To]": [
+ {
+ "uri": "file://test.test_To_/results.txt"
+ }
+ ],
+ "test.test[TypedFromString]": [
+ {
+ "uri": "file://test.test_TypedFromString_/results.txt"
+ }
+ ],
+ "test.test[TypedStartOf]": [
+ {
+ "uri": "file://test.test_TypedStartOf_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromStringFormat_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromStringFormat_/results.txt
new file mode 100644
index 0000000000..d72caeef36
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromStringFormat_/results.txt
@@ -0,0 +1,46 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2017-02-01T00:00:00Z"
+ ];
+ [
+ "2017-01-01T00:00:00Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromString_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromString_/results.txt
new file mode 100644
index 0000000000..fdaa824df4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_FromString_/results.txt
@@ -0,0 +1,48 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0"
+ ]
+ ];
+ [
+ [
+ "1"
+ ]
+ ];
+ [
+ [
+ "144542035790076"
+ ]
+ ];
+ [
+ [
+ "1479854322000000"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_From_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_From_/results.txt
new file mode 100644
index 0000000000..99530a468c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_From_/results.txt
@@ -0,0 +1,88 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "interval";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ]
+ ];
+ [
+ [
+ "3600000000"
+ ];
+ [
+ "3600000000"
+ ];
+ [
+ "3600000000"
+ ]
+ ];
+ [
+ [
+ "44442000000000"
+ ];
+ [
+ "44442000000000"
+ ];
+ [
+ "44442000000000"
+ ]
+ ];
+ [
+ [
+ "4444444404000000000"
+ ];
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Get_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Get_/results.txt
new file mode 100644
index 0000000000..70a98fa86a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Get_/results.txt
@@ -0,0 +1,124 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "second";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "minute";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "hour";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "day";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "month";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "year";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "is_weekend";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1970-01-01T00:00:00.000000Z";
+ "0";
+ "0";
+ "0";
+ "1";
+ "1";
+ "1970";
+ %false
+ ];
+ [
+ "1970-01-02T23:59:59.000001Z";
+ "59";
+ "59";
+ "23";
+ "2";
+ "1";
+ "1970";
+ %false
+ ];
+ [
+ "1974-07-31T22:33:55.790076Z";
+ "55";
+ "33";
+ "22";
+ "31";
+ "7";
+ "1974";
+ %false
+ ];
+ [
+ "2015-10-09T23:57:23.000000Z";
+ "23";
+ "57";
+ "23";
+ "9";
+ "10";
+ "2015";
+ %false
+ ];
+ [
+ "2016-08-13T10:00:00.000000Z";
+ "0";
+ "0";
+ "10";
+ "13";
+ "8";
+ "2016";
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_RoundTrip_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_RoundTrip_/results.txt
new file mode 100644
index 0000000000..d3b233ef52
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_RoundTrip_/results.txt
@@ -0,0 +1,139 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "result";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1970-01-01T00:00:00.000001Z";
+ [
+ "1970-01-01T00:00:00.000001Z"
+ ]
+ ];
+ [
+ "2000-01-01T00:00:00.000000Z";
+ [
+ "2000-01-01T00:00:00.000000Z"
+ ]
+ ];
+ [
+ "Sun, 06 Nov 1994 08:49:37 GMT";
+ [
+ "1994-11-06T08:49:37.000000Z"
+ ]
+ ];
+ [
+ "Sun Nov 6 08:49:37 1994";
+ [
+ "1994-11-06T08:49:37.000000Z"
+ ]
+ ];
+ [
+ "Wed, 02 Oct 2002 08:00:00 EST";
+ [
+ "2002-10-02T13:00:00.000000Z"
+ ]
+ ];
+ [
+ "Wed, 02 Oct 2002 15:00:00 +0200";
+ [
+ "2002-10-02T13:00:00.000000Z"
+ ]
+ ];
+ [
+ "20161122";
+ [
+ "2016-11-22T00:00:00.000000Z"
+ ]
+ ];
+ [
+ "2016-11-22";
+ [
+ "2016-11-22T00:00:00.000000Z"
+ ]
+ ];
+ [
+ "2016-11-22 22:38";
+ [
+ "2016-11-22T22:38:00.000000Z"
+ ]
+ ];
+ [
+ "2016-11-22 22:38:42";
+ [
+ "2016-11-22T22:38:42.000000Z"
+ ]
+ ];
+ [
+ "1990-03-15t15:16:17z";
+ [
+ "1990-03-15T15:16:17.000000Z"
+ ]
+ ];
+ [
+ "20091014165533Z";
+ [
+ "2009-10-14T16:55:33.000000Z"
+ ]
+ ];
+ [
+ "2016-11-22 22:38:42.006000";
+ [
+ "2016-11-22T22:38:42.006000Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "seconds";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "123456789"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOfDay_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOfDay_/results.txt
new file mode 100644
index 0000000000..01fe567503
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOfDay_/results.txt
@@ -0,0 +1,85 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "ts";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "start_d";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "start_dt";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "start_ts";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "day_time";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2016-11-22T18:38:42.123456Z"
+ ];
+ [
+ "2016-11-22"
+ ];
+ [
+ "2016-11-22T00:00:00Z"
+ ];
+ [
+ "2016-11-22T00:00:00Z"
+ ];
+ [
+ "PT18H38M42.123456S"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOf_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOf_/results.txt
new file mode 100644
index 0000000000..9973c1d232
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_StartOf_/results.txt
@@ -0,0 +1,109 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Date";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Week";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Month";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Quarter";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Year";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01"
+ ];
+ [
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01";
+ "1970-01-01"
+ ];
+ [
+ "2015-10-21";
+ "2015-10-19";
+ "2015-10-01";
+ "2015-10-01";
+ "2015-01-01"
+ ];
+ [
+ "2015-09-05";
+ "2015-08-31";
+ "2015-09-01";
+ "2015-07-01";
+ "2015-01-01"
+ ];
+ [
+ "2012-04-26";
+ "2012-04-23";
+ "2012-04-01";
+ "2012-04-01";
+ "2012-01-01"
+ ];
+ [
+ "2015-10-28";
+ "2015-10-26";
+ "2015-10-01";
+ "2015-10-01";
+ "2015-01-01"
+ ];
+ [
+ "2015-12-20";
+ "2015-12-14";
+ "2015-12-01";
+ "2015-10-01";
+ "2015-01-01"
+ ];
+ [
+ "2016-02-29";
+ "2016-02-29";
+ "2016-02-01";
+ "2016-01-01";
+ "2016-01-01"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Timezone_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Timezone_/results.txt
new file mode 100644
index 0000000000..d7aaa2d9d1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_Timezone_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "absolute";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "civil";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1970-01-02T23:59:59.000001Z";
+ "1970-01-02T20:59:59.000001Z";
+ "1970-01-03T02:59:59.000001Z"
+ ];
+ [
+ "1974-07-31T22:33:55.790076Z";
+ "1974-07-31T19:33:55.790076Z";
+ "1974-08-01T01:33:55.790076Z"
+ ];
+ [
+ "2015-10-09T23:57:23.000000Z";
+ "2015-10-09T20:57:23.000000Z";
+ "2015-10-10T02:57:23.000000Z"
+ ];
+ [
+ "2016-08-13T10:00:00.000000Z";
+ "2016-08-13T07:00:00.000000Z";
+ "2016-08-13T13:00:00.000000Z"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_ToString_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_ToString_/results.txt
new file mode 100644
index 0000000000..af5142d4c8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_ToString_/results.txt
@@ -0,0 +1,34 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1970-01-01T00:00:00.000000Z"
+ ];
+ [
+ "1970-01-01T00:00:00.000001Z"
+ ];
+ [
+ "1974-07-31T22:33:55.790076Z"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_To_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_To_/results.txt
new file mode 100644
index 0000000000..f07569183a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_To_/results.txt
@@ -0,0 +1,119 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "hours";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "interval";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "negative_interval";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "negative_interval_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ]
+ ];
+ [
+ [
+ "0"
+ ];
+ [
+ "0.000002"
+ ];
+ [
+ "0"
+ ];
+ [
+ "-3"
+ ];
+ [
+ "-0.000003"
+ ]
+ ];
+ [
+ [
+ "0"
+ ];
+ [
+ "617.283945"
+ ];
+ [
+ "617"
+ ];
+ [
+ "-617283945"
+ ];
+ [
+ "-617.283945"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedFromString_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedFromString_/results.txt
new file mode 100644
index 0000000000..8eed8b7152
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedFromString_/results.txt
@@ -0,0 +1,48 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1970-01-01T00:00:00Z"
+ ]
+ ];
+ [
+ [
+ "1970-01-01T00:00:00.000001Z"
+ ]
+ ];
+ [
+ [
+ "1974-07-31T22:33:55.790076Z"
+ ]
+ ];
+ [
+ [
+ "2016-11-22T22:38:42Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedStartOf_/results.txt b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedStartOf_/results.txt
new file mode 100644
index 0000000000..730ab7540a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/canondata/test.test_TypedStartOf_/results.txt
@@ -0,0 +1,184 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "2017-11-16";
+ [
+ "2017-11-13"
+ ];
+ [
+ "2017-11-13T00:00:00Z"
+ ];
+ [
+ "2017-11-13T00:00:00Z"
+ ];
+ [
+ "2017-11-01"
+ ];
+ [
+ "2017-11-01T00:00:00Z"
+ ];
+ [
+ "2017-11-01T00:00:00Z"
+ ];
+ [
+ "2017-10-01"
+ ];
+ [
+ "2017-10-01T00:00:00Z"
+ ];
+ [
+ "2017-10-01T00:00:00Z"
+ ];
+ [
+ "2017-01-01"
+ ];
+ [
+ "2017-01-01T00:00:00Z"
+ ];
+ [
+ "2017-01-01T00:00:00Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/From.in b/ydb/library/yql/udfs/common/datetime/test/cases/From.in
new file mode 100644
index 0000000000..bc6dfd9700
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/From.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="2";"value"="0"};
+{"key"="2";"subkey"="2";"value"="1"};
+{"key"="3";"subkey"="3";"value"="12345"};
+{"key"="3";"subkey"="3";"value"="1234567890"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/From.sql b/ydb/library/yql/udfs/common/datetime/test/cases/From.sql
new file mode 100644
index 0000000000..22224c02be
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/From.sql
@@ -0,0 +1,8 @@
+/* syntax version 0 */
+$value = CAST(value AS Uint64);
+SELECT
+ DateTime::FromHours($value) AS uint,
+ DateTime::TimestampFromHours($value) AS timestamp,
+ DateTime::IntervalFromHours($value) AS interval
+FROM Input;
+
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/FromString.in b/ydb/library/yql/udfs/common/datetime/test/cases/FromString.in
new file mode 100644
index 0000000000..4812e498e6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/FromString.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="1";"value"="1970-01-01T00:00:00.000000Z"};
+{"key"="2";"subkey"="2";"value"="1970-01-01T00:00:00.000001Z"};
+{"key"="3";"subkey"="3";"value"="1974-07-31T22:33:55.790076Z"};
+{"key"="4";"subkey"="4";"value"="2016-11-22 22:38:42"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/FromString.sql b/ydb/library/yql/udfs/common/datetime/test/cases/FromString.sql
new file mode 100644
index 0000000000..8d9eba2811
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/FromString.sql
@@ -0,0 +1,2 @@
+/* syntax version 0 */
+SELECT DateTime::FromString(value) FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.in b/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.in
new file mode 100644
index 0000000000..44a4cf835e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.in
@@ -0,0 +1 @@
+{"key"="1";"subkey"="1";"value"="20170203"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.sql b/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.sql
new file mode 100644
index 0000000000..c126e846ff
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/FromStringFormat.sql
@@ -0,0 +1,5 @@
+/* syntax version 0 */
+SELECT
+ CAST(DateTime::TimestampFromStringFormat(value, '%Y%m') AS String),
+ CAST(DateTime::TimestampFromStringFormat(value, '%Y') as String)
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/Get.in b/ydb/library/yql/udfs/common/datetime/test/cases/Get.in
new file mode 100644
index 0000000000..8fa829b173
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/Get.in
@@ -0,0 +1,5 @@
+{"key"="1";"subkey"="1";"value"="1970-01-01T00:00:00.000000Z"};
+{"key"="2";"subkey"="2";"value"="1970-01-02T23:59:59.000001Z"};
+{"key"="3";"subkey"="3";"value"="1974-07-31T22:33:55.790076Z"};
+{"key"="4";"subkey"="4";"value"="2015-10-09T23:57:23.000000Z"};
+{"key"="1";"subkey"="1";"value"="2016-08-13T10:00:00.000000Z"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/Get.sql b/ydb/library/yql/udfs/common/datetime/test/cases/Get.sql
new file mode 100644
index 0000000000..5ec67142e3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/Get.sql
@@ -0,0 +1,12 @@
+/* syntax version 0 */
+$ts = COALESCE(DateTime::FromString(value), 0);
+SELECT
+ value,
+ DateTime::GetSecond($ts) AS second,
+ DateTime::GetMinute($ts) AS minute,
+ DateTime::GetHour($ts) AS hour,
+ DateTime::GetDayOfMonth($ts) AS day,
+ DateTime::GetMonth($ts) AS month,
+ DateTime::GetYear($ts) AS year,
+ DateTime::IsWeekend($ts) AS is_weekend
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.in b/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.in
new file mode 100644
index 0000000000..8b4319c244
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.in
@@ -0,0 +1,13 @@
+{"key"="";"subkey"="";"value"="1970-01-01T00:00:00.000001Z"};
+{"key"="";"subkey"="";"value"="2000-01-01T00:00:00.000000Z"};
+{"key"="Http";"subkey"="";"value"="Sun, 06 Nov 1994 08:49:37 GMT"};
+{"key"="Http";"subkey"="";"value"="Sun Nov 6 08:49:37 1994"};
+{"key"="Rfc822";"subkey"="";"value"="Wed, 02 Oct 2002 08:00:00 EST"};
+{"key"="Rfc822";"subkey"="";"value"="Wed, 02 Oct 2002 15:00:00 +0200"};
+{"key"="Iso8601";"subkey"="";"value"="20161122"};
+{"key"="Iso8601";"subkey"="";"value"="2016-11-22"};
+{"key"="Iso8601";"subkey"="";"value"="2016-11-22 22:38"};
+{"key"="Iso8601";"subkey"="";"value"="2016-11-22 22:38:42"};
+{"key"="Iso8601";"subkey"="";"value"="1990-03-15t15:16:17z"};
+{"key"="X509";"subkey"="";"value"="20091014165533Z"};
+{"key"="YQL-2273";"subkey"="";"value"="2016-11-22 22:38:42.006000"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.sql b/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.sql
new file mode 100644
index 0000000000..5fd08e1fc5
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/RoundTrip.sql
@@ -0,0 +1,12 @@
+/* syntax version 0 */
+$result = DateTime::ToString(DateTime::FromString(value));
+
+SELECT
+ value,
+ $result AS result
+FROM Input;
+
+SELECT
+ DateTime::ToSeconds(
+ DateTime::FromSeconds(123456789)
+ ) AS seconds;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.in b/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.in
new file mode 100644
index 0000000000..6e184dd238
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.in
@@ -0,0 +1,8 @@
+{"key"="1";"subkey"="1";"value"="0"};
+{"key"="2";"subkey"="2";"value"="1"};
+{"key"="3";"subkey"="3";"value"="1445420357900760"};
+{"key"="4";"subkey"="4";"value"="1441421357900760"};
+{"key"="5";"subkey"="5";"value"="1335421457900760"};
+{"key"="6";"subkey"="6";"value"="1446044144000000"};
+{"key"="7";"subkey"="7";"value"="1450626268481094"};
+{"key"="8";"subkey"="8";"value"="1456782839000000"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.sql b/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.sql
new file mode 100644
index 0000000000..65c1787203
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/StartOf.sql
@@ -0,0 +1,9 @@
+/* syntax version 0 */
+$ts = COALESCE(CAST(value AS Uint64), 0);
+SELECT
+ DateTime::ToDate($ts) as Date,
+ DateTime::ToDate(DateTime::StartOfWeek($ts)) as Week,
+ DateTime::ToDate(DateTime::StartOfMonth($ts)) as Month,
+ DateTime::ToDate(DateTime::StartOfQuarter($ts)) as Quarter,
+ DateTime::ToDate(DateTime::StartOfYear($ts)) as Year
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.in b/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.in
new file mode 100644
index 0000000000..8719171754
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.in
@@ -0,0 +1 @@
+{"key"="1";"subkey"="1";"value"="2016-11-22T22:38:42.123456"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.sql b/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.sql
new file mode 100644
index 0000000000..d13bcc777d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/StartOfDay.sql
@@ -0,0 +1,8 @@
+/* syntax version 0 */
+SELECT
+ cast(DateTime::TimestampFromString(value) as string) as ts,
+ cast(DateTime::DateStartOfDay(cast(DateTime::TimestampFromString(value) as date)) as string) as start_d,
+ cast(DateTime::DatetimeStartOfDay(cast(DateTime::TimestampFromString(value) as datetime)) as string) as start_dt,
+ cast(DateTime::TimestampStartOfDay(DateTime::TimestampFromString(value)) as string) as start_ts,
+ cast(DateTime::GetTimeOfDay(DateTime::TimestampFromString(value)) as string) as day_time
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.in b/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.in
new file mode 100644
index 0000000000..ada23d3a4d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.in
@@ -0,0 +1,4 @@
+{"key"="2";"subkey"="2";"value"="1970-01-02T23:59:59.000001Z"};
+{"key"="3";"subkey"="3";"value"="1974-07-31T22:33:55.790076Z"};
+{"key"="4";"subkey"="4";"value"="2015-10-09T23:57:23.000000Z"};
+{"key"="1";"subkey"="1";"value"="2016-08-13T10:00:00.000000Z"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.sql b/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.sql
new file mode 100644
index 0000000000..e93518c0fc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/Timezone.sql
@@ -0,0 +1,7 @@
+/* syntax version 0 */
+$ts = COALESCE(DateTime::FromString(value), 0);
+SELECT
+ value,
+ DateTime::ToString(DateTime::FromTimeZone($ts, "Europe/Moscow")) AS absolute,
+ DateTime::ToString(DateTime::ToTimeZone($ts, "Europe/Moscow")) AS civil
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/To.in b/ydb/library/yql/udfs/common/datetime/test/cases/To.in
new file mode 100644
index 0000000000..9b211df1b9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/To.in
@@ -0,0 +1,3 @@
+{"key"="1";"subkey"="2";"value"="0"};
+{"key"="2";"subkey"="2";"value"="5"};
+{"key"="3";"subkey"="3";"value"="1234567890"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/To.sql b/ydb/library/yql/udfs/common/datetime/test/cases/To.sql
new file mode 100644
index 0000000000..075b451d50
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/To.sql
@@ -0,0 +1,12 @@
+/* syntax version 0 */
+$value = CAST(CAST(value AS Uint64) AS Timestamp);
+$half_value = CAST(CAST(value AS Uint64) / 2 AS Timestamp);
+
+SELECT
+ DateTime::ToHours($value) AS hours,
+ DateTime::ToSecondsFloat($half_value) AS timestamp,
+ DateTime::IntervalToSeconds($value - $half_value) AS interval,
+ DateTime::IntervalToMicroSeconds($half_value - $value) AS negative_interval,
+ DateTime::IntervalToSecondsFloat($half_value - $value) AS negative_interval_double
+FROM Input;
+
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/ToString.in b/ydb/library/yql/udfs/common/datetime/test/cases/ToString.in
new file mode 100644
index 0000000000..9a9ae5af3b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/ToString.in
@@ -0,0 +1,3 @@
+{"key"="1";"subkey"="1";"value"="0"};
+{"key"="2";"subkey"="2";"value"="1"};
+{"key"="3";"subkey"="3";"value"="144542035790076"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/ToString.sql b/ydb/library/yql/udfs/common/datetime/test/cases/ToString.sql
new file mode 100644
index 0000000000..ec4e6fee6d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/ToString.sql
@@ -0,0 +1,2 @@
+/* syntax version 0 */
+SELECT DateTime::ToString(COALESCE(CAST(value AS Uint64), CAST(0 as Uint64))) FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.in b/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.in
new file mode 100644
index 0000000000..4812e498e6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="1";"value"="1970-01-01T00:00:00.000000Z"};
+{"key"="2";"subkey"="2";"value"="1970-01-01T00:00:00.000001Z"};
+{"key"="3";"subkey"="3";"value"="1974-07-31T22:33:55.790076Z"};
+{"key"="4";"subkey"="4";"value"="2016-11-22 22:38:42"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.sql b/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.sql
new file mode 100644
index 0000000000..f7fa482ce1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/TypedFromString.sql
@@ -0,0 +1,2 @@
+/* syntax version 0 */
+SELECT cast(DateTime::TimestampFromString(value) as string) FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.in b/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.in
new file mode 100644
index 0000000000..6668c4f728
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.in
@@ -0,0 +1 @@
+{"key"="1";"subkey"="1";"value"="2017-11-16"};
diff --git a/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.sql b/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.sql
new file mode 100644
index 0000000000..1b5af700bc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/cases/TypedStartOf.sql
@@ -0,0 +1,17 @@
+/* syntax version 0 */
+$ts = cast(value as Date);
+SELECT
+ value,
+ cast(DateTime::DateStartOfWeek($ts) as string),
+ cast(DateTime::DatetimeStartOfWeek($ts) as string),
+ cast(DateTime::TimestampStartOfWeek($ts) as string),
+ cast(DateTime::DateStartOfMonth($ts) as string),
+ cast(DateTime::DatetimeStartOfMonth($ts) as string),
+ cast(DateTime::TimestampStartOfMonth($ts) as string),
+ cast(DateTime::DateStartOfQuarter($ts) as string),
+ cast(DateTime::DatetimeStartOfQuarter($ts) as string),
+ cast(DateTime::TimestampStartOfQuarter($ts) as string),
+ cast(DateTime::DateStartOfYear($ts) as string),
+ cast(DateTime::DatetimeStartOfYear($ts) as string),
+ cast(DateTime::TimestampStartOfYear($ts) as string)
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/datetime/test/ya.make b/ydb/library/yql/udfs/common/datetime/test/ya.make
new file mode 100644
index 0000000000..c7b1268b46
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime/test/ya.make
@@ -0,0 +1,15 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/datetime)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+REQUIREMENTS(ram:10)
+
+END()
diff --git a/ydb/library/yql/udfs/common/datetime/ya.make b/ydb/library/yql/udfs/common/datetime/ya.make
index 1cbaddbb08..741db27251 100644
--- a/ydb/library/yql/udfs/common/datetime/ya.make
+++ b/ydb/library/yql/udfs/common/datetime/ya.make
@@ -16,3 +16,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/result.json b/ydb/library/yql/udfs/common/datetime2/test/canondata/result.json
new file mode 100644
index 0000000000..4291f7e1fa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/result.json
@@ -0,0 +1,102 @@
+{
+ "test.test[BlockGet]": [
+ {
+ "uri": "file://test.test_BlockGet_/results.txt"
+ }
+ ],
+ "test.test[BlockTo]": [
+ {
+ "uri": "file://test.test_BlockTo_/results.txt"
+ }
+ ],
+ "test.test[Format]": [
+ {
+ "uri": "file://test.test_Format_/results.txt"
+ }
+ ],
+ "test.test[From]": [
+ {
+ "uri": "file://test.test_From_/results.txt"
+ }
+ ],
+ "test.test[Get]": [
+ {
+ "uri": "file://test.test_Get_/results.txt"
+ }
+ ],
+ "test.test[ImplicitSplit]": [
+ {
+ "uri": "file://test.test_ImplicitSplit_/results.txt"
+ }
+ ],
+ "test.test[ParseIso8601]": [
+ {
+ "uri": "file://test.test_ParseIso8601_/results.txt"
+ }
+ ],
+ "test.test[ParseLim]": [
+ {
+ "uri": "file://test.test_ParseLim_/results.txt"
+ }
+ ],
+ "test.test[Parse]": [
+ {
+ "uri": "file://test.test_Parse_/results.txt"
+ }
+ ],
+ "test.test[Repr]": [
+ {
+ "uri": "file://test.test_Repr_/results.txt"
+ }
+ ],
+ "test.test[Shift]": [
+ {
+ "uri": "file://test.test_Shift_/results.txt"
+ }
+ ],
+ "test.test[SplitMake1969]": [
+ {
+ "uri": "file://test.test_SplitMake1969_/results.txt"
+ }
+ ],
+ "test.test[SplitMake]": [
+ {
+ "uri": "file://test.test_SplitMake_/results.txt"
+ }
+ ],
+ "test.test[StartOf1969]": [
+ {
+ "uri": "file://test.test_StartOf1969_/results.txt"
+ }
+ ],
+ "test.test[StartOf]": [
+ {
+ "uri": "file://test.test_StartOf_/results.txt"
+ }
+ ],
+ "test.test[To]": [
+ {
+ "uri": "file://test.test_To_/results.txt"
+ }
+ ],
+ "test.test[TzToDate]": [
+ {
+ "uri": "file://test.test_TzToDate_/results.txt"
+ }
+ ],
+ "test.test[UpdateTz]": [
+ {
+ "uri": "file://test.test_UpdateTz_/results.txt"
+ }
+ ],
+ "test.test[Update]": [
+ {
+ "uri": "file://test.test_Update_/results.txt"
+ }
+ ],
+ "test.test[yql-14977]": [
+ {
+ "uri": "file://test.test_yql-14977_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockGet_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockGet_/results.txt
new file mode 100644
index 0000000000..f9bad3c80b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockGet_/results.txt
@@ -0,0 +1,215 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "date_hour";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "date_minute";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "date_second";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "date_milli";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "date_micro";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "datetime_hour";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "datetime_minute";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "datetime_second";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "datetime_milli";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "datetime_micro";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "timestamp_hour";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "timestamp_minute";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "timestamp_second";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "timestamp_milli";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "timestamp_micro";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "21"
+ ];
+ [
+ "20"
+ ];
+ [
+ "19"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "21"
+ ];
+ [
+ "20"
+ ];
+ [
+ "19"
+ ];
+ [
+ "345"
+ ];
+ [
+ "345678"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockTo_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockTo_/results.txt
new file mode 100644
index 0000000000..d6e44b6327
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_BlockTo_/results.txt
@@ -0,0 +1,293 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "interval_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "interval_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "interval_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "date_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "date_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "date_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "208800"
+ ];
+ [
+ "208800000"
+ ];
+ [
+ "208800000000"
+ ];
+ [
+ "1542844800"
+ ];
+ [
+ "1542921619"
+ ];
+ [
+ "1542921619"
+ ];
+ [
+ "1542758400"
+ ];
+ [
+ "1542910819"
+ ];
+ [
+ "1542910819"
+ ];
+ [
+ "1542844800000"
+ ];
+ [
+ "1542921619000"
+ ];
+ [
+ "1542921619345"
+ ];
+ [
+ "1542758400000"
+ ];
+ [
+ "1542910819000"
+ ];
+ [
+ "1542910819345"
+ ];
+ [
+ "1542844800000000"
+ ];
+ [
+ "1542921619000000"
+ ];
+ [
+ "1542921619345678"
+ ];
+ [
+ "1542758400000000"
+ ];
+ [
+ "1542910819000000"
+ ];
+ [
+ "1542910819345678"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Format_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Format_/results.txt
new file mode 100644
index 0000000000..31b8439bc9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Format_/results.txt
@@ -0,0 +1,48 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "% year 1970 monthFullName January monthShortName Jan month 01 day 01 hours 00 minutes 00 seconds 00 tz +0000 tzname GMT text"
+ ]
+ ];
+ [
+ [
+ "% year 2018 monthFullName December monthShortName Dec month 12 day 01 hours 01 minutes 02 seconds 03.456789 tz +0300 tzname Europe/Moscow text"
+ ]
+ ];
+ [
+ [
+ "% year 2011 monthFullName March monthShortName Mar month 03 day 13 hours 03 minutes 15 seconds 00 tz -0700 tzname America/Los_Angeles text"
+ ]
+ ];
+ [
+ [
+ "% year 2011 monthFullName November monthShortName Nov month 11 day 06 hours 01 minutes 15 seconds 00 tz -0700 tzname America/Los_Angeles text"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_From_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_From_/results.txt
new file mode 100644
index 0000000000..2c503563e1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_From_/results.txt
@@ -0,0 +1,148 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "ts_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "ts_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "ts_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "ts_empty";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "interval_days";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ];
+ [
+ "interval_hours";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ];
+ [
+ "interval_minutes";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ];
+ [
+ "interval_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ];
+ [
+ "interval_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ];
+ [
+ "interval_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "3875345000000"
+ ];
+ [
+ "3875345000000"
+ ];
+ [
+ "3875345000000"
+ ];
+ #;
+ [
+ "604800000000"
+ ];
+ [
+ "604800000000"
+ ];
+ [
+ "604800000000"
+ ];
+ [
+ "604800000000"
+ ];
+ [
+ "604800000000"
+ ];
+ [
+ "-604800000000"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Get_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Get_/results.txt
new file mode 100644
index 0000000000..262c45b597
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Get_/results.txt
@@ -0,0 +1,628 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "ryear";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint16"
+ ]
+ ]
+ ];
+ [
+ "rdayofyear";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint16"
+ ]
+ ]
+ ];
+ [
+ "rmonth";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rmonthname";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "rweekofyear";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rweekofyeariso8601";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rdayofmonth";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rdayofweek";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rdayofweekname";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "rhour";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rminute";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rsecond";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "rmsec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "rusec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "rtz";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint16"
+ ]
+ ]
+ ];
+ [
+ "rtzname";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1970"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "January"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "4"
+ ];
+ [
+ "Thursday"
+ ];
+ [
+ "11"
+ ];
+ [
+ "14"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1970"
+ ];
+ [
+ "2"
+ ];
+ [
+ "1"
+ ];
+ [
+ "January"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "5"
+ ];
+ [
+ "Friday"
+ ];
+ [
+ "14"
+ ];
+ [
+ "8"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1970"
+ ];
+ [
+ "32"
+ ];
+ [
+ "2"
+ ];
+ [
+ "February"
+ ];
+ [
+ "5"
+ ];
+ [
+ "5"
+ ];
+ [
+ "1"
+ ];
+ [
+ "7"
+ ];
+ [
+ "Sunday"
+ ];
+ [
+ "17"
+ ];
+ [
+ "3"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1970"
+ ];
+ [
+ "246"
+ ];
+ [
+ "9"
+ ];
+ [
+ "September"
+ ];
+ [
+ "36"
+ ];
+ [
+ "36"
+ ];
+ [
+ "3"
+ ];
+ [
+ "4"
+ ];
+ [
+ "Thursday"
+ ];
+ [
+ "7"
+ ];
+ [
+ "22"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1970"
+ ];
+ [
+ "365"
+ ];
+ [
+ "12"
+ ];
+ [
+ "December"
+ ];
+ [
+ "53"
+ ];
+ [
+ "53"
+ ];
+ [
+ "31"
+ ];
+ [
+ "4"
+ ];
+ [
+ "Thursday"
+ ];
+ [
+ "23"
+ ];
+ [
+ "59"
+ ];
+ [
+ "59"
+ ];
+ [
+ "999"
+ ];
+ [
+ "999999"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1971"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "January"
+ ];
+ [
+ "1"
+ ];
+ [
+ "53"
+ ];
+ [
+ "1"
+ ];
+ [
+ "5"
+ ];
+ [
+ "Friday"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1971"
+ ];
+ [
+ "14"
+ ];
+ [
+ "1"
+ ];
+ [
+ "January"
+ ];
+ [
+ "3"
+ ];
+ [
+ "2"
+ ];
+ [
+ "14"
+ ];
+ [
+ "4"
+ ];
+ [
+ "Thursday"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "GMT"
+ ]
+ ];
+ [
+ [
+ "1978"
+ ];
+ [
+ "25"
+ ];
+ [
+ "1"
+ ];
+ [
+ "January"
+ ];
+ [
+ "5"
+ ];
+ [
+ "4"
+ ];
+ [
+ "25"
+ ];
+ [
+ "3"
+ ];
+ [
+ "Wednesday"
+ ];
+ [
+ "16"
+ ];
+ [
+ "15"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "0"
+ ];
+ [
+ "477"
+ ];
+ [
+ "Europe/Uzhgorod"
+ ]
+ ];
+ [
+ [
+ "2018"
+ ];
+ [
+ "335"
+ ];
+ [
+ "12"
+ ];
+ [
+ "December"
+ ];
+ [
+ "48"
+ ];
+ [
+ "48"
+ ];
+ [
+ "1"
+ ];
+ [
+ "6"
+ ];
+ [
+ "Saturday"
+ ];
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "3"
+ ];
+ [
+ "456"
+ ];
+ [
+ "456789"
+ ];
+ [
+ "1"
+ ];
+ [
+ "Europe/Moscow"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ImplicitSplit_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ImplicitSplit_/results.txt
new file mode 100644
index 0000000000..ff03b0fa5d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ImplicitSplit_/results.txt
@@ -0,0 +1,98 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "20181215 000000 GMT"
+ ];
+ [
+ "20181215 010203 GMT"
+ ];
+ [
+ "20181215 010203.456789 GMT"
+ ];
+ [
+ "20181215 000000 Europe/Moscow"
+ ];
+ [
+ "20181215 010203 Europe/Moscow"
+ ];
+ [
+ "20181215 010203.456789 Europe/Moscow"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseIso8601_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseIso8601_/results.txt
new file mode 100644
index 0000000000..5f312e8bd8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseIso8601_/results.txt
@@ -0,0 +1,53 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseLim_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseLim_/results.txt
new file mode 100644
index 0000000000..a4687cfa88
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_ParseLim_/results.txt
@@ -0,0 +1,238 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column17";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2105-12-31T00:00:00,GMT"
+ ];
+ #;
+ [
+ "2105-12-31T23:59:59,GMT"
+ ];
+ #;
+ [
+ "2105-12-31T23:59:59.999999,GMT"
+ ];
+ #;
+ [
+ "2105-12-31T00:00:00,Etc/GMT+11"
+ ];
+ [
+ "2106-01-01T00:00:00,Etc/GMT-1"
+ ];
+ #;
+ [
+ "2105-12-31T22:59:59.999999,Etc/GMT+1"
+ ];
+ [
+ "1970-01-01T00:00:00,GMT"
+ ];
+ #;
+ [
+ "1970-01-01T00:00:00,GMT"
+ ];
+ #;
+ #;
+ [
+ "1970-01-01T00:00:00,GMT"
+ ];
+ [
+ "1969-12-31T23:00:00,Etc/GMT+1"
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Parse_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Parse_/results.txt
new file mode 100644
index 0000000000..14c088137b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Parse_/results.txt
@@ -0,0 +1,242 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2011-03-08T01:02:03,Europe/Moscow"
+ ];
+ [
+ "20110308 010203 +0300"
+ ];
+ [
+ "2022-02-23T12:00:00,GMT"
+ ];
+ [
+ "20220223 120000 +0000"
+ ];
+ [
+ "20110308"
+ ];
+ [
+ "20110308"
+ ];
+ [
+ "2005-03-05T00:34:45,GMT"
+ ];
+ [
+ "2009-02-13T23:31:30,GMT"
+ ];
+ [
+ "1994-11-06T08:49:37,GMT"
+ ];
+ [
+ "2009-10-14T16:55:33,GMT"
+ ]
+ ];
+ [
+ [
+ "2011-03-08T01:02:03.22,Europe/Moscow"
+ ];
+ [
+ "20110308 010203.22 +0300"
+ ];
+ [
+ "2022-02-23T12:00:00.666666,GMT"
+ ];
+ [
+ "20220223 120000.666666 +0000"
+ ];
+ [
+ "20111108"
+ ];
+ [
+ "20111108"
+ ];
+ [
+ "2005-03-04T23:04:00,GMT"
+ ];
+ [
+ "2009-09-18T23:37:03.012331,GMT"
+ ];
+ [
+ "1994-11-06T08:49:37,GMT"
+ ];
+ [
+ "1999-01-04T07:42:12,GMT"
+ ]
+ ];
+ [
+ #;
+ #;
+ [
+ "2022-02-23T12:00:00.999999,GMT"
+ ];
+ [
+ "20220223 120000.999999 +0000"
+ ];
+ [
+ "20110108"
+ ];
+ [
+ "20110108"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ #;
+ #;
+ [
+ "2022-02-23T12:00:00.42,GMT"
+ ];
+ [
+ "20220223 120000.42 +0000"
+ ];
+ [
+ "20110108"
+ ];
+ [
+ "20110108"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ #;
+ #;
+ [
+ "2022-02-23T12:00:00.823874,GMT"
+ ];
+ [
+ "20220223 120000.823874 +0000"
+ ];
+ [
+ "20110108"
+ ];
+ [
+ "20110208"
+ ];
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Repr_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Repr_/results.txt
new file mode 100644
index 0000000000..f4ff733c50
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Repr_/results.txt
@@ -0,0 +1,46 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2016-08-15T00:00:00,GMT"
+ ];
+ [
+ "2017-01-01T13:00:00,Europe/Moscow"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Shift_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Shift_/results.txt
new file mode 100644
index 0000000000..a7d9edbd5a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Shift_/results.txt
@@ -0,0 +1,459 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2011-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2011-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2005-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "1997-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2001-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2001-12-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2002-02-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2002-10-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2002-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2012-02-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2001-10-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2001-08-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2000-12-17T21:20:19.345678,GMT"
+ ];
+ [
+ "2000-11-17T21:20:19.345678,GMT"
+ ];
+ [
+ "1991-08-17T21:20:19.345678,GMT"
+ ]
+ ];
+ [
+ [
+ "1980-01-01T11:14:00,GMT"
+ ];
+ [
+ "1980-01-01T11:14:00,GMT"
+ ];
+ [
+ "1974-01-01T11:14:00,GMT"
+ ];
+ #;
+ [
+ "1970-01-01T11:14:00,GMT"
+ ];
+ [
+ "1970-02-01T11:14:00,GMT"
+ ];
+ [
+ "1970-04-01T11:14:00,GMT"
+ ];
+ [
+ "1970-12-01T11:14:00,GMT"
+ ];
+ [
+ "1971-01-01T11:14:00,GMT"
+ ];
+ [
+ "1980-04-01T11:14:00,GMT"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ #;
+ #;
+ #;
+ [
+ "2101-12-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2105-12-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2106-01-01T01:08:00,Europe/Moscow"
+ ];
+ #;
+ #;
+ #;
+ #;
+ [
+ "2105-11-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2105-09-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2105-01-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2104-12-01T01:08:00,Europe/Moscow"
+ ];
+ [
+ "2095-09-01T01:08:00,Europe/Moscow"
+ ]
+ ];
+ [
+ [
+ "2059-06-13T00:00:00,GMT"
+ ];
+ [
+ "2059-06-13T00:00:00,GMT"
+ ];
+ [
+ "2053-06-13T00:00:00,GMT"
+ ];
+ [
+ "2045-06-13T00:00:00,GMT"
+ ];
+ [
+ "2049-06-13T00:00:00,GMT"
+ ];
+ [
+ "2049-07-13T00:00:00,GMT"
+ ];
+ [
+ "2049-09-13T00:00:00,GMT"
+ ];
+ [
+ "2050-05-13T00:00:00,GMT"
+ ];
+ [
+ "2050-06-13T00:00:00,GMT"
+ ];
+ [
+ "2059-09-13T00:00:00,GMT"
+ ];
+ [
+ "2049-05-13T00:00:00,GMT"
+ ];
+ [
+ "2049-03-13T00:00:00,GMT"
+ ];
+ [
+ "2048-07-13T00:00:00,GMT"
+ ];
+ [
+ "2048-06-13T00:00:00,GMT"
+ ];
+ [
+ "2039-03-13T00:00:00,GMT"
+ ]
+ ];
+ [
+ [
+ "2010-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2010-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2004-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1996-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2000-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2000-02-29T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2000-04-30T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2000-12-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2001-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "2010-04-30T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1999-12-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1999-10-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1999-02-28T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1999-01-31T16:15:00,Europe/Uzhgorod"
+ ];
+ [
+ "1989-10-31T16:15:00,Europe/Uzhgorod"
+ ]
+ ];
+ [
+ [
+ "2034-02-28T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2034-02-28T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2028-02-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2020-02-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2024-02-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2024-03-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2024-05-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2025-01-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2025-02-28T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2034-05-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2024-01-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2023-11-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2023-03-29T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2023-02-28T01:02:03.456789,Europe/Moscow"
+ ];
+ [
+ "2013-11-29T01:02:03.456789,Europe/Moscow"
+ ]
+ ];
+ [
+ [
+ "1980-02-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1980-02-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1974-02-01T02:00:00.444123,Europe/Moscow"
+ ];
+ #;
+ [
+ "1970-02-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1970-03-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1970-05-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1971-01-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1971-02-01T02:00:00.444123,Europe/Moscow"
+ ];
+ [
+ "1980-05-01T02:00:00.444123,Europe/Moscow"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake1969_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake1969_/results.txt
new file mode 100644
index 0000000000..eb32dc98f6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake1969_/results.txt
@@ -0,0 +1,88 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "rdate";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Date"
+ ]
+ ]
+ ];
+ [
+ "rdatetime";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Datetime"
+ ]
+ ]
+ ];
+ [
+ "rtimestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "rtzdate";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzDate"
+ ]
+ ]
+ ];
+ [
+ "rtzdatetime";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzDatetime"
+ ]
+ ]
+ ];
+ [
+ "rtztimestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1969-12-31T23:00:00,Canada/Central"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake_/results.txt
new file mode 100644
index 0000000000..01b159b33d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_SplitMake_/results.txt
@@ -0,0 +1,160 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "rdate";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Date"
+ ]
+ ]
+ ];
+ [
+ "rdatetime";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Datetime"
+ ]
+ ]
+ ];
+ [
+ "rtimestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Timestamp"
+ ]
+ ]
+ ];
+ [
+ "rtzdate";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzDate"
+ ]
+ ]
+ ];
+ [
+ "rtzdatetime";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzDatetime"
+ ]
+ ]
+ ];
+ [
+ "rtztimestamp";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "TzTimestamp"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ "0"
+ ];
+ [
+ "1800"
+ ];
+ [
+ "1800000000"
+ ];
+ #;
+ #;
+ [
+ "1970-01-01T05:00:00,Europe/Moscow"
+ ]
+ ];
+ [
+ [
+ "17880"
+ ];
+ [
+ "1544835723"
+ ];
+ [
+ "1544835723456789"
+ ];
+ [
+ "2018-12-15,Europe/Moscow"
+ ];
+ [
+ "2018-12-15T01:02:03,Europe/Moscow"
+ ];
+ [
+ "2018-12-15T01:02:03.456789,Europe/Moscow"
+ ]
+ ];
+ [
+ [
+ "49672"
+ ];
+ [
+ "4291747199"
+ ];
+ [
+ "4291747199999999"
+ ];
+ [
+ "2105-12-31,Canada/Central"
+ ];
+ [
+ "2105-12-31T16:00:00,Canada/Central"
+ ];
+ #
+ ];
+ [
+ #;
+ #;
+ #;
+ [
+ "2106-01-01,Europe/Moscow"
+ ];
+ [
+ "2106-01-01T01:00:00,Europe/Moscow"
+ ];
+ #
+ ];
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf1969_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf1969_/results.txt
new file mode 100644
index 0000000000..54614afb16
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf1969_/results.txt
@@ -0,0 +1,151 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1969-12-31 20:00:00 Canada/Central"
+ ];
+ [
+ "1969-12-31 23:00:00 Canada/Central"
+ ];
+ [
+ "1969-12-31 23:00:00 Canada/Central"
+ ];
+ [
+ "1969-12-31 22:59:56 Canada/Central"
+ ];
+ [
+ "82800000000"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf_/results.txt
new file mode 100644
index 0000000000..622ad731d9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_StartOf_/results.txt
@@ -0,0 +1,291 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Interval"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1970-01-01 04:00:00 Europe/Moscow"
+ ];
+ [
+ "1970-01-01 05:00:00 Europe/Moscow"
+ ];
+ [
+ "1970-01-01 05:00:00 Europe/Moscow"
+ ];
+ [
+ "1970-01-01 04:59:57 Europe/Moscow"
+ ];
+ [
+ "18000000000"
+ ]
+ ];
+ [
+ [
+ "2018-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-10-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-10 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 01:00:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 01:02:00 Europe/Moscow"
+ ];
+ [
+ "2018-12-15 01:01:57 Europe/Moscow"
+ ];
+ [
+ "3723456789"
+ ]
+ ];
+ [
+ [
+ "2105-01-01 00:00:00 GMT"
+ ];
+ [
+ "2105-10-01 00:00:00 GMT"
+ ];
+ [
+ "2105-12-01 00:00:00 GMT"
+ ];
+ [
+ "2105-12-28 00:00:00 GMT"
+ ];
+ [
+ "2105-12-31 00:00:00 GMT"
+ ];
+ [
+ "2105-12-31 13:00:00 GMT"
+ ];
+ [
+ "2105-12-31 16:00:00 GMT"
+ ];
+ [
+ "2105-12-31 16:15:00 GMT"
+ ];
+ [
+ "2105-12-31 16:23:40 GMT"
+ ];
+ [
+ "2105-12-31 16:23:44 GMT"
+ ];
+ [
+ "59025000000"
+ ]
+ ];
+ [
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2105-12-28 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 01:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 01:00:00 Europe/Moscow"
+ ];
+ [
+ "2106-01-01 00:59:58 Europe/Moscow"
+ ];
+ [
+ "3600000000"
+ ]
+ ];
+ [
+ [
+ "2019-01-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-01 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-22 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 00:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 12:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 12:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 12:00:00 Europe/Moscow"
+ ];
+ [
+ "2019-07-24 11:59:57 Europe/Moscow"
+ ];
+ [
+ "43200000000"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_To_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_To_/results.txt
new file mode 100644
index 0000000000..eb4422e211
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_To_/results.txt
@@ -0,0 +1,332 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "interval_to_days";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "interval_to_hours";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "interval_to_minutes";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "interval_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "interval_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "interval_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "date_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_seconds";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "date_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_msec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "date_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "datetime_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "timestamp_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdate_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tzdatetime_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "tztimestamp_to_usec";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2"
+ ];
+ [
+ "58"
+ ];
+ [
+ "3480"
+ ];
+ [
+ "208800"
+ ];
+ [
+ "208800000"
+ ];
+ [
+ "208800000000"
+ ];
+ [
+ "1542844800"
+ ];
+ [
+ "1542921619"
+ ];
+ [
+ "1542921619"
+ ];
+ [
+ "1542758400"
+ ];
+ [
+ "1542910819"
+ ];
+ [
+ "1542910819"
+ ];
+ [
+ "1542844800000"
+ ];
+ [
+ "1542921619000"
+ ];
+ [
+ "1542921619345"
+ ];
+ [
+ "1542758400000"
+ ];
+ [
+ "1542910819000"
+ ];
+ [
+ "1542910819345"
+ ];
+ [
+ "1542844800000000"
+ ];
+ [
+ "1542921619000000"
+ ];
+ [
+ "1542921619345678"
+ ];
+ [
+ "1542758400000000"
+ ];
+ [
+ "1542910819000000"
+ ];
+ [
+ "1542910819345678"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_TzToDate_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_TzToDate_/results.txt
new file mode 100644
index 0000000000..c6fd6ea8b9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_TzToDate_/results.txt
@@ -0,0 +1,52 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "2000-01-01";
+ "2000-01-01,Europe/Moscow";
+ "1999-12-31";
+ "2000-01-01,Europe/Moscow"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_UpdateTz_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_UpdateTz_/results.txt
new file mode 100644
index 0000000000..9ebcadb565
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_UpdateTz_/results.txt
@@ -0,0 +1,64 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1999-12-31T21:00:00Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1999-12-31T21:00:00Z"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt
new file mode 100644
index 0000000000..75dfcd0b39
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt
@@ -0,0 +1,236 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column17";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2005-12-01T21:20:19.345678,GMT"
+ ];
+ #;
+ [
+ "2001-07-01T21:20:19.345678,GMT"
+ ];
+ #;
+ [
+ "2001-12-20T21:20:19.345678,GMT"
+ ];
+ #;
+ #;
+ [
+ "2001-12-01T11:10:09.345678,GMT"
+ ];
+ [
+ "2001-12-01T11:20:19.345678,GMT"
+ ];
+ #;
+ [
+ "2001-12-01T21:10:19.345678,GMT"
+ ];
+ #;
+ [
+ "2001-12-01T21:20:09.345678,GMT"
+ ];
+ #;
+ [
+ "2001-12-01T21:20:19.123456,GMT"
+ ];
+ #;
+ [
+ "2001-12-01T21:20:19.345678,America/Creston"
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_yql-14977_/results.txt b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_yql-14977_/results.txt
new file mode 100644
index 0000000000..c2ee1b5e2e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/canondata/test.test_yql-14977_/results.txt
@@ -0,0 +1,33 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "May/15/2022"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in
new file mode 100644
index 0000000000..bd5a96985b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in
@@ -0,0 +1,6 @@
+{
+ "fdate"="2018-11-22";
+ "fdatetime"="2018-11-22T21:20:19Z";
+ "ftimestamp"="2018-11-22T21:20:19.345678Z";
+};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in.attr
new file mode 100644
index 0000000000..d9a16bcd3d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.in.attr
@@ -0,0 +1,31 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.sql
new file mode 100644
index 0000000000..c7e442629c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockGet.sql
@@ -0,0 +1,30 @@
+/* syntax version 1 */
+pragma UseBlocks;
+insert into @t
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ from Input;
+
+commit;
+SELECT
+ DateTime::GetHour(`date`) as date_hour,
+ DateTime::GetMinute(`date`) as date_minute,
+ DateTime::GetSecond(`date`) as date_second,
+ DateTime::GetMillisecondOfSecond(`date`) as date_milli,
+ DateTime::GetMicrosecondOfSecond(`date`) as date_micro,
+
+ DateTime::GetHour(`datetime`) as datetime_hour,
+ DateTime::GetMinute(`datetime`) as datetime_minute,
+ DateTime::GetSecond(`datetime`) as datetime_second,
+ DateTime::GetMillisecondOfSecond(`datetime`) as datetime_milli,
+ DateTime::GetMicrosecondOfSecond(`datetime`) as datetime_micro,
+
+ DateTime::GetHour(`timestamp`) as timestamp_hour,
+ DateTime::GetMinute(`timestamp`) as timestamp_minute,
+ DateTime::GetSecond(`timestamp`) as timestamp_second,
+ DateTime::GetMillisecondOfSecond(`timestamp`) as timestamp_milli,
+ DateTime::GetMicrosecondOfSecond(`timestamp`) as timestamp_micro,
+FROM @t;
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in
new file mode 100644
index 0000000000..df7d2d91ab
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in
@@ -0,0 +1,10 @@
+{
+ "fdate"="2018-11-22";
+ "fdatetime"="2018-11-22T21:20:19Z";
+ "ftimestamp"="2018-11-22T21:20:19.345678Z";
+ "finterval"="P2DT10H";
+ "ftzdate"="2018-11-22,Europe/Moscow";
+ "ftzdatetime"="2018-11-22T21:20:19,Europe/Moscow";
+ "ftztimestamp"="2018-11-22T21:20:19.345678,Europe/Moscow"
+};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in.attr
new file mode 100644
index 0000000000..d239a6ed78
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.in.attr
@@ -0,0 +1,59 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "finterval";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.sql
new file mode 100644
index 0000000000..243c4d2b4d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/BlockTo.sql
@@ -0,0 +1,41 @@
+/* syntax version 1 */
+pragma UseBlocks;
+insert into @t
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ cast(finterval as Interval) as `interval`,
+ cast(ftzdate as TzDate) as `tzdate`,
+ cast(ftzdatetime as TzDatetime) as `tzdatetime`,
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input;
+
+commit;
+select
+ DateTime::ToSeconds(`interval`) as interval_to_seconds,
+ DateTime::ToMilliseconds(`interval`) as interval_to_msec,
+ DateTime::ToMicroseconds(`interval`) as interval_to_usec,
+
+ DateTime::ToSeconds(`date`) as date_to_seconds,
+ DateTime::ToSeconds(`datetime`) as datetime_to_seconds,
+ DateTime::ToSeconds(`timestamp`) as timestamp_to_seconds,
+ DateTime::ToSeconds(`tzdate`) as tzdate_to_seconds,
+ DateTime::ToSeconds(`tzdatetime`) as tzdatetime_to_seconds,
+ DateTime::ToSeconds(`tztimestamp`) as tztimestamp_to_seconds,
+
+ DateTime::ToMilliseconds(`date`) as date_to_msec,
+ DateTime::ToMilliseconds(`datetime`) as datetime_to_msec,
+ DateTime::ToMilliseconds(`timestamp`) as timestamp_to_msec,
+ DateTime::ToMilliseconds(`tzdate`) as tzdate_to_msec,
+ DateTime::ToMilliseconds(`tzdatetime`) as tzdatetime_to_msec,
+ DateTime::ToMilliseconds(`tztimestamp`) as tztimestamp_to_msec,
+
+ DateTime::ToMicroseconds(`date`) as date_to_usec,
+ DateTime::ToMicroseconds(`datetime`) as datetime_to_usec,
+ DateTime::ToMicroseconds(`timestamp`) as timestamp_to_usec,
+ DateTime::ToMicroseconds(`tzdate`) as tzdate_to_usec,
+ DateTime::ToMicroseconds(`tzdatetime`) as tzdatetime_to_usec,
+ DateTime::ToMicroseconds(`tztimestamp`) as tztimestamp_to_usec
+from @t;
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in
new file mode 100644
index 0000000000..f9390e7c2b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in
@@ -0,0 +1,4 @@
+{"ftztimestamp" = "1970-01-01T00:00:00,GMT"};
+{"ftztimestamp" = "2018-12-01T01:02:03.456789,Europe/Moscow"};
+{"ftztimestamp" = "2011-03-13T02:15:00,America/Los_Angeles"};
+{"ftztimestamp" = "2011-11-06T01:15:00,America/Los_Angeles"};
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in.attr
new file mode 100644
index 0000000000..2cc4f8c0d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Format.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.sql
new file mode 100644
index 0000000000..25daf1105d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Format.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+$format = DateTime::Format("%% year %Y monthFullName %B monthShortName %b month %m day %d hours %H minutes %M seconds %S tz %z tzname %Z text");
+
+select
+ $format(DateTime::Split(cast(ftztimestamp as TzTimestamp)))
+from Input
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/From.in b/ydb/library/yql/udfs/common/datetime2/test/cases/From.in
new file mode 100644
index 0000000000..dd293eaaa7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/From.in
@@ -0,0 +1,12 @@
+{
+ "fts_seconds" = 3875345u;
+ "fts_msec" = 3875345000u;
+ "fts_usec" = 3875345000000u;
+
+ "fdays" = 7;
+ "fhours" = 168;
+ "fminutes" = 10080;
+ "fseconds" = 604800;
+ "fmsec" = 604800000;
+ "fusec" = -604800000000;
+};
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/From.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/From.in.attr
new file mode 100644
index 0000000000..538f83ab72
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/From.in.attr
@@ -0,0 +1,73 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fts_seconds";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "fts_msec";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "fts_usec";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "fdays";
+ [
+ "DataType";
+ "Int16"
+ ]
+ ];
+ [
+ "fhours";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "fminutes";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "fseconds";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "fmsec";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "fusec";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/From.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/From.sql
new file mode 100644
index 0000000000..c596e33f58
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/From.sql
@@ -0,0 +1,14 @@
+/* syntax version 1 */
+select
+ DateTime::FromSeconds(fts_seconds) as ts_seconds,
+ DateTime::FromMilliseconds(fts_msec) as ts_msec,
+ DateTime::FromMicroseconds(fts_usec) as ts_usec,
+ DateTime::FromMicroseconds(fts_msec * fts_msec) as ts_empty,
+
+ DateTime::IntervalFromDays(fdays) as interval_days,
+ DateTime::IntervalFromHours(fhours) as interval_hours,
+ DateTime::IntervalFromMinutes(fminutes) as interval_minutes,
+ DateTime::IntervalFromSeconds(fseconds) as interval_seconds,
+ DateTime::IntervalFromMilliseconds(fmsec) as interval_msec,
+ DateTime::IntervalFromMicroseconds(fusec) as interval_usec
+from Input
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in
new file mode 100644
index 0000000000..06d6029580
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in
@@ -0,0 +1,10 @@
+{"ftztimestamp"="1970-01-01T11:14:00.000000,GMT"};
+{"ftztimestamp"="1970-01-02T14:08:00.000000,GMT"};
+{"ftztimestamp"="1970-02-01T17:03:00.000000,GMT"};
+{"ftztimestamp"="1970-09-03T07:22:00.000000,GMT"};
+{"ftztimestamp"="1970-12-31T23:59:59.999999,GMT"};
+{"ftztimestamp"="1971-01-01T00:00:00.000000,GMT"};
+{"ftztimestamp"="1971-01-14T00:00:00.000000,GMT"};
+{"ftztimestamp"="1978-01-25T16:15:00.000000,Europe/Uzhgorod"};
+{"ftztimestamp"="2018-12-01T01:02:03.456789,Europe/Moscow"};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in.attr
new file mode 100644
index 0000000000..2cc4f8c0d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Get.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.sql
new file mode 100644
index 0000000000..99ec9528fc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Get.sql
@@ -0,0 +1,23 @@
+/* syntax version 1 */
+SELECT
+ DateTime::GetYear(tm) as ryear,
+ DateTime::GetDayOfYear(tm) as rdayofyear,
+ DateTime::GetMonth(tm) as rmonth,
+ DateTime::GetMonthName(tm) as rmonthname,
+ DateTime::GetWeekOfYear(tm) as rweekofyear,
+ DateTime::GetWeekOfYearIso8601(tm) as rweekofyeariso8601,
+ DateTime::GetDayOfMonth(tm) as rdayofmonth,
+ DateTime::GetDayOfWeek(tm) as rdayofweek,
+ DateTime::GetDayOfWeekName(tm) as rdayofweekname,
+ DateTime::GetHour(tm) as rhour,
+ DateTime::GetMinute(tm) as rminute,
+ DateTime::GetSecond(tm) as rsecond,
+ DateTime::GetMillisecondOfSecond(tm) as rmsec,
+ DateTime::GetMicrosecondOfSecond(tm) as rusec,
+ DateTime::GetTimezoneId(tm) as rtz,
+ DateTime::GetTimezoneName(tm) as rtzname
+FROM (
+ SELECT
+ DateTime::Split(CAST(ftztimestamp as TzTimestamp)) as tm
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in
new file mode 100644
index 0000000000..26f8d00679
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in
@@ -0,0 +1,9 @@
+{
+ "fdate"="2018-12-15";
+ "fdatetime"="2018-12-15T01:02:03Z";
+ "ftimestamp"="2018-12-15T01:02:03.456789Z";
+ "ftzdate"="2018-12-15,Europe/Moscow";
+ "ftzdatetime"="2018-12-15T01:02:03,Europe/Moscow";
+ "ftztimestamp"="2018-12-15T01:02:03.456789,Europe/Moscow"
+};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in.attr
new file mode 100644
index 0000000000..876e4f8a19
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.in.attr
@@ -0,0 +1,52 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.sql
new file mode 100644
index 0000000000..df19228e82
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/ImplicitSplit.sql
@@ -0,0 +1,20 @@
+/* syntax version 1 */
+$format = DateTime::Format("%Y%m%d %H%M%S %Z");
+
+select
+ $format(`date`),
+ $format(`datetime`),
+ $format(`timestamp`),
+ $format(`tzdate`),
+ $format(`tzdatetime`),
+ $format(`tztimestamp`)
+from (
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ cast(ftzdate as TzDate) as `tzdate`,
+ cast(ftzdatetime as TzDatetime) as `tzdatetime`,
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in
new file mode 100644
index 0000000000..fa560d488c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in
@@ -0,0 +1,55 @@
+{
+ "fdatetime1"="2011 03 08 010203 Europe/Moscow text";
+ "fdatetime2"="%text% 02/23/2022 12:00:00.";
+ "fdatetime3"="march/08/2011";
+ "fdatetime4"="mar/08/2011";
+
+ "frfc822"="Fri, 4 Mar 2005 19:34:45 EST";
+ "fiso8601"="2009-02-14T02:31:30+0300";
+ "fhttp"="Sunday, 06-Nov-94 08:49:37 GMT";
+ "fx509"="20091014165533Z";
+};
+{
+ "fdatetime1"="2011 03 08 010203.22 Europe/Moscow text";
+ "fdatetime2"="%text% 02/23/2022 12:00:00.666666";
+ "fdatetime3"="November/08/2011";
+ "fdatetime4"="Nov/08/2011";
+
+ "frfc822"="4 Mar 05 19:34 -0330";
+ "fiso8601"="2009-09-19 03:37:03.012331+04:00";
+ "fhttp"="Sun Nov 6 08:49:37 1994";
+ "fx509"="990104074212Z";
+};
+{
+ "fdatetime1"="2011 03 08 010203 Europe/Moscow bar";
+ "fdatetime2"="%text% 02/23/2022 12:00:00.999999999";
+ "fdatetime3"="JanUAry/08/2011";
+ "fdatetime4"="jAN/08/2011";
+
+ "frfc822"="17 Nov 2008 19:34:45";
+ "fiso8601"="1990-03-151Y15:16:17.18";
+ "fhttp"="1990-03-151Y15:16:17.18";
+ "fx509"="500101000000Z";
+};
+{
+ "fdatetime1"="2011 03 08 010203 Europe/Moscow bar";
+ "fdatetime2"="%text% 02/23/2022 12:00:00.42";
+ "fdatetime3"="JanUArY/08/2011";
+ "fdatetime4"="JAN/08/2011";
+
+ "frfc822"="17 Nov 2008 19:34:45";
+ "fiso8601"="1990-03-151Y15:16:17.182";
+ "fhttp"="1990-03-151Y15:16:17.182";
+ "fx509"="500101000000Z";
+};
+{
+ "fdatetime1"="2011 03 08 010203 Europe/Moscow bar";
+ "fdatetime2"="%text% 02/23/2022 12:00:00.82387468293473839939483932923";
+ "fdatetime3"="JanUArY/08/2011";
+ "fdatetime4"="feb/08/2011";
+
+ "frfc822"="17 Nov 2008 19:34:45";
+ "fiso8601"="1990-03-151Y15:16:17.182";
+ "fhttp"="1990-03-151Y15:16:17.182";
+ "fx509"="500101000000Z";
+};
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in.attr
new file mode 100644
index 0000000000..935646e0df
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.in.attr
@@ -0,0 +1,66 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdatetime1";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime3";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime4";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "frfc822";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fiso8601";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fhttp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fx509";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.sql
new file mode 100644
index 0000000000..b39fc6c244
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Parse.sql
@@ -0,0 +1,25 @@
+/* syntax version 1 */
+$parse1 = DateTime::Parse("%Y %m %d %H%M%S %Z text");
+$parse2 = DateTime::Parse("%%text%% %m/%d/%Y %H:%M:%S");
+$parse3 = DateTime::Parse("%B/%d/%Y");
+$parse4 = DateTime::Parse("%b/%d/%Y");
+
+
+$format1 = DateTime::Format("%Y-%m-%dT%H:%M:%S,%Z");
+$format2 = DateTime::Format("%Y%m%d %H%M%S %z");
+$format3 = DateTime::Format("%Y%m%d");
+
+select
+ $format1($parse1(fdatetime1)),
+ $format2($parse1(fdatetime1)),
+ $format1($parse2(fdatetime2)),
+ $format2($parse2(fdatetime2)),
+
+ $format3($parse3(fdatetime3)),
+ $format3($parse4(fdatetime4)),
+
+ $format1(DateTime::ParseRfc822(frfc822)),
+ $format1(DateTime::ParseIso8601(fiso8601)),
+ $format1(DateTime::ParseHttp(fhttp)),
+ $format1(DateTime::ParseX509(fx509))
+from Input
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/ParseIso8601.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/ParseIso8601.sql
new file mode 100644
index 0000000000..c79bdbf5f1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/ParseIso8601.sql
@@ -0,0 +1 @@
+select DateTime::ParseIso8601("2106-01-01T00:00:00"), DateTime::ParseIso8601("2200-01-01T00:00:00"), DateTime::ParseIso8601("2106-02-01T00:00:00"); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/ParseLim.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/ParseLim.sql
new file mode 100644
index 0000000000..2ecd70fcbb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/ParseLim.sql
@@ -0,0 +1,19 @@
+$dt_parser1 = DateTime::Parse('%Y-%m-%d');
+$dt_parser2 = DateTime::Parse('%Y-%m-%d %H:%M:%S');
+$dt_parser1z = DateTime::Parse('%Y-%m-%d %Z');
+$dt_parser2z = DateTime::Parse('%Y-%m-%d %H:%M:%S %Z');
+
+SELECT
+ $dt_parser1("2105-12-31"), $dt_parser1("2106-01-01"),
+ $dt_parser2("2105-12-31 23:59:59"), $dt_parser2("2106-01-01 00:00:00"),
+ $dt_parser2("2105-12-31 23:59:59.999999"), $dt_parser2("2106-01-01 00:00:00.000000"),
+ $dt_parser1z("2105-12-31 Etc/GMT+11"),
+ $dt_parser1z("2106-01-01 Etc/GMT-1"),
+ $dt_parser2z("2105-12-31 23:00:00 Etc/GMT+1"),
+ $dt_parser2z("2105-12-31 22:59:59.999999 Etc/GMT+1"),
+ $dt_parser1("1970-01-01"), $dt_parser1("1969-12-31"),
+ $dt_parser2("1970-01-01 00:00:00"), $dt_parser2("1969-12-31 23:59:59"),
+ $dt_parser2("1969-12-31 23:59:59.999999"), $dt_parser2("1970-01-01 00:00:00.000000"),
+ $dt_parser2z("1969-12-31 23:00:00 Etc/GMT+1"),
+ $dt_parser2z("1969-12-31 22:59:59.999999 Etc/GMT+1");
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.in
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.in
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.sql
new file mode 100644
index 0000000000..d92b0ade4e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Repr.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+select
+ DateTime::Parse("%Y.%m.%d")("2016.08.15"),
+ DateTime::Split(AddTimezone(DateTime("2017-01-01T10:00:00Z"),"Europe/Moscow"))
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in
new file mode 100644
index 0000000000..7f81c5d074
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in
@@ -0,0 +1,8 @@
+{"ftztimestamp"="2001-11-17T21:20:19.345678,GMT"; };
+{"ftztimestamp"="1970-01-01T11:14:00.000000,GMT"};
+{"ftztimestamp"="2105-12-01T01:08:00.000000,Europe/Moscow"};
+{"ftztimestamp"="2049-06-13T00:00:00.000000,GMT"};
+{"ftztimestamp"="2000-01-31T16:15:00.000000,Europe/Uzhgorod"};
+{"ftztimestamp"="2024-02-29T01:02:03.456789,Europe/Moscow"};
+{"ftztimestamp"="1970-02-01T02:00:00.444123,Europe/Moscow"};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in.attr
new file mode 100644
index 0000000000..3915337be3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.sql
new file mode 100644
index 0000000000..b421c55868
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Shift.sql
@@ -0,0 +1,22 @@
+SELECT
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftYears(tm, 10)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftYears(tm, 10)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftQuarters(tm, 16)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftQuarters(tm, -16)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 0)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 1)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 3)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 11)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 12)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, 123)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, -1)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, -3)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, -11)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, -12)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::ShiftMonths(tm, -123)) as String)
+from (
+ select
+ cast(ftztimestamp as TzTimestamp) as tm
+ from Input
+);
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in
new file mode 100644
index 0000000000..580acf3f86
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in
@@ -0,0 +1,49 @@
+{
+ "fdate"="1945-05-09";
+ "fdatetime"="1945-05-09T00:00:00Z";
+ "ftimestamp"="1945-05-09T00:00:00.000000Z";
+ "ftzdate"="1945-05-09,Europe/Moscow";
+ "ftzdatetime"="1945-05-09T00:00:00,Europe/Moscow";
+ "ftztimestamp"="1945-05-09T00:00:00.000000,Europe/Moscow"
+};
+{
+ "fdate"="1970-01-01";
+ "fdatetime"="1970-01-01T00:30:00Z";
+ "ftimestamp"="1970-01-01T00:30:00.000000Z";
+ "ftzdate"="1970-01-01,Europe/Moscow";
+ "ftzdatetime"="1970-01-01T01:00:00,Europe/Moscow";
+ "ftztimestamp"="1970-01-01T05:00:00.000000,Europe/Moscow"
+};
+{
+ "fdate"="2018-12-15";
+ "fdatetime"="2018-12-15T01:02:03Z";
+ "ftimestamp"="2018-12-15T01:02:03.456789Z";
+ "ftzdate"="2018-12-15,Europe/Moscow";
+ "ftzdatetime"="2018-12-15T01:02:03,Europe/Moscow";
+ "ftztimestamp"="2018-12-15T01:02:03.456789,Europe/Moscow"
+};
+{
+ "fdate"="2105-12-31";
+ "fdatetime"="2105-12-31T23:59:59Z";
+ "ftimestamp"="2105-12-31T23:59:59.999999Z";
+ "ftzdate"="2105-12-31,Canada/Central";
+ "ftzdatetime"="2105-12-31T16:00:00,Canada/Central";
+ "ftztimestamp"="2105-12-31T23:00:00.000000,Canada/Central"
+};
+{
+ "fdate"="2106-01-01";
+ "fdatetime"="2106-01-01T00:00:00Z";
+ "ftimestamp"="2106-01-01T00:00:00.000000Z";
+ "ftzdate"="2106-01-01,Europe/Moscow";
+ "ftzdatetime"="2106-01-01T01:00:00,Europe/Moscow";
+ "ftztimestamp"="2106-01-01T05:00:00.000000,Europe/Moscow"
+};
+{
+ "fdate"="2117-11-07";
+ "fdatetime"="2117-11-07T00:00:00Z";
+ "ftimestamp"="2117-11-07T00:00:00.000000Z";
+ "ftzdate"="2117-11-07,Europe/Moscow";
+ "ftzdatetime"="2117-11-07T00:00:00,Europe/Moscow";
+ "ftztimestamp"="2117-11-07T00:00:00.000000,Europe/Moscow"
+};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in.attr
new file mode 100644
index 0000000000..876e4f8a19
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.in.attr
@@ -0,0 +1,52 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.sql
new file mode 100644
index 0000000000..9a8c08a8db
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+select
+ DateTime::MakeDate(DateTime::Split(`date`)) as rdate,
+ DateTime::MakeDatetime(DateTime::Split(`datetime`)) as rdatetime,
+ DateTime::MakeTimestamp(DateTime::Split(`timestamp`)) as rtimestamp,
+ DateTime::MakeTzDate(DateTime::Split(`tzdate`)) as rtzdate,
+ DateTime::MakeTzDatetime(DateTime::Split(`tzdatetime`)) as rtzdatetime,
+ DateTime::MakeTzTimestamp(DateTime::Split(`tztimestamp`)) as rtztimestamp
+from (
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ cast(ftzdate as TzDate) as `tzdate`,
+ cast(ftzdatetime as TzDatetime) as `tzdatetime`,
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.cfg b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.cfg
new file mode 100644
index 0000000000..b5a6eac7ad
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.cfg
@@ -0,0 +1 @@
+in plato.Input SplitMake1969.in
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in
new file mode 100644
index 0000000000..70a53282f3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in
@@ -0,0 +1,8 @@
+{
+ "fdate"="1969-12-31";
+ "fdatetime"="1969-12-31T23:00:00Z";
+ "ftimestamp"="1969-12-31T23:00:00.000000Z";
+ "ftzdate"="1969-12-31,Canada/Central";
+ "ftzdatetime"="1969-12-31T16:00:00,Canada/Central";
+ "ftztimestamp"="1969-12-31T23:00:00.000000,Canada/Central"
+}; \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in.attr
new file mode 100644
index 0000000000..876e4f8a19
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.in.attr
@@ -0,0 +1,52 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.sql
new file mode 100644
index 0000000000..9a8c08a8db
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/SplitMake1969.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+select
+ DateTime::MakeDate(DateTime::Split(`date`)) as rdate,
+ DateTime::MakeDatetime(DateTime::Split(`datetime`)) as rdatetime,
+ DateTime::MakeTimestamp(DateTime::Split(`timestamp`)) as rtimestamp,
+ DateTime::MakeTzDate(DateTime::Split(`tzdate`)) as rtzdate,
+ DateTime::MakeTzDatetime(DateTime::Split(`tzdatetime`)) as rtzdatetime,
+ DateTime::MakeTzTimestamp(DateTime::Split(`tztimestamp`)) as rtztimestamp
+from (
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ cast(ftzdate as TzDate) as `tzdate`,
+ cast(ftzdatetime as TzDatetime) as `tzdatetime`,
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in
new file mode 100644
index 0000000000..f482585e72
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in
@@ -0,0 +1,15 @@
+{
+ "ftztimestamp"="1970-01-01T05:00:00.000000,Europe/Moscow"
+};
+{
+ "ftztimestamp"="2018-12-15T01:02:03.456789,Europe/Moscow"
+};
+{
+ "ftztimestamp"="2105-12-31T16:23:45.000000,GMT"
+};
+{
+ "ftztimestamp"="2106-01-01T01:00:00.000000,Europe/Moscow"
+};
+{
+ "ftztimestamp"="2019-07-24T12:00:00,Europe/Moscow"
+};
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in.attr
new file mode 100644
index 0000000000..2cc4f8c0d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.sql
new file mode 100644
index 0000000000..81fad12632
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf.sql
@@ -0,0 +1,20 @@
+/* syntax version 1 */
+$format = DateTime::Format("%Y-%m-%d %H:%M:%S %Z");
+
+select
+ $format(DateTime::StartOfYear(`tztimestamp`)),
+ $format(DateTime::StartOfQuarter(`tztimestamp`)),
+ $format(DateTime::StartOfMonth(`tztimestamp`)),
+ $format(DateTime::StartOfWeek(`tztimestamp`)),
+ $format(DateTime::StartOfDay(`tztimestamp`)),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT13H"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT4H"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT15M"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT20S"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT7S"))),
+ DateTime::TimeOfDay(`tztimestamp`)
+from (
+ select
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.cfg b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.cfg
new file mode 100644
index 0000000000..d012f94fa2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.cfg
@@ -0,0 +1 @@
+in plato.Input StartOf1969.in
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in
new file mode 100644
index 0000000000..1711aa3813
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in
@@ -0,0 +1,3 @@
+{
+ "ftztimestamp"="1969-12-31T23:00:00.000000,Canada/Central"
+}; \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in.attr
new file mode 100644
index 0000000000..2cc4f8c0d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.sql
new file mode 100644
index 0000000000..81fad12632
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/StartOf1969.sql
@@ -0,0 +1,20 @@
+/* syntax version 1 */
+$format = DateTime::Format("%Y-%m-%d %H:%M:%S %Z");
+
+select
+ $format(DateTime::StartOfYear(`tztimestamp`)),
+ $format(DateTime::StartOfQuarter(`tztimestamp`)),
+ $format(DateTime::StartOfMonth(`tztimestamp`)),
+ $format(DateTime::StartOfWeek(`tztimestamp`)),
+ $format(DateTime::StartOfDay(`tztimestamp`)),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT13H"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT4H"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT15M"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT20S"))),
+ $format(DateTime::StartOf(`tztimestamp`, Interval("PT7S"))),
+ DateTime::TimeOfDay(`tztimestamp`)
+from (
+ select
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/To.in b/ydb/library/yql/udfs/common/datetime2/test/cases/To.in
new file mode 100644
index 0000000000..df7d2d91ab
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/To.in
@@ -0,0 +1,10 @@
+{
+ "fdate"="2018-11-22";
+ "fdatetime"="2018-11-22T21:20:19Z";
+ "ftimestamp"="2018-11-22T21:20:19.345678Z";
+ "finterval"="P2DT10H";
+ "ftzdate"="2018-11-22,Europe/Moscow";
+ "ftzdatetime"="2018-11-22T21:20:19,Europe/Moscow";
+ "ftztimestamp"="2018-11-22T21:20:19.345678,Europe/Moscow"
+};
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/To.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/To.in.attr
new file mode 100644
index 0000000000..d239a6ed78
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/To.in.attr
@@ -0,0 +1,59 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "fdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "fdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "finterval";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdate";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftzdatetime";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/To.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/To.sql
new file mode 100644
index 0000000000..6031c7559a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/To.sql
@@ -0,0 +1,40 @@
+/* syntax version 1 */
+select
+ DateTime::ToDays(`interval`) as interval_to_days,
+ DateTime::ToHours(`interval`) as interval_to_hours,
+ DateTime::ToMinutes(`interval`) as interval_to_minutes,
+ DateTime::ToSeconds(`interval`) as interval_to_seconds,
+ DateTime::ToMilliseconds(`interval`) as interval_to_msec,
+ DateTime::ToMicroseconds(`interval`) as interval_to_usec,
+
+ DateTime::ToSeconds(`date`) as date_to_seconds,
+ DateTime::ToSeconds(`datetime`) as datetime_to_seconds,
+ DateTime::ToSeconds(`timestamp`) as timestamp_to_seconds,
+ DateTime::ToSeconds(`tzdate`) as tzdate_to_seconds,
+ DateTime::ToSeconds(`tzdatetime`) as tzdatetime_to_seconds,
+ DateTime::ToSeconds(`tztimestamp`) as tztimestamp_to_seconds,
+
+ DateTime::ToMilliseconds(`date`) as date_to_msec,
+ DateTime::ToMilliseconds(`datetime`) as datetime_to_msec,
+ DateTime::ToMilliseconds(`timestamp`) as timestamp_to_msec,
+ DateTime::ToMilliseconds(`tzdate`) as tzdate_to_msec,
+ DateTime::ToMilliseconds(`tzdatetime`) as tzdatetime_to_msec,
+ DateTime::ToMilliseconds(`tztimestamp`) as tztimestamp_to_msec,
+
+ DateTime::ToMicroseconds(`date`) as date_to_usec,
+ DateTime::ToMicroseconds(`datetime`) as datetime_to_usec,
+ DateTime::ToMicroseconds(`timestamp`) as timestamp_to_usec,
+ DateTime::ToMicroseconds(`tzdate`) as tzdate_to_usec,
+ DateTime::ToMicroseconds(`tzdatetime`) as tzdatetime_to_usec,
+ DateTime::ToMicroseconds(`tztimestamp`) as tztimestamp_to_usec
+from (
+ select
+ cast(fdate as Date) as `date`,
+ cast(fdatetime as Datetime) as `datetime`,
+ cast(ftimestamp as Timestamp) as `timestamp`,
+ cast(finterval as Interval) as `interval`,
+ cast(ftzdate as TzDate) as `tzdate`,
+ cast(ftzdatetime as TzDatetime) as `tzdatetime`,
+ cast(ftztimestamp as TzTimestamp) as `tztimestamp`
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/TzToDate.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/TzToDate.sql
new file mode 100644
index 0000000000..383e2d831e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/TzToDate.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+select
+cast(DateTime::MakeDate(TzDatetime("2000-01-01T12:00:00,Europe/Moscow") ) as String),
+cast(DateTime::MakeTzDate(TzDatetime("2000-01-01T12:00:00,Europe/Moscow") ) as String),
+
+cast(DateTime::MakeDate(TzDatetime("2000-01-01T00:00:00,Europe/Moscow") ) as String),
+cast(DateTime::MakeTzDate(TzDatetime("2000-01-01T00:00:00,Europe/Moscow") ) as String);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in
new file mode 100644
index 0000000000..07ac535051
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in
@@ -0,0 +1 @@
+{ "ftztimestamp"="2001-12-01T21:20:19.345678,GMT"; };
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in.attr b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in.attr
new file mode 100644
index 0000000000..3915337be3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.in.attr
@@ -0,0 +1,17 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "ftztimestamp";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ ]
+ ]
+ }
+}
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/Update.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.sql
new file mode 100644
index 0000000000..59221221b3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/Update.sql
@@ -0,0 +1,25 @@
+/* syntax version 1 */
+SELECT
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2005)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2200 as Year)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, 7)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 13 as Month)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, NULL, 20)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 32 as Day)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2018, 2, 30)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, NULL, NULL, 11, 10, 9)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 11 as Hour)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 24 as Hour)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 10 as Minute)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 60 as Minute)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 9 as Second)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 60 as Second)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 123456 as Microsecond)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2000000 as Microsecond)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 100 as TimezoneId)) as String),
+ cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 1000 as TimezoneId)) as String)
+from (
+ select
+ cast(ftztimestamp as TzTimestamp) as tm
+ from Input
+);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/UpdateTz.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/UpdateTz.sql
new file mode 100644
index 0000000000..b756270ef7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/UpdateTz.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+pragma warning("disable","4510");
+select cast(DateTime::MakeDatetime(
+ DateTime::Update(Datetime("2000-01-01T00:00:00Z"), Yql::TimezoneId("Europe/Moscow") as TimezoneId)
+) as string);
+
+select cast(DateTime::MakeDatetime(
+ DateTime::Update(Datetime("2000-01-01T00:00:00Z"), "Europe/Moscow" as Timezone)
+) as string);
diff --git a/ydb/library/yql/udfs/common/datetime2/test/cases/yql-14977.sql b/ydb/library/yql/udfs/common/datetime2/test/cases/yql-14977.sql
new file mode 100644
index 0000000000..92d2660425
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/cases/yql-14977.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+$parse = DateTime::Parse("%B/%d/%Y");
+$format = DateTime::Format("%b/%d/%Y");
+
+select $format($parse("mAy/15/2022"));
+
diff --git a/ydb/library/yql/udfs/common/datetime2/test/ya.make b/ydb/library/yql/udfs/common/datetime2/test/ya.make
new file mode 100644
index 0000000000..070b15beb7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/datetime2/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/datetime2)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/datetime2/ya.make b/ydb/library/yql/udfs/common/datetime2/ya.make
index 369ddea268..be6ed9c2c1 100644
--- a/ydb/library/yql/udfs/common/datetime2/ya.make
+++ b/ydb/library/yql/udfs/common/datetime2/ya.make
@@ -19,3 +19,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
diff --git a/ydb/library/yql/udfs/common/digest/test/canondata/result.json b/ydb/library/yql/udfs/common/digest/test/canondata/result.json
new file mode 100644
index 0000000000..fb6112fc5b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/digest/test/canondata/result.json
@@ -0,0 +1,7 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/digest/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/digest/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..0ffb24b87b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/digest/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,495 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "crc32c";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "crc64";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "fnv32";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "fnv64";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "murmur";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "murmur32";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "murmur2a";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "murmur2a32";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "city";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "city128";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint64"
+ ];
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "numeric";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "md5hex";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "md5raw";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "md5halfmix";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "argon2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "blake2b";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "blake2bunkeyed";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "blake2bkeyed";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "sip";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "highway";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "farmfing";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "farmfing2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "farmfing32";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "farmfing64";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "farmfing128";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint64"
+ ];
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "sfh";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "sha1";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "sha256";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "inthash64";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "xxhash";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "xxhash128";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint64"
+ ];
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "2432014819";
+ "17728638330159804320";
+ "84696366";
+ "12638153115695167470";
+ "746762829127501960";
+ "1228156847";
+ "5654386555365545660";
+ "1466639702";
+ "11413460447292444913";
+ [
+ "125830901799957853";
+ "7569582475522398857"
+ ];
+ "2320827452992767577";
+ "c4ca4238a0b923820dcc509a6f75849b";
+ [
+ "xMpCOKC5I4INzFCab3WEmw=="
+ ];
+ "14973526590288695970";
+ [
+ "vjqkEHgWMA9RlnF/Dlkiqoxsc4vOI5/ULLMuB4GuMME="
+ ];
+ [
+ "ks31eMRwhaWZIlbw3Pl9Cxnx8cneTV/jDDrOYZG25ds="
+ ];
+ [
+ "ks31eMRwhaWZIlbw3Pl9Cxnx8cneTV/jDDrOYZG25ds="
+ ];
+ [
+ "j04DEIdeE9LFquAFu4i7Q2YAyca0FDA3J8r1atHQF58="
+ ];
+ "1602385837086584249";
+ "5348322356177288628";
+ "10105606910506535461";
+ [
+ "2871837063151915165"
+ ];
+ "2552028077";
+ "9304157803607034849";
+ [
+ "5308794677172709703";
+ "4629402678501957187"
+ ];
+ "3927678806";
+ [
+ "NWoZK3kTsExUV00Ywo1G5jlUKKs="
+ ];
+ [
+ "a4ayc/80/OGda4BO/1o/V0etpOqiLx1JwB5S3beHW0s="
+ ];
+ "10577349846663553072";
+ "7335560060985733464";
+ [
+ "7335560060985733464";
+ "16085986526811796301"
+ ]
+ ];
+ [
+ "2208655895";
+ "4363576337578352290";
+ "84696365";
+ "12638153115695167469";
+ "602994839685422785";
+ "772897149";
+ "16472888669357673283";
+ "2351653828";
+ "17472595041006102391";
+ [
+ "13426016195983081906";
+ "17051066397148972982"
+ ];
+ "6174653592142994962";
+ "c81e728d9d4c2f636f067f89cc14862c";
+ [
+ "yB5yjZ1ML2NvBn+JzBSGLA=="
+ ];
+ "5861621074593582340";
+ [
+ "ixHhYBlEBiZ446+zgg0hd5Eocp+xgMpVyaLfhjJqxV8="
+ ];
+ [
+ "MSN823muHfp/+4fN5+qKgDUtMA7lrHWKbN3RnWcZJew="
+ ];
+ [
+ "MSN823muHfp/+4fN5+qKgDUtMA7lrHWKbN3RnWcZJew="
+ ];
+ [
+ "NBaDJdCQRJye6B+WJdI/OX/mIxQk3AgEHm4hM9qmLu8="
+ ];
+ "8789615690042391357";
+ "17360383380415224727";
+ "970024650806116628";
+ [
+ "5310514165246837948"
+ ];
+ "3946386795";
+ "6920640749119438759";
+ [
+ "2374933113219823160";
+ "4520448414947048260"
+ ];
+ "2190005025";
+ [
+ "2kuSN7rMzfGcB2DKt67EqDWQELA="
+ ];
+ [
+ "1HNeOiZeFu7gP1lxi5tdAwGcB9i2xR+Q2jpmbuwTqzU="
+ ];
+ "18198135717204167749";
+ "18128579709034668820";
+ [
+ "18128579709034668820";
+ "14642767882163838550"
+ ]
+ ];
+ [
+ "1909385492";
+ "15694391695266948643";
+ "84696364";
+ "12638153115695167468";
+ "15180167692696242062";
+ "2292183779";
+ "6734453432295282525";
+ "2128480519";
+ "11275350073939794026";
+ [
+ "15168680716710346397";
+ "13490672353767795293"
+ ];
+ "13529992206878991808";
+ "eccbc87e4b5ce2fe28308fd9f2a7baf3";
+ [
+ "7MvIfktc4v4oMI/Z8qe68w=="
+ ];
+ "13401401932333664167";
+ [
+ "kRpsyYine3lH5Es1XuUlgXRBY6HLMD001QCPKqdjG7w="
+ ];
+ [
+ "WBNIM3sPPhSGIBc9qqX5TQDYgXBdy/Cqg+/aumHS7eE="
+ ];
+ [
+ "WBNIM3sPPhSGIBc9qqX5TQDYgXBdy/Cqg+/aumHS7eE="
+ ];
+ [
+ "BQK9GdKOJxlDH7wMrQ1gHOPyviB18JDuIg2i0JFwkL4="
+ ];
+ "2874396847657928730";
+ "6919389025651885183";
+ "14522245769643814311";
+ [
+ "9221007817131939736"
+ ];
+ "1678875853";
+ "11991475895402502921";
+ [
+ "9295019677823677360";
+ "3668607519738437716"
+ ];
+ "2634537178";
+ [
+ "d95o2uzYI7q7tY7bHI4U1xBug7s="
+ ];
+ [
+ "TgdAhWK+24tgzgXB3s/jrRa3IjCWfeAfZAt+Rym0n84="
+ ];
+ "9624464864560415994";
+ "8296998437054084336";
+ [
+ "8296998437054084336";
+ "6903416366538802245"
+ ]
+ ];
+ [
+ "0";
+ "18446744073709551615";
+ "2166136261";
+ "14695981039346656037";
+ "0";
+ "0";
+ "0";
+ "0";
+ "11160318154034397263";
+ [
+ "18085479540095642321";
+ "11079402499652051579"
+ ];
+ "7654268697807496793";
+ "d41d8cd98f00b204e9800998ecf8427e";
+ [
+ "1B2M2Y8AsgTpgAmY7PhCfg=="
+ ];
+ "7203772011789518145";
+ [
+ "sW8qMzZE+95eqaAsJqn4Ne3l7QwOAklHIexxpYMRsPo="
+ ];
+ [
+ "DldRwCblQ7Loqy6wYJnaodHl30d3j3eH+qtFzfEv46g="
+ ];
+ [
+ "DldRwCblQ7Loqy6wYJnaodHl30d3j3eH+qtFzfEv46g="
+ ];
+ [
+ "gtMZwEiUXpGivpA1k/ith+ZulxJ3iI6tC6aVNsDsnk0="
+ ];
+ "16558958598623574096";
+ "9185752494698444901";
+ "0";
+ #;
+ "3696677242";
+ "11160318154034397263";
+ [
+ "4463240938071824939";
+ "4374473821787594281"
+ ];
+ "0";
+ [
+ "2jmj7l5rSw0yVb/vlWAYkK/YBwk="
+ ];
+ [
+ "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="
+ ];
+ "4761183170873013810";
+ "3244421341483603138";
+ [
+ "6918025063187695999";
+ "11072670137173121240"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/digest/test/cases/Basic.in b/ydb/library/yql/udfs/common/digest/test/cases/Basic.in
new file mode 100644
index 0000000000..c90696db42
--- /dev/null
+++ b/ydb/library/yql/udfs/common/digest/test/cases/Basic.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="1";"value"=""};
+{"key"="2";"subkey"="2";"value"=""};
+{"key"="3";"subkey"="3";"value"=""};
+{"key"="";"subkey"="";"value"=""};
diff --git a/ydb/library/yql/udfs/common/digest/test/cases/Basic.sql b/ydb/library/yql/udfs/common/digest/test/cases/Basic.sql
new file mode 100644
index 0000000000..ce850bc44f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/digest/test/cases/Basic.sql
@@ -0,0 +1,34 @@
+/* syntax version 1 */
+SELECT
+ Digest::Crc32c(key) AS crc32c,
+ Digest::Crc64(key) AS crc64,
+ Digest::Fnv32(key) AS fnv32,
+ Digest::Fnv64(key) AS fnv64,
+ Digest::MurMurHash(key) AS murmur,
+ Digest::MurMurHash32(key) AS murmur32,
+ Digest::MurMurHash2A(key) AS murmur2a,
+ Digest::MurMurHash2A32(key) AS murmur2a32,
+ Digest::CityHash(key) AS city,
+ Digest::CityHash128(key) AS city128,
+ Digest::NumericHash(COALESCE(CAST(key AS Uint64), 0)) AS numeric,
+ Digest::Md5Hex(key) AS md5hex,
+ Digest::Md5Raw(key) AS md5raw,
+ Digest::Md5HalfMix(key) AS md5halfmix,
+ Digest::Argon2(key, "12345678") AS argon2,
+ Digest::Blake2B(key) AS blake2b,
+ Digest::Blake2B(key, "") AS blake2bunkeyed,
+ Digest::Blake2B(key, "12345678") AS blake2bkeyed,
+ Digest::SipHash(111, 222, key) AS sip,
+ Digest::HighwayHash(111, 222, 333, 444, key) AS highway,
+ Digest::FarmHashFingerprint(COALESCE(CAST(key AS Uint64), 0u)) AS farmfing,
+ Digest::FarmHashFingerprint2(123ul, CAST(key AS Uint64)) AS farmfing2,
+ Digest::FarmHashFingerprint32(key) AS farmfing32,
+ Digest::FarmHashFingerprint64(key) AS farmfing64,
+ Digest::FarmHashFingerprint128(key) AS farmfing128,
+ Digest::SuperFastHash(key) AS sfh,
+ Digest::Sha1(key) as sha1,
+ Digest::Sha256(key) as sha256,
+ Digest::IntHash64(COALESCE(CAST(key AS Uint64), 0)) AS inthash64,
+ Digest::XXH3(key) AS xxhash,
+ Digest::XXH3_128(key) AS xxhash128
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/digest/test/ya.make b/ydb/library/yql/udfs/common/digest/test/ya.make
new file mode 100644
index 0000000000..adbb143471
--- /dev/null
+++ b/ydb/library/yql/udfs/common/digest/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/digest)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/digest/ya.make b/ydb/library/yql/udfs/common/digest/ya.make
index 24d9cec833..ff396a71f8 100644
--- a/ydb/library/yql/udfs/common/digest/ya.make
+++ b/ydb/library/yql/udfs/common/digest/ya.make
@@ -25,3 +25,7 @@ PEERDIR(
ADDINCL(contrib/libs/highwayhash)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/result.json b/ydb/library/yql/udfs/common/histogram/test/canondata/result.json
new file mode 100644
index 0000000000..06f9e726a9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/result.json
@@ -0,0 +1,57 @@
+{
+ "test.test[Algorithms]": [
+ {
+ "uri": "file://test.test_Algorithms_/results.txt"
+ }
+ ],
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ],
+ "test.test[Distinct]": [
+ {
+ "uri": "file://test.test_Distinct_/results.txt"
+ }
+ ],
+ "test.test[Intervals]": [
+ {
+ "uri": "file://test.test_Intervals_/results.txt"
+ }
+ ],
+ "test.test[Linear]": [
+ {
+ "uri": "file://test.test_Linear_/results.txt"
+ }
+ ],
+ "test.test[Logarithmic]": [
+ {
+ "uri": "file://test.test_Logarithmic_/results.txt"
+ }
+ ],
+ "test.test[Methods]": [
+ {
+ "uri": "file://test.test_Methods_/results.txt"
+ }
+ ],
+ "test.test[Normalize]": [
+ {
+ "uri": "file://test.test_Normalize_/results.txt"
+ }
+ ],
+ "test.test[Print]": [
+ {
+ "uri": "file://test.test_Print_/results.txt"
+ }
+ ],
+ "test.test[ToCumulativeDistributionFunction]": [
+ {
+ "uri": "file://test.test_ToCumulativeDistributionFunction_/results.txt"
+ }
+ ],
+ "test.test[Weights]": [
+ {
+ "uri": "file://test.test_Weights_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Algorithms_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Algorithms_/results.txt
new file mode 100644
index 0000000000..37e9d6a36a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Algorithms_/results.txt
@@ -0,0 +1,476 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "adaptive_distance";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "adaptive_weight";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "adaptive_ward";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "block_weight";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "block_ward";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "algo_equality_check";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "quality_equality_check";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "8";
+ "2"
+ ];
+ [
+ "3";
+ "5"
+ ];
+ [
+ "5";
+ "7"
+ ]
+ ];
+ "AdaptiveDistance";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "6";
+ "2"
+ ];
+ [
+ "5";
+ "3.799999952316284"
+ ];
+ [
+ "5";
+ "7"
+ ]
+ ];
+ "AdaptiveWeight";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "2";
+ "0.5"
+ ];
+ [
+ "6";
+ "2.5"
+ ];
+ [
+ "8";
+ "6.25"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "5";
+ "1.399999976158142"
+ ];
+ [
+ "6";
+ "4"
+ ];
+ [
+ "5";
+ "7"
+ ]
+ ];
+ "BlockWeight";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "8";
+ "2"
+ ];
+ [
+ "3";
+ "5"
+ ];
+ [
+ "5";
+ "7"
+ ]
+ ];
+ "BlockWard";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..75ce4f96b2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,338 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "subkey_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "value_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "0"
+ ];
+ [
+ "1";
+ "1"
+ ];
+ [
+ "3";
+ "2"
+ ];
+ [
+ "3";
+ "3"
+ ];
+ [
+ "1";
+ "4"
+ ];
+ [
+ "1";
+ "5"
+ ];
+ [
+ "1";
+ "6"
+ ];
+ [
+ "5";
+ "7"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "0"
+ ];
+ [
+ "1";
+ "1"
+ ];
+ [
+ "3";
+ "2"
+ ];
+ [
+ "3";
+ "4"
+ ];
+ [
+ "1";
+ "8"
+ ];
+ [
+ "1";
+ "16"
+ ];
+ [
+ "1";
+ "32"
+ ];
+ [
+ "5";
+ "64"
+ ]
+ ];
+ "AdaptiveWard";
+ "64";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "-1"
+ ];
+ [
+ "1";
+ "1"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "8"
+ ];
+ [
+ "1";
+ "32"
+ ];
+ [
+ "1";
+ "128"
+ ];
+ [
+ "1";
+ "512"
+ ];
+ [
+ "9";
+ "2048"
+ ]
+ ];
+ "AdaptiveWard";
+ "2048";
+ "-1";
+ "16"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Distinct_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Distinct_/results.txt
new file mode 100644
index 0000000000..721c3a7f66
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Distinct_/results.txt
@@ -0,0 +1,139 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "is_different";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "0"
+ ];
+ [
+ "1";
+ "1"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "3"
+ ];
+ [
+ "1";
+ "4"
+ ];
+ [
+ "1";
+ "5"
+ ];
+ [
+ "1";
+ "6"
+ ];
+ [
+ "1";
+ "7"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "0";
+ "8"
+ ]
+ ];
+ [
+ %true
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Intervals_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Intervals_/results.txt
new file mode 100644
index 0000000000..b19e1b600c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Intervals_/results.txt
@@ -0,0 +1,290 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "subkey_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "value_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "16";
+ "4.125"
+ ]
+ ];
+ "AdaptiveWard";
+ "4.124999999999999";
+ "4.124999999999999";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "9";
+ "3"
+ ];
+ [
+ "2";
+ "24"
+ ];
+ [
+ "5";
+ "64"
+ ]
+ ];
+ "AdaptiveWard";
+ "64";
+ "0";
+ "16"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "-1"
+ ];
+ [
+ "1";
+ "1"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "8"
+ ];
+ [
+ "1";
+ "32"
+ ];
+ [
+ "1";
+ "128"
+ ];
+ [
+ "1";
+ "512"
+ ];
+ [
+ "9";
+ "2048"
+ ]
+ ];
+ "AdaptiveWard";
+ "2048";
+ "-1";
+ "16"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Linear_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Linear_/results.txt
new file mode 100644
index 0000000000..4ec10ae8d3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Linear_/results.txt
@@ -0,0 +1,330 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "default";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "linear_size";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "linear_min_max";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "-2150"
+ ];
+ [
+ "1";
+ "-2050"
+ ];
+ [
+ "1";
+ "-50"
+ ];
+ [
+ "2";
+ "0"
+ ];
+ [
+ "1";
+ "10"
+ ];
+ [
+ "1";
+ "30"
+ ];
+ [
+ "1";
+ "90"
+ ];
+ [
+ "1";
+ "130"
+ ];
+ [
+ "1";
+ "510"
+ ];
+ [
+ "9";
+ "2050"
+ ]
+ ];
+ "Linear";
+ "2050";
+ "-2150";
+ "19"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "-2145"
+ ];
+ [
+ "1";
+ "-2046"
+ ];
+ [
+ "1";
+ "-33"
+ ];
+ [
+ "3";
+ "0"
+ ];
+ [
+ "1";
+ "33"
+ ];
+ [
+ "1";
+ "99"
+ ];
+ [
+ "1";
+ "132"
+ ];
+ [
+ "1";
+ "528"
+ ];
+ [
+ "9";
+ "2046"
+ ]
+ ];
+ "Linear";
+ "2046";
+ "-2145";
+ "19"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "9";
+ "100"
+ ];
+ [
+ "1";
+ "500"
+ ];
+ [
+ "9";
+ "1000"
+ ]
+ ];
+ "Linear";
+ "1000";
+ "100";
+ "19"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Logarithmic_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Logarithmic_/results.txt
new file mode 100644
index 0000000000..f465dcea21
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Logarithmic_/results.txt
@@ -0,0 +1,310 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "default";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "log_size";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "log_min_max";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "1"
+ ];
+ [
+ "2";
+ "10"
+ ];
+ [
+ "3";
+ "100"
+ ];
+ [
+ "9";
+ "1000"
+ ]
+ ];
+ "Logarithmic";
+ "1000";
+ "1";
+ "15"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "8"
+ ];
+ [
+ "1";
+ "32"
+ ];
+ [
+ "1";
+ "64"
+ ];
+ [
+ "1";
+ "128"
+ ];
+ [
+ "1";
+ "512"
+ ];
+ [
+ "9";
+ "2048"
+ ]
+ ];
+ "Logarithmic";
+ "2048";
+ "2";
+ "15"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "2";
+ "10"
+ ];
+ [
+ "1";
+ "32"
+ ];
+ [
+ "1";
+ "64"
+ ];
+ [
+ "1";
+ "128"
+ ];
+ [
+ "1";
+ "512"
+ ];
+ [
+ "9";
+ "2048"
+ ]
+ ];
+ "Logarithmic";
+ "2048";
+ "10";
+ "15"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Methods_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Methods_/results.txt
new file mode 100644
index 0000000000..0f0b131b12
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Methods_/results.txt
@@ -0,0 +1,85 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "GetSumAboveBound";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "GetSumBelowBound";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "CalcUpperBound";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "CalcLowerBound";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "GetSumInRange";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "6.5"
+ ];
+ [
+ "9.5"
+ ];
+ [
+ "2.5"
+ ];
+ [
+ "6.166666666666667"
+ ];
+ [
+ "6.5"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Normalize_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Normalize_/results.txt
new file mode 100644
index 0000000000..c81b76c18a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Normalize_/results.txt
@@ -0,0 +1,338 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "subkey_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "value_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "6.25";
+ "0"
+ ];
+ [
+ "6.25";
+ "1"
+ ];
+ [
+ "18.75";
+ "2"
+ ];
+ [
+ "18.75";
+ "3"
+ ];
+ [
+ "6.25";
+ "4"
+ ];
+ [
+ "6.25";
+ "5"
+ ];
+ [
+ "6.25";
+ "6"
+ ];
+ [
+ "31.25";
+ "7"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "0";
+ "100"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "0.0625";
+ "0"
+ ];
+ [
+ "0.0625";
+ "1"
+ ];
+ [
+ "0.1875";
+ "2"
+ ];
+ [
+ "0.1875";
+ "4"
+ ];
+ [
+ "0.0625";
+ "8"
+ ];
+ [
+ "0.0625";
+ "16"
+ ];
+ [
+ "0.0625";
+ "32"
+ ];
+ [
+ "0.3125";
+ "64"
+ ]
+ ];
+ "AdaptiveWard";
+ "64";
+ "0";
+ "1"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "-0.0625";
+ "-1"
+ ];
+ [
+ "-0.0625";
+ "1"
+ ];
+ [
+ "-0.0625";
+ "2"
+ ];
+ [
+ "-0.0625";
+ "8"
+ ];
+ [
+ "-0.0625";
+ "32"
+ ];
+ [
+ "-0.0625";
+ "128"
+ ];
+ [
+ "-0.0625";
+ "512"
+ ];
+ [
+ "-0.5625";
+ "2048"
+ ]
+ ];
+ "AdaptiveWard";
+ "2048";
+ "-1";
+ "-1"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Print_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Print_/results.txt
new file mode 100644
index 0000000000..bab67bf3e8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Print_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "subkey_histogram";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "value_histogram";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "Kind: AdaptiveWard Bins: 8 WeightsSum: 16.000 Min: 0.000 Max: 7.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 0.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 1.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 2.000 F: 3.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 3.000 F: 3.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 4.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 5.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 6.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88 P: 7.000 F: 5.000"
+ ];
+ [
+ "Kind: AdaptiveWard Bins: 8 WeightsSum: 16.000 Min: 0.000 Max: 64.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 0.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 1.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 2.000 F: 3.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 4.000 F: 3.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 8.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 16.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 32.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88 P: 64.000 F: 5.000"
+ ];
+ [
+ "Kind: AdaptiveWard Bins: 8 WeightsSum: 16.000 Min: -1.000 Max: 2048.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: -1.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 1.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 2.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 8.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 32.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 128.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91\xE2\x96\x91 P: 512.000 F: 1.000\n\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88\xE2\x96\x88 P: 2048.000 F: 9.000"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_ToCumulativeDistributionFunction_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_ToCumulativeDistributionFunction_/results.txt
new file mode 100644
index 0000000000..9e2b2a9689
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_ToCumulativeDistributionFunction_/results.txt
@@ -0,0 +1,444 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "subkey_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "value_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "subkey_norm_cdf_histogram";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "0"
+ ];
+ [
+ "2";
+ "1"
+ ];
+ [
+ "5";
+ "2"
+ ];
+ [
+ "8";
+ "3"
+ ];
+ [
+ "9";
+ "4"
+ ];
+ [
+ "10";
+ "5"
+ ];
+ [
+ "11";
+ "6"
+ ];
+ [
+ "16";
+ "7"
+ ]
+ ];
+ "AdaptiveWardCdf";
+ "7";
+ "0";
+ "62"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "0"
+ ];
+ [
+ "2";
+ "1"
+ ];
+ [
+ "5";
+ "2"
+ ];
+ [
+ "8";
+ "4"
+ ];
+ [
+ "9";
+ "8"
+ ];
+ [
+ "10";
+ "16"
+ ];
+ [
+ "11";
+ "32"
+ ];
+ [
+ "16";
+ "64"
+ ]
+ ];
+ "AdaptiveWardCdf";
+ "64";
+ "0";
+ "62"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "-1"
+ ];
+ [
+ "2";
+ "1"
+ ];
+ [
+ "3";
+ "2"
+ ];
+ [
+ "4";
+ "8"
+ ];
+ [
+ "5";
+ "32"
+ ];
+ [
+ "6";
+ "128"
+ ];
+ [
+ "7";
+ "512"
+ ];
+ [
+ "16";
+ "2048"
+ ]
+ ];
+ "AdaptiveWardCdf";
+ "2048";
+ "-1";
+ "44"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "6.25";
+ "0"
+ ];
+ [
+ "12.5";
+ "1"
+ ];
+ [
+ "31.25";
+ "2"
+ ];
+ [
+ "50";
+ "4"
+ ];
+ [
+ "56.25";
+ "8"
+ ];
+ [
+ "62.5";
+ "16"
+ ];
+ [
+ "68.75";
+ "32"
+ ];
+ [
+ "100";
+ "64"
+ ]
+ ];
+ "AdaptiveWardCdfCdf";
+ "64";
+ "0";
+ "387.5"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Weights_/results.txt b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Weights_/results.txt
new file mode 100644
index 0000000000..6b9aac15ec
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/canondata/test.test_Weights_/results.txt
@@ -0,0 +1,221 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "basic_weight";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "weight_and_bins";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "Bins";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Position";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "Kind";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "Max";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "Min";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "WeightsSum";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "equality_check";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "1"
+ ];
+ [
+ "2049";
+ "2"
+ ];
+ [
+ "1026";
+ "3"
+ ];
+ [
+ "4";
+ "4"
+ ];
+ [
+ "8";
+ "5"
+ ];
+ [
+ "16";
+ "6"
+ ];
+ [
+ "160";
+ "7"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "1";
+ "3264"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "8192";
+ "2.5"
+ ];
+ [
+ "683";
+ "5.664714336395264"
+ ];
+ [
+ "10240";
+ "7"
+ ]
+ ];
+ "AdaptiveWard";
+ "7";
+ "1";
+ "19115"
+ ]
+ ];
+ [
+ %true
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Algorithms.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Algorithms.sql
new file mode 100644
index 0000000000..02b2bf65fc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Algorithms.sql
@@ -0,0 +1,16 @@
+/* syntax version 1 */
+SELECT
+ ADAPTIVE_DISTANCE_HISTOGRAM(key, 3) AS adaptive_distance,
+ ADAPTIVE_WEIGHT_HISTOGRAM(key, 3) AS adaptive_weight,
+ ADAPTIVE_WARD_HISTOGRAM(key, 3) AS adaptive_ward,
+ BLOCK_WEIGHT_HISTOGRAM(key, 3) AS block_weight,
+ BLOCK_WARD_HISTOGRAM(key, 3) AS block_ward,
+ Histogram::Print(ADAPTIVE_WEIGHT_HISTOGRAM(key, 3)) <> Histogram::Print(BLOCK_WEIGHT_HISTOGRAM(key, 3)) AS algo_equality_check,
+ Histogram::Print(ADAPTIVE_WEIGHT_HISTOGRAM(key, 3)) <> Histogram::Print(ADAPTIVE_WARD_HISTOGRAM(key, 3)) AS quality_equality_check
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Basic.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Basic.sql
new file mode 100644
index 0000000000..2e080bd2ba
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Basic.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ HISTOGRAM(key) AS key_histogram,
+ HISTOGRAM(subkey) AS subkey_histogram,
+ HISTOGRAM(value) AS value_histogram
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Distinct.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Distinct.sql
new file mode 100644
index 0000000000..347ffe76f2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Distinct.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+SELECT
+ HISTOGRAM(DISTINCT key) AS key_histogram,
+ Histogram::Print(HISTOGRAM(key)) <> Histogram::Print(HISTOGRAM(DISTINCT key)) AS is_different
+FROM (
+ SELECT
+ CAST(key AS Double) AS key
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Intervals.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Intervals.sql
new file mode 100644
index 0000000000..eaceab0578
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Intervals.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ HISTOGRAM(key, 1) AS key_histogram,
+ HISTOGRAM(subkey, 3) AS subkey_histogram,
+ HISTOGRAM(value, 1000000) AS value_histogram
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Linear.in b/ydb/library/yql/udfs/common/histogram/test/cases/Linear.in
new file mode 100644
index 0000000000..22a04e936f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Linear.in
@@ -0,0 +1,19 @@
+{"key"="0";"subkey"="0";"value"="-3"};
+{"key"="0";"subkey"="0";"value"="-49"};
+{"key"="2";"subkey"="2";"value"="2"};
+{"key"="3";"subkey"="4";"value"="8"};
+{"key"="4";"subkey"="8";"value"="32"};
+{"key"="5";"subkey"="16";"value"="88"};
+{"key"="5";"subkey"="16";"value"="128"};
+{"key"="6";"subkey"="32";"value"="512"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="0";"subkey"="0";"value"="-2049"};
+{"key"="0";"subkey"="0";"value"="-2149"};
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Linear.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Linear.sql
new file mode 100644
index 0000000000..08af7fc301
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Linear.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+SELECT
+ LinearHistogram(value) AS default,
+ LinearHistogram(value, 33) AS linear_size,
+ LinearHistogram(value, 100, 100, 1000) AS linear_min_max
+FROM (
+ SELECT
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.in b/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.in
new file mode 100644
index 0000000000..22a04e936f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.in
@@ -0,0 +1,19 @@
+{"key"="0";"subkey"="0";"value"="-3"};
+{"key"="0";"subkey"="0";"value"="-49"};
+{"key"="2";"subkey"="2";"value"="2"};
+{"key"="3";"subkey"="4";"value"="8"};
+{"key"="4";"subkey"="8";"value"="32"};
+{"key"="5";"subkey"="16";"value"="88"};
+{"key"="5";"subkey"="16";"value"="128"};
+{"key"="6";"subkey"="32";"value"="512"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="0";"subkey"="0";"value"="-2049"};
+{"key"="0";"subkey"="0";"value"="-2149"};
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.sql
new file mode 100644
index 0000000000..216488e91e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Logarithmic.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+SELECT
+ LogarithmicHistogram(value) AS default,
+ LogHistogram(value, 2) AS log_size,
+ LogHistogram(value, 0.5, 10, 10000) AS log_min_max
+FROM (
+ SELECT
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Methods.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Methods.sql
new file mode 100644
index 0000000000..8c351f8070
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Methods.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ Histogram::GetSumAboveBound(histo, 5.0) AS GetSumAboveBound,
+ Histogram::GetSumBelowBound(histo, 5.0) AS GetSumBelowBound,
+ Histogram::CalcUpperBound(histo, 5.0) AS CalcUpperBound,
+ Histogram::CalcLowerBound(histo, 5.0) AS CalcLowerBound,
+ Histogram::GetSumInRange(histo, 5.0, 20.0) AS GetSumInRange
+FROM (
+ SELECT
+ HISTOGRAM(CAST(key AS Double)) AS histo
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Normalize.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Normalize.sql
new file mode 100644
index 0000000000..3dd4a12621
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Normalize.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ Histogram::Normalize(HISTOGRAM(key)) AS key_histogram,
+ Histogram::Normalize(HISTOGRAM(subkey), 1.0) AS subkey_histogram,
+ Histogram::Normalize(HISTOGRAM(value), -1.0) AS value_histogram
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Print.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Print.sql
new file mode 100644
index 0000000000..5434e8dea3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Print.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ Histogram::Print(HISTOGRAM(key)) AS key_histogram,
+ Histogram::Print(HISTOGRAM(subkey)) AS subkey_histogram,
+ Histogram::Print(HISTOGRAM(value), 50) AS value_histogram
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/ToCumulativeDistributionFunction.sql b/ydb/library/yql/udfs/common/histogram/test/cases/ToCumulativeDistributionFunction.sql
new file mode 100644
index 0000000000..e71db5c68f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/ToCumulativeDistributionFunction.sql
@@ -0,0 +1,13 @@
+/* syntax version 1 */
+SELECT
+ Histogram::ToCumulativeDistributionFunction(HISTOGRAM(key)) AS key_histogram,
+ Histogram::ToCumulativeDistributionFunction(HISTOGRAM(subkey)) AS subkey_histogram,
+ Histogram::ToCumulativeDistributionFunction(HISTOGRAM(value)) AS value_histogram,
+ Histogram::Normalize(Histogram::ToCumulativeDistributionFunction(HISTOGRAM(subkey)), 100, True) AS subkey_norm_cdf_histogram
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ CAST(subkey AS Double) AS subkey,
+ CAST(value AS Double) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Weights.in b/ydb/library/yql/udfs/common/histogram/test/cases/Weights.in
new file mode 100644
index 0000000000..0f50051d06
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Weights.in
@@ -0,0 +1,16 @@
+{"key"="0";"subkey"="1000";"value"="-1"};
+{"key"="1";"subkey"="1";"value"="1"};
+{"key"="2";"subkey"="2";"value"="2"};
+{"key"="3";"subkey"="4";"value"="8"};
+{"key"="4";"subkey"="8";"value"="32"};
+{"key"="5";"subkey"="16";"value"="128"};
+{"key"="6";"subkey"="32";"value"="512"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/Weights.sql b/ydb/library/yql/udfs/common/histogram/test/cases/Weights.sql
new file mode 100644
index 0000000000..77229008f6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/Weights.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ HISTOGRAM(key, value / subkey) AS basic_weight,
+ HISTOGRAM(key, value, 3) AS weight_and_bins,
+ Histogram::Print(HISTOGRAM(key)) <> Histogram::Print(HISTOGRAM(key, value)) AS equality_check
+FROM (
+ SELECT
+ CAST(key AS Double) AS key,
+ COALESCE(CAST(subkey AS Double), 1.0) AS subkey,
+ COALESCE(CAST(value AS Double), 1.0) AS value
+ FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/histogram/test/cases/default.in b/ydb/library/yql/udfs/common/histogram/test/cases/default.in
new file mode 100644
index 0000000000..494ea1402e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/cases/default.in
@@ -0,0 +1,16 @@
+{"key"="0";"subkey"="0";"value"="-1"};
+{"key"="1";"subkey"="1";"value"="1"};
+{"key"="2";"subkey"="2";"value"="2"};
+{"key"="3";"subkey"="4";"value"="8"};
+{"key"="4";"subkey"="8";"value"="32"};
+{"key"="5";"subkey"="16";"value"="128"};
+{"key"="6";"subkey"="32";"value"="512"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="7";"subkey"="64";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
+{"key"="2";"subkey"="2";"value"="2048"};
+{"key"="3";"subkey"="4";"value"="2048"};
diff --git a/ydb/library/yql/udfs/common/histogram/test/ya.make b/ydb/library/yql/udfs/common/histogram/test/ya.make
new file mode 100644
index 0000000000..cc130454f9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/histogram/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+TIMEOUT(600)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+DEPENDS(ydb/library/yql/udfs/common/histogram)
+
+END()
diff --git a/ydb/library/yql/udfs/common/histogram/ya.make b/ydb/library/yql/udfs/common/histogram/ya.make
index 6e20f1eddf..f7efeed182 100644
--- a/ydb/library/yql/udfs/common/histogram/ya.make
+++ b/ydb/library/yql/udfs/common/histogram/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/hyperloglog/test/canondata/result.json b/ydb/library/yql/udfs/common/hyperloglog/test/canondata/result.json
new file mode 100644
index 0000000000..fb6112fc5b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperloglog/test/canondata/result.json
@@ -0,0 +1,7 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/hyperloglog/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/hyperloglog/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..8a7a259e2d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperloglog/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "str";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "5972"
+ ];
+ [
+ "1200"
+ ];
+ [
+ "5988"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.in b/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.in
new file mode 100644
index 0000000000..d212651343
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.in
@@ -0,0 +1,6000 @@
+{"key"="-1000";"subkey"="-200";"value"="-11512"};
+{"key"="-999";"subkey"="-200";"value"="-11501"};
+{"key"="-998";"subkey"="-200";"value"="-11489"};
+{"key"="-997";"subkey"="-200";"value"="-11478"};
+{"key"="-996";"subkey"="-200";"value"="-11466"};
+{"key"="-995";"subkey"="-199";"value"="-11455"};
+{"key"="-994";"subkey"="-199";"value"="-11443"};
+{"key"="-993";"subkey"="-199";"value"="-11432"};
+{"key"="-992";"subkey"="-199";"value"="-11420"};
+{"key"="-991";"subkey"="-199";"value"="-11409"};
+{"key"="-990";"subkey"="-198";"value"="-11397"};
+{"key"="-989";"subkey"="-198";"value"="-11386"};
+{"key"="-988";"subkey"="-198";"value"="-11374"};
+{"key"="-987";"subkey"="-198";"value"="-11363"};
+{"key"="-986";"subkey"="-198";"value"="-11351"};
+{"key"="-985";"subkey"="-197";"value"="-11340"};
+{"key"="-984";"subkey"="-197";"value"="-11328"};
+{"key"="-983";"subkey"="-197";"value"="-11317"};
+{"key"="-982";"subkey"="-197";"value"="-11305"};
+{"key"="-981";"subkey"="-197";"value"="-11294"};
+{"key"="-980";"subkey"="-196";"value"="-11282"};
+{"key"="-979";"subkey"="-196";"value"="-11271"};
+{"key"="-978";"subkey"="-196";"value"="-11259"};
+{"key"="-977";"subkey"="-196";"value"="-11248"};
+{"key"="-976";"subkey"="-196";"value"="-11236"};
+{"key"="-975";"subkey"="-195";"value"="-11225"};
+{"key"="-974";"subkey"="-195";"value"="-11213"};
+{"key"="-973";"subkey"="-195";"value"="-11202"};
+{"key"="-972";"subkey"="-195";"value"="-11190"};
+{"key"="-971";"subkey"="-195";"value"="-11179"};
+{"key"="-970";"subkey"="-194";"value"="-11167"};
+{"key"="-969";"subkey"="-194";"value"="-11156"};
+{"key"="-968";"subkey"="-194";"value"="-11144"};
+{"key"="-967";"subkey"="-194";"value"="-11132"};
+{"key"="-966";"subkey"="-194";"value"="-11121"};
+{"key"="-965";"subkey"="-193";"value"="-11109"};
+{"key"="-964";"subkey"="-193";"value"="-11098"};
+{"key"="-963";"subkey"="-193";"value"="-11086"};
+{"key"="-962";"subkey"="-193";"value"="-11075"};
+{"key"="-961";"subkey"="-193";"value"="-11063"};
+{"key"="-960";"subkey"="-192";"value"="-11052"};
+{"key"="-959";"subkey"="-192";"value"="-11040"};
+{"key"="-958";"subkey"="-192";"value"="-11029"};
+{"key"="-957";"subkey"="-192";"value"="-11017"};
+{"key"="-956";"subkey"="-192";"value"="-11006"};
+{"key"="-955";"subkey"="-191";"value"="-10994"};
+{"key"="-954";"subkey"="-191";"value"="-10983"};
+{"key"="-953";"subkey"="-191";"value"="-10971"};
+{"key"="-952";"subkey"="-191";"value"="-10960"};
+{"key"="-951";"subkey"="-191";"value"="-10948"};
+{"key"="-950";"subkey"="-190";"value"="-10937"};
+{"key"="-949";"subkey"="-190";"value"="-10925"};
+{"key"="-948";"subkey"="-190";"value"="-10914"};
+{"key"="-947";"subkey"="-190";"value"="-10902"};
+{"key"="-946";"subkey"="-190";"value"="-10891"};
+{"key"="-945";"subkey"="-189";"value"="-10879"};
+{"key"="-944";"subkey"="-189";"value"="-10868"};
+{"key"="-943";"subkey"="-189";"value"="-10856"};
+{"key"="-942";"subkey"="-189";"value"="-10845"};
+{"key"="-941";"subkey"="-189";"value"="-10833"};
+{"key"="-940";"subkey"="-188";"value"="-10822"};
+{"key"="-939";"subkey"="-188";"value"="-10810"};
+{"key"="-938";"subkey"="-188";"value"="-10799"};
+{"key"="-937";"subkey"="-188";"value"="-10787"};
+{"key"="-936";"subkey"="-188";"value"="-10776"};
+{"key"="-935";"subkey"="-187";"value"="-10764"};
+{"key"="-934";"subkey"="-187";"value"="-10753"};
+{"key"="-933";"subkey"="-187";"value"="-10741"};
+{"key"="-932";"subkey"="-187";"value"="-10730"};
+{"key"="-931";"subkey"="-187";"value"="-10718"};
+{"key"="-930";"subkey"="-186";"value"="-10707"};
+{"key"="-929";"subkey"="-186";"value"="-10695"};
+{"key"="-928";"subkey"="-186";"value"="-10683"};
+{"key"="-927";"subkey"="-186";"value"="-10672"};
+{"key"="-926";"subkey"="-186";"value"="-10660"};
+{"key"="-925";"subkey"="-185";"value"="-10649"};
+{"key"="-924";"subkey"="-185";"value"="-10637"};
+{"key"="-923";"subkey"="-185";"value"="-10626"};
+{"key"="-922";"subkey"="-185";"value"="-10614"};
+{"key"="-921";"subkey"="-185";"value"="-10603"};
+{"key"="-920";"subkey"="-184";"value"="-10591"};
+{"key"="-919";"subkey"="-184";"value"="-10580"};
+{"key"="-918";"subkey"="-184";"value"="-10568"};
+{"key"="-917";"subkey"="-184";"value"="-10557"};
+{"key"="-916";"subkey"="-184";"value"="-10545"};
+{"key"="-915";"subkey"="-183";"value"="-10534"};
+{"key"="-914";"subkey"="-183";"value"="-10522"};
+{"key"="-913";"subkey"="-183";"value"="-10511"};
+{"key"="-912";"subkey"="-183";"value"="-10499"};
+{"key"="-911";"subkey"="-183";"value"="-10488"};
+{"key"="-910";"subkey"="-182";"value"="-10476"};
+{"key"="-909";"subkey"="-182";"value"="-10465"};
+{"key"="-908";"subkey"="-182";"value"="-10453"};
+{"key"="-907";"subkey"="-182";"value"="-10442"};
+{"key"="-906";"subkey"="-182";"value"="-10430"};
+{"key"="-905";"subkey"="-181";"value"="-10419"};
+{"key"="-904";"subkey"="-181";"value"="-10407"};
+{"key"="-903";"subkey"="-181";"value"="-10396"};
+{"key"="-902";"subkey"="-181";"value"="-10384"};
+{"key"="-901";"subkey"="-181";"value"="-10373"};
+{"key"="-900";"subkey"="-180";"value"="-10361"};
+{"key"="-899";"subkey"="-180";"value"="-10350"};
+{"key"="-898";"subkey"="-180";"value"="-10338"};
+{"key"="-897";"subkey"="-180";"value"="-10327"};
+{"key"="-896";"subkey"="-180";"value"="-10315"};
+{"key"="-895";"subkey"="-179";"value"="-10304"};
+{"key"="-894";"subkey"="-179";"value"="-10292"};
+{"key"="-893";"subkey"="-179";"value"="-10281"};
+{"key"="-892";"subkey"="-179";"value"="-10269"};
+{"key"="-891";"subkey"="-179";"value"="-10258"};
+{"key"="-890";"subkey"="-178";"value"="-10246"};
+{"key"="-889";"subkey"="-178";"value"="-10234"};
+{"key"="-888";"subkey"="-178";"value"="-10223"};
+{"key"="-887";"subkey"="-178";"value"="-10211"};
+{"key"="-886";"subkey"="-178";"value"="-10200"};
+{"key"="-885";"subkey"="-177";"value"="-10188"};
+{"key"="-884";"subkey"="-177";"value"="-10177"};
+{"key"="-883";"subkey"="-177";"value"="-10165"};
+{"key"="-882";"subkey"="-177";"value"="-10154"};
+{"key"="-881";"subkey"="-177";"value"="-10142"};
+{"key"="-880";"subkey"="-176";"value"="-10131"};
+{"key"="-879";"subkey"="-176";"value"="-10119"};
+{"key"="-878";"subkey"="-176";"value"="-10108"};
+{"key"="-877";"subkey"="-176";"value"="-10096"};
+{"key"="-876";"subkey"="-176";"value"="-10085"};
+{"key"="-875";"subkey"="-175";"value"="-10073"};
+{"key"="-874";"subkey"="-175";"value"="-10062"};
+{"key"="-873";"subkey"="-175";"value"="-10050"};
+{"key"="-872";"subkey"="-175";"value"="-10039"};
+{"key"="-871";"subkey"="-175";"value"="-10027"};
+{"key"="-870";"subkey"="-174";"value"="-10016"};
+{"key"="-869";"subkey"="-174";"value"="-10004"};
+{"key"="-868";"subkey"="-174";"value"="-9993"};
+{"key"="-867";"subkey"="-174";"value"="-9981"};
+{"key"="-866";"subkey"="-174";"value"="-9970"};
+{"key"="-865";"subkey"="-173";"value"="-9958"};
+{"key"="-864";"subkey"="-173";"value"="-9947"};
+{"key"="-863";"subkey"="-173";"value"="-9935"};
+{"key"="-862";"subkey"="-173";"value"="-9924"};
+{"key"="-861";"subkey"="-173";"value"="-9912"};
+{"key"="-860";"subkey"="-172";"value"="-9901"};
+{"key"="-859";"subkey"="-172";"value"="-9889"};
+{"key"="-858";"subkey"="-172";"value"="-9878"};
+{"key"="-857";"subkey"="-172";"value"="-9866"};
+{"key"="-856";"subkey"="-172";"value"="-9855"};
+{"key"="-855";"subkey"="-171";"value"="-9843"};
+{"key"="-854";"subkey"="-171";"value"="-9832"};
+{"key"="-853";"subkey"="-171";"value"="-9820"};
+{"key"="-852";"subkey"="-171";"value"="-9809"};
+{"key"="-851";"subkey"="-171";"value"="-9797"};
+{"key"="-850";"subkey"="-170";"value"="-9785"};
+{"key"="-849";"subkey"="-170";"value"="-9774"};
+{"key"="-848";"subkey"="-170";"value"="-9762"};
+{"key"="-847";"subkey"="-170";"value"="-9751"};
+{"key"="-846";"subkey"="-170";"value"="-9739"};
+{"key"="-845";"subkey"="-169";"value"="-9728"};
+{"key"="-844";"subkey"="-169";"value"="-9716"};
+{"key"="-843";"subkey"="-169";"value"="-9705"};
+{"key"="-842";"subkey"="-169";"value"="-9693"};
+{"key"="-841";"subkey"="-169";"value"="-9682"};
+{"key"="-840";"subkey"="-168";"value"="-9670"};
+{"key"="-839";"subkey"="-168";"value"="-9659"};
+{"key"="-838";"subkey"="-168";"value"="-9647"};
+{"key"="-837";"subkey"="-168";"value"="-9636"};
+{"key"="-836";"subkey"="-168";"value"="-9624"};
+{"key"="-835";"subkey"="-167";"value"="-9613"};
+{"key"="-834";"subkey"="-167";"value"="-9601"};
+{"key"="-833";"subkey"="-167";"value"="-9590"};
+{"key"="-832";"subkey"="-167";"value"="-9578"};
+{"key"="-831";"subkey"="-167";"value"="-9567"};
+{"key"="-830";"subkey"="-166";"value"="-9555"};
+{"key"="-829";"subkey"="-166";"value"="-9544"};
+{"key"="-828";"subkey"="-166";"value"="-9532"};
+{"key"="-827";"subkey"="-166";"value"="-9521"};
+{"key"="-826";"subkey"="-166";"value"="-9509"};
+{"key"="-825";"subkey"="-165";"value"="-9498"};
+{"key"="-824";"subkey"="-165";"value"="-9486"};
+{"key"="-823";"subkey"="-165";"value"="-9475"};
+{"key"="-822";"subkey"="-165";"value"="-9463"};
+{"key"="-821";"subkey"="-165";"value"="-9452"};
+{"key"="-820";"subkey"="-164";"value"="-9440"};
+{"key"="-819";"subkey"="-164";"value"="-9429"};
+{"key"="-818";"subkey"="-164";"value"="-9417"};
+{"key"="-817";"subkey"="-164";"value"="-9406"};
+{"key"="-816";"subkey"="-164";"value"="-9394"};
+{"key"="-815";"subkey"="-163";"value"="-9383"};
+{"key"="-814";"subkey"="-163";"value"="-9371"};
+{"key"="-813";"subkey"="-163";"value"="-9360"};
+{"key"="-812";"subkey"="-163";"value"="-9348"};
+{"key"="-811";"subkey"="-163";"value"="-9336"};
+{"key"="-810";"subkey"="-162";"value"="-9325"};
+{"key"="-809";"subkey"="-162";"value"="-9313"};
+{"key"="-808";"subkey"="-162";"value"="-9302"};
+{"key"="-807";"subkey"="-162";"value"="-9290"};
+{"key"="-806";"subkey"="-162";"value"="-9279"};
+{"key"="-805";"subkey"="-161";"value"="-9267"};
+{"key"="-804";"subkey"="-161";"value"="-9256"};
+{"key"="-803";"subkey"="-161";"value"="-9244"};
+{"key"="-802";"subkey"="-161";"value"="-9233"};
+{"key"="-801";"subkey"="-161";"value"="-9221"};
+{"key"="-800";"subkey"="-160";"value"="-9210"};
+{"key"="-799";"subkey"="-160";"value"="-9198"};
+{"key"="-798";"subkey"="-160";"value"="-9187"};
+{"key"="-797";"subkey"="-160";"value"="-9175"};
+{"key"="-796";"subkey"="-160";"value"="-9164"};
+{"key"="-795";"subkey"="-159";"value"="-9152"};
+{"key"="-794";"subkey"="-159";"value"="-9141"};
+{"key"="-793";"subkey"="-159";"value"="-9129"};
+{"key"="-792";"subkey"="-159";"value"="-9118"};
+{"key"="-791";"subkey"="-159";"value"="-9106"};
+{"key"="-790";"subkey"="-158";"value"="-9095"};
+{"key"="-789";"subkey"="-158";"value"="-9083"};
+{"key"="-788";"subkey"="-158";"value"="-9072"};
+{"key"="-787";"subkey"="-158";"value"="-9060"};
+{"key"="-786";"subkey"="-158";"value"="-9049"};
+{"key"="-785";"subkey"="-157";"value"="-9037"};
+{"key"="-784";"subkey"="-157";"value"="-9026"};
+{"key"="-783";"subkey"="-157";"value"="-9014"};
+{"key"="-782";"subkey"="-157";"value"="-9003"};
+{"key"="-781";"subkey"="-157";"value"="-8991"};
+{"key"="-780";"subkey"="-156";"value"="-8980"};
+{"key"="-779";"subkey"="-156";"value"="-8968"};
+{"key"="-778";"subkey"="-156";"value"="-8957"};
+{"key"="-777";"subkey"="-156";"value"="-8945"};
+{"key"="-776";"subkey"="-156";"value"="-8934"};
+{"key"="-775";"subkey"="-155";"value"="-8922"};
+{"key"="-774";"subkey"="-155";"value"="-8911"};
+{"key"="-773";"subkey"="-155";"value"="-8899"};
+{"key"="-772";"subkey"="-155";"value"="-8887"};
+{"key"="-771";"subkey"="-155";"value"="-8876"};
+{"key"="-770";"subkey"="-154";"value"="-8864"};
+{"key"="-769";"subkey"="-154";"value"="-8853"};
+{"key"="-768";"subkey"="-154";"value"="-8841"};
+{"key"="-767";"subkey"="-154";"value"="-8830"};
+{"key"="-766";"subkey"="-154";"value"="-8818"};
+{"key"="-765";"subkey"="-153";"value"="-8807"};
+{"key"="-764";"subkey"="-153";"value"="-8795"};
+{"key"="-763";"subkey"="-153";"value"="-8784"};
+{"key"="-762";"subkey"="-153";"value"="-8772"};
+{"key"="-761";"subkey"="-153";"value"="-8761"};
+{"key"="-760";"subkey"="-152";"value"="-8749"};
+{"key"="-759";"subkey"="-152";"value"="-8738"};
+{"key"="-758";"subkey"="-152";"value"="-8726"};
+{"key"="-757";"subkey"="-152";"value"="-8715"};
+{"key"="-756";"subkey"="-152";"value"="-8703"};
+{"key"="-755";"subkey"="-151";"value"="-8692"};
+{"key"="-754";"subkey"="-151";"value"="-8680"};
+{"key"="-753";"subkey"="-151";"value"="-8669"};
+{"key"="-752";"subkey"="-151";"value"="-8657"};
+{"key"="-751";"subkey"="-151";"value"="-8646"};
+{"key"="-750";"subkey"="-150";"value"="-8634"};
+{"key"="-749";"subkey"="-150";"value"="-8623"};
+{"key"="-748";"subkey"="-150";"value"="-8611"};
+{"key"="-747";"subkey"="-150";"value"="-8600"};
+{"key"="-746";"subkey"="-150";"value"="-8588"};
+{"key"="-745";"subkey"="-149";"value"="-8577"};
+{"key"="-744";"subkey"="-149";"value"="-8565"};
+{"key"="-743";"subkey"="-149";"value"="-8554"};
+{"key"="-742";"subkey"="-149";"value"="-8542"};
+{"key"="-741";"subkey"="-149";"value"="-8531"};
+{"key"="-740";"subkey"="-148";"value"="-8519"};
+{"key"="-739";"subkey"="-148";"value"="-8508"};
+{"key"="-738";"subkey"="-148";"value"="-8496"};
+{"key"="-737";"subkey"="-148";"value"="-8485"};
+{"key"="-736";"subkey"="-148";"value"="-8473"};
+{"key"="-735";"subkey"="-147";"value"="-8462"};
+{"key"="-734";"subkey"="-147";"value"="-8450"};
+{"key"="-733";"subkey"="-147";"value"="-8438"};
+{"key"="-732";"subkey"="-147";"value"="-8427"};
+{"key"="-731";"subkey"="-147";"value"="-8415"};
+{"key"="-730";"subkey"="-146";"value"="-8404"};
+{"key"="-729";"subkey"="-146";"value"="-8392"};
+{"key"="-728";"subkey"="-146";"value"="-8381"};
+{"key"="-727";"subkey"="-146";"value"="-8369"};
+{"key"="-726";"subkey"="-146";"value"="-8358"};
+{"key"="-725";"subkey"="-145";"value"="-8346"};
+{"key"="-724";"subkey"="-145";"value"="-8335"};
+{"key"="-723";"subkey"="-145";"value"="-8323"};
+{"key"="-722";"subkey"="-145";"value"="-8312"};
+{"key"="-721";"subkey"="-145";"value"="-8300"};
+{"key"="-720";"subkey"="-144";"value"="-8289"};
+{"key"="-719";"subkey"="-144";"value"="-8277"};
+{"key"="-718";"subkey"="-144";"value"="-8266"};
+{"key"="-717";"subkey"="-144";"value"="-8254"};
+{"key"="-716";"subkey"="-144";"value"="-8243"};
+{"key"="-715";"subkey"="-143";"value"="-8231"};
+{"key"="-714";"subkey"="-143";"value"="-8220"};
+{"key"="-713";"subkey"="-143";"value"="-8208"};
+{"key"="-712";"subkey"="-143";"value"="-8197"};
+{"key"="-711";"subkey"="-143";"value"="-8185"};
+{"key"="-710";"subkey"="-142";"value"="-8174"};
+{"key"="-709";"subkey"="-142";"value"="-8162"};
+{"key"="-708";"subkey"="-142";"value"="-8151"};
+{"key"="-707";"subkey"="-142";"value"="-8139"};
+{"key"="-706";"subkey"="-142";"value"="-8128"};
+{"key"="-705";"subkey"="-141";"value"="-8116"};
+{"key"="-704";"subkey"="-141";"value"="-8105"};
+{"key"="-703";"subkey"="-141";"value"="-8093"};
+{"key"="-702";"subkey"="-141";"value"="-8082"};
+{"key"="-701";"subkey"="-141";"value"="-8070"};
+{"key"="-700";"subkey"="-140";"value"="-8059"};
+{"key"="-699";"subkey"="-140";"value"="-8047"};
+{"key"="-698";"subkey"="-140";"value"="-8036"};
+{"key"="-697";"subkey"="-140";"value"="-8024"};
+{"key"="-696";"subkey"="-140";"value"="-8012"};
+{"key"="-695";"subkey"="-139";"value"="-8001"};
+{"key"="-694";"subkey"="-139";"value"="-7989"};
+{"key"="-693";"subkey"="-139";"value"="-7978"};
+{"key"="-692";"subkey"="-139";"value"="-7966"};
+{"key"="-691";"subkey"="-139";"value"="-7955"};
+{"key"="-690";"subkey"="-138";"value"="-7943"};
+{"key"="-689";"subkey"="-138";"value"="-7932"};
+{"key"="-688";"subkey"="-138";"value"="-7920"};
+{"key"="-687";"subkey"="-138";"value"="-7909"};
+{"key"="-686";"subkey"="-138";"value"="-7897"};
+{"key"="-685";"subkey"="-137";"value"="-7886"};
+{"key"="-684";"subkey"="-137";"value"="-7874"};
+{"key"="-683";"subkey"="-137";"value"="-7863"};
+{"key"="-682";"subkey"="-137";"value"="-7851"};
+{"key"="-681";"subkey"="-137";"value"="-7840"};
+{"key"="-680";"subkey"="-136";"value"="-7828"};
+{"key"="-679";"subkey"="-136";"value"="-7817"};
+{"key"="-678";"subkey"="-136";"value"="-7805"};
+{"key"="-677";"subkey"="-136";"value"="-7794"};
+{"key"="-676";"subkey"="-136";"value"="-7782"};
+{"key"="-675";"subkey"="-135";"value"="-7771"};
+{"key"="-674";"subkey"="-135";"value"="-7759"};
+{"key"="-673";"subkey"="-135";"value"="-7748"};
+{"key"="-672";"subkey"="-135";"value"="-7736"};
+{"key"="-671";"subkey"="-135";"value"="-7725"};
+{"key"="-670";"subkey"="-134";"value"="-7713"};
+{"key"="-669";"subkey"="-134";"value"="-7702"};
+{"key"="-668";"subkey"="-134";"value"="-7690"};
+{"key"="-667";"subkey"="-134";"value"="-7679"};
+{"key"="-666";"subkey"="-134";"value"="-7667"};
+{"key"="-665";"subkey"="-133";"value"="-7656"};
+{"key"="-664";"subkey"="-133";"value"="-7644"};
+{"key"="-663";"subkey"="-133";"value"="-7633"};
+{"key"="-662";"subkey"="-133";"value"="-7621"};
+{"key"="-661";"subkey"="-133";"value"="-7610"};
+{"key"="-660";"subkey"="-132";"value"="-7598"};
+{"key"="-659";"subkey"="-132";"value"="-7587"};
+{"key"="-658";"subkey"="-132";"value"="-7575"};
+{"key"="-657";"subkey"="-132";"value"="-7563"};
+{"key"="-656";"subkey"="-132";"value"="-7552"};
+{"key"="-655";"subkey"="-131";"value"="-7540"};
+{"key"="-654";"subkey"="-131";"value"="-7529"};
+{"key"="-653";"subkey"="-131";"value"="-7517"};
+{"key"="-652";"subkey"="-131";"value"="-7506"};
+{"key"="-651";"subkey"="-131";"value"="-7494"};
+{"key"="-650";"subkey"="-130";"value"="-7483"};
+{"key"="-649";"subkey"="-130";"value"="-7471"};
+{"key"="-648";"subkey"="-130";"value"="-7460"};
+{"key"="-647";"subkey"="-130";"value"="-7448"};
+{"key"="-646";"subkey"="-130";"value"="-7437"};
+{"key"="-645";"subkey"="-129";"value"="-7425"};
+{"key"="-644";"subkey"="-129";"value"="-7414"};
+{"key"="-643";"subkey"="-129";"value"="-7402"};
+{"key"="-642";"subkey"="-129";"value"="-7391"};
+{"key"="-641";"subkey"="-129";"value"="-7379"};
+{"key"="-640";"subkey"="-128";"value"="-7368"};
+{"key"="-639";"subkey"="-128";"value"="-7356"};
+{"key"="-638";"subkey"="-128";"value"="-7345"};
+{"key"="-637";"subkey"="-128";"value"="-7333"};
+{"key"="-636";"subkey"="-128";"value"="-7322"};
+{"key"="-635";"subkey"="-127";"value"="-7310"};
+{"key"="-634";"subkey"="-127";"value"="-7299"};
+{"key"="-633";"subkey"="-127";"value"="-7287"};
+{"key"="-632";"subkey"="-127";"value"="-7276"};
+{"key"="-631";"subkey"="-127";"value"="-7264"};
+{"key"="-630";"subkey"="-126";"value"="-7253"};
+{"key"="-629";"subkey"="-126";"value"="-7241"};
+{"key"="-628";"subkey"="-126";"value"="-7230"};
+{"key"="-627";"subkey"="-126";"value"="-7218"};
+{"key"="-626";"subkey"="-126";"value"="-7207"};
+{"key"="-625";"subkey"="-125";"value"="-7195"};
+{"key"="-624";"subkey"="-125";"value"="-7184"};
+{"key"="-623";"subkey"="-125";"value"="-7172"};
+{"key"="-622";"subkey"="-125";"value"="-7161"};
+{"key"="-621";"subkey"="-125";"value"="-7149"};
+{"key"="-620";"subkey"="-124";"value"="-7138"};
+{"key"="-619";"subkey"="-124";"value"="-7126"};
+{"key"="-618";"subkey"="-124";"value"="-7114"};
+{"key"="-617";"subkey"="-124";"value"="-7103"};
+{"key"="-616";"subkey"="-124";"value"="-7091"};
+{"key"="-615";"subkey"="-123";"value"="-7080"};
+{"key"="-614";"subkey"="-123";"value"="-7068"};
+{"key"="-613";"subkey"="-123";"value"="-7057"};
+{"key"="-612";"subkey"="-123";"value"="-7045"};
+{"key"="-611";"subkey"="-123";"value"="-7034"};
+{"key"="-610";"subkey"="-122";"value"="-7022"};
+{"key"="-609";"subkey"="-122";"value"="-7011"};
+{"key"="-608";"subkey"="-122";"value"="-6999"};
+{"key"="-607";"subkey"="-122";"value"="-6988"};
+{"key"="-606";"subkey"="-122";"value"="-6976"};
+{"key"="-605";"subkey"="-121";"value"="-6965"};
+{"key"="-604";"subkey"="-121";"value"="-6953"};
+{"key"="-603";"subkey"="-121";"value"="-6942"};
+{"key"="-602";"subkey"="-121";"value"="-6930"};
+{"key"="-601";"subkey"="-121";"value"="-6919"};
+{"key"="-600";"subkey"="-120";"value"="-6907"};
+{"key"="-599";"subkey"="-120";"value"="-6896"};
+{"key"="-598";"subkey"="-120";"value"="-6884"};
+{"key"="-597";"subkey"="-120";"value"="-6873"};
+{"key"="-596";"subkey"="-120";"value"="-6861"};
+{"key"="-595";"subkey"="-119";"value"="-6850"};
+{"key"="-594";"subkey"="-119";"value"="-6838"};
+{"key"="-593";"subkey"="-119";"value"="-6827"};
+{"key"="-592";"subkey"="-119";"value"="-6815"};
+{"key"="-591";"subkey"="-119";"value"="-6804"};
+{"key"="-590";"subkey"="-118";"value"="-6792"};
+{"key"="-589";"subkey"="-118";"value"="-6781"};
+{"key"="-588";"subkey"="-118";"value"="-6769"};
+{"key"="-587";"subkey"="-118";"value"="-6758"};
+{"key"="-586";"subkey"="-118";"value"="-6746"};
+{"key"="-585";"subkey"="-117";"value"="-6735"};
+{"key"="-584";"subkey"="-117";"value"="-6723"};
+{"key"="-583";"subkey"="-117";"value"="-6712"};
+{"key"="-582";"subkey"="-117";"value"="-6700"};
+{"key"="-581";"subkey"="-117";"value"="-6689"};
+{"key"="-580";"subkey"="-116";"value"="-6677"};
+{"key"="-579";"subkey"="-116";"value"="-6665"};
+{"key"="-578";"subkey"="-116";"value"="-6654"};
+{"key"="-577";"subkey"="-116";"value"="-6642"};
+{"key"="-576";"subkey"="-116";"value"="-6631"};
+{"key"="-575";"subkey"="-115";"value"="-6619"};
+{"key"="-574";"subkey"="-115";"value"="-6608"};
+{"key"="-573";"subkey"="-115";"value"="-6596"};
+{"key"="-572";"subkey"="-115";"value"="-6585"};
+{"key"="-571";"subkey"="-115";"value"="-6573"};
+{"key"="-570";"subkey"="-114";"value"="-6562"};
+{"key"="-569";"subkey"="-114";"value"="-6550"};
+{"key"="-568";"subkey"="-114";"value"="-6539"};
+{"key"="-567";"subkey"="-114";"value"="-6527"};
+{"key"="-566";"subkey"="-114";"value"="-6516"};
+{"key"="-565";"subkey"="-113";"value"="-6504"};
+{"key"="-564";"subkey"="-113";"value"="-6493"};
+{"key"="-563";"subkey"="-113";"value"="-6481"};
+{"key"="-562";"subkey"="-113";"value"="-6470"};
+{"key"="-561";"subkey"="-113";"value"="-6458"};
+{"key"="-560";"subkey"="-112";"value"="-6447"};
+{"key"="-559";"subkey"="-112";"value"="-6435"};
+{"key"="-558";"subkey"="-112";"value"="-6424"};
+{"key"="-557";"subkey"="-112";"value"="-6412"};
+{"key"="-556";"subkey"="-112";"value"="-6401"};
+{"key"="-555";"subkey"="-111";"value"="-6389"};
+{"key"="-554";"subkey"="-111";"value"="-6378"};
+{"key"="-553";"subkey"="-111";"value"="-6366"};
+{"key"="-552";"subkey"="-111";"value"="-6355"};
+{"key"="-551";"subkey"="-111";"value"="-6343"};
+{"key"="-550";"subkey"="-110";"value"="-6332"};
+{"key"="-549";"subkey"="-110";"value"="-6320"};
+{"key"="-548";"subkey"="-110";"value"="-6309"};
+{"key"="-547";"subkey"="-110";"value"="-6297"};
+{"key"="-546";"subkey"="-110";"value"="-6286"};
+{"key"="-545";"subkey"="-109";"value"="-6274"};
+{"key"="-544";"subkey"="-109";"value"="-6263"};
+{"key"="-543";"subkey"="-109";"value"="-6251"};
+{"key"="-542";"subkey"="-109";"value"="-6240"};
+{"key"="-541";"subkey"="-109";"value"="-6228"};
+{"key"="-540";"subkey"="-108";"value"="-6216"};
+{"key"="-539";"subkey"="-108";"value"="-6205"};
+{"key"="-538";"subkey"="-108";"value"="-6193"};
+{"key"="-537";"subkey"="-108";"value"="-6182"};
+{"key"="-536";"subkey"="-108";"value"="-6170"};
+{"key"="-535";"subkey"="-107";"value"="-6159"};
+{"key"="-534";"subkey"="-107";"value"="-6147"};
+{"key"="-533";"subkey"="-107";"value"="-6136"};
+{"key"="-532";"subkey"="-107";"value"="-6124"};
+{"key"="-531";"subkey"="-107";"value"="-6113"};
+{"key"="-530";"subkey"="-106";"value"="-6101"};
+{"key"="-529";"subkey"="-106";"value"="-6090"};
+{"key"="-528";"subkey"="-106";"value"="-6078"};
+{"key"="-527";"subkey"="-106";"value"="-6067"};
+{"key"="-526";"subkey"="-106";"value"="-6055"};
+{"key"="-525";"subkey"="-105";"value"="-6044"};
+{"key"="-524";"subkey"="-105";"value"="-6032"};
+{"key"="-523";"subkey"="-105";"value"="-6021"};
+{"key"="-522";"subkey"="-105";"value"="-6009"};
+{"key"="-521";"subkey"="-105";"value"="-5998"};
+{"key"="-520";"subkey"="-104";"value"="-5986"};
+{"key"="-519";"subkey"="-104";"value"="-5975"};
+{"key"="-518";"subkey"="-104";"value"="-5963"};
+{"key"="-517";"subkey"="-104";"value"="-5952"};
+{"key"="-516";"subkey"="-104";"value"="-5940"};
+{"key"="-515";"subkey"="-103";"value"="-5929"};
+{"key"="-514";"subkey"="-103";"value"="-5917"};
+{"key"="-513";"subkey"="-103";"value"="-5906"};
+{"key"="-512";"subkey"="-103";"value"="-5894"};
+{"key"="-511";"subkey"="-103";"value"="-5883"};
+{"key"="-510";"subkey"="-102";"value"="-5871"};
+{"key"="-509";"subkey"="-102";"value"="-5860"};
+{"key"="-508";"subkey"="-102";"value"="-5848"};
+{"key"="-507";"subkey"="-102";"value"="-5837"};
+{"key"="-506";"subkey"="-102";"value"="-5825"};
+{"key"="-505";"subkey"="-101";"value"="-5814"};
+{"key"="-504";"subkey"="-101";"value"="-5802"};
+{"key"="-503";"subkey"="-101";"value"="-5791"};
+{"key"="-502";"subkey"="-101";"value"="-5779"};
+{"key"="-501";"subkey"="-101";"value"="-5767"};
+{"key"="-500";"subkey"="-100";"value"="-5756"};
+{"key"="-499";"subkey"="-100";"value"="-5744"};
+{"key"="-498";"subkey"="-100";"value"="-5733"};
+{"key"="-497";"subkey"="-100";"value"="-5721"};
+{"key"="-496";"subkey"="-100";"value"="-5710"};
+{"key"="-495";"subkey"="-99";"value"="-5698"};
+{"key"="-494";"subkey"="-99";"value"="-5687"};
+{"key"="-493";"subkey"="-99";"value"="-5675"};
+{"key"="-492";"subkey"="-99";"value"="-5664"};
+{"key"="-491";"subkey"="-99";"value"="-5652"};
+{"key"="-490";"subkey"="-98";"value"="-5641"};
+{"key"="-489";"subkey"="-98";"value"="-5629"};
+{"key"="-488";"subkey"="-98";"value"="-5618"};
+{"key"="-487";"subkey"="-98";"value"="-5606"};
+{"key"="-486";"subkey"="-98";"value"="-5595"};
+{"key"="-485";"subkey"="-97";"value"="-5583"};
+{"key"="-484";"subkey"="-97";"value"="-5572"};
+{"key"="-483";"subkey"="-97";"value"="-5560"};
+{"key"="-482";"subkey"="-97";"value"="-5549"};
+{"key"="-481";"subkey"="-97";"value"="-5537"};
+{"key"="-480";"subkey"="-96";"value"="-5526"};
+{"key"="-479";"subkey"="-96";"value"="-5514"};
+{"key"="-478";"subkey"="-96";"value"="-5503"};
+{"key"="-477";"subkey"="-96";"value"="-5491"};
+{"key"="-476";"subkey"="-96";"value"="-5480"};
+{"key"="-475";"subkey"="-95";"value"="-5468"};
+{"key"="-474";"subkey"="-95";"value"="-5457"};
+{"key"="-473";"subkey"="-95";"value"="-5445"};
+{"key"="-472";"subkey"="-95";"value"="-5434"};
+{"key"="-471";"subkey"="-95";"value"="-5422"};
+{"key"="-470";"subkey"="-94";"value"="-5411"};
+{"key"="-469";"subkey"="-94";"value"="-5399"};
+{"key"="-468";"subkey"="-94";"value"="-5388"};
+{"key"="-467";"subkey"="-94";"value"="-5376"};
+{"key"="-466";"subkey"="-94";"value"="-5365"};
+{"key"="-465";"subkey"="-93";"value"="-5353"};
+{"key"="-464";"subkey"="-93";"value"="-5341"};
+{"key"="-463";"subkey"="-93";"value"="-5330"};
+{"key"="-462";"subkey"="-93";"value"="-5318"};
+{"key"="-461";"subkey"="-93";"value"="-5307"};
+{"key"="-460";"subkey"="-92";"value"="-5295"};
+{"key"="-459";"subkey"="-92";"value"="-5284"};
+{"key"="-458";"subkey"="-92";"value"="-5272"};
+{"key"="-457";"subkey"="-92";"value"="-5261"};
+{"key"="-456";"subkey"="-92";"value"="-5249"};
+{"key"="-455";"subkey"="-91";"value"="-5238"};
+{"key"="-454";"subkey"="-91";"value"="-5226"};
+{"key"="-453";"subkey"="-91";"value"="-5215"};
+{"key"="-452";"subkey"="-91";"value"="-5203"};
+{"key"="-451";"subkey"="-91";"value"="-5192"};
+{"key"="-450";"subkey"="-90";"value"="-5180"};
+{"key"="-449";"subkey"="-90";"value"="-5169"};
+{"key"="-448";"subkey"="-90";"value"="-5157"};
+{"key"="-447";"subkey"="-90";"value"="-5146"};
+{"key"="-446";"subkey"="-90";"value"="-5134"};
+{"key"="-445";"subkey"="-89";"value"="-5123"};
+{"key"="-444";"subkey"="-89";"value"="-5111"};
+{"key"="-443";"subkey"="-89";"value"="-5100"};
+{"key"="-442";"subkey"="-89";"value"="-5088"};
+{"key"="-441";"subkey"="-89";"value"="-5077"};
+{"key"="-440";"subkey"="-88";"value"="-5065"};
+{"key"="-439";"subkey"="-88";"value"="-5054"};
+{"key"="-438";"subkey"="-88";"value"="-5042"};
+{"key"="-437";"subkey"="-88";"value"="-5031"};
+{"key"="-436";"subkey"="-88";"value"="-5019"};
+{"key"="-435";"subkey"="-87";"value"="-5008"};
+{"key"="-434";"subkey"="-87";"value"="-4996"};
+{"key"="-433";"subkey"="-87";"value"="-4985"};
+{"key"="-432";"subkey"="-87";"value"="-4973"};
+{"key"="-431";"subkey"="-87";"value"="-4962"};
+{"key"="-430";"subkey"="-86";"value"="-4950"};
+{"key"="-429";"subkey"="-86";"value"="-4939"};
+{"key"="-428";"subkey"="-86";"value"="-4927"};
+{"key"="-427";"subkey"="-86";"value"="-4916"};
+{"key"="-426";"subkey"="-86";"value"="-4904"};
+{"key"="-425";"subkey"="-85";"value"="-4892"};
+{"key"="-424";"subkey"="-85";"value"="-4881"};
+{"key"="-423";"subkey"="-85";"value"="-4869"};
+{"key"="-422";"subkey"="-85";"value"="-4858"};
+{"key"="-421";"subkey"="-85";"value"="-4846"};
+{"key"="-420";"subkey"="-84";"value"="-4835"};
+{"key"="-419";"subkey"="-84";"value"="-4823"};
+{"key"="-418";"subkey"="-84";"value"="-4812"};
+{"key"="-417";"subkey"="-84";"value"="-4800"};
+{"key"="-416";"subkey"="-84";"value"="-4789"};
+{"key"="-415";"subkey"="-83";"value"="-4777"};
+{"key"="-414";"subkey"="-83";"value"="-4766"};
+{"key"="-413";"subkey"="-83";"value"="-4754"};
+{"key"="-412";"subkey"="-83";"value"="-4743"};
+{"key"="-411";"subkey"="-83";"value"="-4731"};
+{"key"="-410";"subkey"="-82";"value"="-4720"};
+{"key"="-409";"subkey"="-82";"value"="-4708"};
+{"key"="-408";"subkey"="-82";"value"="-4697"};
+{"key"="-407";"subkey"="-82";"value"="-4685"};
+{"key"="-406";"subkey"="-82";"value"="-4674"};
+{"key"="-405";"subkey"="-81";"value"="-4662"};
+{"key"="-404";"subkey"="-81";"value"="-4651"};
+{"key"="-403";"subkey"="-81";"value"="-4639"};
+{"key"="-402";"subkey"="-81";"value"="-4628"};
+{"key"="-401";"subkey"="-81";"value"="-4616"};
+{"key"="-400";"subkey"="-80";"value"="-4605"};
+{"key"="-399";"subkey"="-80";"value"="-4593"};
+{"key"="-398";"subkey"="-80";"value"="-4582"};
+{"key"="-397";"subkey"="-80";"value"="-4570"};
+{"key"="-396";"subkey"="-80";"value"="-4559"};
+{"key"="-395";"subkey"="-79";"value"="-4547"};
+{"key"="-394";"subkey"="-79";"value"="-4536"};
+{"key"="-393";"subkey"="-79";"value"="-4524"};
+{"key"="-392";"subkey"="-79";"value"="-4513"};
+{"key"="-391";"subkey"="-79";"value"="-4501"};
+{"key"="-390";"subkey"="-78";"value"="-4490"};
+{"key"="-389";"subkey"="-78";"value"="-4478"};
+{"key"="-388";"subkey"="-78";"value"="-4467"};
+{"key"="-387";"subkey"="-78";"value"="-4455"};
+{"key"="-386";"subkey"="-78";"value"="-4443"};
+{"key"="-385";"subkey"="-77";"value"="-4432"};
+{"key"="-384";"subkey"="-77";"value"="-4420"};
+{"key"="-383";"subkey"="-77";"value"="-4409"};
+{"key"="-382";"subkey"="-77";"value"="-4397"};
+{"key"="-381";"subkey"="-77";"value"="-4386"};
+{"key"="-380";"subkey"="-76";"value"="-4374"};
+{"key"="-379";"subkey"="-76";"value"="-4363"};
+{"key"="-378";"subkey"="-76";"value"="-4351"};
+{"key"="-377";"subkey"="-76";"value"="-4340"};
+{"key"="-376";"subkey"="-76";"value"="-4328"};
+{"key"="-375";"subkey"="-75";"value"="-4317"};
+{"key"="-374";"subkey"="-75";"value"="-4305"};
+{"key"="-373";"subkey"="-75";"value"="-4294"};
+{"key"="-372";"subkey"="-75";"value"="-4282"};
+{"key"="-371";"subkey"="-75";"value"="-4271"};
+{"key"="-370";"subkey"="-74";"value"="-4259"};
+{"key"="-369";"subkey"="-74";"value"="-4248"};
+{"key"="-368";"subkey"="-74";"value"="-4236"};
+{"key"="-367";"subkey"="-74";"value"="-4225"};
+{"key"="-366";"subkey"="-74";"value"="-4213"};
+{"key"="-365";"subkey"="-73";"value"="-4202"};
+{"key"="-364";"subkey"="-73";"value"="-4190"};
+{"key"="-363";"subkey"="-73";"value"="-4179"};
+{"key"="-362";"subkey"="-73";"value"="-4167"};
+{"key"="-361";"subkey"="-73";"value"="-4156"};
+{"key"="-360";"subkey"="-72";"value"="-4144"};
+{"key"="-359";"subkey"="-72";"value"="-4133"};
+{"key"="-358";"subkey"="-72";"value"="-4121"};
+{"key"="-357";"subkey"="-72";"value"="-4110"};
+{"key"="-356";"subkey"="-72";"value"="-4098"};
+{"key"="-355";"subkey"="-71";"value"="-4087"};
+{"key"="-354";"subkey"="-71";"value"="-4075"};
+{"key"="-353";"subkey"="-71";"value"="-4064"};
+{"key"="-352";"subkey"="-71";"value"="-4052"};
+{"key"="-351";"subkey"="-71";"value"="-4041"};
+{"key"="-350";"subkey"="-70";"value"="-4029"};
+{"key"="-349";"subkey"="-70";"value"="-4018"};
+{"key"="-348";"subkey"="-70";"value"="-4006"};
+{"key"="-347";"subkey"="-70";"value"="-3994"};
+{"key"="-346";"subkey"="-70";"value"="-3983"};
+{"key"="-345";"subkey"="-69";"value"="-3971"};
+{"key"="-344";"subkey"="-69";"value"="-3960"};
+{"key"="-343";"subkey"="-69";"value"="-3948"};
+{"key"="-342";"subkey"="-69";"value"="-3937"};
+{"key"="-341";"subkey"="-69";"value"="-3925"};
+{"key"="-340";"subkey"="-68";"value"="-3914"};
+{"key"="-339";"subkey"="-68";"value"="-3902"};
+{"key"="-338";"subkey"="-68";"value"="-3891"};
+{"key"="-337";"subkey"="-68";"value"="-3879"};
+{"key"="-336";"subkey"="-68";"value"="-3868"};
+{"key"="-335";"subkey"="-67";"value"="-3856"};
+{"key"="-334";"subkey"="-67";"value"="-3845"};
+{"key"="-333";"subkey"="-67";"value"="-3833"};
+{"key"="-332";"subkey"="-67";"value"="-3822"};
+{"key"="-331";"subkey"="-67";"value"="-3810"};
+{"key"="-330";"subkey"="-66";"value"="-3799"};
+{"key"="-329";"subkey"="-66";"value"="-3787"};
+{"key"="-328";"subkey"="-66";"value"="-3776"};
+{"key"="-327";"subkey"="-66";"value"="-3764"};
+{"key"="-326";"subkey"="-66";"value"="-3753"};
+{"key"="-325";"subkey"="-65";"value"="-3741"};
+{"key"="-324";"subkey"="-65";"value"="-3730"};
+{"key"="-323";"subkey"="-65";"value"="-3718"};
+{"key"="-322";"subkey"="-65";"value"="-3707"};
+{"key"="-321";"subkey"="-65";"value"="-3695"};
+{"key"="-320";"subkey"="-64";"value"="-3684"};
+{"key"="-319";"subkey"="-64";"value"="-3672"};
+{"key"="-318";"subkey"="-64";"value"="-3661"};
+{"key"="-317";"subkey"="-64";"value"="-3649"};
+{"key"="-316";"subkey"="-64";"value"="-3638"};
+{"key"="-315";"subkey"="-63";"value"="-3626"};
+{"key"="-314";"subkey"="-63";"value"="-3615"};
+{"key"="-313";"subkey"="-63";"value"="-3603"};
+{"key"="-312";"subkey"="-63";"value"="-3592"};
+{"key"="-311";"subkey"="-63";"value"="-3580"};
+{"key"="-310";"subkey"="-62";"value"="-3569"};
+{"key"="-309";"subkey"="-62";"value"="-3557"};
+{"key"="-308";"subkey"="-62";"value"="-3545"};
+{"key"="-307";"subkey"="-62";"value"="-3534"};
+{"key"="-306";"subkey"="-62";"value"="-3522"};
+{"key"="-305";"subkey"="-61";"value"="-3511"};
+{"key"="-304";"subkey"="-61";"value"="-3499"};
+{"key"="-303";"subkey"="-61";"value"="-3488"};
+{"key"="-302";"subkey"="-61";"value"="-3476"};
+{"key"="-301";"subkey"="-61";"value"="-3465"};
+{"key"="-300";"subkey"="-60";"value"="-3453"};
+{"key"="-299";"subkey"="-60";"value"="-3442"};
+{"key"="-298";"subkey"="-60";"value"="-3430"};
+{"key"="-297";"subkey"="-60";"value"="-3419"};
+{"key"="-296";"subkey"="-60";"value"="-3407"};
+{"key"="-295";"subkey"="-59";"value"="-3396"};
+{"key"="-294";"subkey"="-59";"value"="-3384"};
+{"key"="-293";"subkey"="-59";"value"="-3373"};
+{"key"="-292";"subkey"="-59";"value"="-3361"};
+{"key"="-291";"subkey"="-59";"value"="-3350"};
+{"key"="-290";"subkey"="-58";"value"="-3338"};
+{"key"="-289";"subkey"="-58";"value"="-3327"};
+{"key"="-288";"subkey"="-58";"value"="-3315"};
+{"key"="-287";"subkey"="-58";"value"="-3304"};
+{"key"="-286";"subkey"="-58";"value"="-3292"};
+{"key"="-285";"subkey"="-57";"value"="-3281"};
+{"key"="-284";"subkey"="-57";"value"="-3269"};
+{"key"="-283";"subkey"="-57";"value"="-3258"};
+{"key"="-282";"subkey"="-57";"value"="-3246"};
+{"key"="-281";"subkey"="-57";"value"="-3235"};
+{"key"="-280";"subkey"="-56";"value"="-3223"};
+{"key"="-279";"subkey"="-56";"value"="-3212"};
+{"key"="-278";"subkey"="-56";"value"="-3200"};
+{"key"="-277";"subkey"="-56";"value"="-3189"};
+{"key"="-276";"subkey"="-56";"value"="-3177"};
+{"key"="-275";"subkey"="-55";"value"="-3166"};
+{"key"="-274";"subkey"="-55";"value"="-3154"};
+{"key"="-273";"subkey"="-55";"value"="-3143"};
+{"key"="-272";"subkey"="-55";"value"="-3131"};
+{"key"="-271";"subkey"="-55";"value"="-3120"};
+{"key"="-270";"subkey"="-54";"value"="-3108"};
+{"key"="-269";"subkey"="-54";"value"="-3096"};
+{"key"="-268";"subkey"="-54";"value"="-3085"};
+{"key"="-267";"subkey"="-54";"value"="-3073"};
+{"key"="-266";"subkey"="-54";"value"="-3062"};
+{"key"="-265";"subkey"="-53";"value"="-3050"};
+{"key"="-264";"subkey"="-53";"value"="-3039"};
+{"key"="-263";"subkey"="-53";"value"="-3027"};
+{"key"="-262";"subkey"="-53";"value"="-3016"};
+{"key"="-261";"subkey"="-53";"value"="-3004"};
+{"key"="-260";"subkey"="-52";"value"="-2993"};
+{"key"="-259";"subkey"="-52";"value"="-2981"};
+{"key"="-258";"subkey"="-52";"value"="-2970"};
+{"key"="-257";"subkey"="-52";"value"="-2958"};
+{"key"="-256";"subkey"="-52";"value"="-2947"};
+{"key"="-255";"subkey"="-51";"value"="-2935"};
+{"key"="-254";"subkey"="-51";"value"="-2924"};
+{"key"="-253";"subkey"="-51";"value"="-2912"};
+{"key"="-252";"subkey"="-51";"value"="-2901"};
+{"key"="-251";"subkey"="-51";"value"="-2889"};
+{"key"="-250";"subkey"="-50";"value"="-2878"};
+{"key"="-249";"subkey"="-50";"value"="-2866"};
+{"key"="-248";"subkey"="-50";"value"="-2855"};
+{"key"="-247";"subkey"="-50";"value"="-2843"};
+{"key"="-246";"subkey"="-50";"value"="-2832"};
+{"key"="-245";"subkey"="-49";"value"="-2820"};
+{"key"="-244";"subkey"="-49";"value"="-2809"};
+{"key"="-243";"subkey"="-49";"value"="-2797"};
+{"key"="-242";"subkey"="-49";"value"="-2786"};
+{"key"="-241";"subkey"="-49";"value"="-2774"};
+{"key"="-240";"subkey"="-48";"value"="-2763"};
+{"key"="-239";"subkey"="-48";"value"="-2751"};
+{"key"="-238";"subkey"="-48";"value"="-2740"};
+{"key"="-237";"subkey"="-48";"value"="-2728"};
+{"key"="-236";"subkey"="-48";"value"="-2717"};
+{"key"="-235";"subkey"="-47";"value"="-2705"};
+{"key"="-234";"subkey"="-47";"value"="-2694"};
+{"key"="-233";"subkey"="-47";"value"="-2682"};
+{"key"="-232";"subkey"="-47";"value"="-2670"};
+{"key"="-231";"subkey"="-47";"value"="-2659"};
+{"key"="-230";"subkey"="-46";"value"="-2647"};
+{"key"="-229";"subkey"="-46";"value"="-2636"};
+{"key"="-228";"subkey"="-46";"value"="-2624"};
+{"key"="-227";"subkey"="-46";"value"="-2613"};
+{"key"="-226";"subkey"="-46";"value"="-2601"};
+{"key"="-225";"subkey"="-45";"value"="-2590"};
+{"key"="-224";"subkey"="-45";"value"="-2578"};
+{"key"="-223";"subkey"="-45";"value"="-2567"};
+{"key"="-222";"subkey"="-45";"value"="-2555"};
+{"key"="-221";"subkey"="-45";"value"="-2544"};
+{"key"="-220";"subkey"="-44";"value"="-2532"};
+{"key"="-219";"subkey"="-44";"value"="-2521"};
+{"key"="-218";"subkey"="-44";"value"="-2509"};
+{"key"="-217";"subkey"="-44";"value"="-2498"};
+{"key"="-216";"subkey"="-44";"value"="-2486"};
+{"key"="-215";"subkey"="-43";"value"="-2475"};
+{"key"="-214";"subkey"="-43";"value"="-2463"};
+{"key"="-213";"subkey"="-43";"value"="-2452"};
+{"key"="-212";"subkey"="-43";"value"="-2440"};
+{"key"="-211";"subkey"="-43";"value"="-2429"};
+{"key"="-210";"subkey"="-42";"value"="-2417"};
+{"key"="-209";"subkey"="-42";"value"="-2406"};
+{"key"="-208";"subkey"="-42";"value"="-2394"};
+{"key"="-207";"subkey"="-42";"value"="-2383"};
+{"key"="-206";"subkey"="-42";"value"="-2371"};
+{"key"="-205";"subkey"="-41";"value"="-2360"};
+{"key"="-204";"subkey"="-41";"value"="-2348"};
+{"key"="-203";"subkey"="-41";"value"="-2337"};
+{"key"="-202";"subkey"="-41";"value"="-2325"};
+{"key"="-201";"subkey"="-41";"value"="-2314"};
+{"key"="-200";"subkey"="-40";"value"="-2302"};
+{"key"="-199";"subkey"="-40";"value"="-2291"};
+{"key"="-198";"subkey"="-40";"value"="-2279"};
+{"key"="-197";"subkey"="-40";"value"="-2268"};
+{"key"="-196";"subkey"="-40";"value"="-2256"};
+{"key"="-195";"subkey"="-39";"value"="-2245"};
+{"key"="-194";"subkey"="-39";"value"="-2233"};
+{"key"="-193";"subkey"="-39";"value"="-2221"};
+{"key"="-192";"subkey"="-39";"value"="-2210"};
+{"key"="-191";"subkey"="-39";"value"="-2198"};
+{"key"="-190";"subkey"="-38";"value"="-2187"};
+{"key"="-189";"subkey"="-38";"value"="-2175"};
+{"key"="-188";"subkey"="-38";"value"="-2164"};
+{"key"="-187";"subkey"="-38";"value"="-2152"};
+{"key"="-186";"subkey"="-38";"value"="-2141"};
+{"key"="-185";"subkey"="-37";"value"="-2129"};
+{"key"="-184";"subkey"="-37";"value"="-2118"};
+{"key"="-183";"subkey"="-37";"value"="-2106"};
+{"key"="-182";"subkey"="-37";"value"="-2095"};
+{"key"="-181";"subkey"="-37";"value"="-2083"};
+{"key"="-180";"subkey"="-36";"value"="-2072"};
+{"key"="-179";"subkey"="-36";"value"="-2060"};
+{"key"="-178";"subkey"="-36";"value"="-2049"};
+{"key"="-177";"subkey"="-36";"value"="-2037"};
+{"key"="-176";"subkey"="-36";"value"="-2026"};
+{"key"="-175";"subkey"="-35";"value"="-2014"};
+{"key"="-174";"subkey"="-35";"value"="-2003"};
+{"key"="-173";"subkey"="-35";"value"="-1991"};
+{"key"="-172";"subkey"="-35";"value"="-1980"};
+{"key"="-171";"subkey"="-35";"value"="-1968"};
+{"key"="-170";"subkey"="-34";"value"="-1957"};
+{"key"="-169";"subkey"="-34";"value"="-1945"};
+{"key"="-168";"subkey"="-34";"value"="-1934"};
+{"key"="-167";"subkey"="-34";"value"="-1922"};
+{"key"="-166";"subkey"="-34";"value"="-1911"};
+{"key"="-165";"subkey"="-33";"value"="-1899"};
+{"key"="-164";"subkey"="-33";"value"="-1888"};
+{"key"="-163";"subkey"="-33";"value"="-1876"};
+{"key"="-162";"subkey"="-33";"value"="-1865"};
+{"key"="-161";"subkey"="-33";"value"="-1853"};
+{"key"="-160";"subkey"="-32";"value"="-1842"};
+{"key"="-159";"subkey"="-32";"value"="-1830"};
+{"key"="-158";"subkey"="-32";"value"="-1819"};
+{"key"="-157";"subkey"="-32";"value"="-1807"};
+{"key"="-156";"subkey"="-32";"value"="-1796"};
+{"key"="-155";"subkey"="-31";"value"="-1784"};
+{"key"="-154";"subkey"="-31";"value"="-1772"};
+{"key"="-153";"subkey"="-31";"value"="-1761"};
+{"key"="-152";"subkey"="-31";"value"="-1749"};
+{"key"="-151";"subkey"="-31";"value"="-1738"};
+{"key"="-150";"subkey"="-30";"value"="-1726"};
+{"key"="-149";"subkey"="-30";"value"="-1715"};
+{"key"="-148";"subkey"="-30";"value"="-1703"};
+{"key"="-147";"subkey"="-30";"value"="-1692"};
+{"key"="-146";"subkey"="-30";"value"="-1680"};
+{"key"="-145";"subkey"="-29";"value"="-1669"};
+{"key"="-144";"subkey"="-29";"value"="-1657"};
+{"key"="-143";"subkey"="-29";"value"="-1646"};
+{"key"="-142";"subkey"="-29";"value"="-1634"};
+{"key"="-141";"subkey"="-29";"value"="-1623"};
+{"key"="-140";"subkey"="-28";"value"="-1611"};
+{"key"="-139";"subkey"="-28";"value"="-1600"};
+{"key"="-138";"subkey"="-28";"value"="-1588"};
+{"key"="-137";"subkey"="-28";"value"="-1577"};
+{"key"="-136";"subkey"="-28";"value"="-1565"};
+{"key"="-135";"subkey"="-27";"value"="-1554"};
+{"key"="-134";"subkey"="-27";"value"="-1542"};
+{"key"="-133";"subkey"="-27";"value"="-1531"};
+{"key"="-132";"subkey"="-27";"value"="-1519"};
+{"key"="-131";"subkey"="-27";"value"="-1508"};
+{"key"="-130";"subkey"="-26";"value"="-1496"};
+{"key"="-129";"subkey"="-26";"value"="-1485"};
+{"key"="-128";"subkey"="-26";"value"="-1473"};
+{"key"="-127";"subkey"="-26";"value"="-1462"};
+{"key"="-126";"subkey"="-26";"value"="-1450"};
+{"key"="-125";"subkey"="-25";"value"="-1439"};
+{"key"="-124";"subkey"="-25";"value"="-1427"};
+{"key"="-123";"subkey"="-25";"value"="-1416"};
+{"key"="-122";"subkey"="-25";"value"="-1404"};
+{"key"="-121";"subkey"="-25";"value"="-1393"};
+{"key"="-120";"subkey"="-24";"value"="-1381"};
+{"key"="-119";"subkey"="-24";"value"="-1370"};
+{"key"="-118";"subkey"="-24";"value"="-1358"};
+{"key"="-117";"subkey"="-24";"value"="-1347"};
+{"key"="-116";"subkey"="-24";"value"="-1335"};
+{"key"="-115";"subkey"="-23";"value"="-1323"};
+{"key"="-114";"subkey"="-23";"value"="-1312"};
+{"key"="-113";"subkey"="-23";"value"="-1300"};
+{"key"="-112";"subkey"="-23";"value"="-1289"};
+{"key"="-111";"subkey"="-23";"value"="-1277"};
+{"key"="-110";"subkey"="-22";"value"="-1266"};
+{"key"="-109";"subkey"="-22";"value"="-1254"};
+{"key"="-108";"subkey"="-22";"value"="-1243"};
+{"key"="-107";"subkey"="-22";"value"="-1231"};
+{"key"="-106";"subkey"="-22";"value"="-1220"};
+{"key"="-105";"subkey"="-21";"value"="-1208"};
+{"key"="-104";"subkey"="-21";"value"="-1197"};
+{"key"="-103";"subkey"="-21";"value"="-1185"};
+{"key"="-102";"subkey"="-21";"value"="-1174"};
+{"key"="-101";"subkey"="-21";"value"="-1162"};
+{"key"="-100";"subkey"="-20";"value"="-1151"};
+{"key"="-99";"subkey"="-20";"value"="-1139"};
+{"key"="-98";"subkey"="-20";"value"="-1128"};
+{"key"="-97";"subkey"="-20";"value"="-1116"};
+{"key"="-96";"subkey"="-20";"value"="-1105"};
+{"key"="-95";"subkey"="-19";"value"="-1093"};
+{"key"="-94";"subkey"="-19";"value"="-1082"};
+{"key"="-93";"subkey"="-19";"value"="-1070"};
+{"key"="-92";"subkey"="-19";"value"="-1059"};
+{"key"="-91";"subkey"="-19";"value"="-1047"};
+{"key"="-90";"subkey"="-18";"value"="-1036"};
+{"key"="-89";"subkey"="-18";"value"="-1024"};
+{"key"="-88";"subkey"="-18";"value"="-1013"};
+{"key"="-87";"subkey"="-18";"value"="-1001"};
+{"key"="-86";"subkey"="-18";"value"="-990"};
+{"key"="-85";"subkey"="-17";"value"="-978"};
+{"key"="-84";"subkey"="-17";"value"="-967"};
+{"key"="-83";"subkey"="-17";"value"="-955"};
+{"key"="-82";"subkey"="-17";"value"="-944"};
+{"key"="-81";"subkey"="-17";"value"="-932"};
+{"key"="-80";"subkey"="-16";"value"="-921"};
+{"key"="-79";"subkey"="-16";"value"="-909"};
+{"key"="-78";"subkey"="-16";"value"="-898"};
+{"key"="-77";"subkey"="-16";"value"="-886"};
+{"key"="-76";"subkey"="-16";"value"="-874"};
+{"key"="-75";"subkey"="-15";"value"="-863"};
+{"key"="-74";"subkey"="-15";"value"="-851"};
+{"key"="-73";"subkey"="-15";"value"="-840"};
+{"key"="-72";"subkey"="-15";"value"="-828"};
+{"key"="-71";"subkey"="-15";"value"="-817"};
+{"key"="-70";"subkey"="-14";"value"="-805"};
+{"key"="-69";"subkey"="-14";"value"="-794"};
+{"key"="-68";"subkey"="-14";"value"="-782"};
+{"key"="-67";"subkey"="-14";"value"="-771"};
+{"key"="-66";"subkey"="-14";"value"="-759"};
+{"key"="-65";"subkey"="-13";"value"="-748"};
+{"key"="-64";"subkey"="-13";"value"="-736"};
+{"key"="-63";"subkey"="-13";"value"="-725"};
+{"key"="-62";"subkey"="-13";"value"="-713"};
+{"key"="-61";"subkey"="-13";"value"="-702"};
+{"key"="-60";"subkey"="-12";"value"="-690"};
+{"key"="-59";"subkey"="-12";"value"="-679"};
+{"key"="-58";"subkey"="-12";"value"="-667"};
+{"key"="-57";"subkey"="-12";"value"="-656"};
+{"key"="-56";"subkey"="-12";"value"="-644"};
+{"key"="-55";"subkey"="-11";"value"="-633"};
+{"key"="-54";"subkey"="-11";"value"="-621"};
+{"key"="-53";"subkey"="-11";"value"="-610"};
+{"key"="-52";"subkey"="-11";"value"="-598"};
+{"key"="-51";"subkey"="-11";"value"="-587"};
+{"key"="-50";"subkey"="-10";"value"="-575"};
+{"key"="-49";"subkey"="-10";"value"="-564"};
+{"key"="-48";"subkey"="-10";"value"="-552"};
+{"key"="-47";"subkey"="-10";"value"="-541"};
+{"key"="-46";"subkey"="-10";"value"="-529"};
+{"key"="-45";"subkey"="-9";"value"="-518"};
+{"key"="-44";"subkey"="-9";"value"="-506"};
+{"key"="-43";"subkey"="-9";"value"="-495"};
+{"key"="-42";"subkey"="-9";"value"="-483"};
+{"key"="-41";"subkey"="-9";"value"="-472"};
+{"key"="-40";"subkey"="-8";"value"="-460"};
+{"key"="-39";"subkey"="-8";"value"="-449"};
+{"key"="-38";"subkey"="-8";"value"="-437"};
+{"key"="-37";"subkey"="-8";"value"="-425"};
+{"key"="-36";"subkey"="-8";"value"="-414"};
+{"key"="-35";"subkey"="-7";"value"="-402"};
+{"key"="-34";"subkey"="-7";"value"="-391"};
+{"key"="-33";"subkey"="-7";"value"="-379"};
+{"key"="-32";"subkey"="-7";"value"="-368"};
+{"key"="-31";"subkey"="-7";"value"="-356"};
+{"key"="-30";"subkey"="-6";"value"="-345"};
+{"key"="-29";"subkey"="-6";"value"="-333"};
+{"key"="-28";"subkey"="-6";"value"="-322"};
+{"key"="-27";"subkey"="-6";"value"="-310"};
+{"key"="-26";"subkey"="-6";"value"="-299"};
+{"key"="-25";"subkey"="-5";"value"="-287"};
+{"key"="-24";"subkey"="-5";"value"="-276"};
+{"key"="-23";"subkey"="-5";"value"="-264"};
+{"key"="-22";"subkey"="-5";"value"="-253"};
+{"key"="-21";"subkey"="-5";"value"="-241"};
+{"key"="-20";"subkey"="-4";"value"="-230"};
+{"key"="-19";"subkey"="-4";"value"="-218"};
+{"key"="-18";"subkey"="-4";"value"="-207"};
+{"key"="-17";"subkey"="-4";"value"="-195"};
+{"key"="-16";"subkey"="-4";"value"="-184"};
+{"key"="-15";"subkey"="-3";"value"="-172"};
+{"key"="-14";"subkey"="-3";"value"="-161"};
+{"key"="-13";"subkey"="-3";"value"="-149"};
+{"key"="-12";"subkey"="-3";"value"="-138"};
+{"key"="-11";"subkey"="-3";"value"="-126"};
+{"key"="-10";"subkey"="-2";"value"="-115"};
+{"key"="-9";"subkey"="-2";"value"="-103"};
+{"key"="-8";"subkey"="-2";"value"="-92"};
+{"key"="-7";"subkey"="-2";"value"="-80"};
+{"key"="-6";"subkey"="-2";"value"="-69"};
+{"key"="-5";"subkey"="-1";"value"="-57"};
+{"key"="-4";"subkey"="-1";"value"="-46"};
+{"key"="-3";"subkey"="-1";"value"="-34"};
+{"key"="-2";"subkey"="-1";"value"="-23"};
+{"key"="-1";"subkey"="-1";"value"="-11"};
+{"key"="0";"subkey"="0";"value"="0"};
+{"key"="1";"subkey"="0";"value"="11"};
+{"key"="2";"subkey"="0";"value"="23"};
+{"key"="3";"subkey"="0";"value"="34"};
+{"key"="4";"subkey"="0";"value"="46"};
+{"key"="5";"subkey"="1";"value"="57"};
+{"key"="6";"subkey"="1";"value"="69"};
+{"key"="7";"subkey"="1";"value"="80"};
+{"key"="8";"subkey"="1";"value"="92"};
+{"key"="9";"subkey"="1";"value"="103"};
+{"key"="10";"subkey"="2";"value"="115"};
+{"key"="11";"subkey"="2";"value"="126"};
+{"key"="12";"subkey"="2";"value"="138"};
+{"key"="13";"subkey"="2";"value"="149"};
+{"key"="14";"subkey"="2";"value"="161"};
+{"key"="15";"subkey"="3";"value"="172"};
+{"key"="16";"subkey"="3";"value"="184"};
+{"key"="17";"subkey"="3";"value"="195"};
+{"key"="18";"subkey"="3";"value"="207"};
+{"key"="19";"subkey"="3";"value"="218"};
+{"key"="20";"subkey"="4";"value"="230"};
+{"key"="21";"subkey"="4";"value"="241"};
+{"key"="22";"subkey"="4";"value"="253"};
+{"key"="23";"subkey"="4";"value"="264"};
+{"key"="24";"subkey"="4";"value"="276"};
+{"key"="25";"subkey"="5";"value"="287"};
+{"key"="26";"subkey"="5";"value"="299"};
+{"key"="27";"subkey"="5";"value"="310"};
+{"key"="28";"subkey"="5";"value"="322"};
+{"key"="29";"subkey"="5";"value"="333"};
+{"key"="30";"subkey"="6";"value"="345"};
+{"key"="31";"subkey"="6";"value"="356"};
+{"key"="32";"subkey"="6";"value"="368"};
+{"key"="33";"subkey"="6";"value"="379"};
+{"key"="34";"subkey"="6";"value"="391"};
+{"key"="35";"subkey"="7";"value"="402"};
+{"key"="36";"subkey"="7";"value"="414"};
+{"key"="37";"subkey"="7";"value"="425"};
+{"key"="38";"subkey"="7";"value"="437"};
+{"key"="39";"subkey"="7";"value"="449"};
+{"key"="40";"subkey"="8";"value"="460"};
+{"key"="41";"subkey"="8";"value"="472"};
+{"key"="42";"subkey"="8";"value"="483"};
+{"key"="43";"subkey"="8";"value"="495"};
+{"key"="44";"subkey"="8";"value"="506"};
+{"key"="45";"subkey"="9";"value"="518"};
+{"key"="46";"subkey"="9";"value"="529"};
+{"key"="47";"subkey"="9";"value"="541"};
+{"key"="48";"subkey"="9";"value"="552"};
+{"key"="49";"subkey"="9";"value"="564"};
+{"key"="50";"subkey"="10";"value"="575"};
+{"key"="51";"subkey"="10";"value"="587"};
+{"key"="52";"subkey"="10";"value"="598"};
+{"key"="53";"subkey"="10";"value"="610"};
+{"key"="54";"subkey"="10";"value"="621"};
+{"key"="55";"subkey"="11";"value"="633"};
+{"key"="56";"subkey"="11";"value"="644"};
+{"key"="57";"subkey"="11";"value"="656"};
+{"key"="58";"subkey"="11";"value"="667"};
+{"key"="59";"subkey"="11";"value"="679"};
+{"key"="60";"subkey"="12";"value"="690"};
+{"key"="61";"subkey"="12";"value"="702"};
+{"key"="62";"subkey"="12";"value"="713"};
+{"key"="63";"subkey"="12";"value"="725"};
+{"key"="64";"subkey"="12";"value"="736"};
+{"key"="65";"subkey"="13";"value"="748"};
+{"key"="66";"subkey"="13";"value"="759"};
+{"key"="67";"subkey"="13";"value"="771"};
+{"key"="68";"subkey"="13";"value"="782"};
+{"key"="69";"subkey"="13";"value"="794"};
+{"key"="70";"subkey"="14";"value"="805"};
+{"key"="71";"subkey"="14";"value"="817"};
+{"key"="72";"subkey"="14";"value"="828"};
+{"key"="73";"subkey"="14";"value"="840"};
+{"key"="74";"subkey"="14";"value"="851"};
+{"key"="75";"subkey"="15";"value"="863"};
+{"key"="76";"subkey"="15";"value"="874"};
+{"key"="77";"subkey"="15";"value"="886"};
+{"key"="78";"subkey"="15";"value"="898"};
+{"key"="79";"subkey"="15";"value"="909"};
+{"key"="80";"subkey"="16";"value"="921"};
+{"key"="81";"subkey"="16";"value"="932"};
+{"key"="82";"subkey"="16";"value"="944"};
+{"key"="83";"subkey"="16";"value"="955"};
+{"key"="84";"subkey"="16";"value"="967"};
+{"key"="85";"subkey"="17";"value"="978"};
+{"key"="86";"subkey"="17";"value"="990"};
+{"key"="87";"subkey"="17";"value"="1001"};
+{"key"="88";"subkey"="17";"value"="1013"};
+{"key"="89";"subkey"="17";"value"="1024"};
+{"key"="90";"subkey"="18";"value"="1036"};
+{"key"="91";"subkey"="18";"value"="1047"};
+{"key"="92";"subkey"="18";"value"="1059"};
+{"key"="93";"subkey"="18";"value"="1070"};
+{"key"="94";"subkey"="18";"value"="1082"};
+{"key"="95";"subkey"="19";"value"="1093"};
+{"key"="96";"subkey"="19";"value"="1105"};
+{"key"="97";"subkey"="19";"value"="1116"};
+{"key"="98";"subkey"="19";"value"="1128"};
+{"key"="99";"subkey"="19";"value"="1139"};
+{"key"="100";"subkey"="20";"value"="460"};
+{"key"="101";"subkey"="20";"value"="466"};
+{"key"="102";"subkey"="20";"value"="471"};
+{"key"="103";"subkey"="20";"value"="477"};
+{"key"="104";"subkey"="20";"value"="483"};
+{"key"="105";"subkey"="21";"value"="488"};
+{"key"="106";"subkey"="21";"value"="494"};
+{"key"="107";"subkey"="21";"value"="499"};
+{"key"="108";"subkey"="21";"value"="505"};
+{"key"="109";"subkey"="21";"value"="511"};
+{"key"="110";"subkey"="22";"value"="517"};
+{"key"="111";"subkey"="22";"value"="522"};
+{"key"="112";"subkey"="22";"value"="528"};
+{"key"="113";"subkey"="22";"value"="534"};
+{"key"="114";"subkey"="22";"value"="539"};
+{"key"="115";"subkey"="23";"value"="545"};
+{"key"="116";"subkey"="23";"value"="551"};
+{"key"="117";"subkey"="23";"value"="557"};
+{"key"="118";"subkey"="23";"value"="562"};
+{"key"="119";"subkey"="23";"value"="568"};
+{"key"="120";"subkey"="24";"value"="574"};
+{"key"="121";"subkey"="24";"value"="580"};
+{"key"="122";"subkey"="24";"value"="586"};
+{"key"="123";"subkey"="24";"value"="591"};
+{"key"="124";"subkey"="24";"value"="597"};
+{"key"="125";"subkey"="25";"value"="603"};
+{"key"="126";"subkey"="25";"value"="609"};
+{"key"="127";"subkey"="25";"value"="615"};
+{"key"="128";"subkey"="25";"value"="621"};
+{"key"="129";"subkey"="25";"value"="626"};
+{"key"="130";"subkey"="26";"value"="632"};
+{"key"="131";"subkey"="26";"value"="638"};
+{"key"="132";"subkey"="26";"value"="644"};
+{"key"="133";"subkey"="26";"value"="650"};
+{"key"="134";"subkey"="26";"value"="656"};
+{"key"="135";"subkey"="27";"value"="662"};
+{"key"="136";"subkey"="27";"value"="668"};
+{"key"="137";"subkey"="27";"value"="674"};
+{"key"="138";"subkey"="27";"value"="679"};
+{"key"="139";"subkey"="27";"value"="685"};
+{"key"="140";"subkey"="28";"value"="691"};
+{"key"="141";"subkey"="28";"value"="697"};
+{"key"="142";"subkey"="28";"value"="703"};
+{"key"="143";"subkey"="28";"value"="709"};
+{"key"="144";"subkey"="28";"value"="715"};
+{"key"="145";"subkey"="29";"value"="721"};
+{"key"="146";"subkey"="29";"value"="727"};
+{"key"="147";"subkey"="29";"value"="733"};
+{"key"="148";"subkey"="29";"value"="739"};
+{"key"="149";"subkey"="29";"value"="745"};
+{"key"="150";"subkey"="30";"value"="751"};
+{"key"="151";"subkey"="30";"value"="757"};
+{"key"="152";"subkey"="30";"value"="763"};
+{"key"="153";"subkey"="30";"value"="769"};
+{"key"="154";"subkey"="30";"value"="775"};
+{"key"="155";"subkey"="31";"value"="781"};
+{"key"="156";"subkey"="31";"value"="787"};
+{"key"="157";"subkey"="31";"value"="793"};
+{"key"="158";"subkey"="31";"value"="799"};
+{"key"="159";"subkey"="31";"value"="805"};
+{"key"="160";"subkey"="32";"value"="812"};
+{"key"="161";"subkey"="32";"value"="818"};
+{"key"="162";"subkey"="32";"value"="824"};
+{"key"="163";"subkey"="32";"value"="830"};
+{"key"="164";"subkey"="32";"value"="836"};
+{"key"="165";"subkey"="33";"value"="842"};
+{"key"="166";"subkey"="33";"value"="848"};
+{"key"="167";"subkey"="33";"value"="854"};
+{"key"="168";"subkey"="33";"value"="860"};
+{"key"="169";"subkey"="33";"value"="866"};
+{"key"="170";"subkey"="34";"value"="873"};
+{"key"="171";"subkey"="34";"value"="879"};
+{"key"="172";"subkey"="34";"value"="885"};
+{"key"="173";"subkey"="34";"value"="891"};
+{"key"="174";"subkey"="34";"value"="897"};
+{"key"="175";"subkey"="35";"value"="903"};
+{"key"="176";"subkey"="35";"value"="910"};
+{"key"="177";"subkey"="35";"value"="916"};
+{"key"="178";"subkey"="35";"value"="922"};
+{"key"="179";"subkey"="35";"value"="928"};
+{"key"="180";"subkey"="36";"value"="934"};
+{"key"="181";"subkey"="36";"value"="940"};
+{"key"="182";"subkey"="36";"value"="947"};
+{"key"="183";"subkey"="36";"value"="953"};
+{"key"="184";"subkey"="36";"value"="959"};
+{"key"="185";"subkey"="37";"value"="965"};
+{"key"="186";"subkey"="37";"value"="971"};
+{"key"="187";"subkey"="37";"value"="978"};
+{"key"="188";"subkey"="37";"value"="984"};
+{"key"="189";"subkey"="37";"value"="990"};
+{"key"="190";"subkey"="38";"value"="996"};
+{"key"="191";"subkey"="38";"value"="1003"};
+{"key"="192";"subkey"="38";"value"="1009"};
+{"key"="193";"subkey"="38";"value"="1015"};
+{"key"="194";"subkey"="38";"value"="1021"};
+{"key"="195";"subkey"="39";"value"="1028"};
+{"key"="196";"subkey"="39";"value"="1034"};
+{"key"="197";"subkey"="39";"value"="1040"};
+{"key"="198";"subkey"="39";"value"="1047"};
+{"key"="199";"subkey"="39";"value"="1053"};
+{"key"="200";"subkey"="40";"value"="1059"};
+{"key"="201";"subkey"="40";"value"="1065"};
+{"key"="202";"subkey"="40";"value"="1072"};
+{"key"="203";"subkey"="40";"value"="1078"};
+{"key"="204";"subkey"="40";"value"="1084"};
+{"key"="205";"subkey"="41";"value"="1091"};
+{"key"="206";"subkey"="41";"value"="1097"};
+{"key"="207";"subkey"="41";"value"="1103"};
+{"key"="208";"subkey"="41";"value"="1110"};
+{"key"="209";"subkey"="41";"value"="1116"};
+{"key"="210";"subkey"="42";"value"="1122"};
+{"key"="211";"subkey"="42";"value"="1129"};
+{"key"="212";"subkey"="42";"value"="1135"};
+{"key"="213";"subkey"="42";"value"="1141"};
+{"key"="214";"subkey"="42";"value"="1148"};
+{"key"="215";"subkey"="43";"value"="1154"};
+{"key"="216";"subkey"="43";"value"="1161"};
+{"key"="217";"subkey"="43";"value"="1167"};
+{"key"="218";"subkey"="43";"value"="1173"};
+{"key"="219";"subkey"="43";"value"="1180"};
+{"key"="220";"subkey"="44";"value"="1186"};
+{"key"="221";"subkey"="44";"value"="1192"};
+{"key"="222";"subkey"="44";"value"="1199"};
+{"key"="223";"subkey"="44";"value"="1205"};
+{"key"="224";"subkey"="44";"value"="1212"};
+{"key"="225";"subkey"="45";"value"="1218"};
+{"key"="226";"subkey"="45";"value"="1225"};
+{"key"="227";"subkey"="45";"value"="1231"};
+{"key"="228";"subkey"="45";"value"="1237"};
+{"key"="229";"subkey"="45";"value"="1244"};
+{"key"="230";"subkey"="46";"value"="1250"};
+{"key"="231";"subkey"="46";"value"="1257"};
+{"key"="232";"subkey"="46";"value"="1263"};
+{"key"="233";"subkey"="46";"value"="1270"};
+{"key"="234";"subkey"="46";"value"="1276"};
+{"key"="235";"subkey"="47";"value"="1283"};
+{"key"="236";"subkey"="47";"value"="1289"};
+{"key"="237";"subkey"="47";"value"="1295"};
+{"key"="238";"subkey"="47";"value"="1302"};
+{"key"="239";"subkey"="47";"value"="1308"};
+{"key"="240";"subkey"="48";"value"="1315"};
+{"key"="241";"subkey"="48";"value"="1321"};
+{"key"="242";"subkey"="48";"value"="1328"};
+{"key"="243";"subkey"="48";"value"="1334"};
+{"key"="244";"subkey"="48";"value"="1341"};
+{"key"="245";"subkey"="49";"value"="1347"};
+{"key"="246";"subkey"="49";"value"="1354"};
+{"key"="247";"subkey"="49";"value"="1360"};
+{"key"="248";"subkey"="49";"value"="1367"};
+{"key"="249";"subkey"="49";"value"="1373"};
+{"key"="250";"subkey"="50";"value"="1380"};
+{"key"="251";"subkey"="50";"value"="1386"};
+{"key"="252";"subkey"="50";"value"="1393"};
+{"key"="253";"subkey"="50";"value"="1399"};
+{"key"="254";"subkey"="50";"value"="1406"};
+{"key"="255";"subkey"="51";"value"="1413"};
+{"key"="256";"subkey"="51";"value"="1419"};
+{"key"="257";"subkey"="51";"value"="1426"};
+{"key"="258";"subkey"="51";"value"="1432"};
+{"key"="259";"subkey"="51";"value"="1439"};
+{"key"="260";"subkey"="52";"value"="1445"};
+{"key"="261";"subkey"="52";"value"="1452"};
+{"key"="262";"subkey"="52";"value"="1458"};
+{"key"="263";"subkey"="52";"value"="1465"};
+{"key"="264";"subkey"="52";"value"="1472"};
+{"key"="265";"subkey"="53";"value"="1478"};
+{"key"="266";"subkey"="53";"value"="1485"};
+{"key"="267";"subkey"="53";"value"="1491"};
+{"key"="268";"subkey"="53";"value"="1498"};
+{"key"="269";"subkey"="53";"value"="1504"};
+{"key"="270";"subkey"="54";"value"="1511"};
+{"key"="271";"subkey"="54";"value"="1518"};
+{"key"="272";"subkey"="54";"value"="1524"};
+{"key"="273";"subkey"="54";"value"="1531"};
+{"key"="274";"subkey"="54";"value"="1537"};
+{"key"="275";"subkey"="55";"value"="1544"};
+{"key"="276";"subkey"="55";"value"="1551"};
+{"key"="277";"subkey"="55";"value"="1557"};
+{"key"="278";"subkey"="55";"value"="1564"};
+{"key"="279";"subkey"="55";"value"="1571"};
+{"key"="280";"subkey"="56";"value"="1577"};
+{"key"="281";"subkey"="56";"value"="1584"};
+{"key"="282";"subkey"="56";"value"="1591"};
+{"key"="283";"subkey"="56";"value"="1597"};
+{"key"="284";"subkey"="56";"value"="1604"};
+{"key"="285";"subkey"="57";"value"="1610"};
+{"key"="286";"subkey"="57";"value"="1617"};
+{"key"="287";"subkey"="57";"value"="1624"};
+{"key"="288";"subkey"="57";"value"="1630"};
+{"key"="289";"subkey"="57";"value"="1637"};
+{"key"="290";"subkey"="58";"value"="1644"};
+{"key"="291";"subkey"="58";"value"="1650"};
+{"key"="292";"subkey"="58";"value"="1657"};
+{"key"="293";"subkey"="58";"value"="1664"};
+{"key"="294";"subkey"="58";"value"="1670"};
+{"key"="295";"subkey"="59";"value"="1677"};
+{"key"="296";"subkey"="59";"value"="1684"};
+{"key"="297";"subkey"="59";"value"="1691"};
+{"key"="298";"subkey"="59";"value"="1697"};
+{"key"="299";"subkey"="59";"value"="1704"};
+{"key"="300";"subkey"="60";"value"="1711"};
+{"key"="301";"subkey"="60";"value"="1717"};
+{"key"="302";"subkey"="60";"value"="1724"};
+{"key"="303";"subkey"="60";"value"="1731"};
+{"key"="304";"subkey"="60";"value"="1737"};
+{"key"="305";"subkey"="61";"value"="1744"};
+{"key"="306";"subkey"="61";"value"="1751"};
+{"key"="307";"subkey"="61";"value"="1758"};
+{"key"="308";"subkey"="61";"value"="1764"};
+{"key"="309";"subkey"="61";"value"="1771"};
+{"key"="310";"subkey"="62";"value"="1778"};
+{"key"="311";"subkey"="62";"value"="1785"};
+{"key"="312";"subkey"="62";"value"="1791"};
+{"key"="313";"subkey"="62";"value"="1798"};
+{"key"="314";"subkey"="62";"value"="1805"};
+{"key"="315";"subkey"="63";"value"="1812"};
+{"key"="316";"subkey"="63";"value"="1818"};
+{"key"="317";"subkey"="63";"value"="1825"};
+{"key"="318";"subkey"="63";"value"="1832"};
+{"key"="319";"subkey"="63";"value"="1839"};
+{"key"="320";"subkey"="64";"value"="1845"};
+{"key"="321";"subkey"="64";"value"="1852"};
+{"key"="322";"subkey"="64";"value"="1859"};
+{"key"="323";"subkey"="64";"value"="1866"};
+{"key"="324";"subkey"="64";"value"="1872"};
+{"key"="325";"subkey"="65";"value"="1879"};
+{"key"="326";"subkey"="65";"value"="1886"};
+{"key"="327";"subkey"="65";"value"="1893"};
+{"key"="328";"subkey"="65";"value"="1900"};
+{"key"="329";"subkey"="65";"value"="1906"};
+{"key"="330";"subkey"="66";"value"="1913"};
+{"key"="331";"subkey"="66";"value"="1920"};
+{"key"="332";"subkey"="66";"value"="1927"};
+{"key"="333";"subkey"="66";"value"="1934"};
+{"key"="334";"subkey"="66";"value"="1940"};
+{"key"="335";"subkey"="67";"value"="1947"};
+{"key"="336";"subkey"="67";"value"="1954"};
+{"key"="337";"subkey"="67";"value"="1961"};
+{"key"="338";"subkey"="67";"value"="1968"};
+{"key"="339";"subkey"="67";"value"="1975"};
+{"key"="340";"subkey"="68";"value"="1981"};
+{"key"="341";"subkey"="68";"value"="1988"};
+{"key"="342";"subkey"="68";"value"="1995"};
+{"key"="343";"subkey"="68";"value"="2002"};
+{"key"="344";"subkey"="68";"value"="2009"};
+{"key"="345";"subkey"="69";"value"="2016"};
+{"key"="346";"subkey"="69";"value"="2022"};
+{"key"="347";"subkey"="69";"value"="2029"};
+{"key"="348";"subkey"="69";"value"="2036"};
+{"key"="349";"subkey"="69";"value"="2043"};
+{"key"="350";"subkey"="70";"value"="2050"};
+{"key"="351";"subkey"="70";"value"="2057"};
+{"key"="352";"subkey"="70";"value"="2063"};
+{"key"="353";"subkey"="70";"value"="2070"};
+{"key"="354";"subkey"="70";"value"="2077"};
+{"key"="355";"subkey"="71";"value"="2084"};
+{"key"="356";"subkey"="71";"value"="2091"};
+{"key"="357";"subkey"="71";"value"="2098"};
+{"key"="358";"subkey"="71";"value"="2105"};
+{"key"="359";"subkey"="71";"value"="2112"};
+{"key"="360";"subkey"="72";"value"="2118"};
+{"key"="361";"subkey"="72";"value"="2125"};
+{"key"="362";"subkey"="72";"value"="2132"};
+{"key"="363";"subkey"="72";"value"="2139"};
+{"key"="364";"subkey"="72";"value"="2146"};
+{"key"="365";"subkey"="73";"value"="2153"};
+{"key"="366";"subkey"="73";"value"="2160"};
+{"key"="367";"subkey"="73";"value"="2167"};
+{"key"="368";"subkey"="73";"value"="2174"};
+{"key"="369";"subkey"="73";"value"="2181"};
+{"key"="370";"subkey"="74";"value"="2187"};
+{"key"="371";"subkey"="74";"value"="2194"};
+{"key"="372";"subkey"="74";"value"="2201"};
+{"key"="373";"subkey"="74";"value"="2208"};
+{"key"="374";"subkey"="74";"value"="2215"};
+{"key"="375";"subkey"="75";"value"="2222"};
+{"key"="376";"subkey"="75";"value"="2229"};
+{"key"="377";"subkey"="75";"value"="2236"};
+{"key"="378";"subkey"="75";"value"="2243"};
+{"key"="379";"subkey"="75";"value"="2250"};
+{"key"="380";"subkey"="76";"value"="2257"};
+{"key"="381";"subkey"="76";"value"="2264"};
+{"key"="382";"subkey"="76";"value"="2271"};
+{"key"="383";"subkey"="76";"value"="2278"};
+{"key"="384";"subkey"="76";"value"="2285"};
+{"key"="385";"subkey"="77";"value"="2291"};
+{"key"="386";"subkey"="77";"value"="2298"};
+{"key"="387";"subkey"="77";"value"="2305"};
+{"key"="388";"subkey"="77";"value"="2312"};
+{"key"="389";"subkey"="77";"value"="2319"};
+{"key"="390";"subkey"="78";"value"="2326"};
+{"key"="391";"subkey"="78";"value"="2333"};
+{"key"="392";"subkey"="78";"value"="2340"};
+{"key"="393";"subkey"="78";"value"="2347"};
+{"key"="394";"subkey"="78";"value"="2354"};
+{"key"="395";"subkey"="79";"value"="2361"};
+{"key"="396";"subkey"="79";"value"="2368"};
+{"key"="397";"subkey"="79";"value"="2375"};
+{"key"="398";"subkey"="79";"value"="2382"};
+{"key"="399";"subkey"="79";"value"="2389"};
+{"key"="400";"subkey"="80";"value"="2396"};
+{"key"="401";"subkey"="80";"value"="2403"};
+{"key"="402";"subkey"="80";"value"="2410"};
+{"key"="403";"subkey"="80";"value"="2417"};
+{"key"="404";"subkey"="80";"value"="2424"};
+{"key"="405";"subkey"="81";"value"="2431"};
+{"key"="406";"subkey"="81";"value"="2438"};
+{"key"="407";"subkey"="81";"value"="2445"};
+{"key"="408";"subkey"="81";"value"="2452"};
+{"key"="409";"subkey"="81";"value"="2459"};
+{"key"="410";"subkey"="82";"value"="2466"};
+{"key"="411";"subkey"="82";"value"="2473"};
+{"key"="412";"subkey"="82";"value"="2480"};
+{"key"="413";"subkey"="82";"value"="2487"};
+{"key"="414";"subkey"="82";"value"="2494"};
+{"key"="415";"subkey"="83";"value"="2501"};
+{"key"="416";"subkey"="83";"value"="2508"};
+{"key"="417";"subkey"="83";"value"="2515"};
+{"key"="418";"subkey"="83";"value"="2522"};
+{"key"="419";"subkey"="83";"value"="2529"};
+{"key"="420";"subkey"="84";"value"="2536"};
+{"key"="421";"subkey"="84";"value"="2543"};
+{"key"="422";"subkey"="84";"value"="2550"};
+{"key"="423";"subkey"="84";"value"="2558"};
+{"key"="424";"subkey"="84";"value"="2565"};
+{"key"="425";"subkey"="85";"value"="2572"};
+{"key"="426";"subkey"="85";"value"="2579"};
+{"key"="427";"subkey"="85";"value"="2586"};
+{"key"="428";"subkey"="85";"value"="2593"};
+{"key"="429";"subkey"="85";"value"="2600"};
+{"key"="430";"subkey"="86";"value"="2607"};
+{"key"="431";"subkey"="86";"value"="2614"};
+{"key"="432";"subkey"="86";"value"="2621"};
+{"key"="433";"subkey"="86";"value"="2628"};
+{"key"="434";"subkey"="86";"value"="2635"};
+{"key"="435";"subkey"="87";"value"="2642"};
+{"key"="436";"subkey"="87";"value"="2649"};
+{"key"="437";"subkey"="87";"value"="2656"};
+{"key"="438";"subkey"="87";"value"="2664"};
+{"key"="439";"subkey"="87";"value"="2671"};
+{"key"="440";"subkey"="88";"value"="2678"};
+{"key"="441";"subkey"="88";"value"="2685"};
+{"key"="442";"subkey"="88";"value"="2692"};
+{"key"="443";"subkey"="88";"value"="2699"};
+{"key"="444";"subkey"="88";"value"="2706"};
+{"key"="445";"subkey"="89";"value"="2713"};
+{"key"="446";"subkey"="89";"value"="2720"};
+{"key"="447";"subkey"="89";"value"="2727"};
+{"key"="448";"subkey"="89";"value"="2734"};
+{"key"="449";"subkey"="89";"value"="2742"};
+{"key"="450";"subkey"="90";"value"="2749"};
+{"key"="451";"subkey"="90";"value"="2756"};
+{"key"="452";"subkey"="90";"value"="2763"};
+{"key"="453";"subkey"="90";"value"="2770"};
+{"key"="454";"subkey"="90";"value"="2777"};
+{"key"="455";"subkey"="91";"value"="2784"};
+{"key"="456";"subkey"="91";"value"="2791"};
+{"key"="457";"subkey"="91";"value"="2798"};
+{"key"="458";"subkey"="91";"value"="2806"};
+{"key"="459";"subkey"="91";"value"="2813"};
+{"key"="460";"subkey"="92";"value"="2820"};
+{"key"="461";"subkey"="92";"value"="2827"};
+{"key"="462";"subkey"="92";"value"="2834"};
+{"key"="463";"subkey"="92";"value"="2841"};
+{"key"="464";"subkey"="92";"value"="2848"};
+{"key"="465";"subkey"="93";"value"="2856"};
+{"key"="466";"subkey"="93";"value"="2863"};
+{"key"="467";"subkey"="93";"value"="2870"};
+{"key"="468";"subkey"="93";"value"="2877"};
+{"key"="469";"subkey"="93";"value"="2884"};
+{"key"="470";"subkey"="94";"value"="2891"};
+{"key"="471";"subkey"="94";"value"="2898"};
+{"key"="472";"subkey"="94";"value"="2906"};
+{"key"="473";"subkey"="94";"value"="2913"};
+{"key"="474";"subkey"="94";"value"="2920"};
+{"key"="475";"subkey"="95";"value"="2927"};
+{"key"="476";"subkey"="95";"value"="2934"};
+{"key"="477";"subkey"="95";"value"="2941"};
+{"key"="478";"subkey"="95";"value"="2949"};
+{"key"="479";"subkey"="95";"value"="2956"};
+{"key"="480";"subkey"="96";"value"="2963"};
+{"key"="481";"subkey"="96";"value"="2970"};
+{"key"="482";"subkey"="96";"value"="2977"};
+{"key"="483";"subkey"="96";"value"="2984"};
+{"key"="484";"subkey"="96";"value"="2992"};
+{"key"="485";"subkey"="97";"value"="2999"};
+{"key"="486";"subkey"="97";"value"="3006"};
+{"key"="487";"subkey"="97";"value"="3013"};
+{"key"="488";"subkey"="97";"value"="3020"};
+{"key"="489";"subkey"="97";"value"="3028"};
+{"key"="490";"subkey"="98";"value"="3035"};
+{"key"="491";"subkey"="98";"value"="3042"};
+{"key"="492";"subkey"="98";"value"="3049"};
+{"key"="493";"subkey"="98";"value"="3056"};
+{"key"="494";"subkey"="98";"value"="3064"};
+{"key"="495";"subkey"="99";"value"="3071"};
+{"key"="496";"subkey"="99";"value"="3078"};
+{"key"="497";"subkey"="99";"value"="3085"};
+{"key"="498";"subkey"="99";"value"="3092"};
+{"key"="499";"subkey"="99";"value"="3100"};
+{"key"="500";"subkey"="100";"value"="3107"};
+{"key"="501";"subkey"="100";"value"="3114"};
+{"key"="502";"subkey"="100";"value"="3121"};
+{"key"="503";"subkey"="100";"value"="3128"};
+{"key"="504";"subkey"="100";"value"="3136"};
+{"key"="505";"subkey"="101";"value"="3143"};
+{"key"="506";"subkey"="101";"value"="3150"};
+{"key"="507";"subkey"="101";"value"="3157"};
+{"key"="508";"subkey"="101";"value"="3165"};
+{"key"="509";"subkey"="101";"value"="3172"};
+{"key"="510";"subkey"="102";"value"="3179"};
+{"key"="511";"subkey"="102";"value"="3186"};
+{"key"="512";"subkey"="102";"value"="3194"};
+{"key"="513";"subkey"="102";"value"="3201"};
+{"key"="514";"subkey"="102";"value"="3208"};
+{"key"="515";"subkey"="103";"value"="3215"};
+{"key"="516";"subkey"="103";"value"="3222"};
+{"key"="517";"subkey"="103";"value"="3230"};
+{"key"="518";"subkey"="103";"value"="3237"};
+{"key"="519";"subkey"="103";"value"="3244"};
+{"key"="520";"subkey"="104";"value"="3251"};
+{"key"="521";"subkey"="104";"value"="3259"};
+{"key"="522";"subkey"="104";"value"="3266"};
+{"key"="523";"subkey"="104";"value"="3273"};
+{"key"="524";"subkey"="104";"value"="3281"};
+{"key"="525";"subkey"="105";"value"="3288"};
+{"key"="526";"subkey"="105";"value"="3295"};
+{"key"="527";"subkey"="105";"value"="3302"};
+{"key"="528";"subkey"="105";"value"="3310"};
+{"key"="529";"subkey"="105";"value"="3317"};
+{"key"="530";"subkey"="106";"value"="3324"};
+{"key"="531";"subkey"="106";"value"="3331"};
+{"key"="532";"subkey"="106";"value"="3339"};
+{"key"="533";"subkey"="106";"value"="3346"};
+{"key"="534";"subkey"="106";"value"="3353"};
+{"key"="535";"subkey"="107";"value"="3361"};
+{"key"="536";"subkey"="107";"value"="3368"};
+{"key"="537";"subkey"="107";"value"="3375"};
+{"key"="538";"subkey"="107";"value"="3382"};
+{"key"="539";"subkey"="107";"value"="3390"};
+{"key"="540";"subkey"="108";"value"="3397"};
+{"key"="541";"subkey"="108";"value"="3404"};
+{"key"="542";"subkey"="108";"value"="3412"};
+{"key"="543";"subkey"="108";"value"="3419"};
+{"key"="544";"subkey"="108";"value"="3426"};
+{"key"="545";"subkey"="109";"value"="3433"};
+{"key"="546";"subkey"="109";"value"="3441"};
+{"key"="547";"subkey"="109";"value"="3448"};
+{"key"="548";"subkey"="109";"value"="3455"};
+{"key"="549";"subkey"="109";"value"="3463"};
+{"key"="550";"subkey"="110";"value"="3470"};
+{"key"="551";"subkey"="110";"value"="3477"};
+{"key"="552";"subkey"="110";"value"="3485"};
+{"key"="553";"subkey"="110";"value"="3492"};
+{"key"="554";"subkey"="110";"value"="3499"};
+{"key"="555";"subkey"="111";"value"="3507"};
+{"key"="556";"subkey"="111";"value"="3514"};
+{"key"="557";"subkey"="111";"value"="3521"};
+{"key"="558";"subkey"="111";"value"="3528"};
+{"key"="559";"subkey"="111";"value"="3536"};
+{"key"="560";"subkey"="112";"value"="3543"};
+{"key"="561";"subkey"="112";"value"="3550"};
+{"key"="562";"subkey"="112";"value"="3558"};
+{"key"="563";"subkey"="112";"value"="3565"};
+{"key"="564";"subkey"="112";"value"="3572"};
+{"key"="565";"subkey"="113";"value"="3580"};
+{"key"="566";"subkey"="113";"value"="3587"};
+{"key"="567";"subkey"="113";"value"="3594"};
+{"key"="568";"subkey"="113";"value"="3602"};
+{"key"="569";"subkey"="113";"value"="3609"};
+{"key"="570";"subkey"="114";"value"="3617"};
+{"key"="571";"subkey"="114";"value"="3624"};
+{"key"="572";"subkey"="114";"value"="3631"};
+{"key"="573";"subkey"="114";"value"="3639"};
+{"key"="574";"subkey"="114";"value"="3646"};
+{"key"="575";"subkey"="115";"value"="3653"};
+{"key"="576";"subkey"="115";"value"="3661"};
+{"key"="577";"subkey"="115";"value"="3668"};
+{"key"="578";"subkey"="115";"value"="3675"};
+{"key"="579";"subkey"="115";"value"="3683"};
+{"key"="580";"subkey"="116";"value"="3690"};
+{"key"="581";"subkey"="116";"value"="3697"};
+{"key"="582";"subkey"="116";"value"="3705"};
+{"key"="583";"subkey"="116";"value"="3712"};
+{"key"="584";"subkey"="116";"value"="3720"};
+{"key"="585";"subkey"="117";"value"="3727"};
+{"key"="586";"subkey"="117";"value"="3734"};
+{"key"="587";"subkey"="117";"value"="3742"};
+{"key"="588";"subkey"="117";"value"="3749"};
+{"key"="589";"subkey"="117";"value"="3756"};
+{"key"="590";"subkey"="118";"value"="3764"};
+{"key"="591";"subkey"="118";"value"="3771"};
+{"key"="592";"subkey"="118";"value"="3779"};
+{"key"="593";"subkey"="118";"value"="3786"};
+{"key"="594";"subkey"="118";"value"="3793"};
+{"key"="595";"subkey"="119";"value"="3801"};
+{"key"="596";"subkey"="119";"value"="3808"};
+{"key"="597";"subkey"="119";"value"="3815"};
+{"key"="598";"subkey"="119";"value"="3823"};
+{"key"="599";"subkey"="119";"value"="3830"};
+{"key"="600";"subkey"="120";"value"="3838"};
+{"key"="601";"subkey"="120";"value"="3845"};
+{"key"="602";"subkey"="120";"value"="3852"};
+{"key"="603";"subkey"="120";"value"="3860"};
+{"key"="604";"subkey"="120";"value"="3867"};
+{"key"="605";"subkey"="121";"value"="3875"};
+{"key"="606";"subkey"="121";"value"="3882"};
+{"key"="607";"subkey"="121";"value"="3889"};
+{"key"="608";"subkey"="121";"value"="3897"};
+{"key"="609";"subkey"="121";"value"="3904"};
+{"key"="610";"subkey"="122";"value"="3912"};
+{"key"="611";"subkey"="122";"value"="3919"};
+{"key"="612";"subkey"="122";"value"="3927"};
+{"key"="613";"subkey"="122";"value"="3934"};
+{"key"="614";"subkey"="122";"value"="3941"};
+{"key"="615";"subkey"="123";"value"="3949"};
+{"key"="616";"subkey"="123";"value"="3956"};
+{"key"="617";"subkey"="123";"value"="3964"};
+{"key"="618";"subkey"="123";"value"="3971"};
+{"key"="619";"subkey"="123";"value"="3978"};
+{"key"="620";"subkey"="124";"value"="3986"};
+{"key"="621";"subkey"="124";"value"="3993"};
+{"key"="622";"subkey"="124";"value"="4001"};
+{"key"="623";"subkey"="124";"value"="4008"};
+{"key"="624";"subkey"="124";"value"="4016"};
+{"key"="625";"subkey"="125";"value"="4023"};
+{"key"="626";"subkey"="125";"value"="4031"};
+{"key"="627";"subkey"="125";"value"="4038"};
+{"key"="628";"subkey"="125";"value"="4045"};
+{"key"="629";"subkey"="125";"value"="4053"};
+{"key"="630";"subkey"="126";"value"="4060"};
+{"key"="631";"subkey"="126";"value"="4068"};
+{"key"="632";"subkey"="126";"value"="4075"};
+{"key"="633";"subkey"="126";"value"="4083"};
+{"key"="634";"subkey"="126";"value"="4090"};
+{"key"="635";"subkey"="127";"value"="4098"};
+{"key"="636";"subkey"="127";"value"="4105"};
+{"key"="637";"subkey"="127";"value"="4112"};
+{"key"="638";"subkey"="127";"value"="4120"};
+{"key"="639";"subkey"="127";"value"="4127"};
+{"key"="640";"subkey"="128";"value"="4135"};
+{"key"="641";"subkey"="128";"value"="4142"};
+{"key"="642";"subkey"="128";"value"="4150"};
+{"key"="643";"subkey"="128";"value"="4157"};
+{"key"="644";"subkey"="128";"value"="4165"};
+{"key"="645";"subkey"="129";"value"="4172"};
+{"key"="646";"subkey"="129";"value"="4180"};
+{"key"="647";"subkey"="129";"value"="4187"};
+{"key"="648";"subkey"="129";"value"="4195"};
+{"key"="649";"subkey"="129";"value"="4202"};
+{"key"="650";"subkey"="130";"value"="4210"};
+{"key"="651";"subkey"="130";"value"="4217"};
+{"key"="652";"subkey"="130";"value"="4224"};
+{"key"="653";"subkey"="130";"value"="4232"};
+{"key"="654";"subkey"="130";"value"="4239"};
+{"key"="655";"subkey"="131";"value"="4247"};
+{"key"="656";"subkey"="131";"value"="4254"};
+{"key"="657";"subkey"="131";"value"="4262"};
+{"key"="658";"subkey"="131";"value"="4269"};
+{"key"="659";"subkey"="131";"value"="4277"};
+{"key"="660";"subkey"="132";"value"="4284"};
+{"key"="661";"subkey"="132";"value"="4292"};
+{"key"="662";"subkey"="132";"value"="4299"};
+{"key"="663";"subkey"="132";"value"="4307"};
+{"key"="664";"subkey"="132";"value"="4314"};
+{"key"="665";"subkey"="133";"value"="4322"};
+{"key"="666";"subkey"="133";"value"="4329"};
+{"key"="667";"subkey"="133";"value"="4337"};
+{"key"="668";"subkey"="133";"value"="4344"};
+{"key"="669";"subkey"="133";"value"="4352"};
+{"key"="670";"subkey"="134";"value"="4359"};
+{"key"="671";"subkey"="134";"value"="4367"};
+{"key"="672";"subkey"="134";"value"="4374"};
+{"key"="673";"subkey"="134";"value"="4382"};
+{"key"="674";"subkey"="134";"value"="4389"};
+{"key"="675";"subkey"="135";"value"="4397"};
+{"key"="676";"subkey"="135";"value"="4404"};
+{"key"="677";"subkey"="135";"value"="4412"};
+{"key"="678";"subkey"="135";"value"="4419"};
+{"key"="679";"subkey"="135";"value"="4427"};
+{"key"="680";"subkey"="136";"value"="4435"};
+{"key"="681";"subkey"="136";"value"="4442"};
+{"key"="682";"subkey"="136";"value"="4450"};
+{"key"="683";"subkey"="136";"value"="4457"};
+{"key"="684";"subkey"="136";"value"="4465"};
+{"key"="685";"subkey"="137";"value"="4472"};
+{"key"="686";"subkey"="137";"value"="4480"};
+{"key"="687";"subkey"="137";"value"="4487"};
+{"key"="688";"subkey"="137";"value"="4495"};
+{"key"="689";"subkey"="137";"value"="4502"};
+{"key"="690";"subkey"="138";"value"="4510"};
+{"key"="691";"subkey"="138";"value"="4517"};
+{"key"="692";"subkey"="138";"value"="4525"};
+{"key"="693";"subkey"="138";"value"="4532"};
+{"key"="694";"subkey"="138";"value"="4540"};
+{"key"="695";"subkey"="139";"value"="4548"};
+{"key"="696";"subkey"="139";"value"="4555"};
+{"key"="697";"subkey"="139";"value"="4563"};
+{"key"="698";"subkey"="139";"value"="4570"};
+{"key"="699";"subkey"="139";"value"="4578"};
+{"key"="700";"subkey"="140";"value"="4585"};
+{"key"="701";"subkey"="140";"value"="4593"};
+{"key"="702";"subkey"="140";"value"="4600"};
+{"key"="703";"subkey"="140";"value"="4608"};
+{"key"="704";"subkey"="140";"value"="4615"};
+{"key"="705";"subkey"="141";"value"="4623"};
+{"key"="706";"subkey"="141";"value"="4631"};
+{"key"="707";"subkey"="141";"value"="4638"};
+{"key"="708";"subkey"="141";"value"="4646"};
+{"key"="709";"subkey"="141";"value"="4653"};
+{"key"="710";"subkey"="142";"value"="4661"};
+{"key"="711";"subkey"="142";"value"="4668"};
+{"key"="712";"subkey"="142";"value"="4676"};
+{"key"="713";"subkey"="142";"value"="4684"};
+{"key"="714";"subkey"="142";"value"="4691"};
+{"key"="715";"subkey"="143";"value"="4699"};
+{"key"="716";"subkey"="143";"value"="4706"};
+{"key"="717";"subkey"="143";"value"="4714"};
+{"key"="718";"subkey"="143";"value"="4721"};
+{"key"="719";"subkey"="143";"value"="4729"};
+{"key"="720";"subkey"="144";"value"="4737"};
+{"key"="721";"subkey"="144";"value"="4744"};
+{"key"="722";"subkey"="144";"value"="4752"};
+{"key"="723";"subkey"="144";"value"="4759"};
+{"key"="724";"subkey"="144";"value"="4767"};
+{"key"="725";"subkey"="145";"value"="4774"};
+{"key"="726";"subkey"="145";"value"="4782"};
+{"key"="727";"subkey"="145";"value"="4790"};
+{"key"="728";"subkey"="145";"value"="4797"};
+{"key"="729";"subkey"="145";"value"="4805"};
+{"key"="730";"subkey"="146";"value"="4812"};
+{"key"="731";"subkey"="146";"value"="4820"};
+{"key"="732";"subkey"="146";"value"="4828"};
+{"key"="733";"subkey"="146";"value"="4835"};
+{"key"="734";"subkey"="146";"value"="4843"};
+{"key"="735";"subkey"="147";"value"="4850"};
+{"key"="736";"subkey"="147";"value"="4858"};
+{"key"="737";"subkey"="147";"value"="4866"};
+{"key"="738";"subkey"="147";"value"="4873"};
+{"key"="739";"subkey"="147";"value"="4881"};
+{"key"="740";"subkey"="148";"value"="4888"};
+{"key"="741";"subkey"="148";"value"="4896"};
+{"key"="742";"subkey"="148";"value"="4904"};
+{"key"="743";"subkey"="148";"value"="4911"};
+{"key"="744";"subkey"="148";"value"="4919"};
+{"key"="745";"subkey"="149";"value"="4926"};
+{"key"="746";"subkey"="149";"value"="4934"};
+{"key"="747";"subkey"="149";"value"="4942"};
+{"key"="748";"subkey"="149";"value"="4949"};
+{"key"="749";"subkey"="149";"value"="4957"};
+{"key"="750";"subkey"="150";"value"="4965"};
+{"key"="751";"subkey"="150";"value"="4972"};
+{"key"="752";"subkey"="150";"value"="4980"};
+{"key"="753";"subkey"="150";"value"="4987"};
+{"key"="754";"subkey"="150";"value"="4995"};
+{"key"="755";"subkey"="151";"value"="5003"};
+{"key"="756";"subkey"="151";"value"="5010"};
+{"key"="757";"subkey"="151";"value"="5018"};
+{"key"="758";"subkey"="151";"value"="5026"};
+{"key"="759";"subkey"="151";"value"="5033"};
+{"key"="760";"subkey"="152";"value"="5041"};
+{"key"="761";"subkey"="152";"value"="5048"};
+{"key"="762";"subkey"="152";"value"="5056"};
+{"key"="763";"subkey"="152";"value"="5064"};
+{"key"="764";"subkey"="152";"value"="5071"};
+{"key"="765";"subkey"="153";"value"="5079"};
+{"key"="766";"subkey"="153";"value"="5087"};
+{"key"="767";"subkey"="153";"value"="5094"};
+{"key"="768";"subkey"="153";"value"="5102"};
+{"key"="769";"subkey"="153";"value"="5110"};
+{"key"="770";"subkey"="154";"value"="5117"};
+{"key"="771";"subkey"="154";"value"="5125"};
+{"key"="772";"subkey"="154";"value"="5133"};
+{"key"="773";"subkey"="154";"value"="5140"};
+{"key"="774";"subkey"="154";"value"="5148"};
+{"key"="775";"subkey"="155";"value"="5155"};
+{"key"="776";"subkey"="155";"value"="5163"};
+{"key"="777";"subkey"="155";"value"="5171"};
+{"key"="778";"subkey"="155";"value"="5178"};
+{"key"="779";"subkey"="155";"value"="5186"};
+{"key"="780";"subkey"="156";"value"="5194"};
+{"key"="781";"subkey"="156";"value"="5201"};
+{"key"="782";"subkey"="156";"value"="5209"};
+{"key"="783";"subkey"="156";"value"="5217"};
+{"key"="784";"subkey"="156";"value"="5224"};
+{"key"="785";"subkey"="157";"value"="5232"};
+{"key"="786";"subkey"="157";"value"="5240"};
+{"key"="787";"subkey"="157";"value"="5247"};
+{"key"="788";"subkey"="157";"value"="5255"};
+{"key"="789";"subkey"="157";"value"="5263"};
+{"key"="790";"subkey"="158";"value"="5270"};
+{"key"="791";"subkey"="158";"value"="5278"};
+{"key"="792";"subkey"="158";"value"="5286"};
+{"key"="793";"subkey"="158";"value"="5293"};
+{"key"="794";"subkey"="158";"value"="5301"};
+{"key"="795";"subkey"="159";"value"="5309"};
+{"key"="796";"subkey"="159";"value"="5316"};
+{"key"="797";"subkey"="159";"value"="5324"};
+{"key"="798";"subkey"="159";"value"="5332"};
+{"key"="799";"subkey"="159";"value"="5340"};
+{"key"="800";"subkey"="160";"value"="5347"};
+{"key"="801";"subkey"="160";"value"="5355"};
+{"key"="802";"subkey"="160";"value"="5363"};
+{"key"="803";"subkey"="160";"value"="5370"};
+{"key"="804";"subkey"="160";"value"="5378"};
+{"key"="805";"subkey"="161";"value"="5386"};
+{"key"="806";"subkey"="161";"value"="5393"};
+{"key"="807";"subkey"="161";"value"="5401"};
+{"key"="808";"subkey"="161";"value"="5409"};
+{"key"="809";"subkey"="161";"value"="5416"};
+{"key"="810";"subkey"="162";"value"="5424"};
+{"key"="811";"subkey"="162";"value"="5432"};
+{"key"="812";"subkey"="162";"value"="5439"};
+{"key"="813";"subkey"="162";"value"="5447"};
+{"key"="814";"subkey"="162";"value"="5455"};
+{"key"="815";"subkey"="163";"value"="5463"};
+{"key"="816";"subkey"="163";"value"="5470"};
+{"key"="817";"subkey"="163";"value"="5478"};
+{"key"="818";"subkey"="163";"value"="5486"};
+{"key"="819";"subkey"="163";"value"="5493"};
+{"key"="820";"subkey"="164";"value"="5501"};
+{"key"="821";"subkey"="164";"value"="5509"};
+{"key"="822";"subkey"="164";"value"="5517"};
+{"key"="823";"subkey"="164";"value"="5524"};
+{"key"="824";"subkey"="164";"value"="5532"};
+{"key"="825";"subkey"="165";"value"="5540"};
+{"key"="826";"subkey"="165";"value"="5547"};
+{"key"="827";"subkey"="165";"value"="5555"};
+{"key"="828";"subkey"="165";"value"="5563"};
+{"key"="829";"subkey"="165";"value"="5571"};
+{"key"="830";"subkey"="166";"value"="5578"};
+{"key"="831";"subkey"="166";"value"="5586"};
+{"key"="832";"subkey"="166";"value"="5594"};
+{"key"="833";"subkey"="166";"value"="5601"};
+{"key"="834";"subkey"="166";"value"="5609"};
+{"key"="835";"subkey"="167";"value"="5617"};
+{"key"="836";"subkey"="167";"value"="5625"};
+{"key"="837";"subkey"="167";"value"="5632"};
+{"key"="838";"subkey"="167";"value"="5640"};
+{"key"="839";"subkey"="167";"value"="5648"};
+{"key"="840";"subkey"="168";"value"="5656"};
+{"key"="841";"subkey"="168";"value"="5663"};
+{"key"="842";"subkey"="168";"value"="5671"};
+{"key"="843";"subkey"="168";"value"="5679"};
+{"key"="844";"subkey"="168";"value"="5687"};
+{"key"="845";"subkey"="169";"value"="5694"};
+{"key"="846";"subkey"="169";"value"="5702"};
+{"key"="847";"subkey"="169";"value"="5710"};
+{"key"="848";"subkey"="169";"value"="5717"};
+{"key"="849";"subkey"="169";"value"="5725"};
+{"key"="850";"subkey"="170";"value"="5733"};
+{"key"="851";"subkey"="170";"value"="5741"};
+{"key"="852";"subkey"="170";"value"="5748"};
+{"key"="853";"subkey"="170";"value"="5756"};
+{"key"="854";"subkey"="170";"value"="5764"};
+{"key"="855";"subkey"="171";"value"="5772"};
+{"key"="856";"subkey"="171";"value"="5779"};
+{"key"="857";"subkey"="171";"value"="5787"};
+{"key"="858";"subkey"="171";"value"="5795"};
+{"key"="859";"subkey"="171";"value"="5803"};
+{"key"="860";"subkey"="172";"value"="5810"};
+{"key"="861";"subkey"="172";"value"="5818"};
+{"key"="862";"subkey"="172";"value"="5826"};
+{"key"="863";"subkey"="172";"value"="5834"};
+{"key"="864";"subkey"="172";"value"="5841"};
+{"key"="865";"subkey"="173";"value"="5849"};
+{"key"="866";"subkey"="173";"value"="5857"};
+{"key"="867";"subkey"="173";"value"="5865"};
+{"key"="868";"subkey"="173";"value"="5873"};
+{"key"="869";"subkey"="173";"value"="5880"};
+{"key"="870";"subkey"="174";"value"="5888"};
+{"key"="871";"subkey"="174";"value"="5896"};
+{"key"="872";"subkey"="174";"value"="5904"};
+{"key"="873";"subkey"="174";"value"="5911"};
+{"key"="874";"subkey"="174";"value"="5919"};
+{"key"="875";"subkey"="175";"value"="5927"};
+{"key"="876";"subkey"="175";"value"="5935"};
+{"key"="877";"subkey"="175";"value"="5942"};
+{"key"="878";"subkey"="175";"value"="5950"};
+{"key"="879";"subkey"="175";"value"="5958"};
+{"key"="880";"subkey"="176";"value"="5966"};
+{"key"="881";"subkey"="176";"value"="5974"};
+{"key"="882";"subkey"="176";"value"="5981"};
+{"key"="883";"subkey"="176";"value"="5989"};
+{"key"="884";"subkey"="176";"value"="5997"};
+{"key"="885";"subkey"="177";"value"="6005"};
+{"key"="886";"subkey"="177";"value"="6013"};
+{"key"="887";"subkey"="177";"value"="6020"};
+{"key"="888";"subkey"="177";"value"="6028"};
+{"key"="889";"subkey"="177";"value"="6036"};
+{"key"="890";"subkey"="178";"value"="6044"};
+{"key"="891";"subkey"="178";"value"="6051"};
+{"key"="892";"subkey"="178";"value"="6059"};
+{"key"="893";"subkey"="178";"value"="6067"};
+{"key"="894";"subkey"="178";"value"="6075"};
+{"key"="895";"subkey"="179";"value"="6083"};
+{"key"="896";"subkey"="179";"value"="6090"};
+{"key"="897";"subkey"="179";"value"="6098"};
+{"key"="898";"subkey"="179";"value"="6106"};
+{"key"="899";"subkey"="179";"value"="6114"};
+{"key"="900";"subkey"="180";"value"="6122"};
+{"key"="901";"subkey"="180";"value"="6129"};
+{"key"="902";"subkey"="180";"value"="6137"};
+{"key"="903";"subkey"="180";"value"="6145"};
+{"key"="904";"subkey"="180";"value"="6153"};
+{"key"="905";"subkey"="181";"value"="6161"};
+{"key"="906";"subkey"="181";"value"="6168"};
+{"key"="907";"subkey"="181";"value"="6176"};
+{"key"="908";"subkey"="181";"value"="6184"};
+{"key"="909";"subkey"="181";"value"="6192"};
+{"key"="910";"subkey"="182";"value"="6200"};
+{"key"="911";"subkey"="182";"value"="6208"};
+{"key"="912";"subkey"="182";"value"="6215"};
+{"key"="913";"subkey"="182";"value"="6223"};
+{"key"="914";"subkey"="182";"value"="6231"};
+{"key"="915";"subkey"="183";"value"="6239"};
+{"key"="916";"subkey"="183";"value"="6247"};
+{"key"="917";"subkey"="183";"value"="6254"};
+{"key"="918";"subkey"="183";"value"="6262"};
+{"key"="919";"subkey"="183";"value"="6270"};
+{"key"="920";"subkey"="184";"value"="6278"};
+{"key"="921";"subkey"="184";"value"="6286"};
+{"key"="922";"subkey"="184";"value"="6294"};
+{"key"="923";"subkey"="184";"value"="6301"};
+{"key"="924";"subkey"="184";"value"="6309"};
+{"key"="925";"subkey"="185";"value"="6317"};
+{"key"="926";"subkey"="185";"value"="6325"};
+{"key"="927";"subkey"="185";"value"="6333"};
+{"key"="928";"subkey"="185";"value"="6341"};
+{"key"="929";"subkey"="185";"value"="6348"};
+{"key"="930";"subkey"="186";"value"="6356"};
+{"key"="931";"subkey"="186";"value"="6364"};
+{"key"="932";"subkey"="186";"value"="6372"};
+{"key"="933";"subkey"="186";"value"="6380"};
+{"key"="934";"subkey"="186";"value"="6388"};
+{"key"="935";"subkey"="187";"value"="6395"};
+{"key"="936";"subkey"="187";"value"="6403"};
+{"key"="937";"subkey"="187";"value"="6411"};
+{"key"="938";"subkey"="187";"value"="6419"};
+{"key"="939";"subkey"="187";"value"="6427"};
+{"key"="940";"subkey"="188";"value"="6435"};
+{"key"="941";"subkey"="188";"value"="6442"};
+{"key"="942";"subkey"="188";"value"="6450"};
+{"key"="943";"subkey"="188";"value"="6458"};
+{"key"="944";"subkey"="188";"value"="6466"};
+{"key"="945";"subkey"="189";"value"="6474"};
+{"key"="946";"subkey"="189";"value"="6482"};
+{"key"="947";"subkey"="189";"value"="6490"};
+{"key"="948";"subkey"="189";"value"="6497"};
+{"key"="949";"subkey"="189";"value"="6505"};
+{"key"="950";"subkey"="190";"value"="6513"};
+{"key"="951";"subkey"="190";"value"="6521"};
+{"key"="952";"subkey"="190";"value"="6529"};
+{"key"="953";"subkey"="190";"value"="6537"};
+{"key"="954";"subkey"="190";"value"="6545"};
+{"key"="955";"subkey"="191";"value"="6552"};
+{"key"="956";"subkey"="191";"value"="6560"};
+{"key"="957";"subkey"="191";"value"="6568"};
+{"key"="958";"subkey"="191";"value"="6576"};
+{"key"="959";"subkey"="191";"value"="6584"};
+{"key"="960";"subkey"="192";"value"="6592"};
+{"key"="961";"subkey"="192";"value"="6600"};
+{"key"="962";"subkey"="192";"value"="6607"};
+{"key"="963";"subkey"="192";"value"="6615"};
+{"key"="964";"subkey"="192";"value"="6623"};
+{"key"="965";"subkey"="193";"value"="6631"};
+{"key"="966";"subkey"="193";"value"="6639"};
+{"key"="967";"subkey"="193";"value"="6647"};
+{"key"="968";"subkey"="193";"value"="6655"};
+{"key"="969";"subkey"="193";"value"="6663"};
+{"key"="970";"subkey"="194";"value"="6670"};
+{"key"="971";"subkey"="194";"value"="6678"};
+{"key"="972";"subkey"="194";"value"="6686"};
+{"key"="973";"subkey"="194";"value"="6694"};
+{"key"="974";"subkey"="194";"value"="6702"};
+{"key"="975";"subkey"="195";"value"="6710"};
+{"key"="976";"subkey"="195";"value"="6718"};
+{"key"="977";"subkey"="195";"value"="6726"};
+{"key"="978";"subkey"="195";"value"="6734"};
+{"key"="979";"subkey"="195";"value"="6741"};
+{"key"="980";"subkey"="196";"value"="6749"};
+{"key"="981";"subkey"="196";"value"="6757"};
+{"key"="982";"subkey"="196";"value"="6765"};
+{"key"="983";"subkey"="196";"value"="6773"};
+{"key"="984";"subkey"="196";"value"="6781"};
+{"key"="985";"subkey"="197";"value"="6789"};
+{"key"="986";"subkey"="197";"value"="6797"};
+{"key"="987";"subkey"="197";"value"="6805"};
+{"key"="988";"subkey"="197";"value"="6812"};
+{"key"="989";"subkey"="197";"value"="6820"};
+{"key"="990";"subkey"="198";"value"="6828"};
+{"key"="991";"subkey"="198";"value"="6836"};
+{"key"="992";"subkey"="198";"value"="6844"};
+{"key"="993";"subkey"="198";"value"="6852"};
+{"key"="994";"subkey"="198";"value"="6860"};
+{"key"="995";"subkey"="199";"value"="6868"};
+{"key"="996";"subkey"="199";"value"="6876"};
+{"key"="997";"subkey"="199";"value"="6884"};
+{"key"="998";"subkey"="199";"value"="6891"};
+{"key"="999";"subkey"="199";"value"="6899"};
+{"key"="1000";"subkey"="200";"value"="6907"};
+{"key"="1001";"subkey"="200";"value"="6915"};
+{"key"="1002";"subkey"="200";"value"="6923"};
+{"key"="1003";"subkey"="200";"value"="6931"};
+{"key"="1004";"subkey"="200";"value"="6939"};
+{"key"="1005";"subkey"="201";"value"="6947"};
+{"key"="1006";"subkey"="201";"value"="6955"};
+{"key"="1007";"subkey"="201";"value"="6963"};
+{"key"="1008";"subkey"="201";"value"="6971"};
+{"key"="1009";"subkey"="201";"value"="6978"};
+{"key"="1010";"subkey"="202";"value"="6986"};
+{"key"="1011";"subkey"="202";"value"="6994"};
+{"key"="1012";"subkey"="202";"value"="7002"};
+{"key"="1013";"subkey"="202";"value"="7010"};
+{"key"="1014";"subkey"="202";"value"="7018"};
+{"key"="1015";"subkey"="203";"value"="7026"};
+{"key"="1016";"subkey"="203";"value"="7034"};
+{"key"="1017";"subkey"="203";"value"="7042"};
+{"key"="1018";"subkey"="203";"value"="7050"};
+{"key"="1019";"subkey"="203";"value"="7058"};
+{"key"="1020";"subkey"="204";"value"="7066"};
+{"key"="1021";"subkey"="204";"value"="7074"};
+{"key"="1022";"subkey"="204";"value"="7081"};
+{"key"="1023";"subkey"="204";"value"="7089"};
+{"key"="1024";"subkey"="204";"value"="7097"};
+{"key"="1025";"subkey"="205";"value"="7105"};
+{"key"="1026";"subkey"="205";"value"="7113"};
+{"key"="1027";"subkey"="205";"value"="7121"};
+{"key"="1028";"subkey"="205";"value"="7129"};
+{"key"="1029";"subkey"="205";"value"="7137"};
+{"key"="1030";"subkey"="206";"value"="7145"};
+{"key"="1031";"subkey"="206";"value"="7153"};
+{"key"="1032";"subkey"="206";"value"="7161"};
+{"key"="1033";"subkey"="206";"value"="7169"};
+{"key"="1034";"subkey"="206";"value"="7177"};
+{"key"="1035";"subkey"="207";"value"="7185"};
+{"key"="1036";"subkey"="207";"value"="7193"};
+{"key"="1037";"subkey"="207";"value"="7201"};
+{"key"="1038";"subkey"="207";"value"="7208"};
+{"key"="1039";"subkey"="207";"value"="7216"};
+{"key"="1040";"subkey"="208";"value"="7224"};
+{"key"="1041";"subkey"="208";"value"="7232"};
+{"key"="1042";"subkey"="208";"value"="7240"};
+{"key"="1043";"subkey"="208";"value"="7248"};
+{"key"="1044";"subkey"="208";"value"="7256"};
+{"key"="1045";"subkey"="209";"value"="7264"};
+{"key"="1046";"subkey"="209";"value"="7272"};
+{"key"="1047";"subkey"="209";"value"="7280"};
+{"key"="1048";"subkey"="209";"value"="7288"};
+{"key"="1049";"subkey"="209";"value"="7296"};
+{"key"="1050";"subkey"="210";"value"="7304"};
+{"key"="1051";"subkey"="210";"value"="7312"};
+{"key"="1052";"subkey"="210";"value"="7320"};
+{"key"="1053";"subkey"="210";"value"="7328"};
+{"key"="1054";"subkey"="210";"value"="7336"};
+{"key"="1055";"subkey"="211";"value"="7344"};
+{"key"="1056";"subkey"="211";"value"="7352"};
+{"key"="1057";"subkey"="211";"value"="7360"};
+{"key"="1058";"subkey"="211";"value"="7368"};
+{"key"="1059";"subkey"="211";"value"="7376"};
+{"key"="1060";"subkey"="212";"value"="7383"};
+{"key"="1061";"subkey"="212";"value"="7391"};
+{"key"="1062";"subkey"="212";"value"="7399"};
+{"key"="1063";"subkey"="212";"value"="7407"};
+{"key"="1064";"subkey"="212";"value"="7415"};
+{"key"="1065";"subkey"="213";"value"="7423"};
+{"key"="1066";"subkey"="213";"value"="7431"};
+{"key"="1067";"subkey"="213";"value"="7439"};
+{"key"="1068";"subkey"="213";"value"="7447"};
+{"key"="1069";"subkey"="213";"value"="7455"};
+{"key"="1070";"subkey"="214";"value"="7463"};
+{"key"="1071";"subkey"="214";"value"="7471"};
+{"key"="1072";"subkey"="214";"value"="7479"};
+{"key"="1073";"subkey"="214";"value"="7487"};
+{"key"="1074";"subkey"="214";"value"="7495"};
+{"key"="1075";"subkey"="215";"value"="7503"};
+{"key"="1076";"subkey"="215";"value"="7511"};
+{"key"="1077";"subkey"="215";"value"="7519"};
+{"key"="1078";"subkey"="215";"value"="7527"};
+{"key"="1079";"subkey"="215";"value"="7535"};
+{"key"="1080";"subkey"="216";"value"="7543"};
+{"key"="1081";"subkey"="216";"value"="7551"};
+{"key"="1082";"subkey"="216";"value"="7559"};
+{"key"="1083";"subkey"="216";"value"="7567"};
+{"key"="1084";"subkey"="216";"value"="7575"};
+{"key"="1085";"subkey"="217";"value"="7583"};
+{"key"="1086";"subkey"="217";"value"="7591"};
+{"key"="1087";"subkey"="217";"value"="7599"};
+{"key"="1088";"subkey"="217";"value"="7607"};
+{"key"="1089";"subkey"="217";"value"="7615"};
+{"key"="1090";"subkey"="218";"value"="7623"};
+{"key"="1091";"subkey"="218";"value"="7631"};
+{"key"="1092";"subkey"="218";"value"="7639"};
+{"key"="1093";"subkey"="218";"value"="7647"};
+{"key"="1094";"subkey"="218";"value"="7655"};
+{"key"="1095";"subkey"="219";"value"="7663"};
+{"key"="1096";"subkey"="219";"value"="7671"};
+{"key"="1097";"subkey"="219";"value"="7679"};
+{"key"="1098";"subkey"="219";"value"="7687"};
+{"key"="1099";"subkey"="219";"value"="7695"};
+{"key"="1100";"subkey"="220";"value"="7703"};
+{"key"="1101";"subkey"="220";"value"="7711"};
+{"key"="1102";"subkey"="220";"value"="7719"};
+{"key"="1103";"subkey"="220";"value"="7727"};
+{"key"="1104";"subkey"="220";"value"="7735"};
+{"key"="1105";"subkey"="221";"value"="7743"};
+{"key"="1106";"subkey"="221";"value"="7751"};
+{"key"="1107";"subkey"="221";"value"="7759"};
+{"key"="1108";"subkey"="221";"value"="7767"};
+{"key"="1109";"subkey"="221";"value"="7775"};
+{"key"="1110";"subkey"="222";"value"="7783"};
+{"key"="1111";"subkey"="222";"value"="7791"};
+{"key"="1112";"subkey"="222";"value"="7799"};
+{"key"="1113";"subkey"="222";"value"="7807"};
+{"key"="1114";"subkey"="222";"value"="7815"};
+{"key"="1115";"subkey"="223";"value"="7823"};
+{"key"="1116";"subkey"="223";"value"="7831"};
+{"key"="1117";"subkey"="223";"value"="7839"};
+{"key"="1118";"subkey"="223";"value"="7847"};
+{"key"="1119";"subkey"="223";"value"="7855"};
+{"key"="1120";"subkey"="224";"value"="7863"};
+{"key"="1121";"subkey"="224";"value"="7871"};
+{"key"="1122";"subkey"="224";"value"="7879"};
+{"key"="1123";"subkey"="224";"value"="7887"};
+{"key"="1124";"subkey"="224";"value"="7895"};
+{"key"="1125";"subkey"="225";"value"="7903"};
+{"key"="1126";"subkey"="225";"value"="7911"};
+{"key"="1127";"subkey"="225";"value"="7919"};
+{"key"="1128";"subkey"="225";"value"="7927"};
+{"key"="1129";"subkey"="225";"value"="7935"};
+{"key"="1130";"subkey"="226";"value"="7943"};
+{"key"="1131";"subkey"="226";"value"="7951"};
+{"key"="1132";"subkey"="226";"value"="7959"};
+{"key"="1133";"subkey"="226";"value"="7967"};
+{"key"="1134";"subkey"="226";"value"="7975"};
+{"key"="1135";"subkey"="227";"value"="7984"};
+{"key"="1136";"subkey"="227";"value"="7992"};
+{"key"="1137";"subkey"="227";"value"="8000"};
+{"key"="1138";"subkey"="227";"value"="8008"};
+{"key"="1139";"subkey"="227";"value"="8016"};
+{"key"="1140";"subkey"="228";"value"="8024"};
+{"key"="1141";"subkey"="228";"value"="8032"};
+{"key"="1142";"subkey"="228";"value"="8040"};
+{"key"="1143";"subkey"="228";"value"="8048"};
+{"key"="1144";"subkey"="228";"value"="8056"};
+{"key"="1145";"subkey"="229";"value"="8064"};
+{"key"="1146";"subkey"="229";"value"="8072"};
+{"key"="1147";"subkey"="229";"value"="8080"};
+{"key"="1148";"subkey"="229";"value"="8088"};
+{"key"="1149";"subkey"="229";"value"="8096"};
+{"key"="1150";"subkey"="230";"value"="8104"};
+{"key"="1151";"subkey"="230";"value"="8112"};
+{"key"="1152";"subkey"="230";"value"="8120"};
+{"key"="1153";"subkey"="230";"value"="8128"};
+{"key"="1154";"subkey"="230";"value"="8136"};
+{"key"="1155";"subkey"="231";"value"="8144"};
+{"key"="1156";"subkey"="231";"value"="8152"};
+{"key"="1157";"subkey"="231";"value"="8160"};
+{"key"="1158";"subkey"="231";"value"="8169"};
+{"key"="1159";"subkey"="231";"value"="8177"};
+{"key"="1160";"subkey"="232";"value"="8185"};
+{"key"="1161";"subkey"="232";"value"="8193"};
+{"key"="1162";"subkey"="232";"value"="8201"};
+{"key"="1163";"subkey"="232";"value"="8209"};
+{"key"="1164";"subkey"="232";"value"="8217"};
+{"key"="1165";"subkey"="233";"value"="8225"};
+{"key"="1166";"subkey"="233";"value"="8233"};
+{"key"="1167";"subkey"="233";"value"="8241"};
+{"key"="1168";"subkey"="233";"value"="8249"};
+{"key"="1169";"subkey"="233";"value"="8257"};
+{"key"="1170";"subkey"="234";"value"="8265"};
+{"key"="1171";"subkey"="234";"value"="8273"};
+{"key"="1172";"subkey"="234";"value"="8281"};
+{"key"="1173";"subkey"="234";"value"="8289"};
+{"key"="1174";"subkey"="234";"value"="8298"};
+{"key"="1175";"subkey"="235";"value"="8306"};
+{"key"="1176";"subkey"="235";"value"="8314"};
+{"key"="1177";"subkey"="235";"value"="8322"};
+{"key"="1178";"subkey"="235";"value"="8330"};
+{"key"="1179";"subkey"="235";"value"="8338"};
+{"key"="1180";"subkey"="236";"value"="8346"};
+{"key"="1181";"subkey"="236";"value"="8354"};
+{"key"="1182";"subkey"="236";"value"="8362"};
+{"key"="1183";"subkey"="236";"value"="8370"};
+{"key"="1184";"subkey"="236";"value"="8378"};
+{"key"="1185";"subkey"="237";"value"="8386"};
+{"key"="1186";"subkey"="237";"value"="8394"};
+{"key"="1187";"subkey"="237";"value"="8402"};
+{"key"="1188";"subkey"="237";"value"="8411"};
+{"key"="1189";"subkey"="237";"value"="8419"};
+{"key"="1190";"subkey"="238";"value"="8427"};
+{"key"="1191";"subkey"="238";"value"="8435"};
+{"key"="1192";"subkey"="238";"value"="8443"};
+{"key"="1193";"subkey"="238";"value"="8451"};
+{"key"="1194";"subkey"="238";"value"="8459"};
+{"key"="1195";"subkey"="239";"value"="8467"};
+{"key"="1196";"subkey"="239";"value"="8475"};
+{"key"="1197";"subkey"="239";"value"="8483"};
+{"key"="1198";"subkey"="239";"value"="8491"};
+{"key"="1199";"subkey"="239";"value"="8500"};
+{"key"="1200";"subkey"="240";"value"="8508"};
+{"key"="1201";"subkey"="240";"value"="8516"};
+{"key"="1202";"subkey"="240";"value"="8524"};
+{"key"="1203";"subkey"="240";"value"="8532"};
+{"key"="1204";"subkey"="240";"value"="8540"};
+{"key"="1205";"subkey"="241";"value"="8548"};
+{"key"="1206";"subkey"="241";"value"="8556"};
+{"key"="1207";"subkey"="241";"value"="8564"};
+{"key"="1208";"subkey"="241";"value"="8572"};
+{"key"="1209";"subkey"="241";"value"="8580"};
+{"key"="1210";"subkey"="242";"value"="8589"};
+{"key"="1211";"subkey"="242";"value"="8597"};
+{"key"="1212";"subkey"="242";"value"="8605"};
+{"key"="1213";"subkey"="242";"value"="8613"};
+{"key"="1214";"subkey"="242";"value"="8621"};
+{"key"="1215";"subkey"="243";"value"="8629"};
+{"key"="1216";"subkey"="243";"value"="8637"};
+{"key"="1217";"subkey"="243";"value"="8645"};
+{"key"="1218";"subkey"="243";"value"="8653"};
+{"key"="1219";"subkey"="243";"value"="8661"};
+{"key"="1220";"subkey"="244";"value"="8670"};
+{"key"="1221";"subkey"="244";"value"="8678"};
+{"key"="1222";"subkey"="244";"value"="8686"};
+{"key"="1223";"subkey"="244";"value"="8694"};
+{"key"="1224";"subkey"="244";"value"="8702"};
+{"key"="1225";"subkey"="245";"value"="8710"};
+{"key"="1226";"subkey"="245";"value"="8718"};
+{"key"="1227";"subkey"="245";"value"="8726"};
+{"key"="1228";"subkey"="245";"value"="8734"};
+{"key"="1229";"subkey"="245";"value"="8743"};
+{"key"="1230";"subkey"="246";"value"="8751"};
+{"key"="1231";"subkey"="246";"value"="8759"};
+{"key"="1232";"subkey"="246";"value"="8767"};
+{"key"="1233";"subkey"="246";"value"="8775"};
+{"key"="1234";"subkey"="246";"value"="8783"};
+{"key"="1235";"subkey"="247";"value"="8791"};
+{"key"="1236";"subkey"="247";"value"="8799"};
+{"key"="1237";"subkey"="247";"value"="8807"};
+{"key"="1238";"subkey"="247";"value"="8816"};
+{"key"="1239";"subkey"="247";"value"="8824"};
+{"key"="1240";"subkey"="248";"value"="8832"};
+{"key"="1241";"subkey"="248";"value"="8840"};
+{"key"="1242";"subkey"="248";"value"="8848"};
+{"key"="1243";"subkey"="248";"value"="8856"};
+{"key"="1244";"subkey"="248";"value"="8864"};
+{"key"="1245";"subkey"="249";"value"="8872"};
+{"key"="1246";"subkey"="249";"value"="8881"};
+{"key"="1247";"subkey"="249";"value"="8889"};
+{"key"="1248";"subkey"="249";"value"="8897"};
+{"key"="1249";"subkey"="249";"value"="8905"};
+{"key"="1250";"subkey"="250";"value"="8913"};
+{"key"="1251";"subkey"="250";"value"="8921"};
+{"key"="1252";"subkey"="250";"value"="8929"};
+{"key"="1253";"subkey"="250";"value"="8938"};
+{"key"="1254";"subkey"="250";"value"="8946"};
+{"key"="1255";"subkey"="251";"value"="8954"};
+{"key"="1256";"subkey"="251";"value"="8962"};
+{"key"="1257";"subkey"="251";"value"="8970"};
+{"key"="1258";"subkey"="251";"value"="8978"};
+{"key"="1259";"subkey"="251";"value"="8986"};
+{"key"="1260";"subkey"="252";"value"="8994"};
+{"key"="1261";"subkey"="252";"value"="9003"};
+{"key"="1262";"subkey"="252";"value"="9011"};
+{"key"="1263";"subkey"="252";"value"="9019"};
+{"key"="1264";"subkey"="252";"value"="9027"};
+{"key"="1265";"subkey"="253";"value"="9035"};
+{"key"="1266";"subkey"="253";"value"="9043"};
+{"key"="1267";"subkey"="253";"value"="9051"};
+{"key"="1268";"subkey"="253";"value"="9060"};
+{"key"="1269";"subkey"="253";"value"="9068"};
+{"key"="1270";"subkey"="254";"value"="9076"};
+{"key"="1271";"subkey"="254";"value"="9084"};
+{"key"="1272";"subkey"="254";"value"="9092"};
+{"key"="1273";"subkey"="254";"value"="9100"};
+{"key"="1274";"subkey"="254";"value"="9108"};
+{"key"="1275";"subkey"="255";"value"="9117"};
+{"key"="1276";"subkey"="255";"value"="9125"};
+{"key"="1277";"subkey"="255";"value"="9133"};
+{"key"="1278";"subkey"="255";"value"="9141"};
+{"key"="1279";"subkey"="255";"value"="9149"};
+{"key"="1280";"subkey"="256";"value"="9157"};
+{"key"="1281";"subkey"="256";"value"="9166"};
+{"key"="1282";"subkey"="256";"value"="9174"};
+{"key"="1283";"subkey"="256";"value"="9182"};
+{"key"="1284";"subkey"="256";"value"="9190"};
+{"key"="1285";"subkey"="257";"value"="9198"};
+{"key"="1286";"subkey"="257";"value"="9206"};
+{"key"="1287";"subkey"="257";"value"="9215"};
+{"key"="1288";"subkey"="257";"value"="9223"};
+{"key"="1289";"subkey"="257";"value"="9231"};
+{"key"="1290";"subkey"="258";"value"="9239"};
+{"key"="1291";"subkey"="258";"value"="9247"};
+{"key"="1292";"subkey"="258";"value"="9255"};
+{"key"="1293";"subkey"="258";"value"="9263"};
+{"key"="1294";"subkey"="258";"value"="9272"};
+{"key"="1295";"subkey"="259";"value"="9280"};
+{"key"="1296";"subkey"="259";"value"="9288"};
+{"key"="1297";"subkey"="259";"value"="9296"};
+{"key"="1298";"subkey"="259";"value"="9304"};
+{"key"="1299";"subkey"="259";"value"="9312"};
+{"key"="1300";"subkey"="260";"value"="9321"};
+{"key"="1301";"subkey"="260";"value"="9329"};
+{"key"="1302";"subkey"="260";"value"="9337"};
+{"key"="1303";"subkey"="260";"value"="9345"};
+{"key"="1304";"subkey"="260";"value"="9353"};
+{"key"="1305";"subkey"="261";"value"="9362"};
+{"key"="1306";"subkey"="261";"value"="9370"};
+{"key"="1307";"subkey"="261";"value"="9378"};
+{"key"="1308";"subkey"="261";"value"="9386"};
+{"key"="1309";"subkey"="261";"value"="9394"};
+{"key"="1310";"subkey"="262";"value"="9402"};
+{"key"="1311";"subkey"="262";"value"="9411"};
+{"key"="1312";"subkey"="262";"value"="9419"};
+{"key"="1313";"subkey"="262";"value"="9427"};
+{"key"="1314";"subkey"="262";"value"="9435"};
+{"key"="1315";"subkey"="263";"value"="9443"};
+{"key"="1316";"subkey"="263";"value"="9451"};
+{"key"="1317";"subkey"="263";"value"="9460"};
+{"key"="1318";"subkey"="263";"value"="9468"};
+{"key"="1319";"subkey"="263";"value"="9476"};
+{"key"="1320";"subkey"="264";"value"="9484"};
+{"key"="1321";"subkey"="264";"value"="9492"};
+{"key"="1322";"subkey"="264";"value"="9501"};
+{"key"="1323";"subkey"="264";"value"="9509"};
+{"key"="1324";"subkey"="264";"value"="9517"};
+{"key"="1325";"subkey"="265";"value"="9525"};
+{"key"="1326";"subkey"="265";"value"="9533"};
+{"key"="1327";"subkey"="265";"value"="9542"};
+{"key"="1328";"subkey"="265";"value"="9550"};
+{"key"="1329";"subkey"="265";"value"="9558"};
+{"key"="1330";"subkey"="266";"value"="9566"};
+{"key"="1331";"subkey"="266";"value"="9574"};
+{"key"="1332";"subkey"="266";"value"="9582"};
+{"key"="1333";"subkey"="266";"value"="9591"};
+{"key"="1334";"subkey"="266";"value"="9599"};
+{"key"="1335";"subkey"="267";"value"="9607"};
+{"key"="1336";"subkey"="267";"value"="9615"};
+{"key"="1337";"subkey"="267";"value"="9623"};
+{"key"="1338";"subkey"="267";"value"="9632"};
+{"key"="1339";"subkey"="267";"value"="9640"};
+{"key"="1340";"subkey"="268";"value"="9648"};
+{"key"="1341";"subkey"="268";"value"="9656"};
+{"key"="1342";"subkey"="268";"value"="9664"};
+{"key"="1343";"subkey"="268";"value"="9673"};
+{"key"="1344";"subkey"="268";"value"="9681"};
+{"key"="1345";"subkey"="269";"value"="9689"};
+{"key"="1346";"subkey"="269";"value"="9697"};
+{"key"="1347";"subkey"="269";"value"="9705"};
+{"key"="1348";"subkey"="269";"value"="9714"};
+{"key"="1349";"subkey"="269";"value"="9722"};
+{"key"="1350";"subkey"="270";"value"="9730"};
+{"key"="1351";"subkey"="270";"value"="9738"};
+{"key"="1352";"subkey"="270";"value"="9747"};
+{"key"="1353";"subkey"="270";"value"="9755"};
+{"key"="1354";"subkey"="270";"value"="9763"};
+{"key"="1355";"subkey"="271";"value"="9771"};
+{"key"="1356";"subkey"="271";"value"="9779"};
+{"key"="1357";"subkey"="271";"value"="9788"};
+{"key"="1358";"subkey"="271";"value"="9796"};
+{"key"="1359";"subkey"="271";"value"="9804"};
+{"key"="1360";"subkey"="272";"value"="9812"};
+{"key"="1361";"subkey"="272";"value"="9820"};
+{"key"="1362";"subkey"="272";"value"="9829"};
+{"key"="1363";"subkey"="272";"value"="9837"};
+{"key"="1364";"subkey"="272";"value"="9845"};
+{"key"="1365";"subkey"="273";"value"="9853"};
+{"key"="1366";"subkey"="273";"value"="9862"};
+{"key"="1367";"subkey"="273";"value"="9870"};
+{"key"="1368";"subkey"="273";"value"="9878"};
+{"key"="1369";"subkey"="273";"value"="9886"};
+{"key"="1370";"subkey"="274";"value"="9894"};
+{"key"="1371";"subkey"="274";"value"="9903"};
+{"key"="1372";"subkey"="274";"value"="9911"};
+{"key"="1373";"subkey"="274";"value"="9919"};
+{"key"="1374";"subkey"="274";"value"="9927"};
+{"key"="1375";"subkey"="275";"value"="9936"};
+{"key"="1376";"subkey"="275";"value"="9944"};
+{"key"="1377";"subkey"="275";"value"="9952"};
+{"key"="1378";"subkey"="275";"value"="9960"};
+{"key"="1379";"subkey"="275";"value"="9968"};
+{"key"="1380";"subkey"="276";"value"="9977"};
+{"key"="1381";"subkey"="276";"value"="9985"};
+{"key"="1382";"subkey"="276";"value"="9993"};
+{"key"="1383";"subkey"="276";"value"="10001"};
+{"key"="1384";"subkey"="276";"value"="10010"};
+{"key"="1385";"subkey"="277";"value"="10018"};
+{"key"="1386";"subkey"="277";"value"="10026"};
+{"key"="1387";"subkey"="277";"value"="10034"};
+{"key"="1388";"subkey"="277";"value"="10043"};
+{"key"="1389";"subkey"="277";"value"="10051"};
+{"key"="1390";"subkey"="278";"value"="10059"};
+{"key"="1391";"subkey"="278";"value"="10067"};
+{"key"="1392";"subkey"="278";"value"="10075"};
+{"key"="1393";"subkey"="278";"value"="10084"};
+{"key"="1394";"subkey"="278";"value"="10092"};
+{"key"="1395";"subkey"="279";"value"="10100"};
+{"key"="1396";"subkey"="279";"value"="10108"};
+{"key"="1397";"subkey"="279";"value"="10117"};
+{"key"="1398";"subkey"="279";"value"="10125"};
+{"key"="1399";"subkey"="279";"value"="10133"};
+{"key"="1400";"subkey"="280";"value"="10141"};
+{"key"="1401";"subkey"="280";"value"="10150"};
+{"key"="1402";"subkey"="280";"value"="10158"};
+{"key"="1403";"subkey"="280";"value"="10166"};
+{"key"="1404";"subkey"="280";"value"="10174"};
+{"key"="1405";"subkey"="281";"value"="10183"};
+{"key"="1406";"subkey"="281";"value"="10191"};
+{"key"="1407";"subkey"="281";"value"="10199"};
+{"key"="1408";"subkey"="281";"value"="10207"};
+{"key"="1409";"subkey"="281";"value"="10216"};
+{"key"="1410";"subkey"="282";"value"="10224"};
+{"key"="1411";"subkey"="282";"value"="10232"};
+{"key"="1412";"subkey"="282";"value"="10240"};
+{"key"="1413";"subkey"="282";"value"="10249"};
+{"key"="1414";"subkey"="282";"value"="10257"};
+{"key"="1415";"subkey"="283";"value"="10265"};
+{"key"="1416";"subkey"="283";"value"="10273"};
+{"key"="1417";"subkey"="283";"value"="10282"};
+{"key"="1418";"subkey"="283";"value"="10290"};
+{"key"="1419";"subkey"="283";"value"="10298"};
+{"key"="1420";"subkey"="284";"value"="10306"};
+{"key"="1421";"subkey"="284";"value"="10315"};
+{"key"="1422";"subkey"="284";"value"="10323"};
+{"key"="1423";"subkey"="284";"value"="10331"};
+{"key"="1424";"subkey"="284";"value"="10339"};
+{"key"="1425";"subkey"="285";"value"="10348"};
+{"key"="1426";"subkey"="285";"value"="10356"};
+{"key"="1427";"subkey"="285";"value"="10364"};
+{"key"="1428";"subkey"="285";"value"="10373"};
+{"key"="1429";"subkey"="285";"value"="10381"};
+{"key"="1430";"subkey"="286";"value"="10389"};
+{"key"="1431";"subkey"="286";"value"="10397"};
+{"key"="1432";"subkey"="286";"value"="10406"};
+{"key"="1433";"subkey"="286";"value"="10414"};
+{"key"="1434";"subkey"="286";"value"="10422"};
+{"key"="1435";"subkey"="287";"value"="10430"};
+{"key"="1436";"subkey"="287";"value"="10439"};
+{"key"="1437";"subkey"="287";"value"="10447"};
+{"key"="1438";"subkey"="287";"value"="10455"};
+{"key"="1439";"subkey"="287";"value"="10463"};
+{"key"="1440";"subkey"="288";"value"="10472"};
+{"key"="1441";"subkey"="288";"value"="10480"};
+{"key"="1442";"subkey"="288";"value"="10488"};
+{"key"="1443";"subkey"="288";"value"="10497"};
+{"key"="1444";"subkey"="288";"value"="10505"};
+{"key"="1445";"subkey"="289";"value"="10513"};
+{"key"="1446";"subkey"="289";"value"="10521"};
+{"key"="1447";"subkey"="289";"value"="10530"};
+{"key"="1448";"subkey"="289";"value"="10538"};
+{"key"="1449";"subkey"="289";"value"="10546"};
+{"key"="1450";"subkey"="290";"value"="10555"};
+{"key"="1451";"subkey"="290";"value"="10563"};
+{"key"="1452";"subkey"="290";"value"="10571"};
+{"key"="1453";"subkey"="290";"value"="10579"};
+{"key"="1454";"subkey"="290";"value"="10588"};
+{"key"="1455";"subkey"="291";"value"="10596"};
+{"key"="1456";"subkey"="291";"value"="10604"};
+{"key"="1457";"subkey"="291";"value"="10612"};
+{"key"="1458";"subkey"="291";"value"="10621"};
+{"key"="1459";"subkey"="291";"value"="10629"};
+{"key"="1460";"subkey"="292";"value"="10637"};
+{"key"="1461";"subkey"="292";"value"="10646"};
+{"key"="1462";"subkey"="292";"value"="10654"};
+{"key"="1463";"subkey"="292";"value"="10662"};
+{"key"="1464";"subkey"="292";"value"="10670"};
+{"key"="1465";"subkey"="293";"value"="10679"};
+{"key"="1466";"subkey"="293";"value"="10687"};
+{"key"="1467";"subkey"="293";"value"="10695"};
+{"key"="1468";"subkey"="293";"value"="10704"};
+{"key"="1469";"subkey"="293";"value"="10712"};
+{"key"="1470";"subkey"="294";"value"="10720"};
+{"key"="1471";"subkey"="294";"value"="10729"};
+{"key"="1472";"subkey"="294";"value"="10737"};
+{"key"="1473";"subkey"="294";"value"="10745"};
+{"key"="1474";"subkey"="294";"value"="10753"};
+{"key"="1475";"subkey"="295";"value"="10762"};
+{"key"="1476";"subkey"="295";"value"="10770"};
+{"key"="1477";"subkey"="295";"value"="10778"};
+{"key"="1478";"subkey"="295";"value"="10787"};
+{"key"="1479";"subkey"="295";"value"="10795"};
+{"key"="1480";"subkey"="296";"value"="10803"};
+{"key"="1481";"subkey"="296";"value"="10812"};
+{"key"="1482";"subkey"="296";"value"="10820"};
+{"key"="1483";"subkey"="296";"value"="10828"};
+{"key"="1484";"subkey"="296";"value"="10836"};
+{"key"="1485";"subkey"="297";"value"="10845"};
+{"key"="1486";"subkey"="297";"value"="10853"};
+{"key"="1487";"subkey"="297";"value"="10861"};
+{"key"="1488";"subkey"="297";"value"="10870"};
+{"key"="1489";"subkey"="297";"value"="10878"};
+{"key"="1490";"subkey"="298";"value"="10886"};
+{"key"="1491";"subkey"="298";"value"="10895"};
+{"key"="1492";"subkey"="298";"value"="10903"};
+{"key"="1493";"subkey"="298";"value"="10911"};
+{"key"="1494";"subkey"="298";"value"="10919"};
+{"key"="1495";"subkey"="299";"value"="10928"};
+{"key"="1496";"subkey"="299";"value"="10936"};
+{"key"="1497";"subkey"="299";"value"="10944"};
+{"key"="1498";"subkey"="299";"value"="10953"};
+{"key"="1499";"subkey"="299";"value"="10961"};
+{"key"="1500";"subkey"="300";"value"="10969"};
+{"key"="1501";"subkey"="300";"value"="10978"};
+{"key"="1502";"subkey"="300";"value"="10986"};
+{"key"="1503";"subkey"="300";"value"="10994"};
+{"key"="1504";"subkey"="300";"value"="11003"};
+{"key"="1505";"subkey"="301";"value"="11011"};
+{"key"="1506";"subkey"="301";"value"="11019"};
+{"key"="1507";"subkey"="301";"value"="11028"};
+{"key"="1508";"subkey"="301";"value"="11036"};
+{"key"="1509";"subkey"="301";"value"="11044"};
+{"key"="1510";"subkey"="302";"value"="11052"};
+{"key"="1511";"subkey"="302";"value"="11061"};
+{"key"="1512";"subkey"="302";"value"="11069"};
+{"key"="1513";"subkey"="302";"value"="11077"};
+{"key"="1514";"subkey"="302";"value"="11086"};
+{"key"="1515";"subkey"="303";"value"="11094"};
+{"key"="1516";"subkey"="303";"value"="11102"};
+{"key"="1517";"subkey"="303";"value"="11111"};
+{"key"="1518";"subkey"="303";"value"="11119"};
+{"key"="1519";"subkey"="303";"value"="11127"};
+{"key"="1520";"subkey"="304";"value"="11136"};
+{"key"="1521";"subkey"="304";"value"="11144"};
+{"key"="1522";"subkey"="304";"value"="11152"};
+{"key"="1523";"subkey"="304";"value"="11161"};
+{"key"="1524";"subkey"="304";"value"="11169"};
+{"key"="1525";"subkey"="305";"value"="11177"};
+{"key"="1526";"subkey"="305";"value"="11186"};
+{"key"="1527";"subkey"="305";"value"="11194"};
+{"key"="1528";"subkey"="305";"value"="11202"};
+{"key"="1529";"subkey"="305";"value"="11211"};
+{"key"="1530";"subkey"="306";"value"="11219"};
+{"key"="1531";"subkey"="306";"value"="11227"};
+{"key"="1532";"subkey"="306";"value"="11236"};
+{"key"="1533";"subkey"="306";"value"="11244"};
+{"key"="1534";"subkey"="306";"value"="11252"};
+{"key"="1535";"subkey"="307";"value"="11261"};
+{"key"="1536";"subkey"="307";"value"="11269"};
+{"key"="1537";"subkey"="307";"value"="11277"};
+{"key"="1538";"subkey"="307";"value"="11286"};
+{"key"="1539";"subkey"="307";"value"="11294"};
+{"key"="1540";"subkey"="308";"value"="11302"};
+{"key"="1541";"subkey"="308";"value"="11311"};
+{"key"="1542";"subkey"="308";"value"="11319"};
+{"key"="1543";"subkey"="308";"value"="11327"};
+{"key"="1544";"subkey"="308";"value"="11336"};
+{"key"="1545";"subkey"="309";"value"="11344"};
+{"key"="1546";"subkey"="309";"value"="11352"};
+{"key"="1547";"subkey"="309";"value"="11361"};
+{"key"="1548";"subkey"="309";"value"="11369"};
+{"key"="1549";"subkey"="309";"value"="11377"};
+{"key"="1550";"subkey"="310";"value"="11386"};
+{"key"="1551";"subkey"="310";"value"="11394"};
+{"key"="1552";"subkey"="310";"value"="11403"};
+{"key"="1553";"subkey"="310";"value"="11411"};
+{"key"="1554";"subkey"="310";"value"="11419"};
+{"key"="1555";"subkey"="311";"value"="11428"};
+{"key"="1556";"subkey"="311";"value"="11436"};
+{"key"="1557";"subkey"="311";"value"="11444"};
+{"key"="1558";"subkey"="311";"value"="11453"};
+{"key"="1559";"subkey"="311";"value"="11461"};
+{"key"="1560";"subkey"="312";"value"="11469"};
+{"key"="1561";"subkey"="312";"value"="11478"};
+{"key"="1562";"subkey"="312";"value"="11486"};
+{"key"="1563";"subkey"="312";"value"="11494"};
+{"key"="1564";"subkey"="312";"value"="11503"};
+{"key"="1565";"subkey"="313";"value"="11511"};
+{"key"="1566";"subkey"="313";"value"="11519"};
+{"key"="1567";"subkey"="313";"value"="11528"};
+{"key"="1568";"subkey"="313";"value"="11536"};
+{"key"="1569";"subkey"="313";"value"="11545"};
+{"key"="1570";"subkey"="314";"value"="11553"};
+{"key"="1571";"subkey"="314";"value"="11561"};
+{"key"="1572";"subkey"="314";"value"="11570"};
+{"key"="1573";"subkey"="314";"value"="11578"};
+{"key"="1574";"subkey"="314";"value"="11586"};
+{"key"="1575";"subkey"="315";"value"="11595"};
+{"key"="1576";"subkey"="315";"value"="11603"};
+{"key"="1577";"subkey"="315";"value"="11611"};
+{"key"="1578";"subkey"="315";"value"="11620"};
+{"key"="1579";"subkey"="315";"value"="11628"};
+{"key"="1580";"subkey"="316";"value"="11636"};
+{"key"="1581";"subkey"="316";"value"="11645"};
+{"key"="1582";"subkey"="316";"value"="11653"};
+{"key"="1583";"subkey"="316";"value"="11662"};
+{"key"="1584";"subkey"="316";"value"="11670"};
+{"key"="1585";"subkey"="317";"value"="11678"};
+{"key"="1586";"subkey"="317";"value"="11687"};
+{"key"="1587";"subkey"="317";"value"="11695"};
+{"key"="1588";"subkey"="317";"value"="11703"};
+{"key"="1589";"subkey"="317";"value"="11712"};
+{"key"="1590";"subkey"="318";"value"="11720"};
+{"key"="1591";"subkey"="318";"value"="11729"};
+{"key"="1592";"subkey"="318";"value"="11737"};
+{"key"="1593";"subkey"="318";"value"="11745"};
+{"key"="1594";"subkey"="318";"value"="11754"};
+{"key"="1595";"subkey"="319";"value"="11762"};
+{"key"="1596";"subkey"="319";"value"="11770"};
+{"key"="1597";"subkey"="319";"value"="11779"};
+{"key"="1598";"subkey"="319";"value"="11787"};
+{"key"="1599";"subkey"="319";"value"="11796"};
+{"key"="1600";"subkey"="320";"value"="11804"};
+{"key"="1601";"subkey"="320";"value"="11812"};
+{"key"="1602";"subkey"="320";"value"="11821"};
+{"key"="1603";"subkey"="320";"value"="11829"};
+{"key"="1604";"subkey"="320";"value"="11837"};
+{"key"="1605";"subkey"="321";"value"="11846"};
+{"key"="1606";"subkey"="321";"value"="11854"};
+{"key"="1607";"subkey"="321";"value"="11863"};
+{"key"="1608";"subkey"="321";"value"="11871"};
+{"key"="1609";"subkey"="321";"value"="11879"};
+{"key"="1610";"subkey"="322";"value"="11888"};
+{"key"="1611";"subkey"="322";"value"="11896"};
+{"key"="1612";"subkey"="322";"value"="11904"};
+{"key"="1613";"subkey"="322";"value"="11913"};
+{"key"="1614";"subkey"="322";"value"="11921"};
+{"key"="1615";"subkey"="323";"value"="11930"};
+{"key"="1616";"subkey"="323";"value"="11938"};
+{"key"="1617";"subkey"="323";"value"="11946"};
+{"key"="1618";"subkey"="323";"value"="11955"};
+{"key"="1619";"subkey"="323";"value"="11963"};
+{"key"="1620";"subkey"="324";"value"="11972"};
+{"key"="1621";"subkey"="324";"value"="11980"};
+{"key"="1622";"subkey"="324";"value"="11988"};
+{"key"="1623";"subkey"="324";"value"="11997"};
+{"key"="1624";"subkey"="324";"value"="12005"};
+{"key"="1625";"subkey"="325";"value"="12014"};
+{"key"="1626";"subkey"="325";"value"="12022"};
+{"key"="1627";"subkey"="325";"value"="12030"};
+{"key"="1628";"subkey"="325";"value"="12039"};
+{"key"="1629";"subkey"="325";"value"="12047"};
+{"key"="1630";"subkey"="326";"value"="12056"};
+{"key"="1631";"subkey"="326";"value"="12064"};
+{"key"="1632";"subkey"="326";"value"="12072"};
+{"key"="1633";"subkey"="326";"value"="12081"};
+{"key"="1634";"subkey"="326";"value"="12089"};
+{"key"="1635";"subkey"="327";"value"="12098"};
+{"key"="1636";"subkey"="327";"value"="12106"};
+{"key"="1637";"subkey"="327";"value"="12114"};
+{"key"="1638";"subkey"="327";"value"="12123"};
+{"key"="1639";"subkey"="327";"value"="12131"};
+{"key"="1640";"subkey"="328";"value"="12140"};
+{"key"="1641";"subkey"="328";"value"="12148"};
+{"key"="1642";"subkey"="328";"value"="12156"};
+{"key"="1643";"subkey"="328";"value"="12165"};
+{"key"="1644";"subkey"="328";"value"="12173"};
+{"key"="1645";"subkey"="329";"value"="12182"};
+{"key"="1646";"subkey"="329";"value"="12190"};
+{"key"="1647";"subkey"="329";"value"="12198"};
+{"key"="1648";"subkey"="329";"value"="12207"};
+{"key"="1649";"subkey"="329";"value"="12215"};
+{"key"="1650";"subkey"="330";"value"="12224"};
+{"key"="1651";"subkey"="330";"value"="12232"};
+{"key"="1652";"subkey"="330";"value"="12240"};
+{"key"="1653";"subkey"="330";"value"="12249"};
+{"key"="1654";"subkey"="330";"value"="12257"};
+{"key"="1655";"subkey"="331";"value"="12266"};
+{"key"="1656";"subkey"="331";"value"="12274"};
+{"key"="1657";"subkey"="331";"value"="12282"};
+{"key"="1658";"subkey"="331";"value"="12291"};
+{"key"="1659";"subkey"="331";"value"="12299"};
+{"key"="1660";"subkey"="332";"value"="12308"};
+{"key"="1661";"subkey"="332";"value"="12316"};
+{"key"="1662";"subkey"="332";"value"="12325"};
+{"key"="1663";"subkey"="332";"value"="12333"};
+{"key"="1664";"subkey"="332";"value"="12341"};
+{"key"="1665";"subkey"="333";"value"="12350"};
+{"key"="1666";"subkey"="333";"value"="12358"};
+{"key"="1667";"subkey"="333";"value"="12367"};
+{"key"="1668";"subkey"="333";"value"="12375"};
+{"key"="1669";"subkey"="333";"value"="12383"};
+{"key"="1670";"subkey"="334";"value"="12392"};
+{"key"="1671";"subkey"="334";"value"="12400"};
+{"key"="1672";"subkey"="334";"value"="12409"};
+{"key"="1673";"subkey"="334";"value"="12417"};
+{"key"="1674";"subkey"="334";"value"="12426"};
+{"key"="1675";"subkey"="335";"value"="12434"};
+{"key"="1676";"subkey"="335";"value"="12442"};
+{"key"="1677";"subkey"="335";"value"="12451"};
+{"key"="1678";"subkey"="335";"value"="12459"};
+{"key"="1679";"subkey"="335";"value"="12468"};
+{"key"="1680";"subkey"="336";"value"="12476"};
+{"key"="1681";"subkey"="336";"value"="12485"};
+{"key"="1682";"subkey"="336";"value"="12493"};
+{"key"="1683";"subkey"="336";"value"="12501"};
+{"key"="1684";"subkey"="336";"value"="12510"};
+{"key"="1685";"subkey"="337";"value"="12518"};
+{"key"="1686";"subkey"="337";"value"="12527"};
+{"key"="1687";"subkey"="337";"value"="12535"};
+{"key"="1688";"subkey"="337";"value"="12544"};
+{"key"="1689";"subkey"="337";"value"="12552"};
+{"key"="1690";"subkey"="338";"value"="12560"};
+{"key"="1691";"subkey"="338";"value"="12569"};
+{"key"="1692";"subkey"="338";"value"="12577"};
+{"key"="1693";"subkey"="338";"value"="12586"};
+{"key"="1694";"subkey"="338";"value"="12594"};
+{"key"="1695";"subkey"="339";"value"="12603"};
+{"key"="1696";"subkey"="339";"value"="12611"};
+{"key"="1697";"subkey"="339";"value"="12619"};
+{"key"="1698";"subkey"="339";"value"="12628"};
+{"key"="1699";"subkey"="339";"value"="12636"};
+{"key"="1700";"subkey"="340";"value"="12645"};
+{"key"="1701";"subkey"="340";"value"="12653"};
+{"key"="1702";"subkey"="340";"value"="12662"};
+{"key"="1703";"subkey"="340";"value"="12670"};
+{"key"="1704";"subkey"="340";"value"="12679"};
+{"key"="1705";"subkey"="341";"value"="12687"};
+{"key"="1706";"subkey"="341";"value"="12695"};
+{"key"="1707";"subkey"="341";"value"="12704"};
+{"key"="1708";"subkey"="341";"value"="12712"};
+{"key"="1709";"subkey"="341";"value"="12721"};
+{"key"="1710";"subkey"="342";"value"="12729"};
+{"key"="1711";"subkey"="342";"value"="12738"};
+{"key"="1712";"subkey"="342";"value"="12746"};
+{"key"="1713";"subkey"="342";"value"="12755"};
+{"key"="1714";"subkey"="342";"value"="12763"};
+{"key"="1715";"subkey"="343";"value"="12771"};
+{"key"="1716";"subkey"="343";"value"="12780"};
+{"key"="1717";"subkey"="343";"value"="12788"};
+{"key"="1718";"subkey"="343";"value"="12797"};
+{"key"="1719";"subkey"="343";"value"="12805"};
+{"key"="1720";"subkey"="344";"value"="12814"};
+{"key"="1721";"subkey"="344";"value"="12822"};
+{"key"="1722";"subkey"="344";"value"="12831"};
+{"key"="1723";"subkey"="344";"value"="12839"};
+{"key"="1724";"subkey"="344";"value"="12847"};
+{"key"="1725";"subkey"="345";"value"="12856"};
+{"key"="1726";"subkey"="345";"value"="12864"};
+{"key"="1727";"subkey"="345";"value"="12873"};
+{"key"="1728";"subkey"="345";"value"="12881"};
+{"key"="1729";"subkey"="345";"value"="12890"};
+{"key"="1730";"subkey"="346";"value"="12898"};
+{"key"="1731";"subkey"="346";"value"="12907"};
+{"key"="1732";"subkey"="346";"value"="12915"};
+{"key"="1733";"subkey"="346";"value"="12924"};
+{"key"="1734";"subkey"="346";"value"="12932"};
+{"key"="1735";"subkey"="347";"value"="12940"};
+{"key"="1736";"subkey"="347";"value"="12949"};
+{"key"="1737";"subkey"="347";"value"="12957"};
+{"key"="1738";"subkey"="347";"value"="12966"};
+{"key"="1739";"subkey"="347";"value"="12974"};
+{"key"="1740";"subkey"="348";"value"="12983"};
+{"key"="1741";"subkey"="348";"value"="12991"};
+{"key"="1742";"subkey"="348";"value"="13000"};
+{"key"="1743";"subkey"="348";"value"="13008"};
+{"key"="1744";"subkey"="348";"value"="13017"};
+{"key"="1745";"subkey"="349";"value"="13025"};
+{"key"="1746";"subkey"="349";"value"="13034"};
+{"key"="1747";"subkey"="349";"value"="13042"};
+{"key"="1748";"subkey"="349";"value"="13050"};
+{"key"="1749";"subkey"="349";"value"="13059"};
+{"key"="1750";"subkey"="350";"value"="13067"};
+{"key"="1751";"subkey"="350";"value"="13076"};
+{"key"="1752";"subkey"="350";"value"="13084"};
+{"key"="1753";"subkey"="350";"value"="13093"};
+{"key"="1754";"subkey"="350";"value"="13101"};
+{"key"="1755";"subkey"="351";"value"="13110"};
+{"key"="1756";"subkey"="351";"value"="13118"};
+{"key"="1757";"subkey"="351";"value"="13127"};
+{"key"="1758";"subkey"="351";"value"="13135"};
+{"key"="1759";"subkey"="351";"value"="13144"};
+{"key"="1760";"subkey"="352";"value"="13152"};
+{"key"="1761";"subkey"="352";"value"="13161"};
+{"key"="1762";"subkey"="352";"value"="13169"};
+{"key"="1763";"subkey"="352";"value"="13178"};
+{"key"="1764";"subkey"="352";"value"="13186"};
+{"key"="1765";"subkey"="353";"value"="13194"};
+{"key"="1766";"subkey"="353";"value"="13203"};
+{"key"="1767";"subkey"="353";"value"="13211"};
+{"key"="1768";"subkey"="353";"value"="13220"};
+{"key"="1769";"subkey"="353";"value"="13228"};
+{"key"="1770";"subkey"="354";"value"="13237"};
+{"key"="1771";"subkey"="354";"value"="13245"};
+{"key"="1772";"subkey"="354";"value"="13254"};
+{"key"="1773";"subkey"="354";"value"="13262"};
+{"key"="1774";"subkey"="354";"value"="13271"};
+{"key"="1775";"subkey"="355";"value"="13279"};
+{"key"="1776";"subkey"="355";"value"="13288"};
+{"key"="1777";"subkey"="355";"value"="13296"};
+{"key"="1778";"subkey"="355";"value"="13305"};
+{"key"="1779";"subkey"="355";"value"="13313"};
+{"key"="1780";"subkey"="356";"value"="13322"};
+{"key"="1781";"subkey"="356";"value"="13330"};
+{"key"="1782";"subkey"="356";"value"="13339"};
+{"key"="1783";"subkey"="356";"value"="13347"};
+{"key"="1784";"subkey"="356";"value"="13356"};
+{"key"="1785";"subkey"="357";"value"="13364"};
+{"key"="1786";"subkey"="357";"value"="13373"};
+{"key"="1787";"subkey"="357";"value"="13381"};
+{"key"="1788";"subkey"="357";"value"="13390"};
+{"key"="1789";"subkey"="357";"value"="13398"};
+{"key"="1790";"subkey"="358";"value"="13407"};
+{"key"="1791";"subkey"="358";"value"="13415"};
+{"key"="1792";"subkey"="358";"value"="13424"};
+{"key"="1793";"subkey"="358";"value"="13432"};
+{"key"="1794";"subkey"="358";"value"="13441"};
+{"key"="1795";"subkey"="359";"value"="13449"};
+{"key"="1796";"subkey"="359";"value"="13457"};
+{"key"="1797";"subkey"="359";"value"="13466"};
+{"key"="1798";"subkey"="359";"value"="13474"};
+{"key"="1799";"subkey"="359";"value"="13483"};
+{"key"="1800";"subkey"="360";"value"="13491"};
+{"key"="1801";"subkey"="360";"value"="13500"};
+{"key"="1802";"subkey"="360";"value"="13508"};
+{"key"="1803";"subkey"="360";"value"="13517"};
+{"key"="1804";"subkey"="360";"value"="13525"};
+{"key"="1805";"subkey"="361";"value"="13534"};
+{"key"="1806";"subkey"="361";"value"="13542"};
+{"key"="1807";"subkey"="361";"value"="13551"};
+{"key"="1808";"subkey"="361";"value"="13559"};
+{"key"="1809";"subkey"="361";"value"="13568"};
+{"key"="1810";"subkey"="362";"value"="13576"};
+{"key"="1811";"subkey"="362";"value"="13585"};
+{"key"="1812";"subkey"="362";"value"="13593"};
+{"key"="1813";"subkey"="362";"value"="13602"};
+{"key"="1814";"subkey"="362";"value"="13610"};
+{"key"="1815";"subkey"="363";"value"="13619"};
+{"key"="1816";"subkey"="363";"value"="13627"};
+{"key"="1817";"subkey"="363";"value"="13636"};
+{"key"="1818";"subkey"="363";"value"="13644"};
+{"key"="1819";"subkey"="363";"value"="13653"};
+{"key"="1820";"subkey"="364";"value"="13661"};
+{"key"="1821";"subkey"="364";"value"="13670"};
+{"key"="1822";"subkey"="364";"value"="13679"};
+{"key"="1823";"subkey"="364";"value"="13687"};
+{"key"="1824";"subkey"="364";"value"="13696"};
+{"key"="1825";"subkey"="365";"value"="13704"};
+{"key"="1826";"subkey"="365";"value"="13713"};
+{"key"="1827";"subkey"="365";"value"="13721"};
+{"key"="1828";"subkey"="365";"value"="13730"};
+{"key"="1829";"subkey"="365";"value"="13738"};
+{"key"="1830";"subkey"="366";"value"="13747"};
+{"key"="1831";"subkey"="366";"value"="13755"};
+{"key"="1832";"subkey"="366";"value"="13764"};
+{"key"="1833";"subkey"="366";"value"="13772"};
+{"key"="1834";"subkey"="366";"value"="13781"};
+{"key"="1835";"subkey"="367";"value"="13789"};
+{"key"="1836";"subkey"="367";"value"="13798"};
+{"key"="1837";"subkey"="367";"value"="13806"};
+{"key"="1838";"subkey"="367";"value"="13815"};
+{"key"="1839";"subkey"="367";"value"="13823"};
+{"key"="1840";"subkey"="368";"value"="13832"};
+{"key"="1841";"subkey"="368";"value"="13840"};
+{"key"="1842";"subkey"="368";"value"="13849"};
+{"key"="1843";"subkey"="368";"value"="13857"};
+{"key"="1844";"subkey"="368";"value"="13866"};
+{"key"="1845";"subkey"="369";"value"="13874"};
+{"key"="1846";"subkey"="369";"value"="13883"};
+{"key"="1847";"subkey"="369";"value"="13891"};
+{"key"="1848";"subkey"="369";"value"="13900"};
+{"key"="1849";"subkey"="369";"value"="13908"};
+{"key"="1850";"subkey"="370";"value"="13917"};
+{"key"="1851";"subkey"="370";"value"="13925"};
+{"key"="1852";"subkey"="370";"value"="13934"};
+{"key"="1853";"subkey"="370";"value"="13943"};
+{"key"="1854";"subkey"="370";"value"="13951"};
+{"key"="1855";"subkey"="371";"value"="13960"};
+{"key"="1856";"subkey"="371";"value"="13968"};
+{"key"="1857";"subkey"="371";"value"="13977"};
+{"key"="1858";"subkey"="371";"value"="13985"};
+{"key"="1859";"subkey"="371";"value"="13994"};
+{"key"="1860";"subkey"="372";"value"="14002"};
+{"key"="1861";"subkey"="372";"value"="14011"};
+{"key"="1862";"subkey"="372";"value"="14019"};
+{"key"="1863";"subkey"="372";"value"="14028"};
+{"key"="1864";"subkey"="372";"value"="14036"};
+{"key"="1865";"subkey"="373";"value"="14045"};
+{"key"="1866";"subkey"="373";"value"="14053"};
+{"key"="1867";"subkey"="373";"value"="14062"};
+{"key"="1868";"subkey"="373";"value"="14070"};
+{"key"="1869";"subkey"="373";"value"="14079"};
+{"key"="1870";"subkey"="374";"value"="14088"};
+{"key"="1871";"subkey"="374";"value"="14096"};
+{"key"="1872";"subkey"="374";"value"="14105"};
+{"key"="1873";"subkey"="374";"value"="14113"};
+{"key"="1874";"subkey"="374";"value"="14122"};
+{"key"="1875";"subkey"="375";"value"="14130"};
+{"key"="1876";"subkey"="375";"value"="14139"};
+{"key"="1877";"subkey"="375";"value"="14147"};
+{"key"="1878";"subkey"="375";"value"="14156"};
+{"key"="1879";"subkey"="375";"value"="14164"};
+{"key"="1880";"subkey"="376";"value"="14173"};
+{"key"="1881";"subkey"="376";"value"="14181"};
+{"key"="1882";"subkey"="376";"value"="14190"};
+{"key"="1883";"subkey"="376";"value"="14198"};
+{"key"="1884";"subkey"="376";"value"="14207"};
+{"key"="1885";"subkey"="377";"value"="14216"};
+{"key"="1886";"subkey"="377";"value"="14224"};
+{"key"="1887";"subkey"="377";"value"="14233"};
+{"key"="1888";"subkey"="377";"value"="14241"};
+{"key"="1889";"subkey"="377";"value"="14250"};
+{"key"="1890";"subkey"="378";"value"="14258"};
+{"key"="1891";"subkey"="378";"value"="14267"};
+{"key"="1892";"subkey"="378";"value"="14275"};
+{"key"="1893";"subkey"="378";"value"="14284"};
+{"key"="1894";"subkey"="378";"value"="14292"};
+{"key"="1895";"subkey"="379";"value"="14301"};
+{"key"="1896";"subkey"="379";"value"="14310"};
+{"key"="1897";"subkey"="379";"value"="14318"};
+{"key"="1898";"subkey"="379";"value"="14327"};
+{"key"="1899";"subkey"="379";"value"="14335"};
+{"key"="1900";"subkey"="380";"value"="14344"};
+{"key"="1901";"subkey"="380";"value"="14352"};
+{"key"="1902";"subkey"="380";"value"="14361"};
+{"key"="1903";"subkey"="380";"value"="14369"};
+{"key"="1904";"subkey"="380";"value"="14378"};
+{"key"="1905";"subkey"="381";"value"="14387"};
+{"key"="1906";"subkey"="381";"value"="14395"};
+{"key"="1907";"subkey"="381";"value"="14404"};
+{"key"="1908";"subkey"="381";"value"="14412"};
+{"key"="1909";"subkey"="381";"value"="14421"};
+{"key"="1910";"subkey"="382";"value"="14429"};
+{"key"="1911";"subkey"="382";"value"="14438"};
+{"key"="1912";"subkey"="382";"value"="14446"};
+{"key"="1913";"subkey"="382";"value"="14455"};
+{"key"="1914";"subkey"="382";"value"="14464"};
+{"key"="1915";"subkey"="383";"value"="14472"};
+{"key"="1916";"subkey"="383";"value"="14481"};
+{"key"="1917";"subkey"="383";"value"="14489"};
+{"key"="1918";"subkey"="383";"value"="14498"};
+{"key"="1919";"subkey"="383";"value"="14506"};
+{"key"="1920";"subkey"="384";"value"="14515"};
+{"key"="1921";"subkey"="384";"value"="14523"};
+{"key"="1922";"subkey"="384";"value"="14532"};
+{"key"="1923";"subkey"="384";"value"="14541"};
+{"key"="1924";"subkey"="384";"value"="14549"};
+{"key"="1925";"subkey"="385";"value"="14558"};
+{"key"="1926";"subkey"="385";"value"="14566"};
+{"key"="1927";"subkey"="385";"value"="14575"};
+{"key"="1928";"subkey"="385";"value"="14583"};
+{"key"="1929";"subkey"="385";"value"="14592"};
+{"key"="1930";"subkey"="386";"value"="14600"};
+{"key"="1931";"subkey"="386";"value"="14609"};
+{"key"="1932";"subkey"="386";"value"="14618"};
+{"key"="1933";"subkey"="386";"value"="14626"};
+{"key"="1934";"subkey"="386";"value"="14635"};
+{"key"="1935";"subkey"="387";"value"="14643"};
+{"key"="1936";"subkey"="387";"value"="14652"};
+{"key"="1937";"subkey"="387";"value"="14660"};
+{"key"="1938";"subkey"="387";"value"="14669"};
+{"key"="1939";"subkey"="387";"value"="14678"};
+{"key"="1940";"subkey"="388";"value"="14686"};
+{"key"="1941";"subkey"="388";"value"="14695"};
+{"key"="1942";"subkey"="388";"value"="14703"};
+{"key"="1943";"subkey"="388";"value"="14712"};
+{"key"="1944";"subkey"="388";"value"="14720"};
+{"key"="1945";"subkey"="389";"value"="14729"};
+{"key"="1946";"subkey"="389";"value"="14738"};
+{"key"="1947";"subkey"="389";"value"="14746"};
+{"key"="1948";"subkey"="389";"value"="14755"};
+{"key"="1949";"subkey"="389";"value"="14763"};
+{"key"="1950";"subkey"="390";"value"="14772"};
+{"key"="1951";"subkey"="390";"value"="14780"};
+{"key"="1952";"subkey"="390";"value"="14789"};
+{"key"="1953";"subkey"="390";"value"="14798"};
+{"key"="1954";"subkey"="390";"value"="14806"};
+{"key"="1955";"subkey"="391";"value"="14815"};
+{"key"="1956";"subkey"="391";"value"="14823"};
+{"key"="1957";"subkey"="391";"value"="14832"};
+{"key"="1958";"subkey"="391";"value"="14841"};
+{"key"="1959";"subkey"="391";"value"="14849"};
+{"key"="1960";"subkey"="392";"value"="14858"};
+{"key"="1961";"subkey"="392";"value"="14866"};
+{"key"="1962";"subkey"="392";"value"="14875"};
+{"key"="1963";"subkey"="392";"value"="14883"};
+{"key"="1964";"subkey"="392";"value"="14892"};
+{"key"="1965";"subkey"="393";"value"="14901"};
+{"key"="1966";"subkey"="393";"value"="14909"};
+{"key"="1967";"subkey"="393";"value"="14918"};
+{"key"="1968";"subkey"="393";"value"="14926"};
+{"key"="1969";"subkey"="393";"value"="14935"};
+{"key"="1970";"subkey"="394";"value"="14944"};
+{"key"="1971";"subkey"="394";"value"="14952"};
+{"key"="1972";"subkey"="394";"value"="14961"};
+{"key"="1973";"subkey"="394";"value"="14969"};
+{"key"="1974";"subkey"="394";"value"="14978"};
+{"key"="1975";"subkey"="395";"value"="14986"};
+{"key"="1976";"subkey"="395";"value"="14995"};
+{"key"="1977";"subkey"="395";"value"="15004"};
+{"key"="1978";"subkey"="395";"value"="15012"};
+{"key"="1979";"subkey"="395";"value"="15021"};
+{"key"="1980";"subkey"="396";"value"="15029"};
+{"key"="1981";"subkey"="396";"value"="15038"};
+{"key"="1982";"subkey"="396";"value"="15047"};
+{"key"="1983";"subkey"="396";"value"="15055"};
+{"key"="1984";"subkey"="396";"value"="15064"};
+{"key"="1985";"subkey"="397";"value"="15072"};
+{"key"="1986";"subkey"="397";"value"="15081"};
+{"key"="1987";"subkey"="397";"value"="15090"};
+{"key"="1988";"subkey"="397";"value"="15098"};
+{"key"="1989";"subkey"="397";"value"="15107"};
+{"key"="1990";"subkey"="398";"value"="15115"};
+{"key"="1991";"subkey"="398";"value"="15124"};
+{"key"="1992";"subkey"="398";"value"="15133"};
+{"key"="1993";"subkey"="398";"value"="15141"};
+{"key"="1994";"subkey"="398";"value"="15150"};
+{"key"="1995";"subkey"="399";"value"="15158"};
+{"key"="1996";"subkey"="399";"value"="15167"};
+{"key"="1997";"subkey"="399";"value"="15176"};
+{"key"="1998";"subkey"="399";"value"="15184"};
+{"key"="1999";"subkey"="399";"value"="15193"};
+{"key"="2000";"subkey"="400";"value"="15201"};
+{"key"="2001";"subkey"="400";"value"="15210"};
+{"key"="2002";"subkey"="400";"value"="15219"};
+{"key"="2003";"subkey"="400";"value"="15227"};
+{"key"="2004";"subkey"="400";"value"="15236"};
+{"key"="2005";"subkey"="401";"value"="15244"};
+{"key"="2006";"subkey"="401";"value"="15253"};
+{"key"="2007";"subkey"="401";"value"="15262"};
+{"key"="2008";"subkey"="401";"value"="15270"};
+{"key"="2009";"subkey"="401";"value"="15279"};
+{"key"="2010";"subkey"="402";"value"="15287"};
+{"key"="2011";"subkey"="402";"value"="15296"};
+{"key"="2012";"subkey"="402";"value"="15305"};
+{"key"="2013";"subkey"="402";"value"="15313"};
+{"key"="2014";"subkey"="402";"value"="15322"};
+{"key"="2015";"subkey"="403";"value"="15330"};
+{"key"="2016";"subkey"="403";"value"="15339"};
+{"key"="2017";"subkey"="403";"value"="15348"};
+{"key"="2018";"subkey"="403";"value"="15356"};
+{"key"="2019";"subkey"="403";"value"="15365"};
+{"key"="2020";"subkey"="404";"value"="15373"};
+{"key"="2021";"subkey"="404";"value"="15382"};
+{"key"="2022";"subkey"="404";"value"="15391"};
+{"key"="2023";"subkey"="404";"value"="15399"};
+{"key"="2024";"subkey"="404";"value"="15408"};
+{"key"="2025";"subkey"="405";"value"="15416"};
+{"key"="2026";"subkey"="405";"value"="15425"};
+{"key"="2027";"subkey"="405";"value"="15434"};
+{"key"="2028";"subkey"="405";"value"="15442"};
+{"key"="2029";"subkey"="405";"value"="15451"};
+{"key"="2030";"subkey"="406";"value"="15460"};
+{"key"="2031";"subkey"="406";"value"="15468"};
+{"key"="2032";"subkey"="406";"value"="15477"};
+{"key"="2033";"subkey"="406";"value"="15485"};
+{"key"="2034";"subkey"="406";"value"="15494"};
+{"key"="2035";"subkey"="407";"value"="15503"};
+{"key"="2036";"subkey"="407";"value"="15511"};
+{"key"="2037";"subkey"="407";"value"="15520"};
+{"key"="2038";"subkey"="407";"value"="15528"};
+{"key"="2039";"subkey"="407";"value"="15537"};
+{"key"="2040";"subkey"="408";"value"="15546"};
+{"key"="2041";"subkey"="408";"value"="15554"};
+{"key"="2042";"subkey"="408";"value"="15563"};
+{"key"="2043";"subkey"="408";"value"="15572"};
+{"key"="2044";"subkey"="408";"value"="15580"};
+{"key"="2045";"subkey"="409";"value"="15589"};
+{"key"="2046";"subkey"="409";"value"="15597"};
+{"key"="2047";"subkey"="409";"value"="15606"};
+{"key"="2048";"subkey"="409";"value"="15615"};
+{"key"="2049";"subkey"="409";"value"="15623"};
+{"key"="2050";"subkey"="410";"value"="15632"};
+{"key"="2051";"subkey"="410";"value"="15641"};
+{"key"="2052";"subkey"="410";"value"="15649"};
+{"key"="2053";"subkey"="410";"value"="15658"};
+{"key"="2054";"subkey"="410";"value"="15666"};
+{"key"="2055";"subkey"="411";"value"="15675"};
+{"key"="2056";"subkey"="411";"value"="15684"};
+{"key"="2057";"subkey"="411";"value"="15692"};
+{"key"="2058";"subkey"="411";"value"="15701"};
+{"key"="2059";"subkey"="411";"value"="15710"};
+{"key"="2060";"subkey"="412";"value"="15718"};
+{"key"="2061";"subkey"="412";"value"="15727"};
+{"key"="2062";"subkey"="412";"value"="15736"};
+{"key"="2063";"subkey"="412";"value"="15744"};
+{"key"="2064";"subkey"="412";"value"="15753"};
+{"key"="2065";"subkey"="413";"value"="15761"};
+{"key"="2066";"subkey"="413";"value"="15770"};
+{"key"="2067";"subkey"="413";"value"="15779"};
+{"key"="2068";"subkey"="413";"value"="15787"};
+{"key"="2069";"subkey"="413";"value"="15796"};
+{"key"="2070";"subkey"="414";"value"="15805"};
+{"key"="2071";"subkey"="414";"value"="15813"};
+{"key"="2072";"subkey"="414";"value"="15822"};
+{"key"="2073";"subkey"="414";"value"="15830"};
+{"key"="2074";"subkey"="414";"value"="15839"};
+{"key"="2075";"subkey"="415";"value"="15848"};
+{"key"="2076";"subkey"="415";"value"="15856"};
+{"key"="2077";"subkey"="415";"value"="15865"};
+{"key"="2078";"subkey"="415";"value"="15874"};
+{"key"="2079";"subkey"="415";"value"="15882"};
+{"key"="2080";"subkey"="416";"value"="15891"};
+{"key"="2081";"subkey"="416";"value"="15900"};
+{"key"="2082";"subkey"="416";"value"="15908"};
+{"key"="2083";"subkey"="416";"value"="15917"};
+{"key"="2084";"subkey"="416";"value"="15926"};
+{"key"="2085";"subkey"="417";"value"="15934"};
+{"key"="2086";"subkey"="417";"value"="15943"};
+{"key"="2087";"subkey"="417";"value"="15951"};
+{"key"="2088";"subkey"="417";"value"="15960"};
+{"key"="2089";"subkey"="417";"value"="15969"};
+{"key"="2090";"subkey"="418";"value"="15977"};
+{"key"="2091";"subkey"="418";"value"="15986"};
+{"key"="2092";"subkey"="418";"value"="15995"};
+{"key"="2093";"subkey"="418";"value"="16003"};
+{"key"="2094";"subkey"="418";"value"="16012"};
+{"key"="2095";"subkey"="419";"value"="16021"};
+{"key"="2096";"subkey"="419";"value"="16029"};
+{"key"="2097";"subkey"="419";"value"="16038"};
+{"key"="2098";"subkey"="419";"value"="16047"};
+{"key"="2099";"subkey"="419";"value"="16055"};
+{"key"="2100";"subkey"="420";"value"="16064"};
+{"key"="2101";"subkey"="420";"value"="16073"};
+{"key"="2102";"subkey"="420";"value"="16081"};
+{"key"="2103";"subkey"="420";"value"="16090"};
+{"key"="2104";"subkey"="420";"value"="16098"};
+{"key"="2105";"subkey"="421";"value"="16107"};
+{"key"="2106";"subkey"="421";"value"="16116"};
+{"key"="2107";"subkey"="421";"value"="16124"};
+{"key"="2108";"subkey"="421";"value"="16133"};
+{"key"="2109";"subkey"="421";"value"="16142"};
+{"key"="2110";"subkey"="422";"value"="16150"};
+{"key"="2111";"subkey"="422";"value"="16159"};
+{"key"="2112";"subkey"="422";"value"="16168"};
+{"key"="2113";"subkey"="422";"value"="16176"};
+{"key"="2114";"subkey"="422";"value"="16185"};
+{"key"="2115";"subkey"="423";"value"="16194"};
+{"key"="2116";"subkey"="423";"value"="16202"};
+{"key"="2117";"subkey"="423";"value"="16211"};
+{"key"="2118";"subkey"="423";"value"="16220"};
+{"key"="2119";"subkey"="423";"value"="16228"};
+{"key"="2120";"subkey"="424";"value"="16237"};
+{"key"="2121";"subkey"="424";"value"="16246"};
+{"key"="2122";"subkey"="424";"value"="16254"};
+{"key"="2123";"subkey"="424";"value"="16263"};
+{"key"="2124";"subkey"="424";"value"="16272"};
+{"key"="2125";"subkey"="425";"value"="16280"};
+{"key"="2126";"subkey"="425";"value"="16289"};
+{"key"="2127";"subkey"="425";"value"="16298"};
+{"key"="2128";"subkey"="425";"value"="16306"};
+{"key"="2129";"subkey"="425";"value"="16315"};
+{"key"="2130";"subkey"="426";"value"="16324"};
+{"key"="2131";"subkey"="426";"value"="16332"};
+{"key"="2132";"subkey"="426";"value"="16341"};
+{"key"="2133";"subkey"="426";"value"="16350"};
+{"key"="2134";"subkey"="426";"value"="16358"};
+{"key"="2135";"subkey"="427";"value"="16367"};
+{"key"="2136";"subkey"="427";"value"="16376"};
+{"key"="2137";"subkey"="427";"value"="16384"};
+{"key"="2138";"subkey"="427";"value"="16393"};
+{"key"="2139";"subkey"="427";"value"="16402"};
+{"key"="2140";"subkey"="428";"value"="16410"};
+{"key"="2141";"subkey"="428";"value"="16419"};
+{"key"="2142";"subkey"="428";"value"="16428"};
+{"key"="2143";"subkey"="428";"value"="16436"};
+{"key"="2144";"subkey"="428";"value"="16445"};
+{"key"="2145";"subkey"="429";"value"="16454"};
+{"key"="2146";"subkey"="429";"value"="16462"};
+{"key"="2147";"subkey"="429";"value"="16471"};
+{"key"="2148";"subkey"="429";"value"="16480"};
+{"key"="2149";"subkey"="429";"value"="16488"};
+{"key"="2150";"subkey"="430";"value"="16497"};
+{"key"="2151";"subkey"="430";"value"="16506"};
+{"key"="2152";"subkey"="430";"value"="16514"};
+{"key"="2153";"subkey"="430";"value"="16523"};
+{"key"="2154";"subkey"="430";"value"="16532"};
+{"key"="2155";"subkey"="431";"value"="16540"};
+{"key"="2156";"subkey"="431";"value"="16549"};
+{"key"="2157";"subkey"="431";"value"="16558"};
+{"key"="2158";"subkey"="431";"value"="16566"};
+{"key"="2159";"subkey"="431";"value"="16575"};
+{"key"="2160";"subkey"="432";"value"="16584"};
+{"key"="2161";"subkey"="432";"value"="16592"};
+{"key"="2162";"subkey"="432";"value"="16601"};
+{"key"="2163";"subkey"="432";"value"="16610"};
+{"key"="2164";"subkey"="432";"value"="16618"};
+{"key"="2165";"subkey"="433";"value"="16627"};
+{"key"="2166";"subkey"="433";"value"="16636"};
+{"key"="2167";"subkey"="433";"value"="16644"};
+{"key"="2168";"subkey"="433";"value"="16653"};
+{"key"="2169";"subkey"="433";"value"="16662"};
+{"key"="2170";"subkey"="434";"value"="16670"};
+{"key"="2171";"subkey"="434";"value"="16679"};
+{"key"="2172";"subkey"="434";"value"="16688"};
+{"key"="2173";"subkey"="434";"value"="16697"};
+{"key"="2174";"subkey"="434";"value"="16705"};
+{"key"="2175";"subkey"="435";"value"="16714"};
+{"key"="2176";"subkey"="435";"value"="16723"};
+{"key"="2177";"subkey"="435";"value"="16731"};
+{"key"="2178";"subkey"="435";"value"="16740"};
+{"key"="2179";"subkey"="435";"value"="16749"};
+{"key"="2180";"subkey"="436";"value"="16757"};
+{"key"="2181";"subkey"="436";"value"="16766"};
+{"key"="2182";"subkey"="436";"value"="16775"};
+{"key"="2183";"subkey"="436";"value"="16783"};
+{"key"="2184";"subkey"="436";"value"="16792"};
+{"key"="2185";"subkey"="437";"value"="16801"};
+{"key"="2186";"subkey"="437";"value"="16809"};
+{"key"="2187";"subkey"="437";"value"="16818"};
+{"key"="2188";"subkey"="437";"value"="16827"};
+{"key"="2189";"subkey"="437";"value"="16836"};
+{"key"="2190";"subkey"="438";"value"="16844"};
+{"key"="2191";"subkey"="438";"value"="16853"};
+{"key"="2192";"subkey"="438";"value"="16862"};
+{"key"="2193";"subkey"="438";"value"="16870"};
+{"key"="2194";"subkey"="438";"value"="16879"};
+{"key"="2195";"subkey"="439";"value"="16888"};
+{"key"="2196";"subkey"="439";"value"="16896"};
+{"key"="2197";"subkey"="439";"value"="16905"};
+{"key"="2198";"subkey"="439";"value"="16914"};
+{"key"="2199";"subkey"="439";"value"="16922"};
+{"key"="2200";"subkey"="440";"value"="16931"};
+{"key"="2201";"subkey"="440";"value"="16940"};
+{"key"="2202";"subkey"="440";"value"="16949"};
+{"key"="2203";"subkey"="440";"value"="16957"};
+{"key"="2204";"subkey"="440";"value"="16966"};
+{"key"="2205";"subkey"="441";"value"="16975"};
+{"key"="2206";"subkey"="441";"value"="16983"};
+{"key"="2207";"subkey"="441";"value"="16992"};
+{"key"="2208";"subkey"="441";"value"="17001"};
+{"key"="2209";"subkey"="441";"value"="17009"};
+{"key"="2210";"subkey"="442";"value"="17018"};
+{"key"="2211";"subkey"="442";"value"="17027"};
+{"key"="2212";"subkey"="442";"value"="17036"};
+{"key"="2213";"subkey"="442";"value"="17044"};
+{"key"="2214";"subkey"="442";"value"="17053"};
+{"key"="2215";"subkey"="443";"value"="17062"};
+{"key"="2216";"subkey"="443";"value"="17070"};
+{"key"="2217";"subkey"="443";"value"="17079"};
+{"key"="2218";"subkey"="443";"value"="17088"};
+{"key"="2219";"subkey"="443";"value"="17096"};
+{"key"="2220";"subkey"="444";"value"="17105"};
+{"key"="2221";"subkey"="444";"value"="17114"};
+{"key"="2222";"subkey"="444";"value"="17123"};
+{"key"="2223";"subkey"="444";"value"="17131"};
+{"key"="2224";"subkey"="444";"value"="17140"};
+{"key"="2225";"subkey"="445";"value"="17149"};
+{"key"="2226";"subkey"="445";"value"="17157"};
+{"key"="2227";"subkey"="445";"value"="17166"};
+{"key"="2228";"subkey"="445";"value"="17175"};
+{"key"="2229";"subkey"="445";"value"="17184"};
+{"key"="2230";"subkey"="446";"value"="17192"};
+{"key"="2231";"subkey"="446";"value"="17201"};
+{"key"="2232";"subkey"="446";"value"="17210"};
+{"key"="2233";"subkey"="446";"value"="17218"};
+{"key"="2234";"subkey"="446";"value"="17227"};
+{"key"="2235";"subkey"="447";"value"="17236"};
+{"key"="2236";"subkey"="447";"value"="17245"};
+{"key"="2237";"subkey"="447";"value"="17253"};
+{"key"="2238";"subkey"="447";"value"="17262"};
+{"key"="2239";"subkey"="447";"value"="17271"};
+{"key"="2240";"subkey"="448";"value"="17279"};
+{"key"="2241";"subkey"="448";"value"="17288"};
+{"key"="2242";"subkey"="448";"value"="17297"};
+{"key"="2243";"subkey"="448";"value"="17306"};
+{"key"="2244";"subkey"="448";"value"="17314"};
+{"key"="2245";"subkey"="449";"value"="17323"};
+{"key"="2246";"subkey"="449";"value"="17332"};
+{"key"="2247";"subkey"="449";"value"="17340"};
+{"key"="2248";"subkey"="449";"value"="17349"};
+{"key"="2249";"subkey"="449";"value"="17358"};
+{"key"="2250";"subkey"="450";"value"="17367"};
+{"key"="2251";"subkey"="450";"value"="17375"};
+{"key"="2252";"subkey"="450";"value"="17384"};
+{"key"="2253";"subkey"="450";"value"="17393"};
+{"key"="2254";"subkey"="450";"value"="17401"};
+{"key"="2255";"subkey"="451";"value"="17410"};
+{"key"="2256";"subkey"="451";"value"="17419"};
+{"key"="2257";"subkey"="451";"value"="17428"};
+{"key"="2258";"subkey"="451";"value"="17436"};
+{"key"="2259";"subkey"="451";"value"="17445"};
+{"key"="2260";"subkey"="452";"value"="17454"};
+{"key"="2261";"subkey"="452";"value"="17462"};
+{"key"="2262";"subkey"="452";"value"="17471"};
+{"key"="2263";"subkey"="452";"value"="17480"};
+{"key"="2264";"subkey"="452";"value"="17489"};
+{"key"="2265";"subkey"="453";"value"="17497"};
+{"key"="2266";"subkey"="453";"value"="17506"};
+{"key"="2267";"subkey"="453";"value"="17515"};
+{"key"="2268";"subkey"="453";"value"="17524"};
+{"key"="2269";"subkey"="453";"value"="17532"};
+{"key"="2270";"subkey"="454";"value"="17541"};
+{"key"="2271";"subkey"="454";"value"="17550"};
+{"key"="2272";"subkey"="454";"value"="17558"};
+{"key"="2273";"subkey"="454";"value"="17567"};
+{"key"="2274";"subkey"="454";"value"="17576"};
+{"key"="2275";"subkey"="455";"value"="17585"};
+{"key"="2276";"subkey"="455";"value"="17593"};
+{"key"="2277";"subkey"="455";"value"="17602"};
+{"key"="2278";"subkey"="455";"value"="17611"};
+{"key"="2279";"subkey"="455";"value"="17620"};
+{"key"="2280";"subkey"="456";"value"="17628"};
+{"key"="2281";"subkey"="456";"value"="17637"};
+{"key"="2282";"subkey"="456";"value"="17646"};
+{"key"="2283";"subkey"="456";"value"="17654"};
+{"key"="2284";"subkey"="456";"value"="17663"};
+{"key"="2285";"subkey"="457";"value"="17672"};
+{"key"="2286";"subkey"="457";"value"="17681"};
+{"key"="2287";"subkey"="457";"value"="17689"};
+{"key"="2288";"subkey"="457";"value"="17698"};
+{"key"="2289";"subkey"="457";"value"="17707"};
+{"key"="2290";"subkey"="458";"value"="17716"};
+{"key"="2291";"subkey"="458";"value"="17724"};
+{"key"="2292";"subkey"="458";"value"="17733"};
+{"key"="2293";"subkey"="458";"value"="17742"};
+{"key"="2294";"subkey"="458";"value"="17751"};
+{"key"="2295";"subkey"="459";"value"="17759"};
+{"key"="2296";"subkey"="459";"value"="17768"};
+{"key"="2297";"subkey"="459";"value"="17777"};
+{"key"="2298";"subkey"="459";"value"="17786"};
+{"key"="2299";"subkey"="459";"value"="17794"};
+{"key"="2300";"subkey"="460";"value"="17803"};
+{"key"="2301";"subkey"="460";"value"="17812"};
+{"key"="2302";"subkey"="460";"value"="17821"};
+{"key"="2303";"subkey"="460";"value"="17829"};
+{"key"="2304";"subkey"="460";"value"="17838"};
+{"key"="2305";"subkey"="461";"value"="17847"};
+{"key"="2306";"subkey"="461";"value"="17855"};
+{"key"="2307";"subkey"="461";"value"="17864"};
+{"key"="2308";"subkey"="461";"value"="17873"};
+{"key"="2309";"subkey"="461";"value"="17882"};
+{"key"="2310";"subkey"="462";"value"="17890"};
+{"key"="2311";"subkey"="462";"value"="17899"};
+{"key"="2312";"subkey"="462";"value"="17908"};
+{"key"="2313";"subkey"="462";"value"="17917"};
+{"key"="2314";"subkey"="462";"value"="17925"};
+{"key"="2315";"subkey"="463";"value"="17934"};
+{"key"="2316";"subkey"="463";"value"="17943"};
+{"key"="2317";"subkey"="463";"value"="17952"};
+{"key"="2318";"subkey"="463";"value"="17960"};
+{"key"="2319";"subkey"="463";"value"="17969"};
+{"key"="2320";"subkey"="464";"value"="17978"};
+{"key"="2321";"subkey"="464";"value"="17987"};
+{"key"="2322";"subkey"="464";"value"="17995"};
+{"key"="2323";"subkey"="464";"value"="18004"};
+{"key"="2324";"subkey"="464";"value"="18013"};
+{"key"="2325";"subkey"="465";"value"="18022"};
+{"key"="2326";"subkey"="465";"value"="18030"};
+{"key"="2327";"subkey"="465";"value"="18039"};
+{"key"="2328";"subkey"="465";"value"="18048"};
+{"key"="2329";"subkey"="465";"value"="18057"};
+{"key"="2330";"subkey"="466";"value"="18065"};
+{"key"="2331";"subkey"="466";"value"="18074"};
+{"key"="2332";"subkey"="466";"value"="18083"};
+{"key"="2333";"subkey"="466";"value"="18092"};
+{"key"="2334";"subkey"="466";"value"="18100"};
+{"key"="2335";"subkey"="467";"value"="18109"};
+{"key"="2336";"subkey"="467";"value"="18118"};
+{"key"="2337";"subkey"="467";"value"="18127"};
+{"key"="2338";"subkey"="467";"value"="18135"};
+{"key"="2339";"subkey"="467";"value"="18144"};
+{"key"="2340";"subkey"="468";"value"="18153"};
+{"key"="2341";"subkey"="468";"value"="18162"};
+{"key"="2342";"subkey"="468";"value"="18171"};
+{"key"="2343";"subkey"="468";"value"="18179"};
+{"key"="2344";"subkey"="468";"value"="18188"};
+{"key"="2345";"subkey"="469";"value"="18197"};
+{"key"="2346";"subkey"="469";"value"="18206"};
+{"key"="2347";"subkey"="469";"value"="18214"};
+{"key"="2348";"subkey"="469";"value"="18223"};
+{"key"="2349";"subkey"="469";"value"="18232"};
+{"key"="2350";"subkey"="470";"value"="18241"};
+{"key"="2351";"subkey"="470";"value"="18249"};
+{"key"="2352";"subkey"="470";"value"="18258"};
+{"key"="2353";"subkey"="470";"value"="18267"};
+{"key"="2354";"subkey"="470";"value"="18276"};
+{"key"="2355";"subkey"="471";"value"="18284"};
+{"key"="2356";"subkey"="471";"value"="18293"};
+{"key"="2357";"subkey"="471";"value"="18302"};
+{"key"="2358";"subkey"="471";"value"="18311"};
+{"key"="2359";"subkey"="471";"value"="18319"};
+{"key"="2360";"subkey"="472";"value"="18328"};
+{"key"="2361";"subkey"="472";"value"="18337"};
+{"key"="2362";"subkey"="472";"value"="18346"};
+{"key"="2363";"subkey"="472";"value"="18355"};
+{"key"="2364";"subkey"="472";"value"="18363"};
+{"key"="2365";"subkey"="473";"value"="18372"};
+{"key"="2366";"subkey"="473";"value"="18381"};
+{"key"="2367";"subkey"="473";"value"="18390"};
+{"key"="2368";"subkey"="473";"value"="18398"};
+{"key"="2369";"subkey"="473";"value"="18407"};
+{"key"="2370";"subkey"="474";"value"="18416"};
+{"key"="2371";"subkey"="474";"value"="18425"};
+{"key"="2372";"subkey"="474";"value"="18433"};
+{"key"="2373";"subkey"="474";"value"="18442"};
+{"key"="2374";"subkey"="474";"value"="18451"};
+{"key"="2375";"subkey"="475";"value"="18460"};
+{"key"="2376";"subkey"="475";"value"="18469"};
+{"key"="2377";"subkey"="475";"value"="18477"};
+{"key"="2378";"subkey"="475";"value"="18486"};
+{"key"="2379";"subkey"="475";"value"="18495"};
+{"key"="2380";"subkey"="476";"value"="18504"};
+{"key"="2381";"subkey"="476";"value"="18512"};
+{"key"="2382";"subkey"="476";"value"="18521"};
+{"key"="2383";"subkey"="476";"value"="18530"};
+{"key"="2384";"subkey"="476";"value"="18539"};
+{"key"="2385";"subkey"="477";"value"="18548"};
+{"key"="2386";"subkey"="477";"value"="18556"};
+{"key"="2387";"subkey"="477";"value"="18565"};
+{"key"="2388";"subkey"="477";"value"="18574"};
+{"key"="2389";"subkey"="477";"value"="18583"};
+{"key"="2390";"subkey"="478";"value"="18591"};
+{"key"="2391";"subkey"="478";"value"="18600"};
+{"key"="2392";"subkey"="478";"value"="18609"};
+{"key"="2393";"subkey"="478";"value"="18618"};
+{"key"="2394";"subkey"="478";"value"="18627"};
+{"key"="2395";"subkey"="479";"value"="18635"};
+{"key"="2396";"subkey"="479";"value"="18644"};
+{"key"="2397";"subkey"="479";"value"="18653"};
+{"key"="2398";"subkey"="479";"value"="18662"};
+{"key"="2399";"subkey"="479";"value"="18670"};
+{"key"="2400";"subkey"="480";"value"="18679"};
+{"key"="2401";"subkey"="480";"value"="18688"};
+{"key"="2402";"subkey"="480";"value"="18697"};
+{"key"="2403";"subkey"="480";"value"="18706"};
+{"key"="2404";"subkey"="480";"value"="18714"};
+{"key"="2405";"subkey"="481";"value"="18723"};
+{"key"="2406";"subkey"="481";"value"="18732"};
+{"key"="2407";"subkey"="481";"value"="18741"};
+{"key"="2408";"subkey"="481";"value"="18750"};
+{"key"="2409";"subkey"="481";"value"="18758"};
+{"key"="2410";"subkey"="482";"value"="18767"};
+{"key"="2411";"subkey"="482";"value"="18776"};
+{"key"="2412";"subkey"="482";"value"="18785"};
+{"key"="2413";"subkey"="482";"value"="18793"};
+{"key"="2414";"subkey"="482";"value"="18802"};
+{"key"="2415";"subkey"="483";"value"="18811"};
+{"key"="2416";"subkey"="483";"value"="18820"};
+{"key"="2417";"subkey"="483";"value"="18829"};
+{"key"="2418";"subkey"="483";"value"="18837"};
+{"key"="2419";"subkey"="483";"value"="18846"};
+{"key"="2420";"subkey"="484";"value"="18855"};
+{"key"="2421";"subkey"="484";"value"="18864"};
+{"key"="2422";"subkey"="484";"value"="18873"};
+{"key"="2423";"subkey"="484";"value"="18881"};
+{"key"="2424";"subkey"="484";"value"="18890"};
+{"key"="2425";"subkey"="485";"value"="18899"};
+{"key"="2426";"subkey"="485";"value"="18908"};
+{"key"="2427";"subkey"="485";"value"="18917"};
+{"key"="2428";"subkey"="485";"value"="18925"};
+{"key"="2429";"subkey"="485";"value"="18934"};
+{"key"="2430";"subkey"="486";"value"="18943"};
+{"key"="2431";"subkey"="486";"value"="18952"};
+{"key"="2432";"subkey"="486";"value"="18961"};
+{"key"="2433";"subkey"="486";"value"="18969"};
+{"key"="2434";"subkey"="486";"value"="18978"};
+{"key"="2435";"subkey"="487";"value"="18987"};
+{"key"="2436";"subkey"="487";"value"="18996"};
+{"key"="2437";"subkey"="487";"value"="19005"};
+{"key"="2438";"subkey"="487";"value"="19013"};
+{"key"="2439";"subkey"="487";"value"="19022"};
+{"key"="2440";"subkey"="488";"value"="19031"};
+{"key"="2441";"subkey"="488";"value"="19040"};
+{"key"="2442";"subkey"="488";"value"="19048"};
+{"key"="2443";"subkey"="488";"value"="19057"};
+{"key"="2444";"subkey"="488";"value"="19066"};
+{"key"="2445";"subkey"="489";"value"="19075"};
+{"key"="2446";"subkey"="489";"value"="19084"};
+{"key"="2447";"subkey"="489";"value"="19093"};
+{"key"="2448";"subkey"="489";"value"="19101"};
+{"key"="2449";"subkey"="489";"value"="19110"};
+{"key"="2450";"subkey"="490";"value"="19119"};
+{"key"="2451";"subkey"="490";"value"="19128"};
+{"key"="2452";"subkey"="490";"value"="19137"};
+{"key"="2453";"subkey"="490";"value"="19145"};
+{"key"="2454";"subkey"="490";"value"="19154"};
+{"key"="2455";"subkey"="491";"value"="19163"};
+{"key"="2456";"subkey"="491";"value"="19172"};
+{"key"="2457";"subkey"="491";"value"="19181"};
+{"key"="2458";"subkey"="491";"value"="19189"};
+{"key"="2459";"subkey"="491";"value"="19198"};
+{"key"="2460";"subkey"="492";"value"="19207"};
+{"key"="2461";"subkey"="492";"value"="19216"};
+{"key"="2462";"subkey"="492";"value"="19225"};
+{"key"="2463";"subkey"="492";"value"="19233"};
+{"key"="2464";"subkey"="492";"value"="19242"};
+{"key"="2465";"subkey"="493";"value"="19251"};
+{"key"="2466";"subkey"="493";"value"="19260"};
+{"key"="2467";"subkey"="493";"value"="19269"};
+{"key"="2468";"subkey"="493";"value"="19277"};
+{"key"="2469";"subkey"="493";"value"="19286"};
+{"key"="2470";"subkey"="494";"value"="19295"};
+{"key"="2471";"subkey"="494";"value"="19304"};
+{"key"="2472";"subkey"="494";"value"="19313"};
+{"key"="2473";"subkey"="494";"value"="19322"};
+{"key"="2474";"subkey"="494";"value"="19330"};
+{"key"="2475";"subkey"="495";"value"="19339"};
+{"key"="2476";"subkey"="495";"value"="19348"};
+{"key"="2477";"subkey"="495";"value"="19357"};
+{"key"="2478";"subkey"="495";"value"="19366"};
+{"key"="2479";"subkey"="495";"value"="19374"};
+{"key"="2480";"subkey"="496";"value"="19383"};
+{"key"="2481";"subkey"="496";"value"="19392"};
+{"key"="2482";"subkey"="496";"value"="19401"};
+{"key"="2483";"subkey"="496";"value"="19410"};
+{"key"="2484";"subkey"="496";"value"="19418"};
+{"key"="2485";"subkey"="497";"value"="19427"};
+{"key"="2486";"subkey"="497";"value"="19436"};
+{"key"="2487";"subkey"="497";"value"="19445"};
+{"key"="2488";"subkey"="497";"value"="19454"};
+{"key"="2489";"subkey"="497";"value"="19463"};
+{"key"="2490";"subkey"="498";"value"="19471"};
+{"key"="2491";"subkey"="498";"value"="19480"};
+{"key"="2492";"subkey"="498";"value"="19489"};
+{"key"="2493";"subkey"="498";"value"="19498"};
+{"key"="2494";"subkey"="498";"value"="19507"};
+{"key"="2495";"subkey"="499";"value"="19515"};
+{"key"="2496";"subkey"="499";"value"="19524"};
+{"key"="2497";"subkey"="499";"value"="19533"};
+{"key"="2498";"subkey"="499";"value"="19542"};
+{"key"="2499";"subkey"="499";"value"="19551"};
+{"key"="2500";"subkey"="500";"value"="19560"};
+{"key"="2501";"subkey"="500";"value"="19568"};
+{"key"="2502";"subkey"="500";"value"="19577"};
+{"key"="2503";"subkey"="500";"value"="19586"};
+{"key"="2504";"subkey"="500";"value"="19595"};
+{"key"="2505";"subkey"="501";"value"="19604"};
+{"key"="2506";"subkey"="501";"value"="19613"};
+{"key"="2507";"subkey"="501";"value"="19621"};
+{"key"="2508";"subkey"="501";"value"="19630"};
+{"key"="2509";"subkey"="501";"value"="19639"};
+{"key"="2510";"subkey"="502";"value"="19648"};
+{"key"="2511";"subkey"="502";"value"="19657"};
+{"key"="2512";"subkey"="502";"value"="19666"};
+{"key"="2513";"subkey"="502";"value"="19674"};
+{"key"="2514";"subkey"="502";"value"="19683"};
+{"key"="2515";"subkey"="503";"value"="19692"};
+{"key"="2516";"subkey"="503";"value"="19701"};
+{"key"="2517";"subkey"="503";"value"="19710"};
+{"key"="2518";"subkey"="503";"value"="19719"};
+{"key"="2519";"subkey"="503";"value"="19727"};
+{"key"="2520";"subkey"="504";"value"="19736"};
+{"key"="2521";"subkey"="504";"value"="19745"};
+{"key"="2522";"subkey"="504";"value"="19754"};
+{"key"="2523";"subkey"="504";"value"="19763"};
+{"key"="2524";"subkey"="504";"value"="19772"};
+{"key"="2525";"subkey"="505";"value"="19780"};
+{"key"="2526";"subkey"="505";"value"="19789"};
+{"key"="2527";"subkey"="505";"value"="19798"};
+{"key"="2528";"subkey"="505";"value"="19807"};
+{"key"="2529";"subkey"="505";"value"="19816"};
+{"key"="2530";"subkey"="506";"value"="19825"};
+{"key"="2531";"subkey"="506";"value"="19833"};
+{"key"="2532";"subkey"="506";"value"="19842"};
+{"key"="2533";"subkey"="506";"value"="19851"};
+{"key"="2534";"subkey"="506";"value"="19860"};
+{"key"="2535";"subkey"="507";"value"="19869"};
+{"key"="2536";"subkey"="507";"value"="19878"};
+{"key"="2537";"subkey"="507";"value"="19886"};
+{"key"="2538";"subkey"="507";"value"="19895"};
+{"key"="2539";"subkey"="507";"value"="19904"};
+{"key"="2540";"subkey"="508";"value"="19913"};
+{"key"="2541";"subkey"="508";"value"="19922"};
+{"key"="2542";"subkey"="508";"value"="19931"};
+{"key"="2543";"subkey"="508";"value"="19939"};
+{"key"="2544";"subkey"="508";"value"="19948"};
+{"key"="2545";"subkey"="509";"value"="19957"};
+{"key"="2546";"subkey"="509";"value"="19966"};
+{"key"="2547";"subkey"="509";"value"="19975"};
+{"key"="2548";"subkey"="509";"value"="19984"};
+{"key"="2549";"subkey"="509";"value"="19992"};
+{"key"="2550";"subkey"="510";"value"="20001"};
+{"key"="2551";"subkey"="510";"value"="20010"};
+{"key"="2552";"subkey"="510";"value"="20019"};
+{"key"="2553";"subkey"="510";"value"="20028"};
+{"key"="2554";"subkey"="510";"value"="20037"};
+{"key"="2555";"subkey"="511";"value"="20046"};
+{"key"="2556";"subkey"="511";"value"="20054"};
+{"key"="2557";"subkey"="511";"value"="20063"};
+{"key"="2558";"subkey"="511";"value"="20072"};
+{"key"="2559";"subkey"="511";"value"="20081"};
+{"key"="2560";"subkey"="512";"value"="20090"};
+{"key"="2561";"subkey"="512";"value"="20099"};
+{"key"="2562";"subkey"="512";"value"="20107"};
+{"key"="2563";"subkey"="512";"value"="20116"};
+{"key"="2564";"subkey"="512";"value"="20125"};
+{"key"="2565";"subkey"="513";"value"="20134"};
+{"key"="2566";"subkey"="513";"value"="20143"};
+{"key"="2567";"subkey"="513";"value"="20152"};
+{"key"="2568";"subkey"="513";"value"="20161"};
+{"key"="2569";"subkey"="513";"value"="20169"};
+{"key"="2570";"subkey"="514";"value"="20178"};
+{"key"="2571";"subkey"="514";"value"="20187"};
+{"key"="2572";"subkey"="514";"value"="20196"};
+{"key"="2573";"subkey"="514";"value"="20205"};
+{"key"="2574";"subkey"="514";"value"="20214"};
+{"key"="2575";"subkey"="515";"value"="20223"};
+{"key"="2576";"subkey"="515";"value"="20231"};
+{"key"="2577";"subkey"="515";"value"="20240"};
+{"key"="2578";"subkey"="515";"value"="20249"};
+{"key"="2579";"subkey"="515";"value"="20258"};
+{"key"="2580";"subkey"="516";"value"="20267"};
+{"key"="2581";"subkey"="516";"value"="20276"};
+{"key"="2582";"subkey"="516";"value"="20285"};
+{"key"="2583";"subkey"="516";"value"="20293"};
+{"key"="2584";"subkey"="516";"value"="20302"};
+{"key"="2585";"subkey"="517";"value"="20311"};
+{"key"="2586";"subkey"="517";"value"="20320"};
+{"key"="2587";"subkey"="517";"value"="20329"};
+{"key"="2588";"subkey"="517";"value"="20338"};
+{"key"="2589";"subkey"="517";"value"="20347"};
+{"key"="2590";"subkey"="518";"value"="20355"};
+{"key"="2591";"subkey"="518";"value"="20364"};
+{"key"="2592";"subkey"="518";"value"="20373"};
+{"key"="2593";"subkey"="518";"value"="20382"};
+{"key"="2594";"subkey"="518";"value"="20391"};
+{"key"="2595";"subkey"="519";"value"="20400"};
+{"key"="2596";"subkey"="519";"value"="20409"};
+{"key"="2597";"subkey"="519";"value"="20417"};
+{"key"="2598";"subkey"="519";"value"="20426"};
+{"key"="2599";"subkey"="519";"value"="20435"};
+{"key"="2600";"subkey"="520";"value"="20444"};
+{"key"="2601";"subkey"="520";"value"="20453"};
+{"key"="2602";"subkey"="520";"value"="20462"};
+{"key"="2603";"subkey"="520";"value"="20471"};
+{"key"="2604";"subkey"="520";"value"="20479"};
+{"key"="2605";"subkey"="521";"value"="20488"};
+{"key"="2606";"subkey"="521";"value"="20497"};
+{"key"="2607";"subkey"="521";"value"="20506"};
+{"key"="2608";"subkey"="521";"value"="20515"};
+{"key"="2609";"subkey"="521";"value"="20524"};
+{"key"="2610";"subkey"="522";"value"="20533"};
+{"key"="2611";"subkey"="522";"value"="20542"};
+{"key"="2612";"subkey"="522";"value"="20550"};
+{"key"="2613";"subkey"="522";"value"="20559"};
+{"key"="2614";"subkey"="522";"value"="20568"};
+{"key"="2615";"subkey"="523";"value"="20577"};
+{"key"="2616";"subkey"="523";"value"="20586"};
+{"key"="2617";"subkey"="523";"value"="20595"};
+{"key"="2618";"subkey"="523";"value"="20604"};
+{"key"="2619";"subkey"="523";"value"="20612"};
+{"key"="2620";"subkey"="524";"value"="20621"};
+{"key"="2621";"subkey"="524";"value"="20630"};
+{"key"="2622";"subkey"="524";"value"="20639"};
+{"key"="2623";"subkey"="524";"value"="20648"};
+{"key"="2624";"subkey"="524";"value"="20657"};
+{"key"="2625";"subkey"="525";"value"="20666"};
+{"key"="2626";"subkey"="525";"value"="20675"};
+{"key"="2627";"subkey"="525";"value"="20683"};
+{"key"="2628";"subkey"="525";"value"="20692"};
+{"key"="2629";"subkey"="525";"value"="20701"};
+{"key"="2630";"subkey"="526";"value"="20710"};
+{"key"="2631";"subkey"="526";"value"="20719"};
+{"key"="2632";"subkey"="526";"value"="20728"};
+{"key"="2633";"subkey"="526";"value"="20737"};
+{"key"="2634";"subkey"="526";"value"="20746"};
+{"key"="2635";"subkey"="527";"value"="20754"};
+{"key"="2636";"subkey"="527";"value"="20763"};
+{"key"="2637";"subkey"="527";"value"="20772"};
+{"key"="2638";"subkey"="527";"value"="20781"};
+{"key"="2639";"subkey"="527";"value"="20790"};
+{"key"="2640";"subkey"="528";"value"="20799"};
+{"key"="2641";"subkey"="528";"value"="20808"};
+{"key"="2642";"subkey"="528";"value"="20817"};
+{"key"="2643";"subkey"="528";"value"="20825"};
+{"key"="2644";"subkey"="528";"value"="20834"};
+{"key"="2645";"subkey"="529";"value"="20843"};
+{"key"="2646";"subkey"="529";"value"="20852"};
+{"key"="2647";"subkey"="529";"value"="20861"};
+{"key"="2648";"subkey"="529";"value"="20870"};
+{"key"="2649";"subkey"="529";"value"="20879"};
+{"key"="2650";"subkey"="530";"value"="20888"};
+{"key"="2651";"subkey"="530";"value"="20897"};
+{"key"="2652";"subkey"="530";"value"="20905"};
+{"key"="2653";"subkey"="530";"value"="20914"};
+{"key"="2654";"subkey"="530";"value"="20923"};
+{"key"="2655";"subkey"="531";"value"="20932"};
+{"key"="2656";"subkey"="531";"value"="20941"};
+{"key"="2657";"subkey"="531";"value"="20950"};
+{"key"="2658";"subkey"="531";"value"="20959"};
+{"key"="2659";"subkey"="531";"value"="20968"};
+{"key"="2660";"subkey"="532";"value"="20976"};
+{"key"="2661";"subkey"="532";"value"="20985"};
+{"key"="2662";"subkey"="532";"value"="20994"};
+{"key"="2663";"subkey"="532";"value"="21003"};
+{"key"="2664";"subkey"="532";"value"="21012"};
+{"key"="2665";"subkey"="533";"value"="21021"};
+{"key"="2666";"subkey"="533";"value"="21030"};
+{"key"="2667";"subkey"="533";"value"="21039"};
+{"key"="2668";"subkey"="533";"value"="21048"};
+{"key"="2669";"subkey"="533";"value"="21056"};
+{"key"="2670";"subkey"="534";"value"="21065"};
+{"key"="2671";"subkey"="534";"value"="21074"};
+{"key"="2672";"subkey"="534";"value"="21083"};
+{"key"="2673";"subkey"="534";"value"="21092"};
+{"key"="2674";"subkey"="534";"value"="21101"};
+{"key"="2675";"subkey"="535";"value"="21110"};
+{"key"="2676";"subkey"="535";"value"="21119"};
+{"key"="2677";"subkey"="535";"value"="21128"};
+{"key"="2678";"subkey"="535";"value"="21136"};
+{"key"="2679";"subkey"="535";"value"="21145"};
+{"key"="2680";"subkey"="536";"value"="21154"};
+{"key"="2681";"subkey"="536";"value"="21163"};
+{"key"="2682";"subkey"="536";"value"="21172"};
+{"key"="2683";"subkey"="536";"value"="21181"};
+{"key"="2684";"subkey"="536";"value"="21190"};
+{"key"="2685";"subkey"="537";"value"="21199"};
+{"key"="2686";"subkey"="537";"value"="21208"};
+{"key"="2687";"subkey"="537";"value"="21217"};
+{"key"="2688";"subkey"="537";"value"="21225"};
+{"key"="2689";"subkey"="537";"value"="21234"};
+{"key"="2690";"subkey"="538";"value"="21243"};
+{"key"="2691";"subkey"="538";"value"="21252"};
+{"key"="2692";"subkey"="538";"value"="21261"};
+{"key"="2693";"subkey"="538";"value"="21270"};
+{"key"="2694";"subkey"="538";"value"="21279"};
+{"key"="2695";"subkey"="539";"value"="21288"};
+{"key"="2696";"subkey"="539";"value"="21297"};
+{"key"="2697";"subkey"="539";"value"="21306"};
+{"key"="2698";"subkey"="539";"value"="21314"};
+{"key"="2699";"subkey"="539";"value"="21323"};
+{"key"="2700";"subkey"="540";"value"="21332"};
+{"key"="2701";"subkey"="540";"value"="21341"};
+{"key"="2702";"subkey"="540";"value"="21350"};
+{"key"="2703";"subkey"="540";"value"="21359"};
+{"key"="2704";"subkey"="540";"value"="21368"};
+{"key"="2705";"subkey"="541";"value"="21377"};
+{"key"="2706";"subkey"="541";"value"="21386"};
+{"key"="2707";"subkey"="541";"value"="21395"};
+{"key"="2708";"subkey"="541";"value"="21403"};
+{"key"="2709";"subkey"="541";"value"="21412"};
+{"key"="2710";"subkey"="542";"value"="21421"};
+{"key"="2711";"subkey"="542";"value"="21430"};
+{"key"="2712";"subkey"="542";"value"="21439"};
+{"key"="2713";"subkey"="542";"value"="21448"};
+{"key"="2714";"subkey"="542";"value"="21457"};
+{"key"="2715";"subkey"="543";"value"="21466"};
+{"key"="2716";"subkey"="543";"value"="21475"};
+{"key"="2717";"subkey"="543";"value"="21484"};
+{"key"="2718";"subkey"="543";"value"="21492"};
+{"key"="2719";"subkey"="543";"value"="21501"};
+{"key"="2720";"subkey"="544";"value"="21510"};
+{"key"="2721";"subkey"="544";"value"="21519"};
+{"key"="2722";"subkey"="544";"value"="21528"};
+{"key"="2723";"subkey"="544";"value"="21537"};
+{"key"="2724";"subkey"="544";"value"="21546"};
+{"key"="2725";"subkey"="545";"value"="21555"};
+{"key"="2726";"subkey"="545";"value"="21564"};
+{"key"="2727";"subkey"="545";"value"="21573"};
+{"key"="2728";"subkey"="545";"value"="21582"};
+{"key"="2729";"subkey"="545";"value"="21591"};
+{"key"="2730";"subkey"="546";"value"="21599"};
+{"key"="2731";"subkey"="546";"value"="21608"};
+{"key"="2732";"subkey"="546";"value"="21617"};
+{"key"="2733";"subkey"="546";"value"="21626"};
+{"key"="2734";"subkey"="546";"value"="21635"};
+{"key"="2735";"subkey"="547";"value"="21644"};
+{"key"="2736";"subkey"="547";"value"="21653"};
+{"key"="2737";"subkey"="547";"value"="21662"};
+{"key"="2738";"subkey"="547";"value"="21671"};
+{"key"="2739";"subkey"="547";"value"="21680"};
+{"key"="2740";"subkey"="548";"value"="21689"};
+{"key"="2741";"subkey"="548";"value"="21697"};
+{"key"="2742";"subkey"="548";"value"="21706"};
+{"key"="2743";"subkey"="548";"value"="21715"};
+{"key"="2744";"subkey"="548";"value"="21724"};
+{"key"="2745";"subkey"="549";"value"="21733"};
+{"key"="2746";"subkey"="549";"value"="21742"};
+{"key"="2747";"subkey"="549";"value"="21751"};
+{"key"="2748";"subkey"="549";"value"="21760"};
+{"key"="2749";"subkey"="549";"value"="21769"};
+{"key"="2750";"subkey"="550";"value"="21778"};
+{"key"="2751";"subkey"="550";"value"="21787"};
+{"key"="2752";"subkey"="550";"value"="21796"};
+{"key"="2753";"subkey"="550";"value"="21804"};
+{"key"="2754";"subkey"="550";"value"="21813"};
+{"key"="2755";"subkey"="551";"value"="21822"};
+{"key"="2756";"subkey"="551";"value"="21831"};
+{"key"="2757";"subkey"="551";"value"="21840"};
+{"key"="2758";"subkey"="551";"value"="21849"};
+{"key"="2759";"subkey"="551";"value"="21858"};
+{"key"="2760";"subkey"="552";"value"="21867"};
+{"key"="2761";"subkey"="552";"value"="21876"};
+{"key"="2762";"subkey"="552";"value"="21885"};
+{"key"="2763";"subkey"="552";"value"="21894"};
+{"key"="2764";"subkey"="552";"value"="21903"};
+{"key"="2765";"subkey"="553";"value"="21912"};
+{"key"="2766";"subkey"="553";"value"="21920"};
+{"key"="2767";"subkey"="553";"value"="21929"};
+{"key"="2768";"subkey"="553";"value"="21938"};
+{"key"="2769";"subkey"="553";"value"="21947"};
+{"key"="2770";"subkey"="554";"value"="21956"};
+{"key"="2771";"subkey"="554";"value"="21965"};
+{"key"="2772";"subkey"="554";"value"="21974"};
+{"key"="2773";"subkey"="554";"value"="21983"};
+{"key"="2774";"subkey"="554";"value"="21992"};
+{"key"="2775";"subkey"="555";"value"="22001"};
+{"key"="2776";"subkey"="555";"value"="22010"};
+{"key"="2777";"subkey"="555";"value"="22019"};
+{"key"="2778";"subkey"="555";"value"="22028"};
+{"key"="2779";"subkey"="555";"value"="22037"};
+{"key"="2780";"subkey"="556";"value"="22045"};
+{"key"="2781";"subkey"="556";"value"="22054"};
+{"key"="2782";"subkey"="556";"value"="22063"};
+{"key"="2783";"subkey"="556";"value"="22072"};
+{"key"="2784";"subkey"="556";"value"="22081"};
+{"key"="2785";"subkey"="557";"value"="22090"};
+{"key"="2786";"subkey"="557";"value"="22099"};
+{"key"="2787";"subkey"="557";"value"="22108"};
+{"key"="2788";"subkey"="557";"value"="22117"};
+{"key"="2789";"subkey"="557";"value"="22126"};
+{"key"="2790";"subkey"="558";"value"="22135"};
+{"key"="2791";"subkey"="558";"value"="22144"};
+{"key"="2792";"subkey"="558";"value"="22153"};
+{"key"="2793";"subkey"="558";"value"="22162"};
+{"key"="2794";"subkey"="558";"value"="22171"};
+{"key"="2795";"subkey"="559";"value"="22179"};
+{"key"="2796";"subkey"="559";"value"="22188"};
+{"key"="2797";"subkey"="559";"value"="22197"};
+{"key"="2798";"subkey"="559";"value"="22206"};
+{"key"="2799";"subkey"="559";"value"="22215"};
+{"key"="2800";"subkey"="560";"value"="22224"};
+{"key"="2801";"subkey"="560";"value"="22233"};
+{"key"="2802";"subkey"="560";"value"="22242"};
+{"key"="2803";"subkey"="560";"value"="22251"};
+{"key"="2804";"subkey"="560";"value"="22260"};
+{"key"="2805";"subkey"="561";"value"="22269"};
+{"key"="2806";"subkey"="561";"value"="22278"};
+{"key"="2807";"subkey"="561";"value"="22287"};
+{"key"="2808";"subkey"="561";"value"="22296"};
+{"key"="2809";"subkey"="561";"value"="22305"};
+{"key"="2810";"subkey"="562";"value"="22314"};
+{"key"="2811";"subkey"="562";"value"="22322"};
+{"key"="2812";"subkey"="562";"value"="22331"};
+{"key"="2813";"subkey"="562";"value"="22340"};
+{"key"="2814";"subkey"="562";"value"="22349"};
+{"key"="2815";"subkey"="563";"value"="22358"};
+{"key"="2816";"subkey"="563";"value"="22367"};
+{"key"="2817";"subkey"="563";"value"="22376"};
+{"key"="2818";"subkey"="563";"value"="22385"};
+{"key"="2819";"subkey"="563";"value"="22394"};
+{"key"="2820";"subkey"="564";"value"="22403"};
+{"key"="2821";"subkey"="564";"value"="22412"};
+{"key"="2822";"subkey"="564";"value"="22421"};
+{"key"="2823";"subkey"="564";"value"="22430"};
+{"key"="2824";"subkey"="564";"value"="22439"};
+{"key"="2825";"subkey"="565";"value"="22448"};
+{"key"="2826";"subkey"="565";"value"="22457"};
+{"key"="2827";"subkey"="565";"value"="22466"};
+{"key"="2828";"subkey"="565";"value"="22475"};
+{"key"="2829";"subkey"="565";"value"="22483"};
+{"key"="2830";"subkey"="566";"value"="22492"};
+{"key"="2831";"subkey"="566";"value"="22501"};
+{"key"="2832";"subkey"="566";"value"="22510"};
+{"key"="2833";"subkey"="566";"value"="22519"};
+{"key"="2834";"subkey"="566";"value"="22528"};
+{"key"="2835";"subkey"="567";"value"="22537"};
+{"key"="2836";"subkey"="567";"value"="22546"};
+{"key"="2837";"subkey"="567";"value"="22555"};
+{"key"="2838";"subkey"="567";"value"="22564"};
+{"key"="2839";"subkey"="567";"value"="22573"};
+{"key"="2840";"subkey"="568";"value"="22582"};
+{"key"="2841";"subkey"="568";"value"="22591"};
+{"key"="2842";"subkey"="568";"value"="22600"};
+{"key"="2843";"subkey"="568";"value"="22609"};
+{"key"="2844";"subkey"="568";"value"="22618"};
+{"key"="2845";"subkey"="569";"value"="22627"};
+{"key"="2846";"subkey"="569";"value"="22636"};
+{"key"="2847";"subkey"="569";"value"="22645"};
+{"key"="2848";"subkey"="569";"value"="22654"};
+{"key"="2849";"subkey"="569";"value"="22663"};
+{"key"="2850";"subkey"="570";"value"="22671"};
+{"key"="2851";"subkey"="570";"value"="22680"};
+{"key"="2852";"subkey"="570";"value"="22689"};
+{"key"="2853";"subkey"="570";"value"="22698"};
+{"key"="2854";"subkey"="570";"value"="22707"};
+{"key"="2855";"subkey"="571";"value"="22716"};
+{"key"="2856";"subkey"="571";"value"="22725"};
+{"key"="2857";"subkey"="571";"value"="22734"};
+{"key"="2858";"subkey"="571";"value"="22743"};
+{"key"="2859";"subkey"="571";"value"="22752"};
+{"key"="2860";"subkey"="572";"value"="22761"};
+{"key"="2861";"subkey"="572";"value"="22770"};
+{"key"="2862";"subkey"="572";"value"="22779"};
+{"key"="2863";"subkey"="572";"value"="22788"};
+{"key"="2864";"subkey"="572";"value"="22797"};
+{"key"="2865";"subkey"="573";"value"="22806"};
+{"key"="2866";"subkey"="573";"value"="22815"};
+{"key"="2867";"subkey"="573";"value"="22824"};
+{"key"="2868";"subkey"="573";"value"="22833"};
+{"key"="2869";"subkey"="573";"value"="22842"};
+{"key"="2870";"subkey"="574";"value"="22851"};
+{"key"="2871";"subkey"="574";"value"="22860"};
+{"key"="2872";"subkey"="574";"value"="22869"};
+{"key"="2873";"subkey"="574";"value"="22878"};
+{"key"="2874";"subkey"="574";"value"="22886"};
+{"key"="2875";"subkey"="575";"value"="22895"};
+{"key"="2876";"subkey"="575";"value"="22904"};
+{"key"="2877";"subkey"="575";"value"="22913"};
+{"key"="2878";"subkey"="575";"value"="22922"};
+{"key"="2879";"subkey"="575";"value"="22931"};
+{"key"="2880";"subkey"="576";"value"="22940"};
+{"key"="2881";"subkey"="576";"value"="22949"};
+{"key"="2882";"subkey"="576";"value"="22958"};
+{"key"="2883";"subkey"="576";"value"="22967"};
+{"key"="2884";"subkey"="576";"value"="22976"};
+{"key"="2885";"subkey"="577";"value"="22985"};
+{"key"="2886";"subkey"="577";"value"="22994"};
+{"key"="2887";"subkey"="577";"value"="23003"};
+{"key"="2888";"subkey"="577";"value"="23012"};
+{"key"="2889";"subkey"="577";"value"="23021"};
+{"key"="2890";"subkey"="578";"value"="23030"};
+{"key"="2891";"subkey"="578";"value"="23039"};
+{"key"="2892";"subkey"="578";"value"="23048"};
+{"key"="2893";"subkey"="578";"value"="23057"};
+{"key"="2894";"subkey"="578";"value"="23066"};
+{"key"="2895";"subkey"="579";"value"="23075"};
+{"key"="2896";"subkey"="579";"value"="23084"};
+{"key"="2897";"subkey"="579";"value"="23093"};
+{"key"="2898";"subkey"="579";"value"="23102"};
+{"key"="2899";"subkey"="579";"value"="23111"};
+{"key"="2900";"subkey"="580";"value"="23120"};
+{"key"="2901";"subkey"="580";"value"="23129"};
+{"key"="2902";"subkey"="580";"value"="23138"};
+{"key"="2903";"subkey"="580";"value"="23147"};
+{"key"="2904";"subkey"="580";"value"="23156"};
+{"key"="2905";"subkey"="581";"value"="23165"};
+{"key"="2906";"subkey"="581";"value"="23173"};
+{"key"="2907";"subkey"="581";"value"="23182"};
+{"key"="2908";"subkey"="581";"value"="23191"};
+{"key"="2909";"subkey"="581";"value"="23200"};
+{"key"="2910";"subkey"="582";"value"="23209"};
+{"key"="2911";"subkey"="582";"value"="23218"};
+{"key"="2912";"subkey"="582";"value"="23227"};
+{"key"="2913";"subkey"="582";"value"="23236"};
+{"key"="2914";"subkey"="582";"value"="23245"};
+{"key"="2915";"subkey"="583";"value"="23254"};
+{"key"="2916";"subkey"="583";"value"="23263"};
+{"key"="2917";"subkey"="583";"value"="23272"};
+{"key"="2918";"subkey"="583";"value"="23281"};
+{"key"="2919";"subkey"="583";"value"="23290"};
+{"key"="2920";"subkey"="584";"value"="23299"};
+{"key"="2921";"subkey"="584";"value"="23308"};
+{"key"="2922";"subkey"="584";"value"="23317"};
+{"key"="2923";"subkey"="584";"value"="23326"};
+{"key"="2924";"subkey"="584";"value"="23335"};
+{"key"="2925";"subkey"="585";"value"="23344"};
+{"key"="2926";"subkey"="585";"value"="23353"};
+{"key"="2927";"subkey"="585";"value"="23362"};
+{"key"="2928";"subkey"="585";"value"="23371"};
+{"key"="2929";"subkey"="585";"value"="23380"};
+{"key"="2930";"subkey"="586";"value"="23389"};
+{"key"="2931";"subkey"="586";"value"="23398"};
+{"key"="2932";"subkey"="586";"value"="23407"};
+{"key"="2933";"subkey"="586";"value"="23416"};
+{"key"="2934";"subkey"="586";"value"="23425"};
+{"key"="2935";"subkey"="587";"value"="23434"};
+{"key"="2936";"subkey"="587";"value"="23443"};
+{"key"="2937";"subkey"="587";"value"="23452"};
+{"key"="2938";"subkey"="587";"value"="23461"};
+{"key"="2939";"subkey"="587";"value"="23470"};
+{"key"="2940";"subkey"="588";"value"="23479"};
+{"key"="2941";"subkey"="588";"value"="23488"};
+{"key"="2942";"subkey"="588";"value"="23497"};
+{"key"="2943";"subkey"="588";"value"="23506"};
+{"key"="2944";"subkey"="588";"value"="23515"};
+{"key"="2945";"subkey"="589";"value"="23524"};
+{"key"="2946";"subkey"="589";"value"="23533"};
+{"key"="2947";"subkey"="589";"value"="23542"};
+{"key"="2948";"subkey"="589";"value"="23551"};
+{"key"="2949";"subkey"="589";"value"="23560"};
+{"key"="2950";"subkey"="590";"value"="23569"};
+{"key"="2951";"subkey"="590";"value"="23578"};
+{"key"="2952";"subkey"="590";"value"="23587"};
+{"key"="2953";"subkey"="590";"value"="23596"};
+{"key"="2954";"subkey"="590";"value"="23605"};
+{"key"="2955";"subkey"="591";"value"="23614"};
+{"key"="2956";"subkey"="591";"value"="23623"};
+{"key"="2957";"subkey"="591";"value"="23632"};
+{"key"="2958";"subkey"="591";"value"="23641"};
+{"key"="2959";"subkey"="591";"value"="23650"};
+{"key"="2960";"subkey"="592";"value"="23659"};
+{"key"="2961";"subkey"="592";"value"="23668"};
+{"key"="2962";"subkey"="592";"value"="23677"};
+{"key"="2963";"subkey"="592";"value"="23686"};
+{"key"="2964";"subkey"="592";"value"="23695"};
+{"key"="2965";"subkey"="593";"value"="23704"};
+{"key"="2966";"subkey"="593";"value"="23713"};
+{"key"="2967";"subkey"="593";"value"="23722"};
+{"key"="2968";"subkey"="593";"value"="23731"};
+{"key"="2969";"subkey"="593";"value"="23740"};
+{"key"="2970";"subkey"="594";"value"="23749"};
+{"key"="2971";"subkey"="594";"value"="23758"};
+{"key"="2972";"subkey"="594";"value"="23767"};
+{"key"="2973";"subkey"="594";"value"="23776"};
+{"key"="2974";"subkey"="594";"value"="23785"};
+{"key"="2975";"subkey"="595";"value"="23794"};
+{"key"="2976";"subkey"="595";"value"="23803"};
+{"key"="2977";"subkey"="595";"value"="23812"};
+{"key"="2978";"subkey"="595";"value"="23821"};
+{"key"="2979";"subkey"="595";"value"="23830"};
+{"key"="2980";"subkey"="596";"value"="23839"};
+{"key"="2981";"subkey"="596";"value"="23848"};
+{"key"="2982";"subkey"="596";"value"="23857"};
+{"key"="2983";"subkey"="596";"value"="23866"};
+{"key"="2984";"subkey"="596";"value"="23875"};
+{"key"="2985";"subkey"="597";"value"="23884"};
+{"key"="2986";"subkey"="597";"value"="23893"};
+{"key"="2987";"subkey"="597";"value"="23902"};
+{"key"="2988";"subkey"="597";"value"="23911"};
+{"key"="2989";"subkey"="597";"value"="23920"};
+{"key"="2990";"subkey"="598";"value"="23929"};
+{"key"="2991";"subkey"="598";"value"="23938"};
+{"key"="2992";"subkey"="598";"value"="23947"};
+{"key"="2993";"subkey"="598";"value"="23956"};
+{"key"="2994";"subkey"="598";"value"="23965"};
+{"key"="2995";"subkey"="599";"value"="23974"};
+{"key"="2996";"subkey"="599";"value"="23983"};
+{"key"="2997";"subkey"="599";"value"="23992"};
+{"key"="2998";"subkey"="599";"value"="24001"};
+{"key"="2999";"subkey"="599";"value"="24010"};
+{"key"="3000";"subkey"="600";"value"="24019"};
+{"key"="3001";"subkey"="600";"value"="24028"};
+{"key"="3002";"subkey"="600";"value"="24037"};
+{"key"="3003";"subkey"="600";"value"="24046"};
+{"key"="3004";"subkey"="600";"value"="24055"};
+{"key"="3005";"subkey"="601";"value"="24064"};
+{"key"="3006";"subkey"="601";"value"="24073"};
+{"key"="3007";"subkey"="601";"value"="24082"};
+{"key"="3008";"subkey"="601";"value"="24091"};
+{"key"="3009";"subkey"="601";"value"="24100"};
+{"key"="3010";"subkey"="602";"value"="24109"};
+{"key"="3011";"subkey"="602";"value"="24118"};
+{"key"="3012";"subkey"="602";"value"="24127"};
+{"key"="3013";"subkey"="602";"value"="24136"};
+{"key"="3014";"subkey"="602";"value"="24145"};
+{"key"="3015";"subkey"="603";"value"="24154"};
+{"key"="3016";"subkey"="603";"value"="24163"};
+{"key"="3017";"subkey"="603";"value"="24172"};
+{"key"="3018";"subkey"="603";"value"="24181"};
+{"key"="3019";"subkey"="603";"value"="24190"};
+{"key"="3020";"subkey"="604";"value"="24199"};
+{"key"="3021";"subkey"="604";"value"="24208"};
+{"key"="3022";"subkey"="604";"value"="24217"};
+{"key"="3023";"subkey"="604";"value"="24226"};
+{"key"="3024";"subkey"="604";"value"="24235"};
+{"key"="3025";"subkey"="605";"value"="24244"};
+{"key"="3026";"subkey"="605";"value"="24253"};
+{"key"="3027";"subkey"="605";"value"="24262"};
+{"key"="3028";"subkey"="605";"value"="24271"};
+{"key"="3029";"subkey"="605";"value"="24280"};
+{"key"="3030";"subkey"="606";"value"="24289"};
+{"key"="3031";"subkey"="606";"value"="24298"};
+{"key"="3032";"subkey"="606";"value"="24307"};
+{"key"="3033";"subkey"="606";"value"="24316"};
+{"key"="3034";"subkey"="606";"value"="24325"};
+{"key"="3035";"subkey"="607";"value"="24334"};
+{"key"="3036";"subkey"="607";"value"="24343"};
+{"key"="3037";"subkey"="607";"value"="24352"};
+{"key"="3038";"subkey"="607";"value"="24361"};
+{"key"="3039";"subkey"="607";"value"="24370"};
+{"key"="3040";"subkey"="608";"value"="24379"};
+{"key"="3041";"subkey"="608";"value"="24388"};
+{"key"="3042";"subkey"="608";"value"="24397"};
+{"key"="3043";"subkey"="608";"value"="24406"};
+{"key"="3044";"subkey"="608";"value"="24415"};
+{"key"="3045";"subkey"="609";"value"="24424"};
+{"key"="3046";"subkey"="609";"value"="24433"};
+{"key"="3047";"subkey"="609";"value"="24442"};
+{"key"="3048";"subkey"="609";"value"="24451"};
+{"key"="3049";"subkey"="609";"value"="24460"};
+{"key"="3050";"subkey"="610";"value"="24469"};
+{"key"="3051";"subkey"="610";"value"="24478"};
+{"key"="3052";"subkey"="610";"value"="24487"};
+{"key"="3053";"subkey"="610";"value"="24496"};
+{"key"="3054";"subkey"="610";"value"="24505"};
+{"key"="3055";"subkey"="611";"value"="24514"};
+{"key"="3056";"subkey"="611";"value"="24523"};
+{"key"="3057";"subkey"="611";"value"="24533"};
+{"key"="3058";"subkey"="611";"value"="24542"};
+{"key"="3059";"subkey"="611";"value"="24551"};
+{"key"="3060";"subkey"="612";"value"="24560"};
+{"key"="3061";"subkey"="612";"value"="24569"};
+{"key"="3062";"subkey"="612";"value"="24578"};
+{"key"="3063";"subkey"="612";"value"="24587"};
+{"key"="3064";"subkey"="612";"value"="24596"};
+{"key"="3065";"subkey"="613";"value"="24605"};
+{"key"="3066";"subkey"="613";"value"="24614"};
+{"key"="3067";"subkey"="613";"value"="24623"};
+{"key"="3068";"subkey"="613";"value"="24632"};
+{"key"="3069";"subkey"="613";"value"="24641"};
+{"key"="3070";"subkey"="614";"value"="24650"};
+{"key"="3071";"subkey"="614";"value"="24659"};
+{"key"="3072";"subkey"="614";"value"="24668"};
+{"key"="3073";"subkey"="614";"value"="24677"};
+{"key"="3074";"subkey"="614";"value"="24686"};
+{"key"="3075";"subkey"="615";"value"="24695"};
+{"key"="3076";"subkey"="615";"value"="24704"};
+{"key"="3077";"subkey"="615";"value"="24713"};
+{"key"="3078";"subkey"="615";"value"="24722"};
+{"key"="3079";"subkey"="615";"value"="24731"};
+{"key"="3080";"subkey"="616";"value"="24740"};
+{"key"="3081";"subkey"="616";"value"="24749"};
+{"key"="3082";"subkey"="616";"value"="24758"};
+{"key"="3083";"subkey"="616";"value"="24767"};
+{"key"="3084";"subkey"="616";"value"="24776"};
+{"key"="3085";"subkey"="617";"value"="24785"};
+{"key"="3086";"subkey"="617";"value"="24794"};
+{"key"="3087";"subkey"="617";"value"="24803"};
+{"key"="3088";"subkey"="617";"value"="24812"};
+{"key"="3089";"subkey"="617";"value"="24821"};
+{"key"="3090";"subkey"="618";"value"="24831"};
+{"key"="3091";"subkey"="618";"value"="24840"};
+{"key"="3092";"subkey"="618";"value"="24849"};
+{"key"="3093";"subkey"="618";"value"="24858"};
+{"key"="3094";"subkey"="618";"value"="24867"};
+{"key"="3095";"subkey"="619";"value"="24876"};
+{"key"="3096";"subkey"="619";"value"="24885"};
+{"key"="3097";"subkey"="619";"value"="24894"};
+{"key"="3098";"subkey"="619";"value"="24903"};
+{"key"="3099";"subkey"="619";"value"="24912"};
+{"key"="3100";"subkey"="620";"value"="24921"};
+{"key"="3101";"subkey"="620";"value"="24930"};
+{"key"="3102";"subkey"="620";"value"="24939"};
+{"key"="3103";"subkey"="620";"value"="24948"};
+{"key"="3104";"subkey"="620";"value"="24957"};
+{"key"="3105";"subkey"="621";"value"="24966"};
+{"key"="3106";"subkey"="621";"value"="24975"};
+{"key"="3107";"subkey"="621";"value"="24984"};
+{"key"="3108";"subkey"="621";"value"="24993"};
+{"key"="3109";"subkey"="621";"value"="25002"};
+{"key"="3110";"subkey"="622";"value"="25011"};
+{"key"="3111";"subkey"="622";"value"="25020"};
+{"key"="3112";"subkey"="622";"value"="25029"};
+{"key"="3113";"subkey"="622";"value"="25038"};
+{"key"="3114";"subkey"="622";"value"="25047"};
+{"key"="3115";"subkey"="623";"value"="25057"};
+{"key"="3116";"subkey"="623";"value"="25066"};
+{"key"="3117";"subkey"="623";"value"="25075"};
+{"key"="3118";"subkey"="623";"value"="25084"};
+{"key"="3119";"subkey"="623";"value"="25093"};
+{"key"="3120";"subkey"="624";"value"="25102"};
+{"key"="3121";"subkey"="624";"value"="25111"};
+{"key"="3122";"subkey"="624";"value"="25120"};
+{"key"="3123";"subkey"="624";"value"="25129"};
+{"key"="3124";"subkey"="624";"value"="25138"};
+{"key"="3125";"subkey"="625";"value"="25147"};
+{"key"="3126";"subkey"="625";"value"="25156"};
+{"key"="3127";"subkey"="625";"value"="25165"};
+{"key"="3128";"subkey"="625";"value"="25174"};
+{"key"="3129";"subkey"="625";"value"="25183"};
+{"key"="3130";"subkey"="626";"value"="25192"};
+{"key"="3131";"subkey"="626";"value"="25201"};
+{"key"="3132";"subkey"="626";"value"="25210"};
+{"key"="3133";"subkey"="626";"value"="25219"};
+{"key"="3134";"subkey"="626";"value"="25228"};
+{"key"="3135";"subkey"="627";"value"="25237"};
+{"key"="3136";"subkey"="627";"value"="25247"};
+{"key"="3137";"subkey"="627";"value"="25256"};
+{"key"="3138";"subkey"="627";"value"="25265"};
+{"key"="3139";"subkey"="627";"value"="25274"};
+{"key"="3140";"subkey"="628";"value"="25283"};
+{"key"="3141";"subkey"="628";"value"="25292"};
+{"key"="3142";"subkey"="628";"value"="25301"};
+{"key"="3143";"subkey"="628";"value"="25310"};
+{"key"="3144";"subkey"="628";"value"="25319"};
+{"key"="3145";"subkey"="629";"value"="25328"};
+{"key"="3146";"subkey"="629";"value"="25337"};
+{"key"="3147";"subkey"="629";"value"="25346"};
+{"key"="3148";"subkey"="629";"value"="25355"};
+{"key"="3149";"subkey"="629";"value"="25364"};
+{"key"="3150";"subkey"="630";"value"="25373"};
+{"key"="3151";"subkey"="630";"value"="25382"};
+{"key"="3152";"subkey"="630";"value"="25391"};
+{"key"="3153";"subkey"="630";"value"="25400"};
+{"key"="3154";"subkey"="630";"value"="25409"};
+{"key"="3155";"subkey"="631";"value"="25419"};
+{"key"="3156";"subkey"="631";"value"="25428"};
+{"key"="3157";"subkey"="631";"value"="25437"};
+{"key"="3158";"subkey"="631";"value"="25446"};
+{"key"="3159";"subkey"="631";"value"="25455"};
+{"key"="3160";"subkey"="632";"value"="25464"};
+{"key"="3161";"subkey"="632";"value"="25473"};
+{"key"="3162";"subkey"="632";"value"="25482"};
+{"key"="3163";"subkey"="632";"value"="25491"};
+{"key"="3164";"subkey"="632";"value"="25500"};
+{"key"="3165";"subkey"="633";"value"="25509"};
+{"key"="3166";"subkey"="633";"value"="25518"};
+{"key"="3167";"subkey"="633";"value"="25527"};
+{"key"="3168";"subkey"="633";"value"="25536"};
+{"key"="3169";"subkey"="633";"value"="25545"};
+{"key"="3170";"subkey"="634";"value"="25554"};
+{"key"="3171";"subkey"="634";"value"="25563"};
+{"key"="3172";"subkey"="634";"value"="25573"};
+{"key"="3173";"subkey"="634";"value"="25582"};
+{"key"="3174";"subkey"="634";"value"="25591"};
+{"key"="3175";"subkey"="635";"value"="25600"};
+{"key"="3176";"subkey"="635";"value"="25609"};
+{"key"="3177";"subkey"="635";"value"="25618"};
+{"key"="3178";"subkey"="635";"value"="25627"};
+{"key"="3179";"subkey"="635";"value"="25636"};
+{"key"="3180";"subkey"="636";"value"="25645"};
+{"key"="3181";"subkey"="636";"value"="25654"};
+{"key"="3182";"subkey"="636";"value"="25663"};
+{"key"="3183";"subkey"="636";"value"="25672"};
+{"key"="3184";"subkey"="636";"value"="25681"};
+{"key"="3185";"subkey"="637";"value"="25690"};
+{"key"="3186";"subkey"="637";"value"="25699"};
+{"key"="3187";"subkey"="637";"value"="25709"};
+{"key"="3188";"subkey"="637";"value"="25718"};
+{"key"="3189";"subkey"="637";"value"="25727"};
+{"key"="3190";"subkey"="638";"value"="25736"};
+{"key"="3191";"subkey"="638";"value"="25745"};
+{"key"="3192";"subkey"="638";"value"="25754"};
+{"key"="3193";"subkey"="638";"value"="25763"};
+{"key"="3194";"subkey"="638";"value"="25772"};
+{"key"="3195";"subkey"="639";"value"="25781"};
+{"key"="3196";"subkey"="639";"value"="25790"};
+{"key"="3197";"subkey"="639";"value"="25799"};
+{"key"="3198";"subkey"="639";"value"="25808"};
+{"key"="3199";"subkey"="639";"value"="25817"};
+{"key"="3200";"subkey"="640";"value"="25826"};
+{"key"="3201";"subkey"="640";"value"="25835"};
+{"key"="3202";"subkey"="640";"value"="25845"};
+{"key"="3203";"subkey"="640";"value"="25854"};
+{"key"="3204";"subkey"="640";"value"="25863"};
+{"key"="3205";"subkey"="641";"value"="25872"};
+{"key"="3206";"subkey"="641";"value"="25881"};
+{"key"="3207";"subkey"="641";"value"="25890"};
+{"key"="3208";"subkey"="641";"value"="25899"};
+{"key"="3209";"subkey"="641";"value"="25908"};
+{"key"="3210";"subkey"="642";"value"="25917"};
+{"key"="3211";"subkey"="642";"value"="25926"};
+{"key"="3212";"subkey"="642";"value"="25935"};
+{"key"="3213";"subkey"="642";"value"="25944"};
+{"key"="3214";"subkey"="642";"value"="25953"};
+{"key"="3215";"subkey"="643";"value"="25962"};
+{"key"="3216";"subkey"="643";"value"="25972"};
+{"key"="3217";"subkey"="643";"value"="25981"};
+{"key"="3218";"subkey"="643";"value"="25990"};
+{"key"="3219";"subkey"="643";"value"="25999"};
+{"key"="3220";"subkey"="644";"value"="26008"};
+{"key"="3221";"subkey"="644";"value"="26017"};
+{"key"="3222";"subkey"="644";"value"="26026"};
+{"key"="3223";"subkey"="644";"value"="26035"};
+{"key"="3224";"subkey"="644";"value"="26044"};
+{"key"="3225";"subkey"="645";"value"="26053"};
+{"key"="3226";"subkey"="645";"value"="26062"};
+{"key"="3227";"subkey"="645";"value"="26071"};
+{"key"="3228";"subkey"="645";"value"="26081"};
+{"key"="3229";"subkey"="645";"value"="26090"};
+{"key"="3230";"subkey"="646";"value"="26099"};
+{"key"="3231";"subkey"="646";"value"="26108"};
+{"key"="3232";"subkey"="646";"value"="26117"};
+{"key"="3233";"subkey"="646";"value"="26126"};
+{"key"="3234";"subkey"="646";"value"="26135"};
+{"key"="3235";"subkey"="647";"value"="26144"};
+{"key"="3236";"subkey"="647";"value"="26153"};
+{"key"="3237";"subkey"="647";"value"="26162"};
+{"key"="3238";"subkey"="647";"value"="26171"};
+{"key"="3239";"subkey"="647";"value"="26180"};
+{"key"="3240";"subkey"="648";"value"="26189"};
+{"key"="3241";"subkey"="648";"value"="26199"};
+{"key"="3242";"subkey"="648";"value"="26208"};
+{"key"="3243";"subkey"="648";"value"="26217"};
+{"key"="3244";"subkey"="648";"value"="26226"};
+{"key"="3245";"subkey"="649";"value"="26235"};
+{"key"="3246";"subkey"="649";"value"="26244"};
+{"key"="3247";"subkey"="649";"value"="26253"};
+{"key"="3248";"subkey"="649";"value"="26262"};
+{"key"="3249";"subkey"="649";"value"="26271"};
+{"key"="3250";"subkey"="650";"value"="26280"};
+{"key"="3251";"subkey"="650";"value"="26289"};
+{"key"="3252";"subkey"="650";"value"="26299"};
+{"key"="3253";"subkey"="650";"value"="26308"};
+{"key"="3254";"subkey"="650";"value"="26317"};
+{"key"="3255";"subkey"="651";"value"="26326"};
+{"key"="3256";"subkey"="651";"value"="26335"};
+{"key"="3257";"subkey"="651";"value"="26344"};
+{"key"="3258";"subkey"="651";"value"="26353"};
+{"key"="3259";"subkey"="651";"value"="26362"};
+{"key"="3260";"subkey"="652";"value"="26371"};
+{"key"="3261";"subkey"="652";"value"="26380"};
+{"key"="3262";"subkey"="652";"value"="26389"};
+{"key"="3263";"subkey"="652";"value"="26398"};
+{"key"="3264";"subkey"="652";"value"="26408"};
+{"key"="3265";"subkey"="653";"value"="26417"};
+{"key"="3266";"subkey"="653";"value"="26426"};
+{"key"="3267";"subkey"="653";"value"="26435"};
+{"key"="3268";"subkey"="653";"value"="26444"};
+{"key"="3269";"subkey"="653";"value"="26453"};
+{"key"="3270";"subkey"="654";"value"="26462"};
+{"key"="3271";"subkey"="654";"value"="26471"};
+{"key"="3272";"subkey"="654";"value"="26480"};
+{"key"="3273";"subkey"="654";"value"="26489"};
+{"key"="3274";"subkey"="654";"value"="26498"};
+{"key"="3275";"subkey"="655";"value"="26508"};
+{"key"="3276";"subkey"="655";"value"="26517"};
+{"key"="3277";"subkey"="655";"value"="26526"};
+{"key"="3278";"subkey"="655";"value"="26535"};
+{"key"="3279";"subkey"="655";"value"="26544"};
+{"key"="3280";"subkey"="656";"value"="26553"};
+{"key"="3281";"subkey"="656";"value"="26562"};
+{"key"="3282";"subkey"="656";"value"="26571"};
+{"key"="3283";"subkey"="656";"value"="26580"};
+{"key"="3284";"subkey"="656";"value"="26589"};
+{"key"="3285";"subkey"="657";"value"="26599"};
+{"key"="3286";"subkey"="657";"value"="26608"};
+{"key"="3287";"subkey"="657";"value"="26617"};
+{"key"="3288";"subkey"="657";"value"="26626"};
+{"key"="3289";"subkey"="657";"value"="26635"};
+{"key"="3290";"subkey"="658";"value"="26644"};
+{"key"="3291";"subkey"="658";"value"="26653"};
+{"key"="3292";"subkey"="658";"value"="26662"};
+{"key"="3293";"subkey"="658";"value"="26671"};
+{"key"="3294";"subkey"="658";"value"="26680"};
+{"key"="3295";"subkey"="659";"value"="26690"};
+{"key"="3296";"subkey"="659";"value"="26699"};
+{"key"="3297";"subkey"="659";"value"="26708"};
+{"key"="3298";"subkey"="659";"value"="26717"};
+{"key"="3299";"subkey"="659";"value"="26726"};
+{"key"="3300";"subkey"="660";"value"="26735"};
+{"key"="3301";"subkey"="660";"value"="26744"};
+{"key"="3302";"subkey"="660";"value"="26753"};
+{"key"="3303";"subkey"="660";"value"="26762"};
+{"key"="3304";"subkey"="660";"value"="26771"};
+{"key"="3305";"subkey"="661";"value"="26781"};
+{"key"="3306";"subkey"="661";"value"="26790"};
+{"key"="3307";"subkey"="661";"value"="26799"};
+{"key"="3308";"subkey"="661";"value"="26808"};
+{"key"="3309";"subkey"="661";"value"="26817"};
+{"key"="3310";"subkey"="662";"value"="26826"};
+{"key"="3311";"subkey"="662";"value"="26835"};
+{"key"="3312";"subkey"="662";"value"="26844"};
+{"key"="3313";"subkey"="662";"value"="26853"};
+{"key"="3314";"subkey"="662";"value"="26862"};
+{"key"="3315";"subkey"="663";"value"="26872"};
+{"key"="3316";"subkey"="663";"value"="26881"};
+{"key"="3317";"subkey"="663";"value"="26890"};
+{"key"="3318";"subkey"="663";"value"="26899"};
+{"key"="3319";"subkey"="663";"value"="26908"};
+{"key"="3320";"subkey"="664";"value"="26917"};
+{"key"="3321";"subkey"="664";"value"="26926"};
+{"key"="3322";"subkey"="664";"value"="26935"};
+{"key"="3323";"subkey"="664";"value"="26944"};
+{"key"="3324";"subkey"="664";"value"="26954"};
+{"key"="3325";"subkey"="665";"value"="26963"};
+{"key"="3326";"subkey"="665";"value"="26972"};
+{"key"="3327";"subkey"="665";"value"="26981"};
+{"key"="3328";"subkey"="665";"value"="26990"};
+{"key"="3329";"subkey"="665";"value"="26999"};
+{"key"="3330";"subkey"="666";"value"="27008"};
+{"key"="3331";"subkey"="666";"value"="27017"};
+{"key"="3332";"subkey"="666";"value"="27026"};
+{"key"="3333";"subkey"="666";"value"="27036"};
+{"key"="3334";"subkey"="666";"value"="27045"};
+{"key"="3335";"subkey"="667";"value"="27054"};
+{"key"="3336";"subkey"="667";"value"="27063"};
+{"key"="3337";"subkey"="667";"value"="27072"};
+{"key"="3338";"subkey"="667";"value"="27081"};
+{"key"="3339";"subkey"="667";"value"="27090"};
+{"key"="3340";"subkey"="668";"value"="27099"};
+{"key"="3341";"subkey"="668";"value"="27108"};
+{"key"="3342";"subkey"="668";"value"="27118"};
+{"key"="3343";"subkey"="668";"value"="27127"};
+{"key"="3344";"subkey"="668";"value"="27136"};
+{"key"="3345";"subkey"="669";"value"="27145"};
+{"key"="3346";"subkey"="669";"value"="27154"};
+{"key"="3347";"subkey"="669";"value"="27163"};
+{"key"="3348";"subkey"="669";"value"="27172"};
+{"key"="3349";"subkey"="669";"value"="27181"};
+{"key"="3350";"subkey"="670";"value"="27190"};
+{"key"="3351";"subkey"="670";"value"="27200"};
+{"key"="3352";"subkey"="670";"value"="27209"};
+{"key"="3353";"subkey"="670";"value"="27218"};
+{"key"="3354";"subkey"="670";"value"="27227"};
+{"key"="3355";"subkey"="671";"value"="27236"};
+{"key"="3356";"subkey"="671";"value"="27245"};
+{"key"="3357";"subkey"="671";"value"="27254"};
+{"key"="3358";"subkey"="671";"value"="27263"};
+{"key"="3359";"subkey"="671";"value"="27273"};
+{"key"="3360";"subkey"="672";"value"="27282"};
+{"key"="3361";"subkey"="672";"value"="27291"};
+{"key"="3362";"subkey"="672";"value"="27300"};
+{"key"="3363";"subkey"="672";"value"="27309"};
+{"key"="3364";"subkey"="672";"value"="27318"};
+{"key"="3365";"subkey"="673";"value"="27327"};
+{"key"="3366";"subkey"="673";"value"="27336"};
+{"key"="3367";"subkey"="673";"value"="27346"};
+{"key"="3368";"subkey"="673";"value"="27355"};
+{"key"="3369";"subkey"="673";"value"="27364"};
+{"key"="3370";"subkey"="674";"value"="27373"};
+{"key"="3371";"subkey"="674";"value"="27382"};
+{"key"="3372";"subkey"="674";"value"="27391"};
+{"key"="3373";"subkey"="674";"value"="27400"};
+{"key"="3374";"subkey"="674";"value"="27409"};
+{"key"="3375";"subkey"="675";"value"="27419"};
+{"key"="3376";"subkey"="675";"value"="27428"};
+{"key"="3377";"subkey"="675";"value"="27437"};
+{"key"="3378";"subkey"="675";"value"="27446"};
+{"key"="3379";"subkey"="675";"value"="27455"};
+{"key"="3380";"subkey"="676";"value"="27464"};
+{"key"="3381";"subkey"="676";"value"="27473"};
+{"key"="3382";"subkey"="676";"value"="27482"};
+{"key"="3383";"subkey"="676";"value"="27492"};
+{"key"="3384";"subkey"="676";"value"="27501"};
+{"key"="3385";"subkey"="677";"value"="27510"};
+{"key"="3386";"subkey"="677";"value"="27519"};
+{"key"="3387";"subkey"="677";"value"="27528"};
+{"key"="3388";"subkey"="677";"value"="27537"};
+{"key"="3389";"subkey"="677";"value"="27546"};
+{"key"="3390";"subkey"="678";"value"="27555"};
+{"key"="3391";"subkey"="678";"value"="27565"};
+{"key"="3392";"subkey"="678";"value"="27574"};
+{"key"="3393";"subkey"="678";"value"="27583"};
+{"key"="3394";"subkey"="678";"value"="27592"};
+{"key"="3395";"subkey"="679";"value"="27601"};
+{"key"="3396";"subkey"="679";"value"="27610"};
+{"key"="3397";"subkey"="679";"value"="27619"};
+{"key"="3398";"subkey"="679";"value"="27628"};
+{"key"="3399";"subkey"="679";"value"="27638"};
+{"key"="3400";"subkey"="680";"value"="27647"};
+{"key"="3401";"subkey"="680";"value"="27656"};
+{"key"="3402";"subkey"="680";"value"="27665"};
+{"key"="3403";"subkey"="680";"value"="27674"};
+{"key"="3404";"subkey"="680";"value"="27683"};
+{"key"="3405";"subkey"="681";"value"="27692"};
+{"key"="3406";"subkey"="681";"value"="27701"};
+{"key"="3407";"subkey"="681";"value"="27711"};
+{"key"="3408";"subkey"="681";"value"="27720"};
+{"key"="3409";"subkey"="681";"value"="27729"};
+{"key"="3410";"subkey"="682";"value"="27738"};
+{"key"="3411";"subkey"="682";"value"="27747"};
+{"key"="3412";"subkey"="682";"value"="27756"};
+{"key"="3413";"subkey"="682";"value"="27765"};
+{"key"="3414";"subkey"="682";"value"="27775"};
+{"key"="3415";"subkey"="683";"value"="27784"};
+{"key"="3416";"subkey"="683";"value"="27793"};
+{"key"="3417";"subkey"="683";"value"="27802"};
+{"key"="3418";"subkey"="683";"value"="27811"};
+{"key"="3419";"subkey"="683";"value"="27820"};
+{"key"="3420";"subkey"="684";"value"="27829"};
+{"key"="3421";"subkey"="684";"value"="27839"};
+{"key"="3422";"subkey"="684";"value"="27848"};
+{"key"="3423";"subkey"="684";"value"="27857"};
+{"key"="3424";"subkey"="684";"value"="27866"};
+{"key"="3425";"subkey"="685";"value"="27875"};
+{"key"="3426";"subkey"="685";"value"="27884"};
+{"key"="3427";"subkey"="685";"value"="27893"};
+{"key"="3428";"subkey"="685";"value"="27903"};
+{"key"="3429";"subkey"="685";"value"="27912"};
+{"key"="3430";"subkey"="686";"value"="27921"};
+{"key"="3431";"subkey"="686";"value"="27930"};
+{"key"="3432";"subkey"="686";"value"="27939"};
+{"key"="3433";"subkey"="686";"value"="27948"};
+{"key"="3434";"subkey"="686";"value"="27957"};
+{"key"="3435";"subkey"="687";"value"="27966"};
+{"key"="3436";"subkey"="687";"value"="27976"};
+{"key"="3437";"subkey"="687";"value"="27985"};
+{"key"="3438";"subkey"="687";"value"="27994"};
+{"key"="3439";"subkey"="687";"value"="28003"};
+{"key"="3440";"subkey"="688";"value"="28012"};
+{"key"="3441";"subkey"="688";"value"="28021"};
+{"key"="3442";"subkey"="688";"value"="28030"};
+{"key"="3443";"subkey"="688";"value"="28040"};
+{"key"="3444";"subkey"="688";"value"="28049"};
+{"key"="3445";"subkey"="689";"value"="28058"};
+{"key"="3446";"subkey"="689";"value"="28067"};
+{"key"="3447";"subkey"="689";"value"="28076"};
+{"key"="3448";"subkey"="689";"value"="28085"};
+{"key"="3449";"subkey"="689";"value"="28095"};
+{"key"="3450";"subkey"="690";"value"="28104"};
+{"key"="3451";"subkey"="690";"value"="28113"};
+{"key"="3452";"subkey"="690";"value"="28122"};
+{"key"="3453";"subkey"="690";"value"="28131"};
+{"key"="3454";"subkey"="690";"value"="28140"};
+{"key"="3455";"subkey"="691";"value"="28149"};
+{"key"="3456";"subkey"="691";"value"="28159"};
+{"key"="3457";"subkey"="691";"value"="28168"};
+{"key"="3458";"subkey"="691";"value"="28177"};
+{"key"="3459";"subkey"="691";"value"="28186"};
+{"key"="3460";"subkey"="692";"value"="28195"};
+{"key"="3461";"subkey"="692";"value"="28204"};
+{"key"="3462";"subkey"="692";"value"="28213"};
+{"key"="3463";"subkey"="692";"value"="28223"};
+{"key"="3464";"subkey"="692";"value"="28232"};
+{"key"="3465";"subkey"="693";"value"="28241"};
+{"key"="3466";"subkey"="693";"value"="28250"};
+{"key"="3467";"subkey"="693";"value"="28259"};
+{"key"="3468";"subkey"="693";"value"="28268"};
+{"key"="3469";"subkey"="693";"value"="28277"};
+{"key"="3470";"subkey"="694";"value"="28287"};
+{"key"="3471";"subkey"="694";"value"="28296"};
+{"key"="3472";"subkey"="694";"value"="28305"};
+{"key"="3473";"subkey"="694";"value"="28314"};
+{"key"="3474";"subkey"="694";"value"="28323"};
+{"key"="3475";"subkey"="695";"value"="28332"};
+{"key"="3476";"subkey"="695";"value"="28342"};
+{"key"="3477";"subkey"="695";"value"="28351"};
+{"key"="3478";"subkey"="695";"value"="28360"};
+{"key"="3479";"subkey"="695";"value"="28369"};
+{"key"="3480";"subkey"="696";"value"="28378"};
+{"key"="3481";"subkey"="696";"value"="28387"};
+{"key"="3482";"subkey"="696";"value"="28396"};
+{"key"="3483";"subkey"="696";"value"="28406"};
+{"key"="3484";"subkey"="696";"value"="28415"};
+{"key"="3485";"subkey"="697";"value"="28424"};
+{"key"="3486";"subkey"="697";"value"="28433"};
+{"key"="3487";"subkey"="697";"value"="28442"};
+{"key"="3488";"subkey"="697";"value"="28451"};
+{"key"="3489";"subkey"="697";"value"="28461"};
+{"key"="3490";"subkey"="698";"value"="28470"};
+{"key"="3491";"subkey"="698";"value"="28479"};
+{"key"="3492";"subkey"="698";"value"="28488"};
+{"key"="3493";"subkey"="698";"value"="28497"};
+{"key"="3494";"subkey"="698";"value"="28506"};
+{"key"="3495";"subkey"="699";"value"="28516"};
+{"key"="3496";"subkey"="699";"value"="28525"};
+{"key"="3497";"subkey"="699";"value"="28534"};
+{"key"="3498";"subkey"="699";"value"="28543"};
+{"key"="3499";"subkey"="699";"value"="28552"};
+{"key"="3500";"subkey"="700";"value"="28561"};
+{"key"="3501";"subkey"="700";"value"="28570"};
+{"key"="3502";"subkey"="700";"value"="28580"};
+{"key"="3503";"subkey"="700";"value"="28589"};
+{"key"="3504";"subkey"="700";"value"="28598"};
+{"key"="3505";"subkey"="701";"value"="28607"};
+{"key"="3506";"subkey"="701";"value"="28616"};
+{"key"="3507";"subkey"="701";"value"="28625"};
+{"key"="3508";"subkey"="701";"value"="28635"};
+{"key"="3509";"subkey"="701";"value"="28644"};
+{"key"="3510";"subkey"="702";"value"="28653"};
+{"key"="3511";"subkey"="702";"value"="28662"};
+{"key"="3512";"subkey"="702";"value"="28671"};
+{"key"="3513";"subkey"="702";"value"="28680"};
+{"key"="3514";"subkey"="702";"value"="28690"};
+{"key"="3515";"subkey"="703";"value"="28699"};
+{"key"="3516";"subkey"="703";"value"="28708"};
+{"key"="3517";"subkey"="703";"value"="28717"};
+{"key"="3518";"subkey"="703";"value"="28726"};
+{"key"="3519";"subkey"="703";"value"="28735"};
+{"key"="3520";"subkey"="704";"value"="28745"};
+{"key"="3521";"subkey"="704";"value"="28754"};
+{"key"="3522";"subkey"="704";"value"="28763"};
+{"key"="3523";"subkey"="704";"value"="28772"};
+{"key"="3524";"subkey"="704";"value"="28781"};
+{"key"="3525";"subkey"="705";"value"="28790"};
+{"key"="3526";"subkey"="705";"value"="28800"};
+{"key"="3527";"subkey"="705";"value"="28809"};
+{"key"="3528";"subkey"="705";"value"="28818"};
+{"key"="3529";"subkey"="705";"value"="28827"};
+{"key"="3530";"subkey"="706";"value"="28836"};
+{"key"="3531";"subkey"="706";"value"="28845"};
+{"key"="3532";"subkey"="706";"value"="28855"};
+{"key"="3533";"subkey"="706";"value"="28864"};
+{"key"="3534";"subkey"="706";"value"="28873"};
+{"key"="3535";"subkey"="707";"value"="28882"};
+{"key"="3536";"subkey"="707";"value"="28891"};
+{"key"="3537";"subkey"="707";"value"="28900"};
+{"key"="3538";"subkey"="707";"value"="28910"};
+{"key"="3539";"subkey"="707";"value"="28919"};
+{"key"="3540";"subkey"="708";"value"="28928"};
+{"key"="3541";"subkey"="708";"value"="28937"};
+{"key"="3542";"subkey"="708";"value"="28946"};
+{"key"="3543";"subkey"="708";"value"="28955"};
+{"key"="3544";"subkey"="708";"value"="28965"};
+{"key"="3545";"subkey"="709";"value"="28974"};
+{"key"="3546";"subkey"="709";"value"="28983"};
+{"key"="3547";"subkey"="709";"value"="28992"};
+{"key"="3548";"subkey"="709";"value"="29001"};
+{"key"="3549";"subkey"="709";"value"="29011"};
+{"key"="3550";"subkey"="710";"value"="29020"};
+{"key"="3551";"subkey"="710";"value"="29029"};
+{"key"="3552";"subkey"="710";"value"="29038"};
+{"key"="3553";"subkey"="710";"value"="29047"};
+{"key"="3554";"subkey"="710";"value"="29056"};
+{"key"="3555";"subkey"="711";"value"="29066"};
+{"key"="3556";"subkey"="711";"value"="29075"};
+{"key"="3557";"subkey"="711";"value"="29084"};
+{"key"="3558";"subkey"="711";"value"="29093"};
+{"key"="3559";"subkey"="711";"value"="29102"};
+{"key"="3560";"subkey"="712";"value"="29111"};
+{"key"="3561";"subkey"="712";"value"="29121"};
+{"key"="3562";"subkey"="712";"value"="29130"};
+{"key"="3563";"subkey"="712";"value"="29139"};
+{"key"="3564";"subkey"="712";"value"="29148"};
+{"key"="3565";"subkey"="713";"value"="29157"};
+{"key"="3566";"subkey"="713";"value"="29167"};
+{"key"="3567";"subkey"="713";"value"="29176"};
+{"key"="3568";"subkey"="713";"value"="29185"};
+{"key"="3569";"subkey"="713";"value"="29194"};
+{"key"="3570";"subkey"="714";"value"="29203"};
+{"key"="3571";"subkey"="714";"value"="29212"};
+{"key"="3572";"subkey"="714";"value"="29222"};
+{"key"="3573";"subkey"="714";"value"="29231"};
+{"key"="3574";"subkey"="714";"value"="29240"};
+{"key"="3575";"subkey"="715";"value"="29249"};
+{"key"="3576";"subkey"="715";"value"="29258"};
+{"key"="3577";"subkey"="715";"value"="29268"};
+{"key"="3578";"subkey"="715";"value"="29277"};
+{"key"="3579";"subkey"="715";"value"="29286"};
+{"key"="3580";"subkey"="716";"value"="29295"};
+{"key"="3581";"subkey"="716";"value"="29304"};
+{"key"="3582";"subkey"="716";"value"="29313"};
+{"key"="3583";"subkey"="716";"value"="29323"};
+{"key"="3584";"subkey"="716";"value"="29332"};
+{"key"="3585";"subkey"="717";"value"="29341"};
+{"key"="3586";"subkey"="717";"value"="29350"};
+{"key"="3587";"subkey"="717";"value"="29359"};
+{"key"="3588";"subkey"="717";"value"="29369"};
+{"key"="3589";"subkey"="717";"value"="29378"};
+{"key"="3590";"subkey"="718";"value"="29387"};
+{"key"="3591";"subkey"="718";"value"="29396"};
+{"key"="3592";"subkey"="718";"value"="29405"};
+{"key"="3593";"subkey"="718";"value"="29414"};
+{"key"="3594";"subkey"="718";"value"="29424"};
+{"key"="3595";"subkey"="719";"value"="29433"};
+{"key"="3596";"subkey"="719";"value"="29442"};
+{"key"="3597";"subkey"="719";"value"="29451"};
+{"key"="3598";"subkey"="719";"value"="29460"};
+{"key"="3599";"subkey"="719";"value"="29470"};
+{"key"="3600";"subkey"="720";"value"="29479"};
+{"key"="3601";"subkey"="720";"value"="29488"};
+{"key"="3602";"subkey"="720";"value"="29497"};
+{"key"="3603";"subkey"="720";"value"="29506"};
+{"key"="3604";"subkey"="720";"value"="29516"};
+{"key"="3605";"subkey"="721";"value"="29525"};
+{"key"="3606";"subkey"="721";"value"="29534"};
+{"key"="3607";"subkey"="721";"value"="29543"};
+{"key"="3608";"subkey"="721";"value"="29552"};
+{"key"="3609";"subkey"="721";"value"="29561"};
+{"key"="3610";"subkey"="722";"value"="29571"};
+{"key"="3611";"subkey"="722";"value"="29580"};
+{"key"="3612";"subkey"="722";"value"="29589"};
+{"key"="3613";"subkey"="722";"value"="29598"};
+{"key"="3614";"subkey"="722";"value"="29607"};
+{"key"="3615";"subkey"="723";"value"="29617"};
+{"key"="3616";"subkey"="723";"value"="29626"};
+{"key"="3617";"subkey"="723";"value"="29635"};
+{"key"="3618";"subkey"="723";"value"="29644"};
+{"key"="3619";"subkey"="723";"value"="29653"};
+{"key"="3620";"subkey"="724";"value"="29663"};
+{"key"="3621";"subkey"="724";"value"="29672"};
+{"key"="3622";"subkey"="724";"value"="29681"};
+{"key"="3623";"subkey"="724";"value"="29690"};
+{"key"="3624";"subkey"="724";"value"="29699"};
+{"key"="3625";"subkey"="725";"value"="29709"};
+{"key"="3626";"subkey"="725";"value"="29718"};
+{"key"="3627";"subkey"="725";"value"="29727"};
+{"key"="3628";"subkey"="725";"value"="29736"};
+{"key"="3629";"subkey"="725";"value"="29745"};
+{"key"="3630";"subkey"="726";"value"="29755"};
+{"key"="3631";"subkey"="726";"value"="29764"};
+{"key"="3632";"subkey"="726";"value"="29773"};
+{"key"="3633";"subkey"="726";"value"="29782"};
+{"key"="3634";"subkey"="726";"value"="29791"};
+{"key"="3635";"subkey"="727";"value"="29801"};
+{"key"="3636";"subkey"="727";"value"="29810"};
+{"key"="3637";"subkey"="727";"value"="29819"};
+{"key"="3638";"subkey"="727";"value"="29828"};
+{"key"="3639";"subkey"="727";"value"="29837"};
+{"key"="3640";"subkey"="728";"value"="29847"};
+{"key"="3641";"subkey"="728";"value"="29856"};
+{"key"="3642";"subkey"="728";"value"="29865"};
+{"key"="3643";"subkey"="728";"value"="29874"};
+{"key"="3644";"subkey"="728";"value"="29883"};
+{"key"="3645";"subkey"="729";"value"="29893"};
+{"key"="3646";"subkey"="729";"value"="29902"};
+{"key"="3647";"subkey"="729";"value"="29911"};
+{"key"="3648";"subkey"="729";"value"="29920"};
+{"key"="3649";"subkey"="729";"value"="29929"};
+{"key"="3650";"subkey"="730";"value"="29939"};
+{"key"="3651";"subkey"="730";"value"="29948"};
+{"key"="3652";"subkey"="730";"value"="29957"};
+{"key"="3653";"subkey"="730";"value"="29966"};
+{"key"="3654";"subkey"="730";"value"="29975"};
+{"key"="3655";"subkey"="731";"value"="29985"};
+{"key"="3656";"subkey"="731";"value"="29994"};
+{"key"="3657";"subkey"="731";"value"="30003"};
+{"key"="3658";"subkey"="731";"value"="30012"};
+{"key"="3659";"subkey"="731";"value"="30021"};
+{"key"="3660";"subkey"="732";"value"="30031"};
+{"key"="3661";"subkey"="732";"value"="30040"};
+{"key"="3662";"subkey"="732";"value"="30049"};
+{"key"="3663";"subkey"="732";"value"="30058"};
+{"key"="3664";"subkey"="732";"value"="30067"};
+{"key"="3665";"subkey"="733";"value"="30077"};
+{"key"="3666";"subkey"="733";"value"="30086"};
+{"key"="3667";"subkey"="733";"value"="30095"};
+{"key"="3668";"subkey"="733";"value"="30104"};
+{"key"="3669";"subkey"="733";"value"="30113"};
+{"key"="3670";"subkey"="734";"value"="30123"};
+{"key"="3671";"subkey"="734";"value"="30132"};
+{"key"="3672";"subkey"="734";"value"="30141"};
+{"key"="3673";"subkey"="734";"value"="30150"};
+{"key"="3674";"subkey"="734";"value"="30159"};
+{"key"="3675";"subkey"="735";"value"="30169"};
+{"key"="3676";"subkey"="735";"value"="30178"};
+{"key"="3677";"subkey"="735";"value"="30187"};
+{"key"="3678";"subkey"="735";"value"="30196"};
+{"key"="3679";"subkey"="735";"value"="30206"};
+{"key"="3680";"subkey"="736";"value"="30215"};
+{"key"="3681";"subkey"="736";"value"="30224"};
+{"key"="3682";"subkey"="736";"value"="30233"};
+{"key"="3683";"subkey"="736";"value"="30242"};
+{"key"="3684";"subkey"="736";"value"="30252"};
+{"key"="3685";"subkey"="737";"value"="30261"};
+{"key"="3686";"subkey"="737";"value"="30270"};
+{"key"="3687";"subkey"="737";"value"="30279"};
+{"key"="3688";"subkey"="737";"value"="30288"};
+{"key"="3689";"subkey"="737";"value"="30298"};
+{"key"="3690";"subkey"="738";"value"="30307"};
+{"key"="3691";"subkey"="738";"value"="30316"};
+{"key"="3692";"subkey"="738";"value"="30325"};
+{"key"="3693";"subkey"="738";"value"="30335"};
+{"key"="3694";"subkey"="738";"value"="30344"};
+{"key"="3695";"subkey"="739";"value"="30353"};
+{"key"="3696";"subkey"="739";"value"="30362"};
+{"key"="3697";"subkey"="739";"value"="30371"};
+{"key"="3698";"subkey"="739";"value"="30381"};
+{"key"="3699";"subkey"="739";"value"="30390"};
+{"key"="3700";"subkey"="740";"value"="30399"};
+{"key"="3701";"subkey"="740";"value"="30408"};
+{"key"="3702";"subkey"="740";"value"="30417"};
+{"key"="3703";"subkey"="740";"value"="30427"};
+{"key"="3704";"subkey"="740";"value"="30436"};
+{"key"="3705";"subkey"="741";"value"="30445"};
+{"key"="3706";"subkey"="741";"value"="30454"};
+{"key"="3707";"subkey"="741";"value"="30464"};
+{"key"="3708";"subkey"="741";"value"="30473"};
+{"key"="3709";"subkey"="741";"value"="30482"};
+{"key"="3710";"subkey"="742";"value"="30491"};
+{"key"="3711";"subkey"="742";"value"="30500"};
+{"key"="3712";"subkey"="742";"value"="30510"};
+{"key"="3713";"subkey"="742";"value"="30519"};
+{"key"="3714";"subkey"="742";"value"="30528"};
+{"key"="3715";"subkey"="743";"value"="30537"};
+{"key"="3716";"subkey"="743";"value"="30547"};
+{"key"="3717";"subkey"="743";"value"="30556"};
+{"key"="3718";"subkey"="743";"value"="30565"};
+{"key"="3719";"subkey"="743";"value"="30574"};
+{"key"="3720";"subkey"="744";"value"="30583"};
+{"key"="3721";"subkey"="744";"value"="30593"};
+{"key"="3722";"subkey"="744";"value"="30602"};
+{"key"="3723";"subkey"="744";"value"="30611"};
+{"key"="3724";"subkey"="744";"value"="30620"};
+{"key"="3725";"subkey"="745";"value"="30630"};
+{"key"="3726";"subkey"="745";"value"="30639"};
+{"key"="3727";"subkey"="745";"value"="30648"};
+{"key"="3728";"subkey"="745";"value"="30657"};
+{"key"="3729";"subkey"="745";"value"="30666"};
+{"key"="3730";"subkey"="746";"value"="30676"};
+{"key"="3731";"subkey"="746";"value"="30685"};
+{"key"="3732";"subkey"="746";"value"="30694"};
+{"key"="3733";"subkey"="746";"value"="30703"};
+{"key"="3734";"subkey"="746";"value"="30713"};
+{"key"="3735";"subkey"="747";"value"="30722"};
+{"key"="3736";"subkey"="747";"value"="30731"};
+{"key"="3737";"subkey"="747";"value"="30740"};
+{"key"="3738";"subkey"="747";"value"="30749"};
+{"key"="3739";"subkey"="747";"value"="30759"};
+{"key"="3740";"subkey"="748";"value"="30768"};
+{"key"="3741";"subkey"="748";"value"="30777"};
+{"key"="3742";"subkey"="748";"value"="30786"};
+{"key"="3743";"subkey"="748";"value"="30796"};
+{"key"="3744";"subkey"="748";"value"="30805"};
+{"key"="3745";"subkey"="749";"value"="30814"};
+{"key"="3746";"subkey"="749";"value"="30823"};
+{"key"="3747";"subkey"="749";"value"="30832"};
+{"key"="3748";"subkey"="749";"value"="30842"};
+{"key"="3749";"subkey"="749";"value"="30851"};
+{"key"="3750";"subkey"="750";"value"="30860"};
+{"key"="3751";"subkey"="750";"value"="30869"};
+{"key"="3752";"subkey"="750";"value"="30879"};
+{"key"="3753";"subkey"="750";"value"="30888"};
+{"key"="3754";"subkey"="750";"value"="30897"};
+{"key"="3755";"subkey"="751";"value"="30906"};
+{"key"="3756";"subkey"="751";"value"="30916"};
+{"key"="3757";"subkey"="751";"value"="30925"};
+{"key"="3758";"subkey"="751";"value"="30934"};
+{"key"="3759";"subkey"="751";"value"="30943"};
+{"key"="3760";"subkey"="752";"value"="30952"};
+{"key"="3761";"subkey"="752";"value"="30962"};
+{"key"="3762";"subkey"="752";"value"="30971"};
+{"key"="3763";"subkey"="752";"value"="30980"};
+{"key"="3764";"subkey"="752";"value"="30989"};
+{"key"="3765";"subkey"="753";"value"="30999"};
+{"key"="3766";"subkey"="753";"value"="31008"};
+{"key"="3767";"subkey"="753";"value"="31017"};
+{"key"="3768";"subkey"="753";"value"="31026"};
+{"key"="3769";"subkey"="753";"value"="31036"};
+{"key"="3770";"subkey"="754";"value"="31045"};
+{"key"="3771";"subkey"="754";"value"="31054"};
+{"key"="3772";"subkey"="754";"value"="31063"};
+{"key"="3773";"subkey"="754";"value"="31073"};
+{"key"="3774";"subkey"="754";"value"="31082"};
+{"key"="3775";"subkey"="755";"value"="31091"};
+{"key"="3776";"subkey"="755";"value"="31100"};
+{"key"="3777";"subkey"="755";"value"="31109"};
+{"key"="3778";"subkey"="755";"value"="31119"};
+{"key"="3779";"subkey"="755";"value"="31128"};
+{"key"="3780";"subkey"="756";"value"="31137"};
+{"key"="3781";"subkey"="756";"value"="31146"};
+{"key"="3782";"subkey"="756";"value"="31156"};
+{"key"="3783";"subkey"="756";"value"="31165"};
+{"key"="3784";"subkey"="756";"value"="31174"};
+{"key"="3785";"subkey"="757";"value"="31183"};
+{"key"="3786";"subkey"="757";"value"="31193"};
+{"key"="3787";"subkey"="757";"value"="31202"};
+{"key"="3788";"subkey"="757";"value"="31211"};
+{"key"="3789";"subkey"="757";"value"="31220"};
+{"key"="3790";"subkey"="758";"value"="31230"};
+{"key"="3791";"subkey"="758";"value"="31239"};
+{"key"="3792";"subkey"="758";"value"="31248"};
+{"key"="3793";"subkey"="758";"value"="31257"};
+{"key"="3794";"subkey"="758";"value"="31267"};
+{"key"="3795";"subkey"="759";"value"="31276"};
+{"key"="3796";"subkey"="759";"value"="31285"};
+{"key"="3797";"subkey"="759";"value"="31294"};
+{"key"="3798";"subkey"="759";"value"="31303"};
+{"key"="3799";"subkey"="759";"value"="31313"};
+{"key"="3800";"subkey"="760";"value"="31322"};
+{"key"="3801";"subkey"="760";"value"="31331"};
+{"key"="3802";"subkey"="760";"value"="31340"};
+{"key"="3803";"subkey"="760";"value"="31350"};
+{"key"="3804";"subkey"="760";"value"="31359"};
+{"key"="3805";"subkey"="761";"value"="31368"};
+{"key"="3806";"subkey"="761";"value"="31377"};
+{"key"="3807";"subkey"="761";"value"="31387"};
+{"key"="3808";"subkey"="761";"value"="31396"};
+{"key"="3809";"subkey"="761";"value"="31405"};
+{"key"="3810";"subkey"="762";"value"="31414"};
+{"key"="3811";"subkey"="762";"value"="31424"};
+{"key"="3812";"subkey"="762";"value"="31433"};
+{"key"="3813";"subkey"="762";"value"="31442"};
+{"key"="3814";"subkey"="762";"value"="31451"};
+{"key"="3815";"subkey"="763";"value"="31461"};
+{"key"="3816";"subkey"="763";"value"="31470"};
+{"key"="3817";"subkey"="763";"value"="31479"};
+{"key"="3818";"subkey"="763";"value"="31488"};
+{"key"="3819";"subkey"="763";"value"="31498"};
+{"key"="3820";"subkey"="764";"value"="31507"};
+{"key"="3821";"subkey"="764";"value"="31516"};
+{"key"="3822";"subkey"="764";"value"="31525"};
+{"key"="3823";"subkey"="764";"value"="31535"};
+{"key"="3824";"subkey"="764";"value"="31544"};
+{"key"="3825";"subkey"="765";"value"="31553"};
+{"key"="3826";"subkey"="765";"value"="31562"};
+{"key"="3827";"subkey"="765";"value"="31572"};
+{"key"="3828";"subkey"="765";"value"="31581"};
+{"key"="3829";"subkey"="765";"value"="31590"};
+{"key"="3830";"subkey"="766";"value"="31599"};
+{"key"="3831";"subkey"="766";"value"="31609"};
+{"key"="3832";"subkey"="766";"value"="31618"};
+{"key"="3833";"subkey"="766";"value"="31627"};
+{"key"="3834";"subkey"="766";"value"="31636"};
+{"key"="3835";"subkey"="767";"value"="31646"};
+{"key"="3836";"subkey"="767";"value"="31655"};
+{"key"="3837";"subkey"="767";"value"="31664"};
+{"key"="3838";"subkey"="767";"value"="31673"};
+{"key"="3839";"subkey"="767";"value"="31683"};
+{"key"="3840";"subkey"="768";"value"="31692"};
+{"key"="3841";"subkey"="768";"value"="31701"};
+{"key"="3842";"subkey"="768";"value"="31710"};
+{"key"="3843";"subkey"="768";"value"="31720"};
+{"key"="3844";"subkey"="768";"value"="31729"};
+{"key"="3845";"subkey"="769";"value"="31738"};
+{"key"="3846";"subkey"="769";"value"="31747"};
+{"key"="3847";"subkey"="769";"value"="31757"};
+{"key"="3848";"subkey"="769";"value"="31766"};
+{"key"="3849";"subkey"="769";"value"="31775"};
+{"key"="3850";"subkey"="770";"value"="31784"};
+{"key"="3851";"subkey"="770";"value"="31794"};
+{"key"="3852";"subkey"="770";"value"="31803"};
+{"key"="3853";"subkey"="770";"value"="31812"};
+{"key"="3854";"subkey"="770";"value"="31821"};
+{"key"="3855";"subkey"="771";"value"="31831"};
+{"key"="3856";"subkey"="771";"value"="31840"};
+{"key"="3857";"subkey"="771";"value"="31849"};
+{"key"="3858";"subkey"="771";"value"="31858"};
+{"key"="3859";"subkey"="771";"value"="31868"};
+{"key"="3860";"subkey"="772";"value"="31877"};
+{"key"="3861";"subkey"="772";"value"="31886"};
+{"key"="3862";"subkey"="772";"value"="31896"};
+{"key"="3863";"subkey"="772";"value"="31905"};
+{"key"="3864";"subkey"="772";"value"="31914"};
+{"key"="3865";"subkey"="773";"value"="31923"};
+{"key"="3866";"subkey"="773";"value"="31933"};
+{"key"="3867";"subkey"="773";"value"="31942"};
+{"key"="3868";"subkey"="773";"value"="31951"};
+{"key"="3869";"subkey"="773";"value"="31960"};
+{"key"="3870";"subkey"="774";"value"="31970"};
+{"key"="3871";"subkey"="774";"value"="31979"};
+{"key"="3872";"subkey"="774";"value"="31988"};
+{"key"="3873";"subkey"="774";"value"="31997"};
+{"key"="3874";"subkey"="774";"value"="32007"};
+{"key"="3875";"subkey"="775";"value"="32016"};
+{"key"="3876";"subkey"="775";"value"="32025"};
+{"key"="3877";"subkey"="775";"value"="32034"};
+{"key"="3878";"subkey"="775";"value"="32044"};
+{"key"="3879";"subkey"="775";"value"="32053"};
+{"key"="3880";"subkey"="776";"value"="32062"};
+{"key"="3881";"subkey"="776";"value"="32071"};
+{"key"="3882";"subkey"="776";"value"="32081"};
+{"key"="3883";"subkey"="776";"value"="32090"};
+{"key"="3884";"subkey"="776";"value"="32099"};
+{"key"="3885";"subkey"="777";"value"="32109"};
+{"key"="3886";"subkey"="777";"value"="32118"};
+{"key"="3887";"subkey"="777";"value"="32127"};
+{"key"="3888";"subkey"="777";"value"="32136"};
+{"key"="3889";"subkey"="777";"value"="32146"};
+{"key"="3890";"subkey"="778";"value"="32155"};
+{"key"="3891";"subkey"="778";"value"="32164"};
+{"key"="3892";"subkey"="778";"value"="32173"};
+{"key"="3893";"subkey"="778";"value"="32183"};
+{"key"="3894";"subkey"="778";"value"="32192"};
+{"key"="3895";"subkey"="779";"value"="32201"};
+{"key"="3896";"subkey"="779";"value"="32210"};
+{"key"="3897";"subkey"="779";"value"="32220"};
+{"key"="3898";"subkey"="779";"value"="32229"};
+{"key"="3899";"subkey"="779";"value"="32238"};
+{"key"="3900";"subkey"="780";"value"="32248"};
+{"key"="3901";"subkey"="780";"value"="32257"};
+{"key"="3902";"subkey"="780";"value"="32266"};
+{"key"="3903";"subkey"="780";"value"="32275"};
+{"key"="3904";"subkey"="780";"value"="32285"};
+{"key"="3905";"subkey"="781";"value"="32294"};
+{"key"="3906";"subkey"="781";"value"="32303"};
+{"key"="3907";"subkey"="781";"value"="32312"};
+{"key"="3908";"subkey"="781";"value"="32322"};
+{"key"="3909";"subkey"="781";"value"="32331"};
+{"key"="3910";"subkey"="782";"value"="32340"};
+{"key"="3911";"subkey"="782";"value"="32350"};
+{"key"="3912";"subkey"="782";"value"="32359"};
+{"key"="3913";"subkey"="782";"value"="32368"};
+{"key"="3914";"subkey"="782";"value"="32377"};
+{"key"="3915";"subkey"="783";"value"="32387"};
+{"key"="3916";"subkey"="783";"value"="32396"};
+{"key"="3917";"subkey"="783";"value"="32405"};
+{"key"="3918";"subkey"="783";"value"="32414"};
+{"key"="3919";"subkey"="783";"value"="32424"};
+{"key"="3920";"subkey"="784";"value"="32433"};
+{"key"="3921";"subkey"="784";"value"="32442"};
+{"key"="3922";"subkey"="784";"value"="32452"};
+{"key"="3923";"subkey"="784";"value"="32461"};
+{"key"="3924";"subkey"="784";"value"="32470"};
+{"key"="3925";"subkey"="785";"value"="32479"};
+{"key"="3926";"subkey"="785";"value"="32489"};
+{"key"="3927";"subkey"="785";"value"="32498"};
+{"key"="3928";"subkey"="785";"value"="32507"};
+{"key"="3929";"subkey"="785";"value"="32516"};
+{"key"="3930";"subkey"="786";"value"="32526"};
+{"key"="3931";"subkey"="786";"value"="32535"};
+{"key"="3932";"subkey"="786";"value"="32544"};
+{"key"="3933";"subkey"="786";"value"="32554"};
+{"key"="3934";"subkey"="786";"value"="32563"};
+{"key"="3935";"subkey"="787";"value"="32572"};
+{"key"="3936";"subkey"="787";"value"="32581"};
+{"key"="3937";"subkey"="787";"value"="32591"};
+{"key"="3938";"subkey"="787";"value"="32600"};
+{"key"="3939";"subkey"="787";"value"="32609"};
+{"key"="3940";"subkey"="788";"value"="32619"};
+{"key"="3941";"subkey"="788";"value"="32628"};
+{"key"="3942";"subkey"="788";"value"="32637"};
+{"key"="3943";"subkey"="788";"value"="32646"};
+{"key"="3944";"subkey"="788";"value"="32656"};
+{"key"="3945";"subkey"="789";"value"="32665"};
+{"key"="3946";"subkey"="789";"value"="32674"};
+{"key"="3947";"subkey"="789";"value"="32683"};
+{"key"="3948";"subkey"="789";"value"="32693"};
+{"key"="3949";"subkey"="789";"value"="32702"};
+{"key"="3950";"subkey"="790";"value"="32711"};
+{"key"="3951";"subkey"="790";"value"="32721"};
+{"key"="3952";"subkey"="790";"value"="32730"};
+{"key"="3953";"subkey"="790";"value"="32739"};
+{"key"="3954";"subkey"="790";"value"="32748"};
+{"key"="3955";"subkey"="791";"value"="32758"};
+{"key"="3956";"subkey"="791";"value"="32767"};
+{"key"="3957";"subkey"="791";"value"="32776"};
+{"key"="3958";"subkey"="791";"value"="32786"};
+{"key"="3959";"subkey"="791";"value"="32795"};
+{"key"="3960";"subkey"="792";"value"="32804"};
+{"key"="3961";"subkey"="792";"value"="32813"};
+{"key"="3962";"subkey"="792";"value"="32823"};
+{"key"="3963";"subkey"="792";"value"="32832"};
+{"key"="3964";"subkey"="792";"value"="32841"};
+{"key"="3965";"subkey"="793";"value"="32851"};
+{"key"="3966";"subkey"="793";"value"="32860"};
+{"key"="3967";"subkey"="793";"value"="32869"};
+{"key"="3968";"subkey"="793";"value"="32878"};
+{"key"="3969";"subkey"="793";"value"="32888"};
+{"key"="3970";"subkey"="794";"value"="32897"};
+{"key"="3971";"subkey"="794";"value"="32906"};
+{"key"="3972";"subkey"="794";"value"="32916"};
+{"key"="3973";"subkey"="794";"value"="32925"};
+{"key"="3974";"subkey"="794";"value"="32934"};
+{"key"="3975";"subkey"="795";"value"="32943"};
+{"key"="3976";"subkey"="795";"value"="32953"};
+{"key"="3977";"subkey"="795";"value"="32962"};
+{"key"="3978";"subkey"="795";"value"="32971"};
+{"key"="3979";"subkey"="795";"value"="32981"};
+{"key"="3980";"subkey"="796";"value"="32990"};
+{"key"="3981";"subkey"="796";"value"="32999"};
+{"key"="3982";"subkey"="796";"value"="33008"};
+{"key"="3983";"subkey"="796";"value"="33018"};
+{"key"="3984";"subkey"="796";"value"="33027"};
+{"key"="3985";"subkey"="797";"value"="33036"};
+{"key"="3986";"subkey"="797";"value"="33046"};
+{"key"="3987";"subkey"="797";"value"="33055"};
+{"key"="3988";"subkey"="797";"value"="33064"};
+{"key"="3989";"subkey"="797";"value"="33073"};
+{"key"="3990";"subkey"="798";"value"="33083"};
+{"key"="3991";"subkey"="798";"value"="33092"};
+{"key"="3992";"subkey"="798";"value"="33101"};
+{"key"="3993";"subkey"="798";"value"="33111"};
+{"key"="3994";"subkey"="798";"value"="33120"};
+{"key"="3995";"subkey"="799";"value"="33129"};
+{"key"="3996";"subkey"="799";"value"="33139"};
+{"key"="3997";"subkey"="799";"value"="33148"};
+{"key"="3998";"subkey"="799";"value"="33157"};
+{"key"="3999";"subkey"="799";"value"="33166"};
+{"key"="4000";"subkey"="800";"value"="33176"};
+{"key"="4001";"subkey"="800";"value"="33185"};
+{"key"="4002";"subkey"="800";"value"="33194"};
+{"key"="4003";"subkey"="800";"value"="33204"};
+{"key"="4004";"subkey"="800";"value"="33213"};
+{"key"="4005";"subkey"="801";"value"="33222"};
+{"key"="4006";"subkey"="801";"value"="33231"};
+{"key"="4007";"subkey"="801";"value"="33241"};
+{"key"="4008";"subkey"="801";"value"="33250"};
+{"key"="4009";"subkey"="801";"value"="33259"};
+{"key"="4010";"subkey"="802";"value"="33269"};
+{"key"="4011";"subkey"="802";"value"="33278"};
+{"key"="4012";"subkey"="802";"value"="33287"};
+{"key"="4013";"subkey"="802";"value"="33297"};
+{"key"="4014";"subkey"="802";"value"="33306"};
+{"key"="4015";"subkey"="803";"value"="33315"};
+{"key"="4016";"subkey"="803";"value"="33324"};
+{"key"="4017";"subkey"="803";"value"="33334"};
+{"key"="4018";"subkey"="803";"value"="33343"};
+{"key"="4019";"subkey"="803";"value"="33352"};
+{"key"="4020";"subkey"="804";"value"="33362"};
+{"key"="4021";"subkey"="804";"value"="33371"};
+{"key"="4022";"subkey"="804";"value"="33380"};
+{"key"="4023";"subkey"="804";"value"="33390"};
+{"key"="4024";"subkey"="804";"value"="33399"};
+{"key"="4025";"subkey"="805";"value"="33408"};
+{"key"="4026";"subkey"="805";"value"="33417"};
+{"key"="4027";"subkey"="805";"value"="33427"};
+{"key"="4028";"subkey"="805";"value"="33436"};
+{"key"="4029";"subkey"="805";"value"="33445"};
+{"key"="4030";"subkey"="806";"value"="33455"};
+{"key"="4031";"subkey"="806";"value"="33464"};
+{"key"="4032";"subkey"="806";"value"="33473"};
+{"key"="4033";"subkey"="806";"value"="33483"};
+{"key"="4034";"subkey"="806";"value"="33492"};
+{"key"="4035";"subkey"="807";"value"="33501"};
+{"key"="4036";"subkey"="807";"value"="33510"};
+{"key"="4037";"subkey"="807";"value"="33520"};
+{"key"="4038";"subkey"="807";"value"="33529"};
+{"key"="4039";"subkey"="807";"value"="33538"};
+{"key"="4040";"subkey"="808";"value"="33548"};
+{"key"="4041";"subkey"="808";"value"="33557"};
+{"key"="4042";"subkey"="808";"value"="33566"};
+{"key"="4043";"subkey"="808";"value"="33576"};
+{"key"="4044";"subkey"="808";"value"="33585"};
+{"key"="4045";"subkey"="809";"value"="33594"};
+{"key"="4046";"subkey"="809";"value"="33603"};
+{"key"="4047";"subkey"="809";"value"="33613"};
+{"key"="4048";"subkey"="809";"value"="33622"};
+{"key"="4049";"subkey"="809";"value"="33631"};
+{"key"="4050";"subkey"="810";"value"="33641"};
+{"key"="4051";"subkey"="810";"value"="33650"};
+{"key"="4052";"subkey"="810";"value"="33659"};
+{"key"="4053";"subkey"="810";"value"="33669"};
+{"key"="4054";"subkey"="810";"value"="33678"};
+{"key"="4055";"subkey"="811";"value"="33687"};
+{"key"="4056";"subkey"="811";"value"="33697"};
+{"key"="4057";"subkey"="811";"value"="33706"};
+{"key"="4058";"subkey"="811";"value"="33715"};
+{"key"="4059";"subkey"="811";"value"="33724"};
+{"key"="4060";"subkey"="812";"value"="33734"};
+{"key"="4061";"subkey"="812";"value"="33743"};
+{"key"="4062";"subkey"="812";"value"="33752"};
+{"key"="4063";"subkey"="812";"value"="33762"};
+{"key"="4064";"subkey"="812";"value"="33771"};
+{"key"="4065";"subkey"="813";"value"="33780"};
+{"key"="4066";"subkey"="813";"value"="33790"};
+{"key"="4067";"subkey"="813";"value"="33799"};
+{"key"="4068";"subkey"="813";"value"="33808"};
+{"key"="4069";"subkey"="813";"value"="33818"};
+{"key"="4070";"subkey"="814";"value"="33827"};
+{"key"="4071";"subkey"="814";"value"="33836"};
+{"key"="4072";"subkey"="814";"value"="33846"};
+{"key"="4073";"subkey"="814";"value"="33855"};
+{"key"="4074";"subkey"="814";"value"="33864"};
+{"key"="4075";"subkey"="815";"value"="33873"};
+{"key"="4076";"subkey"="815";"value"="33883"};
+{"key"="4077";"subkey"="815";"value"="33892"};
+{"key"="4078";"subkey"="815";"value"="33901"};
+{"key"="4079";"subkey"="815";"value"="33911"};
+{"key"="4080";"subkey"="816";"value"="33920"};
+{"key"="4081";"subkey"="816";"value"="33929"};
+{"key"="4082";"subkey"="816";"value"="33939"};
+{"key"="4083";"subkey"="816";"value"="33948"};
+{"key"="4084";"subkey"="816";"value"="33957"};
+{"key"="4085";"subkey"="817";"value"="33967"};
+{"key"="4086";"subkey"="817";"value"="33976"};
+{"key"="4087";"subkey"="817";"value"="33985"};
+{"key"="4088";"subkey"="817";"value"="33995"};
+{"key"="4089";"subkey"="817";"value"="34004"};
+{"key"="4090";"subkey"="818";"value"="34013"};
+{"key"="4091";"subkey"="818";"value"="34022"};
+{"key"="4092";"subkey"="818";"value"="34032"};
+{"key"="4093";"subkey"="818";"value"="34041"};
+{"key"="4094";"subkey"="818";"value"="34050"};
+{"key"="4095";"subkey"="819";"value"="34060"};
+{"key"="4096";"subkey"="819";"value"="34069"};
+{"key"="4097";"subkey"="819";"value"="34078"};
+{"key"="4098";"subkey"="819";"value"="34088"};
+{"key"="4099";"subkey"="819";"value"="34097"};
+{"key"="4100";"subkey"="820";"value"="34106"};
+{"key"="4101";"subkey"="820";"value"="34116"};
+{"key"="4102";"subkey"="820";"value"="34125"};
+{"key"="4103";"subkey"="820";"value"="34134"};
+{"key"="4104";"subkey"="820";"value"="34144"};
+{"key"="4105";"subkey"="821";"value"="34153"};
+{"key"="4106";"subkey"="821";"value"="34162"};
+{"key"="4107";"subkey"="821";"value"="34172"};
+{"key"="4108";"subkey"="821";"value"="34181"};
+{"key"="4109";"subkey"="821";"value"="34190"};
+{"key"="4110";"subkey"="822";"value"="34200"};
+{"key"="4111";"subkey"="822";"value"="34209"};
+{"key"="4112";"subkey"="822";"value"="34218"};
+{"key"="4113";"subkey"="822";"value"="34228"};
+{"key"="4114";"subkey"="822";"value"="34237"};
+{"key"="4115";"subkey"="823";"value"="34246"};
+{"key"="4116";"subkey"="823";"value"="34255"};
+{"key"="4117";"subkey"="823";"value"="34265"};
+{"key"="4118";"subkey"="823";"value"="34274"};
+{"key"="4119";"subkey"="823";"value"="34283"};
+{"key"="4120";"subkey"="824";"value"="34293"};
+{"key"="4121";"subkey"="824";"value"="34302"};
+{"key"="4122";"subkey"="824";"value"="34311"};
+{"key"="4123";"subkey"="824";"value"="34321"};
+{"key"="4124";"subkey"="824";"value"="34330"};
+{"key"="4125";"subkey"="825";"value"="34339"};
+{"key"="4126";"subkey"="825";"value"="34349"};
+{"key"="4127";"subkey"="825";"value"="34358"};
+{"key"="4128";"subkey"="825";"value"="34367"};
+{"key"="4129";"subkey"="825";"value"="34377"};
+{"key"="4130";"subkey"="826";"value"="34386"};
+{"key"="4131";"subkey"="826";"value"="34395"};
+{"key"="4132";"subkey"="826";"value"="34405"};
+{"key"="4133";"subkey"="826";"value"="34414"};
+{"key"="4134";"subkey"="826";"value"="34423"};
+{"key"="4135";"subkey"="827";"value"="34433"};
+{"key"="4136";"subkey"="827";"value"="34442"};
+{"key"="4137";"subkey"="827";"value"="34451"};
+{"key"="4138";"subkey"="827";"value"="34461"};
+{"key"="4139";"subkey"="827";"value"="34470"};
+{"key"="4140";"subkey"="828";"value"="34479"};
+{"key"="4141";"subkey"="828";"value"="34489"};
+{"key"="4142";"subkey"="828";"value"="34498"};
+{"key"="4143";"subkey"="828";"value"="34507"};
+{"key"="4144";"subkey"="828";"value"="34517"};
+{"key"="4145";"subkey"="829";"value"="34526"};
+{"key"="4146";"subkey"="829";"value"="34535"};
+{"key"="4147";"subkey"="829";"value"="34545"};
+{"key"="4148";"subkey"="829";"value"="34554"};
+{"key"="4149";"subkey"="829";"value"="34563"};
+{"key"="4150";"subkey"="830";"value"="34573"};
+{"key"="4151";"subkey"="830";"value"="34582"};
+{"key"="4152";"subkey"="830";"value"="34591"};
+{"key"="4153";"subkey"="830";"value"="34601"};
+{"key"="4154";"subkey"="830";"value"="34610"};
+{"key"="4155";"subkey"="831";"value"="34619"};
+{"key"="4156";"subkey"="831";"value"="34629"};
+{"key"="4157";"subkey"="831";"value"="34638"};
+{"key"="4158";"subkey"="831";"value"="34647"};
+{"key"="4159";"subkey"="831";"value"="34657"};
+{"key"="4160";"subkey"="832";"value"="34666"};
+{"key"="4161";"subkey"="832";"value"="34675"};
+{"key"="4162";"subkey"="832";"value"="34685"};
+{"key"="4163";"subkey"="832";"value"="34694"};
+{"key"="4164";"subkey"="832";"value"="34703"};
+{"key"="4165";"subkey"="833";"value"="34713"};
+{"key"="4166";"subkey"="833";"value"="34722"};
+{"key"="4167";"subkey"="833";"value"="34731"};
+{"key"="4168";"subkey"="833";"value"="34741"};
+{"key"="4169";"subkey"="833";"value"="34750"};
+{"key"="4170";"subkey"="834";"value"="34759"};
+{"key"="4171";"subkey"="834";"value"="34769"};
+{"key"="4172";"subkey"="834";"value"="34778"};
+{"key"="4173";"subkey"="834";"value"="34787"};
+{"key"="4174";"subkey"="834";"value"="34797"};
+{"key"="4175";"subkey"="835";"value"="34806"};
+{"key"="4176";"subkey"="835";"value"="34815"};
+{"key"="4177";"subkey"="835";"value"="34825"};
+{"key"="4178";"subkey"="835";"value"="34834"};
+{"key"="4179";"subkey"="835";"value"="34843"};
+{"key"="4180";"subkey"="836";"value"="34853"};
+{"key"="4181";"subkey"="836";"value"="34862"};
+{"key"="4182";"subkey"="836";"value"="34871"};
+{"key"="4183";"subkey"="836";"value"="34881"};
+{"key"="4184";"subkey"="836";"value"="34890"};
+{"key"="4185";"subkey"="837";"value"="34899"};
+{"key"="4186";"subkey"="837";"value"="34909"};
+{"key"="4187";"subkey"="837";"value"="34918"};
+{"key"="4188";"subkey"="837";"value"="34927"};
+{"key"="4189";"subkey"="837";"value"="34937"};
+{"key"="4190";"subkey"="838";"value"="34946"};
+{"key"="4191";"subkey"="838";"value"="34955"};
+{"key"="4192";"subkey"="838";"value"="34965"};
+{"key"="4193";"subkey"="838";"value"="34974"};
+{"key"="4194";"subkey"="838";"value"="34983"};
+{"key"="4195";"subkey"="839";"value"="34993"};
+{"key"="4196";"subkey"="839";"value"="35002"};
+{"key"="4197";"subkey"="839";"value"="35011"};
+{"key"="4198";"subkey"="839";"value"="35021"};
+{"key"="4199";"subkey"="839";"value"="35030"};
+{"key"="4200";"subkey"="840";"value"="35039"};
+{"key"="4201";"subkey"="840";"value"="35049"};
+{"key"="4202";"subkey"="840";"value"="35058"};
+{"key"="4203";"subkey"="840";"value"="35067"};
+{"key"="4204";"subkey"="840";"value"="35077"};
+{"key"="4205";"subkey"="841";"value"="35086"};
+{"key"="4206";"subkey"="841";"value"="35095"};
+{"key"="4207";"subkey"="841";"value"="35105"};
+{"key"="4208";"subkey"="841";"value"="35114"};
+{"key"="4209";"subkey"="841";"value"="35124"};
+{"key"="4210";"subkey"="842";"value"="35133"};
+{"key"="4211";"subkey"="842";"value"="35142"};
+{"key"="4212";"subkey"="842";"value"="35152"};
+{"key"="4213";"subkey"="842";"value"="35161"};
+{"key"="4214";"subkey"="842";"value"="35170"};
+{"key"="4215";"subkey"="843";"value"="35180"};
+{"key"="4216";"subkey"="843";"value"="35189"};
+{"key"="4217";"subkey"="843";"value"="35198"};
+{"key"="4218";"subkey"="843";"value"="35208"};
+{"key"="4219";"subkey"="843";"value"="35217"};
+{"key"="4220";"subkey"="844";"value"="35226"};
+{"key"="4221";"subkey"="844";"value"="35236"};
+{"key"="4222";"subkey"="844";"value"="35245"};
+{"key"="4223";"subkey"="844";"value"="35254"};
+{"key"="4224";"subkey"="844";"value"="35264"};
+{"key"="4225";"subkey"="845";"value"="35273"};
+{"key"="4226";"subkey"="845";"value"="35282"};
+{"key"="4227";"subkey"="845";"value"="35292"};
+{"key"="4228";"subkey"="845";"value"="35301"};
+{"key"="4229";"subkey"="845";"value"="35310"};
+{"key"="4230";"subkey"="846";"value"="35320"};
+{"key"="4231";"subkey"="846";"value"="35329"};
+{"key"="4232";"subkey"="846";"value"="35339"};
+{"key"="4233";"subkey"="846";"value"="35348"};
+{"key"="4234";"subkey"="846";"value"="35357"};
+{"key"="4235";"subkey"="847";"value"="35367"};
+{"key"="4236";"subkey"="847";"value"="35376"};
+{"key"="4237";"subkey"="847";"value"="35385"};
+{"key"="4238";"subkey"="847";"value"="35395"};
+{"key"="4239";"subkey"="847";"value"="35404"};
+{"key"="4240";"subkey"="848";"value"="35413"};
+{"key"="4241";"subkey"="848";"value"="35423"};
+{"key"="4242";"subkey"="848";"value"="35432"};
+{"key"="4243";"subkey"="848";"value"="35441"};
+{"key"="4244";"subkey"="848";"value"="35451"};
+{"key"="4245";"subkey"="849";"value"="35460"};
+{"key"="4246";"subkey"="849";"value"="35469"};
+{"key"="4247";"subkey"="849";"value"="35479"};
+{"key"="4248";"subkey"="849";"value"="35488"};
+{"key"="4249";"subkey"="849";"value"="35498"};
+{"key"="4250";"subkey"="850";"value"="35507"};
+{"key"="4251";"subkey"="850";"value"="35516"};
+{"key"="4252";"subkey"="850";"value"="35526"};
+{"key"="4253";"subkey"="850";"value"="35535"};
+{"key"="4254";"subkey"="850";"value"="35544"};
+{"key"="4255";"subkey"="851";"value"="35554"};
+{"key"="4256";"subkey"="851";"value"="35563"};
+{"key"="4257";"subkey"="851";"value"="35572"};
+{"key"="4258";"subkey"="851";"value"="35582"};
+{"key"="4259";"subkey"="851";"value"="35591"};
+{"key"="4260";"subkey"="852";"value"="35600"};
+{"key"="4261";"subkey"="852";"value"="35610"};
+{"key"="4262";"subkey"="852";"value"="35619"};
+{"key"="4263";"subkey"="852";"value"="35628"};
+{"key"="4264";"subkey"="852";"value"="35638"};
+{"key"="4265";"subkey"="853";"value"="35647"};
+{"key"="4266";"subkey"="853";"value"="35657"};
+{"key"="4267";"subkey"="853";"value"="35666"};
+{"key"="4268";"subkey"="853";"value"="35675"};
+{"key"="4269";"subkey"="853";"value"="35685"};
+{"key"="4270";"subkey"="854";"value"="35694"};
+{"key"="4271";"subkey"="854";"value"="35703"};
+{"key"="4272";"subkey"="854";"value"="35713"};
+{"key"="4273";"subkey"="854";"value"="35722"};
+{"key"="4274";"subkey"="854";"value"="35731"};
+{"key"="4275";"subkey"="855";"value"="35741"};
+{"key"="4276";"subkey"="855";"value"="35750"};
+{"key"="4277";"subkey"="855";"value"="35760"};
+{"key"="4278";"subkey"="855";"value"="35769"};
+{"key"="4279";"subkey"="855";"value"="35778"};
+{"key"="4280";"subkey"="856";"value"="35788"};
+{"key"="4281";"subkey"="856";"value"="35797"};
+{"key"="4282";"subkey"="856";"value"="35806"};
+{"key"="4283";"subkey"="856";"value"="35816"};
+{"key"="4284";"subkey"="856";"value"="35825"};
+{"key"="4285";"subkey"="857";"value"="35834"};
+{"key"="4286";"subkey"="857";"value"="35844"};
+{"key"="4287";"subkey"="857";"value"="35853"};
+{"key"="4288";"subkey"="857";"value"="35863"};
+{"key"="4289";"subkey"="857";"value"="35872"};
+{"key"="4290";"subkey"="858";"value"="35881"};
+{"key"="4291";"subkey"="858";"value"="35891"};
+{"key"="4292";"subkey"="858";"value"="35900"};
+{"key"="4293";"subkey"="858";"value"="35909"};
+{"key"="4294";"subkey"="858";"value"="35919"};
+{"key"="4295";"subkey"="859";"value"="35928"};
+{"key"="4296";"subkey"="859";"value"="35937"};
+{"key"="4297";"subkey"="859";"value"="35947"};
+{"key"="4298";"subkey"="859";"value"="35956"};
+{"key"="4299";"subkey"="859";"value"="35966"};
+{"key"="4300";"subkey"="860";"value"="35975"};
+{"key"="4301";"subkey"="860";"value"="35984"};
+{"key"="4302";"subkey"="860";"value"="35994"};
+{"key"="4303";"subkey"="860";"value"="36003"};
+{"key"="4304";"subkey"="860";"value"="36012"};
+{"key"="4305";"subkey"="861";"value"="36022"};
+{"key"="4306";"subkey"="861";"value"="36031"};
+{"key"="4307";"subkey"="861";"value"="36040"};
+{"key"="4308";"subkey"="861";"value"="36050"};
+{"key"="4309";"subkey"="861";"value"="36059"};
+{"key"="4310";"subkey"="862";"value"="36069"};
+{"key"="4311";"subkey"="862";"value"="36078"};
+{"key"="4312";"subkey"="862";"value"="36087"};
+{"key"="4313";"subkey"="862";"value"="36097"};
+{"key"="4314";"subkey"="862";"value"="36106"};
+{"key"="4315";"subkey"="863";"value"="36115"};
+{"key"="4316";"subkey"="863";"value"="36125"};
+{"key"="4317";"subkey"="863";"value"="36134"};
+{"key"="4318";"subkey"="863";"value"="36144"};
+{"key"="4319";"subkey"="863";"value"="36153"};
+{"key"="4320";"subkey"="864";"value"="36162"};
+{"key"="4321";"subkey"="864";"value"="36172"};
+{"key"="4322";"subkey"="864";"value"="36181"};
+{"key"="4323";"subkey"="864";"value"="36190"};
+{"key"="4324";"subkey"="864";"value"="36200"};
+{"key"="4325";"subkey"="865";"value"="36209"};
+{"key"="4326";"subkey"="865";"value"="36218"};
+{"key"="4327";"subkey"="865";"value"="36228"};
+{"key"="4328";"subkey"="865";"value"="36237"};
+{"key"="4329";"subkey"="865";"value"="36247"};
+{"key"="4330";"subkey"="866";"value"="36256"};
+{"key"="4331";"subkey"="866";"value"="36265"};
+{"key"="4332";"subkey"="866";"value"="36275"};
+{"key"="4333";"subkey"="866";"value"="36284"};
+{"key"="4334";"subkey"="866";"value"="36293"};
+{"key"="4335";"subkey"="867";"value"="36303"};
+{"key"="4336";"subkey"="867";"value"="36312"};
+{"key"="4337";"subkey"="867";"value"="36322"};
+{"key"="4338";"subkey"="867";"value"="36331"};
+{"key"="4339";"subkey"="867";"value"="36340"};
+{"key"="4340";"subkey"="868";"value"="36350"};
+{"key"="4341";"subkey"="868";"value"="36359"};
+{"key"="4342";"subkey"="868";"value"="36368"};
+{"key"="4343";"subkey"="868";"value"="36378"};
+{"key"="4344";"subkey"="868";"value"="36387"};
+{"key"="4345";"subkey"="869";"value"="36397"};
+{"key"="4346";"subkey"="869";"value"="36406"};
+{"key"="4347";"subkey"="869";"value"="36415"};
+{"key"="4348";"subkey"="869";"value"="36425"};
+{"key"="4349";"subkey"="869";"value"="36434"};
+{"key"="4350";"subkey"="870";"value"="36444"};
+{"key"="4351";"subkey"="870";"value"="36453"};
+{"key"="4352";"subkey"="870";"value"="36462"};
+{"key"="4353";"subkey"="870";"value"="36472"};
+{"key"="4354";"subkey"="870";"value"="36481"};
+{"key"="4355";"subkey"="871";"value"="36490"};
+{"key"="4356";"subkey"="871";"value"="36500"};
+{"key"="4357";"subkey"="871";"value"="36509"};
+{"key"="4358";"subkey"="871";"value"="36519"};
+{"key"="4359";"subkey"="871";"value"="36528"};
+{"key"="4360";"subkey"="872";"value"="36537"};
+{"key"="4361";"subkey"="872";"value"="36547"};
+{"key"="4362";"subkey"="872";"value"="36556"};
+{"key"="4363";"subkey"="872";"value"="36565"};
+{"key"="4364";"subkey"="872";"value"="36575"};
+{"key"="4365";"subkey"="873";"value"="36584"};
+{"key"="4366";"subkey"="873";"value"="36594"};
+{"key"="4367";"subkey"="873";"value"="36603"};
+{"key"="4368";"subkey"="873";"value"="36612"};
+{"key"="4369";"subkey"="873";"value"="36622"};
+{"key"="4370";"subkey"="874";"value"="36631"};
+{"key"="4371";"subkey"="874";"value"="36640"};
+{"key"="4372";"subkey"="874";"value"="36650"};
+{"key"="4373";"subkey"="874";"value"="36659"};
+{"key"="4374";"subkey"="874";"value"="36669"};
+{"key"="4375";"subkey"="875";"value"="36678"};
+{"key"="4376";"subkey"="875";"value"="36687"};
+{"key"="4377";"subkey"="875";"value"="36697"};
+{"key"="4378";"subkey"="875";"value"="36706"};
+{"key"="4379";"subkey"="875";"value"="36716"};
+{"key"="4380";"subkey"="876";"value"="36725"};
+{"key"="4381";"subkey"="876";"value"="36734"};
+{"key"="4382";"subkey"="876";"value"="36744"};
+{"key"="4383";"subkey"="876";"value"="36753"};
+{"key"="4384";"subkey"="876";"value"="36762"};
+{"key"="4385";"subkey"="877";"value"="36772"};
+{"key"="4386";"subkey"="877";"value"="36781"};
+{"key"="4387";"subkey"="877";"value"="36791"};
+{"key"="4388";"subkey"="877";"value"="36800"};
+{"key"="4389";"subkey"="877";"value"="36809"};
+{"key"="4390";"subkey"="878";"value"="36819"};
+{"key"="4391";"subkey"="878";"value"="36828"};
+{"key"="4392";"subkey"="878";"value"="36838"};
+{"key"="4393";"subkey"="878";"value"="36847"};
+{"key"="4394";"subkey"="878";"value"="36856"};
+{"key"="4395";"subkey"="879";"value"="36866"};
+{"key"="4396";"subkey"="879";"value"="36875"};
+{"key"="4397";"subkey"="879";"value"="36885"};
+{"key"="4398";"subkey"="879";"value"="36894"};
+{"key"="4399";"subkey"="879";"value"="36903"};
+{"key"="4400";"subkey"="880";"value"="36913"};
+{"key"="4401";"subkey"="880";"value"="36922"};
+{"key"="4402";"subkey"="880";"value"="36931"};
+{"key"="4403";"subkey"="880";"value"="36941"};
+{"key"="4404";"subkey"="880";"value"="36950"};
+{"key"="4405";"subkey"="881";"value"="36960"};
+{"key"="4406";"subkey"="881";"value"="36969"};
+{"key"="4407";"subkey"="881";"value"="36978"};
+{"key"="4408";"subkey"="881";"value"="36988"};
+{"key"="4409";"subkey"="881";"value"="36997"};
+{"key"="4410";"subkey"="882";"value"="37007"};
+{"key"="4411";"subkey"="882";"value"="37016"};
+{"key"="4412";"subkey"="882";"value"="37025"};
+{"key"="4413";"subkey"="882";"value"="37035"};
+{"key"="4414";"subkey"="882";"value"="37044"};
+{"key"="4415";"subkey"="883";"value"="37054"};
+{"key"="4416";"subkey"="883";"value"="37063"};
+{"key"="4417";"subkey"="883";"value"="37072"};
+{"key"="4418";"subkey"="883";"value"="37082"};
+{"key"="4419";"subkey"="883";"value"="37091"};
+{"key"="4420";"subkey"="884";"value"="37101"};
+{"key"="4421";"subkey"="884";"value"="37110"};
+{"key"="4422";"subkey"="884";"value"="37119"};
+{"key"="4423";"subkey"="884";"value"="37129"};
+{"key"="4424";"subkey"="884";"value"="37138"};
+{"key"="4425";"subkey"="885";"value"="37147"};
+{"key"="4426";"subkey"="885";"value"="37157"};
+{"key"="4427";"subkey"="885";"value"="37166"};
+{"key"="4428";"subkey"="885";"value"="37176"};
+{"key"="4429";"subkey"="885";"value"="37185"};
+{"key"="4430";"subkey"="886";"value"="37194"};
+{"key"="4431";"subkey"="886";"value"="37204"};
+{"key"="4432";"subkey"="886";"value"="37213"};
+{"key"="4433";"subkey"="886";"value"="37223"};
+{"key"="4434";"subkey"="886";"value"="37232"};
+{"key"="4435";"subkey"="887";"value"="37241"};
+{"key"="4436";"subkey"="887";"value"="37251"};
+{"key"="4437";"subkey"="887";"value"="37260"};
+{"key"="4438";"subkey"="887";"value"="37270"};
+{"key"="4439";"subkey"="887";"value"="37279"};
+{"key"="4440";"subkey"="888";"value"="37288"};
+{"key"="4441";"subkey"="888";"value"="37298"};
+{"key"="4442";"subkey"="888";"value"="37307"};
+{"key"="4443";"subkey"="888";"value"="37317"};
+{"key"="4444";"subkey"="888";"value"="37326"};
+{"key"="4445";"subkey"="889";"value"="37335"};
+{"key"="4446";"subkey"="889";"value"="37345"};
+{"key"="4447";"subkey"="889";"value"="37354"};
+{"key"="4448";"subkey"="889";"value"="37364"};
+{"key"="4449";"subkey"="889";"value"="37373"};
+{"key"="4450";"subkey"="890";"value"="37382"};
+{"key"="4451";"subkey"="890";"value"="37392"};
+{"key"="4452";"subkey"="890";"value"="37401"};
+{"key"="4453";"subkey"="890";"value"="37411"};
+{"key"="4454";"subkey"="890";"value"="37420"};
+{"key"="4455";"subkey"="891";"value"="37429"};
+{"key"="4456";"subkey"="891";"value"="37439"};
+{"key"="4457";"subkey"="891";"value"="37448"};
+{"key"="4458";"subkey"="891";"value"="37458"};
+{"key"="4459";"subkey"="891";"value"="37467"};
+{"key"="4460";"subkey"="892";"value"="37476"};
+{"key"="4461";"subkey"="892";"value"="37486"};
+{"key"="4462";"subkey"="892";"value"="37495"};
+{"key"="4463";"subkey"="892";"value"="37505"};
+{"key"="4464";"subkey"="892";"value"="37514"};
+{"key"="4465";"subkey"="893";"value"="37523"};
+{"key"="4466";"subkey"="893";"value"="37533"};
+{"key"="4467";"subkey"="893";"value"="37542"};
+{"key"="4468";"subkey"="893";"value"="37552"};
+{"key"="4469";"subkey"="893";"value"="37561"};
+{"key"="4470";"subkey"="894";"value"="37570"};
+{"key"="4471";"subkey"="894";"value"="37580"};
+{"key"="4472";"subkey"="894";"value"="37589"};
+{"key"="4473";"subkey"="894";"value"="37599"};
+{"key"="4474";"subkey"="894";"value"="37608"};
+{"key"="4475";"subkey"="895";"value"="37618"};
+{"key"="4476";"subkey"="895";"value"="37627"};
+{"key"="4477";"subkey"="895";"value"="37636"};
+{"key"="4478";"subkey"="895";"value"="37646"};
+{"key"="4479";"subkey"="895";"value"="37655"};
+{"key"="4480";"subkey"="896";"value"="37665"};
+{"key"="4481";"subkey"="896";"value"="37674"};
+{"key"="4482";"subkey"="896";"value"="37683"};
+{"key"="4483";"subkey"="896";"value"="37693"};
+{"key"="4484";"subkey"="896";"value"="37702"};
+{"key"="4485";"subkey"="897";"value"="37712"};
+{"key"="4486";"subkey"="897";"value"="37721"};
+{"key"="4487";"subkey"="897";"value"="37730"};
+{"key"="4488";"subkey"="897";"value"="37740"};
+{"key"="4489";"subkey"="897";"value"="37749"};
+{"key"="4490";"subkey"="898";"value"="37759"};
+{"key"="4491";"subkey"="898";"value"="37768"};
+{"key"="4492";"subkey"="898";"value"="37777"};
+{"key"="4493";"subkey"="898";"value"="37787"};
+{"key"="4494";"subkey"="898";"value"="37796"};
+{"key"="4495";"subkey"="899";"value"="37806"};
+{"key"="4496";"subkey"="899";"value"="37815"};
+{"key"="4497";"subkey"="899";"value"="37825"};
+{"key"="4498";"subkey"="899";"value"="37834"};
+{"key"="4499";"subkey"="899";"value"="37843"};
+{"key"="4500";"subkey"="900";"value"="37853"};
+{"key"="4501";"subkey"="900";"value"="37862"};
+{"key"="4502";"subkey"="900";"value"="37872"};
+{"key"="4503";"subkey"="900";"value"="37881"};
+{"key"="4504";"subkey"="900";"value"="37890"};
+{"key"="4505";"subkey"="901";"value"="37900"};
+{"key"="4506";"subkey"="901";"value"="37909"};
+{"key"="4507";"subkey"="901";"value"="37919"};
+{"key"="4508";"subkey"="901";"value"="37928"};
+{"key"="4509";"subkey"="901";"value"="37937"};
+{"key"="4510";"subkey"="902";"value"="37947"};
+{"key"="4511";"subkey"="902";"value"="37956"};
+{"key"="4512";"subkey"="902";"value"="37966"};
+{"key"="4513";"subkey"="902";"value"="37975"};
+{"key"="4514";"subkey"="902";"value"="37985"};
+{"key"="4515";"subkey"="903";"value"="37994"};
+{"key"="4516";"subkey"="903";"value"="38003"};
+{"key"="4517";"subkey"="903";"value"="38013"};
+{"key"="4518";"subkey"="903";"value"="38022"};
+{"key"="4519";"subkey"="903";"value"="38032"};
+{"key"="4520";"subkey"="904";"value"="38041"};
+{"key"="4521";"subkey"="904";"value"="38050"};
+{"key"="4522";"subkey"="904";"value"="38060"};
+{"key"="4523";"subkey"="904";"value"="38069"};
+{"key"="4524";"subkey"="904";"value"="38079"};
+{"key"="4525";"subkey"="905";"value"="38088"};
+{"key"="4526";"subkey"="905";"value"="38098"};
+{"key"="4527";"subkey"="905";"value"="38107"};
+{"key"="4528";"subkey"="905";"value"="38116"};
+{"key"="4529";"subkey"="905";"value"="38126"};
+{"key"="4530";"subkey"="906";"value"="38135"};
+{"key"="4531";"subkey"="906";"value"="38145"};
+{"key"="4532";"subkey"="906";"value"="38154"};
+{"key"="4533";"subkey"="906";"value"="38163"};
+{"key"="4534";"subkey"="906";"value"="38173"};
+{"key"="4535";"subkey"="907";"value"="38182"};
+{"key"="4536";"subkey"="907";"value"="38192"};
+{"key"="4537";"subkey"="907";"value"="38201"};
+{"key"="4538";"subkey"="907";"value"="38211"};
+{"key"="4539";"subkey"="907";"value"="38220"};
+{"key"="4540";"subkey"="908";"value"="38229"};
+{"key"="4541";"subkey"="908";"value"="38239"};
+{"key"="4542";"subkey"="908";"value"="38248"};
+{"key"="4543";"subkey"="908";"value"="38258"};
+{"key"="4544";"subkey"="908";"value"="38267"};
+{"key"="4545";"subkey"="909";"value"="38277"};
+{"key"="4546";"subkey"="909";"value"="38286"};
+{"key"="4547";"subkey"="909";"value"="38295"};
+{"key"="4548";"subkey"="909";"value"="38305"};
+{"key"="4549";"subkey"="909";"value"="38314"};
+{"key"="4550";"subkey"="910";"value"="38324"};
+{"key"="4551";"subkey"="910";"value"="38333"};
+{"key"="4552";"subkey"="910";"value"="38342"};
+{"key"="4553";"subkey"="910";"value"="38352"};
+{"key"="4554";"subkey"="910";"value"="38361"};
+{"key"="4555";"subkey"="911";"value"="38371"};
+{"key"="4556";"subkey"="911";"value"="38380"};
+{"key"="4557";"subkey"="911";"value"="38390"};
+{"key"="4558";"subkey"="911";"value"="38399"};
+{"key"="4559";"subkey"="911";"value"="38408"};
+{"key"="4560";"subkey"="912";"value"="38418"};
+{"key"="4561";"subkey"="912";"value"="38427"};
+{"key"="4562";"subkey"="912";"value"="38437"};
+{"key"="4563";"subkey"="912";"value"="38446"};
+{"key"="4564";"subkey"="912";"value"="38456"};
+{"key"="4565";"subkey"="913";"value"="38465"};
+{"key"="4566";"subkey"="913";"value"="38474"};
+{"key"="4567";"subkey"="913";"value"="38484"};
+{"key"="4568";"subkey"="913";"value"="38493"};
+{"key"="4569";"subkey"="913";"value"="38503"};
+{"key"="4570";"subkey"="914";"value"="38512"};
+{"key"="4571";"subkey"="914";"value"="38522"};
+{"key"="4572";"subkey"="914";"value"="38531"};
+{"key"="4573";"subkey"="914";"value"="38540"};
+{"key"="4574";"subkey"="914";"value"="38550"};
+{"key"="4575";"subkey"="915";"value"="38559"};
+{"key"="4576";"subkey"="915";"value"="38569"};
+{"key"="4577";"subkey"="915";"value"="38578"};
+{"key"="4578";"subkey"="915";"value"="38588"};
+{"key"="4579";"subkey"="915";"value"="38597"};
+{"key"="4580";"subkey"="916";"value"="38606"};
+{"key"="4581";"subkey"="916";"value"="38616"};
+{"key"="4582";"subkey"="916";"value"="38625"};
+{"key"="4583";"subkey"="916";"value"="38635"};
+{"key"="4584";"subkey"="916";"value"="38644"};
+{"key"="4585";"subkey"="917";"value"="38654"};
+{"key"="4586";"subkey"="917";"value"="38663"};
+{"key"="4587";"subkey"="917";"value"="38672"};
+{"key"="4588";"subkey"="917";"value"="38682"};
+{"key"="4589";"subkey"="917";"value"="38691"};
+{"key"="4590";"subkey"="918";"value"="38701"};
+{"key"="4591";"subkey"="918";"value"="38710"};
+{"key"="4592";"subkey"="918";"value"="38720"};
+{"key"="4593";"subkey"="918";"value"="38729"};
+{"key"="4594";"subkey"="918";"value"="38738"};
+{"key"="4595";"subkey"="919";"value"="38748"};
+{"key"="4596";"subkey"="919";"value"="38757"};
+{"key"="4597";"subkey"="919";"value"="38767"};
+{"key"="4598";"subkey"="919";"value"="38776"};
+{"key"="4599";"subkey"="919";"value"="38786"};
+{"key"="4600";"subkey"="920";"value"="38795"};
+{"key"="4601";"subkey"="920";"value"="38804"};
+{"key"="4602";"subkey"="920";"value"="38814"};
+{"key"="4603";"subkey"="920";"value"="38823"};
+{"key"="4604";"subkey"="920";"value"="38833"};
+{"key"="4605";"subkey"="921";"value"="38842"};
+{"key"="4606";"subkey"="921";"value"="38852"};
+{"key"="4607";"subkey"="921";"value"="38861"};
+{"key"="4608";"subkey"="921";"value"="38871"};
+{"key"="4609";"subkey"="921";"value"="38880"};
+{"key"="4610";"subkey"="922";"value"="38889"};
+{"key"="4611";"subkey"="922";"value"="38899"};
+{"key"="4612";"subkey"="922";"value"="38908"};
+{"key"="4613";"subkey"="922";"value"="38918"};
+{"key"="4614";"subkey"="922";"value"="38927"};
+{"key"="4615";"subkey"="923";"value"="38937"};
+{"key"="4616";"subkey"="923";"value"="38946"};
+{"key"="4617";"subkey"="923";"value"="38955"};
+{"key"="4618";"subkey"="923";"value"="38965"};
+{"key"="4619";"subkey"="923";"value"="38974"};
+{"key"="4620";"subkey"="924";"value"="38984"};
+{"key"="4621";"subkey"="924";"value"="38993"};
+{"key"="4622";"subkey"="924";"value"="39003"};
+{"key"="4623";"subkey"="924";"value"="39012"};
+{"key"="4624";"subkey"="924";"value"="39022"};
+{"key"="4625";"subkey"="925";"value"="39031"};
+{"key"="4626";"subkey"="925";"value"="39040"};
+{"key"="4627";"subkey"="925";"value"="39050"};
+{"key"="4628";"subkey"="925";"value"="39059"};
+{"key"="4629";"subkey"="925";"value"="39069"};
+{"key"="4630";"subkey"="926";"value"="39078"};
+{"key"="4631";"subkey"="926";"value"="39088"};
+{"key"="4632";"subkey"="926";"value"="39097"};
+{"key"="4633";"subkey"="926";"value"="39106"};
+{"key"="4634";"subkey"="926";"value"="39116"};
+{"key"="4635";"subkey"="927";"value"="39125"};
+{"key"="4636";"subkey"="927";"value"="39135"};
+{"key"="4637";"subkey"="927";"value"="39144"};
+{"key"="4638";"subkey"="927";"value"="39154"};
+{"key"="4639";"subkey"="927";"value"="39163"};
+{"key"="4640";"subkey"="928";"value"="39173"};
+{"key"="4641";"subkey"="928";"value"="39182"};
+{"key"="4642";"subkey"="928";"value"="39191"};
+{"key"="4643";"subkey"="928";"value"="39201"};
+{"key"="4644";"subkey"="928";"value"="39210"};
+{"key"="4645";"subkey"="929";"value"="39220"};
+{"key"="4646";"subkey"="929";"value"="39229"};
+{"key"="4647";"subkey"="929";"value"="39239"};
+{"key"="4648";"subkey"="929";"value"="39248"};
+{"key"="4649";"subkey"="929";"value"="39258"};
+{"key"="4650";"subkey"="930";"value"="39267"};
+{"key"="4651";"subkey"="930";"value"="39276"};
+{"key"="4652";"subkey"="930";"value"="39286"};
+{"key"="4653";"subkey"="930";"value"="39295"};
+{"key"="4654";"subkey"="930";"value"="39305"};
+{"key"="4655";"subkey"="931";"value"="39314"};
+{"key"="4656";"subkey"="931";"value"="39324"};
+{"key"="4657";"subkey"="931";"value"="39333"};
+{"key"="4658";"subkey"="931";"value"="39343"};
+{"key"="4659";"subkey"="931";"value"="39352"};
+{"key"="4660";"subkey"="932";"value"="39361"};
+{"key"="4661";"subkey"="932";"value"="39371"};
+{"key"="4662";"subkey"="932";"value"="39380"};
+{"key"="4663";"subkey"="932";"value"="39390"};
+{"key"="4664";"subkey"="932";"value"="39399"};
+{"key"="4665";"subkey"="933";"value"="39409"};
+{"key"="4666";"subkey"="933";"value"="39418"};
+{"key"="4667";"subkey"="933";"value"="39428"};
+{"key"="4668";"subkey"="933";"value"="39437"};
+{"key"="4669";"subkey"="933";"value"="39446"};
+{"key"="4670";"subkey"="934";"value"="39456"};
+{"key"="4671";"subkey"="934";"value"="39465"};
+{"key"="4672";"subkey"="934";"value"="39475"};
+{"key"="4673";"subkey"="934";"value"="39484"};
+{"key"="4674";"subkey"="934";"value"="39494"};
+{"key"="4675";"subkey"="935";"value"="39503"};
+{"key"="4676";"subkey"="935";"value"="39513"};
+{"key"="4677";"subkey"="935";"value"="39522"};
+{"key"="4678";"subkey"="935";"value"="39532"};
+{"key"="4679";"subkey"="935";"value"="39541"};
+{"key"="4680";"subkey"="936";"value"="39550"};
+{"key"="4681";"subkey"="936";"value"="39560"};
+{"key"="4682";"subkey"="936";"value"="39569"};
+{"key"="4683";"subkey"="936";"value"="39579"};
+{"key"="4684";"subkey"="936";"value"="39588"};
+{"key"="4685";"subkey"="937";"value"="39598"};
+{"key"="4686";"subkey"="937";"value"="39607"};
+{"key"="4687";"subkey"="937";"value"="39617"};
+{"key"="4688";"subkey"="937";"value"="39626"};
+{"key"="4689";"subkey"="937";"value"="39635"};
+{"key"="4690";"subkey"="938";"value"="39645"};
+{"key"="4691";"subkey"="938";"value"="39654"};
+{"key"="4692";"subkey"="938";"value"="39664"};
+{"key"="4693";"subkey"="938";"value"="39673"};
+{"key"="4694";"subkey"="938";"value"="39683"};
+{"key"="4695";"subkey"="939";"value"="39692"};
+{"key"="4696";"subkey"="939";"value"="39702"};
+{"key"="4697";"subkey"="939";"value"="39711"};
+{"key"="4698";"subkey"="939";"value"="39721"};
+{"key"="4699";"subkey"="939";"value"="39730"};
+{"key"="4700";"subkey"="940";"value"="39739"};
+{"key"="4701";"subkey"="940";"value"="39749"};
+{"key"="4702";"subkey"="940";"value"="39758"};
+{"key"="4703";"subkey"="940";"value"="39768"};
+{"key"="4704";"subkey"="940";"value"="39777"};
+{"key"="4705";"subkey"="941";"value"="39787"};
+{"key"="4706";"subkey"="941";"value"="39796"};
+{"key"="4707";"subkey"="941";"value"="39806"};
+{"key"="4708";"subkey"="941";"value"="39815"};
+{"key"="4709";"subkey"="941";"value"="39825"};
+{"key"="4710";"subkey"="942";"value"="39834"};
+{"key"="4711";"subkey"="942";"value"="39844"};
+{"key"="4712";"subkey"="942";"value"="39853"};
+{"key"="4713";"subkey"="942";"value"="39862"};
+{"key"="4714";"subkey"="942";"value"="39872"};
+{"key"="4715";"subkey"="943";"value"="39881"};
+{"key"="4716";"subkey"="943";"value"="39891"};
+{"key"="4717";"subkey"="943";"value"="39900"};
+{"key"="4718";"subkey"="943";"value"="39910"};
+{"key"="4719";"subkey"="943";"value"="39919"};
+{"key"="4720";"subkey"="944";"value"="39929"};
+{"key"="4721";"subkey"="944";"value"="39938"};
+{"key"="4722";"subkey"="944";"value"="39948"};
+{"key"="4723";"subkey"="944";"value"="39957"};
+{"key"="4724";"subkey"="944";"value"="39966"};
+{"key"="4725";"subkey"="945";"value"="39976"};
+{"key"="4726";"subkey"="945";"value"="39985"};
+{"key"="4727";"subkey"="945";"value"="39995"};
+{"key"="4728";"subkey"="945";"value"="40004"};
+{"key"="4729";"subkey"="945";"value"="40014"};
+{"key"="4730";"subkey"="946";"value"="40023"};
+{"key"="4731";"subkey"="946";"value"="40033"};
+{"key"="4732";"subkey"="946";"value"="40042"};
+{"key"="4733";"subkey"="946";"value"="40052"};
+{"key"="4734";"subkey"="946";"value"="40061"};
+{"key"="4735";"subkey"="947";"value"="40071"};
+{"key"="4736";"subkey"="947";"value"="40080"};
+{"key"="4737";"subkey"="947";"value"="40089"};
+{"key"="4738";"subkey"="947";"value"="40099"};
+{"key"="4739";"subkey"="947";"value"="40108"};
+{"key"="4740";"subkey"="948";"value"="40118"};
+{"key"="4741";"subkey"="948";"value"="40127"};
+{"key"="4742";"subkey"="948";"value"="40137"};
+{"key"="4743";"subkey"="948";"value"="40146"};
+{"key"="4744";"subkey"="948";"value"="40156"};
+{"key"="4745";"subkey"="949";"value"="40165"};
+{"key"="4746";"subkey"="949";"value"="40175"};
+{"key"="4747";"subkey"="949";"value"="40184"};
+{"key"="4748";"subkey"="949";"value"="40194"};
+{"key"="4749";"subkey"="949";"value"="40203"};
+{"key"="4750";"subkey"="950";"value"="40213"};
+{"key"="4751";"subkey"="950";"value"="40222"};
+{"key"="4752";"subkey"="950";"value"="40231"};
+{"key"="4753";"subkey"="950";"value"="40241"};
+{"key"="4754";"subkey"="950";"value"="40250"};
+{"key"="4755";"subkey"="951";"value"="40260"};
+{"key"="4756";"subkey"="951";"value"="40269"};
+{"key"="4757";"subkey"="951";"value"="40279"};
+{"key"="4758";"subkey"="951";"value"="40288"};
+{"key"="4759";"subkey"="951";"value"="40298"};
+{"key"="4760";"subkey"="952";"value"="40307"};
+{"key"="4761";"subkey"="952";"value"="40317"};
+{"key"="4762";"subkey"="952";"value"="40326"};
+{"key"="4763";"subkey"="952";"value"="40336"};
+{"key"="4764";"subkey"="952";"value"="40345"};
+{"key"="4765";"subkey"="953";"value"="40355"};
+{"key"="4766";"subkey"="953";"value"="40364"};
+{"key"="4767";"subkey"="953";"value"="40373"};
+{"key"="4768";"subkey"="953";"value"="40383"};
+{"key"="4769";"subkey"="953";"value"="40392"};
+{"key"="4770";"subkey"="954";"value"="40402"};
+{"key"="4771";"subkey"="954";"value"="40411"};
+{"key"="4772";"subkey"="954";"value"="40421"};
+{"key"="4773";"subkey"="954";"value"="40430"};
+{"key"="4774";"subkey"="954";"value"="40440"};
+{"key"="4775";"subkey"="955";"value"="40449"};
+{"key"="4776";"subkey"="955";"value"="40459"};
+{"key"="4777";"subkey"="955";"value"="40468"};
+{"key"="4778";"subkey"="955";"value"="40478"};
+{"key"="4779";"subkey"="955";"value"="40487"};
+{"key"="4780";"subkey"="956";"value"="40497"};
+{"key"="4781";"subkey"="956";"value"="40506"};
+{"key"="4782";"subkey"="956";"value"="40516"};
+{"key"="4783";"subkey"="956";"value"="40525"};
+{"key"="4784";"subkey"="956";"value"="40534"};
+{"key"="4785";"subkey"="957";"value"="40544"};
+{"key"="4786";"subkey"="957";"value"="40553"};
+{"key"="4787";"subkey"="957";"value"="40563"};
+{"key"="4788";"subkey"="957";"value"="40572"};
+{"key"="4789";"subkey"="957";"value"="40582"};
+{"key"="4790";"subkey"="958";"value"="40591"};
+{"key"="4791";"subkey"="958";"value"="40601"};
+{"key"="4792";"subkey"="958";"value"="40610"};
+{"key"="4793";"subkey"="958";"value"="40620"};
+{"key"="4794";"subkey"="958";"value"="40629"};
+{"key"="4795";"subkey"="959";"value"="40639"};
+{"key"="4796";"subkey"="959";"value"="40648"};
+{"key"="4797";"subkey"="959";"value"="40658"};
+{"key"="4798";"subkey"="959";"value"="40667"};
+{"key"="4799";"subkey"="959";"value"="40677"};
+{"key"="4800";"subkey"="960";"value"="40686"};
+{"key"="4801";"subkey"="960";"value"="40696"};
+{"key"="4802";"subkey"="960";"value"="40705"};
+{"key"="4803";"subkey"="960";"value"="40715"};
+{"key"="4804";"subkey"="960";"value"="40724"};
+{"key"="4805";"subkey"="961";"value"="40733"};
+{"key"="4806";"subkey"="961";"value"="40743"};
+{"key"="4807";"subkey"="961";"value"="40752"};
+{"key"="4808";"subkey"="961";"value"="40762"};
+{"key"="4809";"subkey"="961";"value"="40771"};
+{"key"="4810";"subkey"="962";"value"="40781"};
+{"key"="4811";"subkey"="962";"value"="40790"};
+{"key"="4812";"subkey"="962";"value"="40800"};
+{"key"="4813";"subkey"="962";"value"="40809"};
+{"key"="4814";"subkey"="962";"value"="40819"};
+{"key"="4815";"subkey"="963";"value"="40828"};
+{"key"="4816";"subkey"="963";"value"="40838"};
+{"key"="4817";"subkey"="963";"value"="40847"};
+{"key"="4818";"subkey"="963";"value"="40857"};
+{"key"="4819";"subkey"="963";"value"="40866"};
+{"key"="4820";"subkey"="964";"value"="40876"};
+{"key"="4821";"subkey"="964";"value"="40885"};
+{"key"="4822";"subkey"="964";"value"="40895"};
+{"key"="4823";"subkey"="964";"value"="40904"};
+{"key"="4824";"subkey"="964";"value"="40914"};
+{"key"="4825";"subkey"="965";"value"="40923"};
+{"key"="4826";"subkey"="965";"value"="40933"};
+{"key"="4827";"subkey"="965";"value"="40942"};
+{"key"="4828";"subkey"="965";"value"="40952"};
+{"key"="4829";"subkey"="965";"value"="40961"};
+{"key"="4830";"subkey"="966";"value"="40970"};
+{"key"="4831";"subkey"="966";"value"="40980"};
+{"key"="4832";"subkey"="966";"value"="40989"};
+{"key"="4833";"subkey"="966";"value"="40999"};
+{"key"="4834";"subkey"="966";"value"="41008"};
+{"key"="4835";"subkey"="967";"value"="41018"};
+{"key"="4836";"subkey"="967";"value"="41027"};
+{"key"="4837";"subkey"="967";"value"="41037"};
+{"key"="4838";"subkey"="967";"value"="41046"};
+{"key"="4839";"subkey"="967";"value"="41056"};
+{"key"="4840";"subkey"="968";"value"="41065"};
+{"key"="4841";"subkey"="968";"value"="41075"};
+{"key"="4842";"subkey"="968";"value"="41084"};
+{"key"="4843";"subkey"="968";"value"="41094"};
+{"key"="4844";"subkey"="968";"value"="41103"};
+{"key"="4845";"subkey"="969";"value"="41113"};
+{"key"="4846";"subkey"="969";"value"="41122"};
+{"key"="4847";"subkey"="969";"value"="41132"};
+{"key"="4848";"subkey"="969";"value"="41141"};
+{"key"="4849";"subkey"="969";"value"="41151"};
+{"key"="4850";"subkey"="970";"value"="41160"};
+{"key"="4851";"subkey"="970";"value"="41170"};
+{"key"="4852";"subkey"="970";"value"="41179"};
+{"key"="4853";"subkey"="970";"value"="41189"};
+{"key"="4854";"subkey"="970";"value"="41198"};
+{"key"="4855";"subkey"="971";"value"="41208"};
+{"key"="4856";"subkey"="971";"value"="41217"};
+{"key"="4857";"subkey"="971";"value"="41227"};
+{"key"="4858";"subkey"="971";"value"="41236"};
+{"key"="4859";"subkey"="971";"value"="41246"};
+{"key"="4860";"subkey"="972";"value"="41255"};
+{"key"="4861";"subkey"="972";"value"="41265"};
+{"key"="4862";"subkey"="972";"value"="41274"};
+{"key"="4863";"subkey"="972";"value"="41284"};
+{"key"="4864";"subkey"="972";"value"="41293"};
+{"key"="4865";"subkey"="973";"value"="41302"};
+{"key"="4866";"subkey"="973";"value"="41312"};
+{"key"="4867";"subkey"="973";"value"="41321"};
+{"key"="4868";"subkey"="973";"value"="41331"};
+{"key"="4869";"subkey"="973";"value"="41340"};
+{"key"="4870";"subkey"="974";"value"="41350"};
+{"key"="4871";"subkey"="974";"value"="41359"};
+{"key"="4872";"subkey"="974";"value"="41369"};
+{"key"="4873";"subkey"="974";"value"="41378"};
+{"key"="4874";"subkey"="974";"value"="41388"};
+{"key"="4875";"subkey"="975";"value"="41397"};
+{"key"="4876";"subkey"="975";"value"="41407"};
+{"key"="4877";"subkey"="975";"value"="41416"};
+{"key"="4878";"subkey"="975";"value"="41426"};
+{"key"="4879";"subkey"="975";"value"="41435"};
+{"key"="4880";"subkey"="976";"value"="41445"};
+{"key"="4881";"subkey"="976";"value"="41454"};
+{"key"="4882";"subkey"="976";"value"="41464"};
+{"key"="4883";"subkey"="976";"value"="41473"};
+{"key"="4884";"subkey"="976";"value"="41483"};
+{"key"="4885";"subkey"="977";"value"="41492"};
+{"key"="4886";"subkey"="977";"value"="41502"};
+{"key"="4887";"subkey"="977";"value"="41511"};
+{"key"="4888";"subkey"="977";"value"="41521"};
+{"key"="4889";"subkey"="977";"value"="41530"};
+{"key"="4890";"subkey"="978";"value"="41540"};
+{"key"="4891";"subkey"="978";"value"="41549"};
+{"key"="4892";"subkey"="978";"value"="41559"};
+{"key"="4893";"subkey"="978";"value"="41568"};
+{"key"="4894";"subkey"="978";"value"="41578"};
+{"key"="4895";"subkey"="979";"value"="41587"};
+{"key"="4896";"subkey"="979";"value"="41597"};
+{"key"="4897";"subkey"="979";"value"="41606"};
+{"key"="4898";"subkey"="979";"value"="41616"};
+{"key"="4899";"subkey"="979";"value"="41625"};
+{"key"="4900";"subkey"="980";"value"="41635"};
+{"key"="4901";"subkey"="980";"value"="41644"};
+{"key"="4902";"subkey"="980";"value"="41654"};
+{"key"="4903";"subkey"="980";"value"="41663"};
+{"key"="4904";"subkey"="980";"value"="41673"};
+{"key"="4905";"subkey"="981";"value"="41682"};
+{"key"="4906";"subkey"="981";"value"="41692"};
+{"key"="4907";"subkey"="981";"value"="41701"};
+{"key"="4908";"subkey"="981";"value"="41711"};
+{"key"="4909";"subkey"="981";"value"="41720"};
+{"key"="4910";"subkey"="982";"value"="41730"};
+{"key"="4911";"subkey"="982";"value"="41739"};
+{"key"="4912";"subkey"="982";"value"="41749"};
+{"key"="4913";"subkey"="982";"value"="41758"};
+{"key"="4914";"subkey"="982";"value"="41768"};
+{"key"="4915";"subkey"="983";"value"="41777"};
+{"key"="4916";"subkey"="983";"value"="41787"};
+{"key"="4917";"subkey"="983";"value"="41796"};
+{"key"="4918";"subkey"="983";"value"="41806"};
+{"key"="4919";"subkey"="983";"value"="41815"};
+{"key"="4920";"subkey"="984";"value"="41825"};
+{"key"="4921";"subkey"="984";"value"="41834"};
+{"key"="4922";"subkey"="984";"value"="41844"};
+{"key"="4923";"subkey"="984";"value"="41853"};
+{"key"="4924";"subkey"="984";"value"="41863"};
+{"key"="4925";"subkey"="985";"value"="41872"};
+{"key"="4926";"subkey"="985";"value"="41882"};
+{"key"="4927";"subkey"="985";"value"="41891"};
+{"key"="4928";"subkey"="985";"value"="41901"};
+{"key"="4929";"subkey"="985";"value"="41910"};
+{"key"="4930";"subkey"="986";"value"="41920"};
+{"key"="4931";"subkey"="986";"value"="41929"};
+{"key"="4932";"subkey"="986";"value"="41939"};
+{"key"="4933";"subkey"="986";"value"="41948"};
+{"key"="4934";"subkey"="986";"value"="41958"};
+{"key"="4935";"subkey"="987";"value"="41967"};
+{"key"="4936";"subkey"="987";"value"="41977"};
+{"key"="4937";"subkey"="987";"value"="41986"};
+{"key"="4938";"subkey"="987";"value"="41996"};
+{"key"="4939";"subkey"="987";"value"="42005"};
+{"key"="4940";"subkey"="988";"value"="42015"};
+{"key"="4941";"subkey"="988";"value"="42024"};
+{"key"="4942";"subkey"="988";"value"="42034"};
+{"key"="4943";"subkey"="988";"value"="42043"};
+{"key"="4944";"subkey"="988";"value"="42053"};
+{"key"="4945";"subkey"="989";"value"="42062"};
+{"key"="4946";"subkey"="989";"value"="42072"};
+{"key"="4947";"subkey"="989";"value"="42081"};
+{"key"="4948";"subkey"="989";"value"="42091"};
+{"key"="4949";"subkey"="989";"value"="42100"};
+{"key"="4950";"subkey"="990";"value"="42110"};
+{"key"="4951";"subkey"="990";"value"="42119"};
+{"key"="4952";"subkey"="990";"value"="42129"};
+{"key"="4953";"subkey"="990";"value"="42138"};
+{"key"="4954";"subkey"="990";"value"="42148"};
+{"key"="4955";"subkey"="991";"value"="42157"};
+{"key"="4956";"subkey"="991";"value"="42167"};
+{"key"="4957";"subkey"="991";"value"="42176"};
+{"key"="4958";"subkey"="991";"value"="42186"};
+{"key"="4959";"subkey"="991";"value"="42195"};
+{"key"="4960";"subkey"="992";"value"="42205"};
+{"key"="4961";"subkey"="992";"value"="42214"};
+{"key"="4962";"subkey"="992";"value"="42224"};
+{"key"="4963";"subkey"="992";"value"="42233"};
+{"key"="4964";"subkey"="992";"value"="42243"};
+{"key"="4965";"subkey"="993";"value"="42252"};
+{"key"="4966";"subkey"="993";"value"="42262"};
+{"key"="4967";"subkey"="993";"value"="42272"};
+{"key"="4968";"subkey"="993";"value"="42281"};
+{"key"="4969";"subkey"="993";"value"="42291"};
+{"key"="4970";"subkey"="994";"value"="42300"};
+{"key"="4971";"subkey"="994";"value"="42310"};
+{"key"="4972";"subkey"="994";"value"="42319"};
+{"key"="4973";"subkey"="994";"value"="42329"};
+{"key"="4974";"subkey"="994";"value"="42338"};
+{"key"="4975";"subkey"="995";"value"="42348"};
+{"key"="4976";"subkey"="995";"value"="42357"};
+{"key"="4977";"subkey"="995";"value"="42367"};
+{"key"="4978";"subkey"="995";"value"="42376"};
+{"key"="4979";"subkey"="995";"value"="42386"};
+{"key"="4980";"subkey"="996";"value"="42395"};
+{"key"="4981";"subkey"="996";"value"="42405"};
+{"key"="4982";"subkey"="996";"value"="42414"};
+{"key"="4983";"subkey"="996";"value"="42424"};
+{"key"="4984";"subkey"="996";"value"="42433"};
+{"key"="4985";"subkey"="997";"value"="42443"};
+{"key"="4986";"subkey"="997";"value"="42452"};
+{"key"="4987";"subkey"="997";"value"="42462"};
+{"key"="4988";"subkey"="997";"value"="42471"};
+{"key"="4989";"subkey"="997";"value"="42481"};
+{"key"="4990";"subkey"="998";"value"="42490"};
+{"key"="4991";"subkey"="998";"value"="42500"};
+{"key"="4992";"subkey"="998";"value"="42509"};
+{"key"="4993";"subkey"="998";"value"="42519"};
+{"key"="4994";"subkey"="998";"value"="42528"};
+{"key"="4995";"subkey"="999";"value"="42538"};
+{"key"="4996";"subkey"="999";"value"="42547"};
+{"key"="4997";"subkey"="999";"value"="42557"};
+{"key"="4998";"subkey"="999";"value"="42566"};
+{"key"="4999";"subkey"="999";"value"="42576"};
diff --git a/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.sql b/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.sql
new file mode 100644
index 0000000000..b092c78127
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperloglog/test/cases/Basic.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+SELECT
+ HyperLogLog(key) AS str,
+ CountDistinctEstimate(CAST(subkey AS Double)) AS `double`,
+ HLL(CAST(value AS Int64), 18) AS `int`
+FROM Input;
+
diff --git a/ydb/library/yql/udfs/common/hyperloglog/test/ya.make b/ydb/library/yql/udfs/common/hyperloglog/test/ya.make
new file mode 100644
index 0000000000..0d7d8478e1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperloglog/test/ya.make
@@ -0,0 +1,16 @@
+YQL_UDF_TEST()
+
+DEPENDS(
+ ydb/library/yql/udfs/common/hyperloglog
+ ydb/library/yql/udfs/common/digest
+)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/hyperloglog/ya.make b/ydb/library/yql/udfs/common/hyperloglog/ya.make
index 3d13568e57..f6f44c0523 100644
--- a/ydb/library/yql/udfs/common/hyperloglog/ya.make
+++ b/ydb/library/yql/udfs/common/hyperloglog/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/canondata/result.json b/ydb/library/yql/udfs/common/hyperscan/test/canondata/result.json
new file mode 100644
index 0000000000..39b61d3ee9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/canondata/result.json
@@ -0,0 +1,15 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ],
+ "test.test[CharacterClasses]": [
+ {
+ "uri": "file://test.test_CharacterClasses_/results.txt"
+ }
+ ],
+ "test.test[Error]": [
+ ""
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..0a44022ab1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,426 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "insensitive_grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "multi_match";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ];
+ [
+ "some_multi_match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "multi_match2";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ];
+ [
+ "some_multi_match2a";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "some_multi_match2b";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "some_multi_match2c";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "capture";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "capture_many";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "replace";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %true;
+ %false;
+ %true;
+ %false
+ ];
+ %false;
+ %true;
+ %false;
+ #;
+ #;
+ [
+ ""
+ ]
+ ];
+ [
+ "a";
+ %true;
+ %false;
+ %false;
+ [
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %false
+ ];
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "a"
+ ]
+ ];
+ [
+ "aax";
+ %true;
+ %false;
+ %false;
+ [
+ %true;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ [
+ "aa"
+ ];
+ #;
+ [
+ "aax"
+ ]
+ ];
+ [
+ "xaax";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ [
+ "xaa"
+ ];
+ [
+ "xa"
+ ];
+ [
+ "bax"
+ ]
+ ];
+ [
+ "xaaxaaxaa";
+ %false;
+ %true;
+ %true;
+ [
+ %false;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ [
+ "xaa"
+ ];
+ [
+ "xa"
+ ];
+ [
+ "bababa"
+ ]
+ ];
+ [
+ "XAXA";
+ %false;
+ %false;
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "XAXA"
+ ]
+ ];
+ [
+ "7";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "7"
+ ]
+ ];
+ [
+ "QC transfer task JAVA";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %true;
+ %false;
+ %true
+ ];
+ %false;
+ %false;
+ %true;
+ #;
+ #;
+ [
+ "QC transfer task JAVA"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_CharacterClasses_/results.txt b/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_CharacterClasses_/results.txt
new file mode 100644
index 0000000000..7fe80ff82a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/canondata/test.test_CharacterClasses_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "digits";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "spaces";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "xx000xx";
+ %true;
+ %false
+ ];
+ [
+ "lLlLl";
+ %false;
+ %false
+ ];
+ [
+ "a1 b2 c3";
+ %true;
+ %true
+ ];
+ [
+ "xxx yyy";
+ %false;
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.in b/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.in
new file mode 100644
index 0000000000..ddc6272247
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.in
@@ -0,0 +1,8 @@
+{"key"="1";"subkey"="1";"value"=""};
+{"key"="2";"subkey"="2";"value"="a"};
+{"key"="3";"subkey"="3";"value"="aax"};
+{"key"="4";"subkey"="4";"value"="xaax"};
+{"key"="5";"subkey"="5";"value"="xaaxaaxaa"};
+{"key"="6";"subkey"="6";"value"="XAXA"};
+{"key"="7";"subkey"="7";"value"="7"};
+{"key"="8";"subkey"="8";"value"="QC transfer task JAVA"};
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.sql b/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.sql
new file mode 100644
index 0000000000..f1bd639e34
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/Basic.sql
@@ -0,0 +1,31 @@
+/* syntax version 1 */
+$match = Hyperscan::Match("a.*");
+$grep = Hyperscan::Grep("axa");
+$insensitive_grep = Hyperscan::Grep("(?i)axa");
+$multi_match = Hyperscan::MultiMatch(@@a.*
+.*a.*
+.*a
+.*axa.*@@);
+$multi_match2 = Hyperscan::MultiMatch(@@YQL.*
+QC.*
+.*transfer task.*@@);
+
+$capture = Hyperscan::Capture(".*a{2}.*");
+$capture_many = Hyperscan::Capture(".*x(a+).*");
+$replace = Hyperscan::Replace("xa");
+
+SELECT
+ value,
+ $match(value) AS match,
+ $grep(value) AS grep,
+ $insensitive_grep(value) AS insensitive_grep,
+ $multi_match(value) AS multi_match,
+ $multi_match(value).0 AS some_multi_match,
+ $multi_match2(value) AS multi_match2,
+ $multi_match2(value).0 AS some_multi_match2a,
+ $multi_match2(value).1 AS some_multi_match2b,
+ $multi_match2(value).2 AS some_multi_match2c,
+ $capture(value) AS capture,
+ $capture_many(value) AS capture_many,
+ $replace(value, "b") AS replace
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.in b/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.in
new file mode 100644
index 0000000000..e2737f40a1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="1";"value"="xx000xx"};
+{"key"="2";"subkey"="2";"value"="lLlLl"};
+{"key"="3";"subkey"="3";"value"="a1 b2 c3"};
+{"key"="4";"subkey"="4";"value"="xxx yyy"};
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.sql b/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.sql
new file mode 100644
index 0000000000..4f19373b65
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/CharacterClasses.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+$digits = Hyperscan::Grep("\\d+");
+$spaces = Hyperscan::Grep("\\s+");
+
+SELECT
+ value,
+ $digits(value) AS digits,
+ $spaces(value) AS spaces
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.cfg b/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.cfg
new file mode 100644
index 0000000000..7f181f61d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.cfg
@@ -0,0 +1,2 @@
+in yt.plato.Input Basic.in
+xfail
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.sql b/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.sql
new file mode 100644
index 0000000000..f824261eee
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/cases/Error.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+$match = Hyperscan::Match("*");
+--PRAGMA config.flags("LLVM","OFF");
+SELECT $match(value) AS match FROM Input;
diff --git a/ydb/library/yql/udfs/common/hyperscan/test/ya.make b/ydb/library/yql/udfs/common/hyperscan/test/ya.make
new file mode 100644
index 0000000000..bf38f0843c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/hyperscan/test/ya.make
@@ -0,0 +1,17 @@
+IF (OS_LINUX AND CLANG)
+
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/hyperscan)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
+
+ENDIF()
diff --git a/ydb/library/yql/udfs/common/hyperscan/ya.make b/ydb/library/yql/udfs/common/hyperscan/ya.make
index 5f248525bf..edeb0504a0 100644
--- a/ydb/library/yql/udfs/common/hyperscan/ya.make
+++ b/ydb/library/yql/udfs/common/hyperscan/ya.make
@@ -23,3 +23,7 @@ ELSE()
LIBRARY()
END()
ENDIF()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/ip_base/test/canondata/result.json b/ydb/library/yql/udfs/common/ip_base/test/canondata/result.json
new file mode 100644
index 0000000000..fb6112fc5b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/ip_base/test/canondata/result.json
@@ -0,0 +1,7 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/ip_base/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/ip_base/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..c80bc2d498
--- /dev/null
+++ b/ydb/library/yql/udfs/common/ip_base/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,281 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "internal_representation";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "round_trip";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "is_ipv4";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_ipv6";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_embedded_ipv4";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "all_ipv6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "default_subnet";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "small_subnet";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "large_subnet";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\x7F\0\0\1"
+ ];
+ [
+ "127.0.0.1"
+ ];
+ %true;
+ %false;
+ %false;
+ [
+ "::ffff:127.0.0.1"
+ ];
+ [
+ "127.0.0.0"
+ ];
+ [
+ "127.0.0.1"
+ ];
+ [
+ "127.0.0.0"
+ ]
+ ];
+ [
+ [
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"
+ ];
+ [
+ "::1"
+ ];
+ %false;
+ %true;
+ %false;
+ [
+ "::1"
+ ];
+ [
+ "::"
+ ];
+ [
+ "::"
+ ];
+ [
+ "::"
+ ]
+ ];
+ [
+ [
+ [
+ "1bTBAw=="
+ ]
+ ];
+ [
+ "213.180.193.3"
+ ];
+ %true;
+ %false;
+ %false;
+ [
+ "::ffff:213.180.193.3"
+ ];
+ [
+ "213.180.193.0"
+ ];
+ [
+ "213.180.193.3"
+ ];
+ [
+ "213.180.0.0"
+ ]
+ ];
+ [
+ [
+ [
+ "KgIGuAAAAAAAAAAAAAAAAw=="
+ ]
+ ];
+ [
+ "2a02:6b8::3"
+ ];
+ %false;
+ %true;
+ %false;
+ [
+ "2a02:6b8::3"
+ ];
+ [
+ "2a02:6b8::"
+ ];
+ [
+ "2a02:6b8::"
+ ];
+ [
+ "2a02::"
+ ]
+ ];
+ [
+ [
+ [
+ "JADLACBIAAEAAAAAaBwbZQ=="
+ ]
+ ];
+ [
+ "2400:cb00:2048:1::681c:1b65"
+ ];
+ %false;
+ %true;
+ %false;
+ [
+ "2400:cb00:2048:1::681c:1b65"
+ ];
+ [
+ "2400:cb00:2048:1::"
+ ];
+ [
+ "2400:cb00:2048:1::681c:1b60"
+ ];
+ [
+ "2400::"
+ ]
+ ];
+ [
+ [
+ [
+ "/oAAAAAAAAACFbL//qlnzg=="
+ ]
+ ];
+ [
+ "fe80::215:b2ff:fea9:67ce"
+ ];
+ %false;
+ %true;
+ %false;
+ [
+ "fe80::215:b2ff:fea9:67ce"
+ ];
+ [
+ "fe80::"
+ ];
+ [
+ "fe80::215:b2ff:fea9:67c8"
+ ];
+ [
+ "fe80::"
+ ]
+ ];
+ [
+ [
+ [
+ "AAAAAAAAAAAAAP//TUubAw=="
+ ]
+ ];
+ [
+ "::ffff:77.75.155.3"
+ ];
+ %false;
+ %true;
+ %true;
+ [
+ "::ffff:77.75.155.3"
+ ];
+ [
+ "::"
+ ];
+ [
+ "::ffff:77.75.155.0"
+ ];
+ [
+ "::"
+ ]
+ ];
+ [
+ #;
+ #;
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.in b/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.in
new file mode 100644
index 0000000000..8e7fa79258
--- /dev/null
+++ b/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.in
@@ -0,0 +1,8 @@
+{"key"="127.0.0.1";"subkey"="";"value"=""};
+{"key"="::1";"subkey"="";"value"=""};
+{"key"="213.180.193.3";"subkey"="";"value"=""};
+{"key"="2a02:6b8::3";"subkey"="";"value"=""};
+{"key"="2400:cb00:2048:1::681c:1b65";"subkey"="";"value"=""};
+{"key"="fe80::215:b2ff:fea9:67ce";"subkey"="";"value"=""};
+{"key"="::ffff:77.75.155.3";"subkey"="";"value"=""};
+{"key"="sdfsdfsdf";"subkey"="";"value"=""};
diff --git a/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.sql b/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.sql
new file mode 100644
index 0000000000..effb59e5ee
--- /dev/null
+++ b/ydb/library/yql/udfs/common/ip_base/test/cases/Basic.sql
@@ -0,0 +1,14 @@
+/* syntax version 1 */
+SELECT
+ internal_representation AS internal_representation,
+ Ip::ToString(internal_representation) AS round_trip,
+ Ip::IsIPv4(internal_representation) AS is_ipv4,
+ Ip::IsIPv6(internal_representation) AS is_ipv6,
+ Ip::IsEmbeddedIPv4(internal_representation) AS is_embedded_ipv4,
+ Ip::ToString(Ip::ConvertToIPv6(internal_representation)) AS all_ipv6,
+ Ip::ToString(Ip::GetSubnet(internal_representation)) AS default_subnet,
+ Ip::ToString(Ip::GetSubnet(internal_representation, 125)) AS small_subnet,
+ Ip::ToString(Ip::GetSubnet(internal_representation, 16)) AS large_subnet
+FROM (
+ SELECT Ip::FromString(key) AS internal_representation FROM Input
+);
diff --git a/ydb/library/yql/udfs/common/ip_base/test/ya.make b/ydb/library/yql/udfs/common/ip_base/test/ya.make
new file mode 100644
index 0000000000..1a21e6734b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/ip_base/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+DEPENDS(ydb/library/yql/udfs/common/ip_base)
+
+END()
diff --git a/ydb/library/yql/udfs/common/ip_base/ya.make b/ydb/library/yql/udfs/common/ip_base/ya.make
index 6b472fdc06..1fe3d056ed 100644
--- a/ydb/library/yql/udfs/common/ip_base/ya.make
+++ b/ydb/library/yql/udfs/common/ip_base/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json/test/canondata/result.json b/ydb/library/yql/udfs/common/json/test/canondata/result.json
new file mode 100644
index 0000000000..fb6112fc5b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json/test/canondata/result.json
@@ -0,0 +1,7 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/json/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/json/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..8cd3200dab
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,57 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "11"
+ ];
+ [
+ ""
+ ];
+ []
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json/test/cases/Basic.sql b/ydb/library/yql/udfs/common/json/test/cases/Basic.sql
new file mode 100644
index 0000000000..512246d766
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json/test/cases/Basic.sql
@@ -0,0 +1,12 @@
+/* syntax version 0 */
+$json1 = @@{
+ "x": {
+ "y": ["15", "11", "17"],
+ "z": 1
+ }
+}@@;
+
+SELECT
+ Json::GetField($json1, "/x/y/[1]"),
+ Json::GetField("[]", "/"),
+ Json::GetField($json1, "///");
diff --git a/ydb/library/yql/udfs/common/json/test/ya.make b/ydb/library/yql/udfs/common/json/test/ya.make
new file mode 100644
index 0000000000..73cf7d2f0b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/json)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/json/ya.make b/ydb/library/yql/udfs/common/json/ya.make
index 72f7a26607..292a0fc1dd 100644
--- a/ydb/library/yql/udfs/common/json/ya.make
+++ b/ydb/library/yql/udfs/common/json/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/result.json b/ydb/library/yql/udfs/common/json2/test/canondata/result.json
new file mode 100644
index 0000000000..086f5e77ea
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/result.json
@@ -0,0 +1,42 @@
+{
+ "test.test[AsJsonNode]": [
+ {
+ "uri": "file://test.test_AsJsonNode_/results.txt"
+ }
+ ],
+ "test.test[SerializeParse]": [
+ {
+ "uri": "file://test.test_SerializeParse_/results.txt"
+ }
+ ],
+ "test.test[SqlExists]": [
+ {
+ "uri": "file://test.test_SqlExists_/results.txt"
+ }
+ ],
+ "test.test[SqlQueryError]": [
+ {
+ "uri": "file://test.test_SqlQueryError_/extracted"
+ }
+ ],
+ "test.test[SqlQuery]": [
+ {
+ "uri": "file://test.test_SqlQuery_/results.txt"
+ }
+ ],
+ "test.test[SqlTryExistsError]": [
+ {
+ "uri": "file://test.test_SqlTryExistsError_/extracted"
+ }
+ ],
+ "test.test[SqlTryExists]": [
+ {
+ "uri": "file://test.test_SqlTryExists_/results.txt"
+ }
+ ],
+ "test.test[SqlValue]": [
+ {
+ "uri": "file://test.test_SqlValue_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_AsJsonNode_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_AsJsonNode_/results.txt
new file mode 100644
index 0000000000..fd6bba35bc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_AsJsonNode_/results.txt
@@ -0,0 +1,84 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column7";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "\"string\"";
+ "null";
+ "1.2345";
+ "null";
+ "true";
+ "null";
+ "{\"key\":28}";
+ "null"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SerializeParse_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SerializeParse_/results.txt
new file mode 100644
index 0000000000..58a867b34e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SerializeParse_/results.txt
@@ -0,0 +1,102 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Json"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "[]";
+ "{}";
+ "[1,3,4,5,6]";
+ "{\"x\":1234}"
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "JsonDocument"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "JsonDocument"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "JsonDocument"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "JsonDocument"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "[]";
+ "{}";
+ "[1,3,4,5,6]";
+ "{\"x\":1234}"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlExists_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlExists_/results.txt
new file mode 100644
index 0000000000..1b74c43a71
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlExists_/results.txt
@@ -0,0 +1,195 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ %false
+ ];
+ [
+ %false
+ ];
+ [
+ %false
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %false
+ ];
+ [
+ %true
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQueryError_/extracted b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQueryError_/extracted
new file mode 100644
index 0000000000..cfa4d894a6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQueryError_/extracted
@@ -0,0 +1,10 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:12:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:14:12: Fatal: ydb/library/yql/udfs/common/json2/sql_query.h:xxx: Error executing jsonpath:
+jsonpath:1:8: Error: Member not found, code: 4702
+
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, NULL, true, NULL);
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQuery_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQuery_/results.txt
new file mode 100644
index 0000000000..0773abf2be
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlQuery_/results.txt
@@ -0,0 +1,400 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"y\":123}"
+ ];
+ [
+ "[123,456]"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ "{}"
+ ];
+ [
+ "[]"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ "{}"
+ ];
+ [
+ "[]"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "[123]"
+ ];
+ [
+ "[123]"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"y\":123}"
+ ];
+ [
+ "[{\"y\":123}]"
+ ];
+ [
+ "{\"y\":123}"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "[123,456]"
+ ];
+ [
+ "[[123,456]]"
+ ];
+ [
+ "[123,456]"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{}"
+ ];
+ [
+ "[]"
+ ];
+ [
+ "[]"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExistsError_/extracted b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExistsError_/extracted
new file mode 100644
index 0000000000..34031fde35
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExistsError_/extracted
@@ -0,0 +1,10 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:12:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:14:12: Fatal: ydb/library/yql/udfs/common/json2/sql_exists.h:xxx: Error executing jsonpath:
+jsonpath:1:8: Error: Expected object, code: 4701
+
+ Json2::SqlTryExists($json, $path, AsDict());
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExists_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExists_/results.txt
new file mode 100644
index 0000000000..4a5f62bc86
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlTryExists_/results.txt
@@ -0,0 +1,83 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlValue_/results.txt b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlValue_/results.txt
new file mode 100644
index 0000000000..b5aeb82c9a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/canondata/test.test_SqlValue_/results.txt
@@ -0,0 +1,1663 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1";
+ [
+ "some string value"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Member not found, code: 4702\n"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Expected object, code: 4701\n"
+ ]
+ ];
+ [
+ "1";
+ #
+ ];
+ [
+ "1";
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1";
+ [
+ "2856"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Member not found, code: 4702\n"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Expected object, code: 4701\n"
+ ]
+ ];
+ [
+ "1";
+ #
+ ];
+ [
+ "1";
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1";
+ [
+ "2.71828"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Member not found, code: 4702\n"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Expected object, code: 4701\n"
+ ]
+ ];
+ [
+ "1";
+ #
+ ];
+ [
+ "1";
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1";
+ [
+ %true
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Member not found, code: 4702\n"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Error executing jsonpath:\njsonpath:1:8: Error: Expected object, code: 4701\n"
+ ]
+ ];
+ [
+ "1";
+ #
+ ];
+ [
+ "1";
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1";
+ [
+ "some string value"
+ ]
+ ];
+ [
+ "1";
+ [
+ "2856"
+ ]
+ ];
+ [
+ "1";
+ [
+ "2.71828"
+ ]
+ ];
+ [
+ "1";
+ [
+ "true"
+ ]
+ ];
+ [
+ "1";
+ #
+ ];
+ [
+ "1";
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "1";
+ [
+ "2856"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Cannot convert extracted JSON value to target type"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Uint8"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "0";
+ [
+ "1";
+ "Extracted JSON value is either object or array"
+ ]
+ ];
+ [
+ "0";
+ [
+ "1";
+ "Extracted JSON value is either object or array"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/AsJsonNode.sql b/ydb/library/yql/udfs/common/json2/test/cases/AsJsonNode.sql
new file mode 100644
index 0000000000..2d85d5576c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/AsJsonNode.sql
@@ -0,0 +1,9 @@
+SELECT
+ Json2::Utf8AsJsonNode(CAST("string" as Utf8)),
+ Json2::Utf8AsJsonNode(NULL),
+ Json2::DoubleAsJsonNode(1.2345),
+ Json2::DoubleAsJsonNode(NULL),
+ Json2::BoolAsJsonNode(true),
+ Json2::BoolAsJsonNode(NULL),
+ Json2::JsonAsJsonNode(CAST(@@{"key": 28}@@ as Json)),
+ Json2::JsonAsJsonNode(NULL);
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SerializeParse.sql b/ydb/library/yql/udfs/common/json2/test/cases/SerializeParse.sql
new file mode 100644
index 0000000000..1d5eb42d0c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SerializeParse.sql
@@ -0,0 +1,15 @@
+$id = ($json) -> { RETURN Json2::Serialize(Json2::Parse($json)); };
+
+SELECT
+ $id("[]"),
+ $id("{}"),
+ $id("[1, 3, 4, 5, 6]"),
+ $id(@@{"x": 1234}@@);
+
+$id_jd = ($json) -> { RETURN Json2::SerializeToJsonDocument(Json2::Parse($json)); };
+
+SELECT
+ $id_jd("[]"),
+ $id_jd("{}"),
+ $id_jd("[1, 3, 4, 5, 6]"),
+ $id_jd(@@{"x": 1234}@@);
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlExists.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlExists.sql
new file mode 100644
index 0000000000..34f475fe5a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlExists.sql
@@ -0,0 +1,25 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+-- Key exists
+SELECT
+ Json2::SqlExists(CAST(@@{"x": 123}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": {"key": "value"}}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": [1, 2, 3]}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": null}@@ as Json), $path, AsDict(), false);
+
+-- Key is missing
+SELECT
+ Json2::SqlExists(NULL, $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"not_x": 123}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST("{}" as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST("[]" as Json), $path, AsDict(), false);
+
+-- Error handling
+$json = CAST("[]" as Json);
+
+SELECT
+ Json2::SqlExists($json, $path, AsDict(), false),
+ Json2::SqlExists($json, $path, AsDict(), true),
+ Json2::SqlExists($json, $path, AsDict(), NULL); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlQuery.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlQuery.sql
new file mode 100644
index 0000000000..38750aec51
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlQuery.sql
@@ -0,0 +1,52 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+$array = CAST("[]" as Json);
+$object = CAST("{}" as Json);
+
+-- Valid cases
+$nested_object = CAST(@@{"x": {"y": 123}}@@ as Json);
+$nested_array = CAST(@@{"x": [123, 456]}@@ as Json);
+SELECT
+ Json2::SqlQuery($nested_object, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($nested_array, $path, AsDict(), false, $array, false, $object);
+
+-- Null handling
+SELECT
+ Json2::SqlQuery(NULL, $path, AsDict(), false, $array, false, $object);
+
+-- Errors
+$jsonpath_error = CAST(@@{"y": []}@@ as Json);
+SELECT
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $array, false, NULL),
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $object, false, $array);
+
+$mismatch_error = CAST(@@{"x": 123}@@ as Json);
+SELECT
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $array, false, NULL),
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $object, false, $array);
+
+-- Wrap
+$nested_value = CAST(@@{"x": 123}@@ as Json);
+SELECT
+ Json2::SqlQueryWrap($nested_value, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_value, $path, AsDict(), false, $object, false, $array);
+
+SELECT
+ Json2::SqlQuery($nested_object, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryWrap($nested_object, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_object, $path, AsDict(), false, $object, false, $array);
+
+SELECT
+ Json2::SqlQuery($nested_array, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryWrap($nested_array, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_array, $path, AsDict(), false, $object, false, $array);
+
+-- Wrap empty result
+$path_lax = Json2::CompilePath("lax $.x");
+SELECT
+ Json2::SqlQuery($object, $path_lax, AsDict(), false, $object, false, $object),
+ Json2::SqlQueryWrap($object, $path_lax, AsDict(), false, $object, false, $object),
+ Json2::SqlQueryConditionalWrap($object, $path_lax, AsDict(), false, $object, false, $object); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.cfg b/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.cfg
new file mode 100644
index 0000000000..eb2e5315d1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.cfg
@@ -0,0 +1 @@
+xfail \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.sql
new file mode 100644
index 0000000000..4aaa329fc0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlQueryError.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+$jsonpath_error = CAST(@@{"y": []}@@ as Json);
+SELECT
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, NULL, true, NULL); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExists.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExists.sql
new file mode 100644
index 0000000000..f42bd5628d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExists.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+-- Key exists
+SELECT
+ Json2::SqlTryExists(NULL, $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": 123}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": {"key": "value"}}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": [1, 2, 3]}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": null}@@ as Json), $path, AsDict());
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.cfg b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.cfg
new file mode 100644
index 0000000000..eb2e5315d1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.cfg
@@ -0,0 +1 @@
+xfail \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.sql
new file mode 100644
index 0000000000..3d0440b3ca
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlTryExistsError.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+$json = CAST("[]" as Json);
+
+SELECT
+ Json2::SqlTryExists($json, $path, AsDict()); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/cases/SqlValue.sql b/ydb/library/yql/udfs/common/json2/test/cases/SqlValue.sql
new file mode 100644
index 0000000000..8f86edee79
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/cases/SqlValue.sql
@@ -0,0 +1,95 @@
+/* syntax version 1 */
+
+-- Plain cases
+$path = Json2::CompilePath("strict $.x");
+$empty_object = CAST("{}" as Json);
+$empty_array = CAST("[]" as Json);
+$null_key = CAST(@@{
+ "x": null
+}@@ as Json);
+
+$string_json = CAST(@@{
+ "x": "some string value"
+}@@ as Json);
+SELECT
+ Json2::SqlValueUtf8($string_json, $path, AsDict()),
+ Json2::SqlValueUtf8($empty_object, $path, AsDict()),
+ Json2::SqlValueUtf8($empty_array, $path, AsDict()),
+ Json2::SqlValueUtf8($null_key, $path, AsDict()),
+ Json2::SqlValueUtf8(NULL, $path, AsDict());
+
+$int64_json = CAST(@@{
+ "x": 2856
+}@@ as Json);
+SELECT
+ Json2::SqlValueInt64($int64_json, $path, AsDict()),
+ Json2::SqlValueInt64($empty_object, $path, AsDict()),
+ Json2::SqlValueInt64($empty_array, $path, AsDict()),
+ Json2::SqlValueInt64($null_key, $path, AsDict()),
+ Json2::SqlValueInt64(NULL, $path, AsDict());
+
+$double_json = CAST(@@{
+ "x": 2.71828
+}@@ as Json);
+SELECT
+ Json2::SqlValueNumber($double_json, $path, AsDict()),
+ Json2::SqlValueNumber($empty_object, $path, AsDict()),
+ Json2::SqlValueNumber($empty_array, $path, AsDict()),
+ Json2::SqlValueNumber($null_key, $path, AsDict()),
+ Json2::SqlValueNumber(NULL, $path, AsDict());
+
+$bool_json = CAST(@@{
+ "x": true
+}@@ as Json);
+SELECT
+ Json2::SqlValueBool($bool_json, $path, AsDict()),
+ Json2::SqlValueBool($empty_object, $path, AsDict()),
+ Json2::SqlValueBool($empty_array, $path, AsDict()),
+ Json2::SqlValueBool($null_key, $path, AsDict()),
+ Json2::SqlValueBool(NULL, $path, AsDict());
+
+-- Convert cases
+SELECT
+ Json2::SqlValueConvertToUtf8($string_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($int64_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($double_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($bool_json, $path, AsDict()),
+ -- NOTE: Here SQL null must be returned, not "null" string
+ Json2::SqlValueConvertToUtf8($null_key, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8(NULL, $path, AsDict());
+
+-- Error cases
+SELECT
+ Json2::SqlValueUtf8($int64_json, $path, AsDict()),
+ Json2::SqlValueUtf8($double_json, $path, AsDict()),
+ Json2::SqlValueUtf8($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueInt64($string_json, $path, AsDict()),
+ Json2::SqlValueInt64($double_json, $path, AsDict()),
+ Json2::SqlValueInt64($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueNumber($string_json, $path, AsDict()),
+ -- NOTE: Here int64 is automatically converted to double as it is possible without precision loss
+ Json2::SqlValueNumber($int64_json, $path, AsDict()),
+ Json2::SqlValueNumber($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueBool($string_json, $path, AsDict()),
+ Json2::SqlValueBool($int64_json, $path, AsDict()),
+ Json2::SqlValueBool($double_json, $path, AsDict());
+
+$nested_object_json = CAST(@@{
+ "x": {
+ "a": 1
+ }
+}@@ as Json);
+
+$nested_array_json = CAST(@@{
+ "x": [29, 32, "some string"]
+}@@ as Json);
+
+SELECT
+ Json2::SqlValueBool($nested_object_json, $path, AsDict()),
+ Json2::SqlValueBool($nested_array_json, $path, AsDict()); \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/json2/test/ya.make b/ydb/library/yql/udfs/common/json2/test/ya.make
new file mode 100644
index 0000000000..f60cc670b7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/json2/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/json2)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/json2/ya.make b/ydb/library/yql/udfs/common/json2/ya.make
index ef41074955..15ccf5a74d 100644
--- a/ydb/library/yql/udfs/common/json2/ya.make
+++ b/ydb/library/yql/udfs/common/json2/ya.make
@@ -17,3 +17,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
diff --git a/ydb/library/yql/udfs/common/pire/test/canondata/result.json b/ydb/library/yql/udfs/common/pire/test/canondata/result.json
new file mode 100644
index 0000000000..2ec1b95e9a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/canondata/result.json
@@ -0,0 +1,12 @@
+{
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ],
+ "test.test[CharacterClasses]": [
+ {
+ "uri": "file://test.test_CharacterClasses_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/pire/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/pire/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..6b3d19d9a1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,508 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "insensitive_grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "multi_match";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ];
+ [
+ "some_multi_match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "multi_match2";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ];
+ [
+ "some_multi_match2a";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "some_multi_match2b";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "some_multi_match2c";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "capture";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "capture_many";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "replace";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ ""
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "a";
+ %true;
+ %false;
+ %false;
+ [
+ %true;
+ %true;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "a"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "aax";
+ %true;
+ %false;
+ %false;
+ [
+ %true;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "aax"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "xaax";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ [
+ "a"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "xbax"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "xaaxaaxaa";
+ %false;
+ %true;
+ %true;
+ [
+ %false;
+ %true;
+ %true;
+ %true;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ [
+ "a"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "xaaxaaxba"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "XAXA";
+ %false;
+ %false;
+ %true;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "XAXA"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "7";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ %false;
+ %false;
+ #;
+ #;
+ [
+ "7"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ];
+ [
+ "QC transfer task JAVA";
+ %false;
+ %false;
+ %false;
+ [
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ %false;
+ [
+ %false;
+ %true;
+ %true;
+ %false;
+ %false
+ ];
+ %false;
+ %true;
+ %true;
+ #;
+ #;
+ [
+ "QC transfer task JAVA"
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/pire/test/canondata/test.test_CharacterClasses_/results.txt b/ydb/library/yql/udfs/common/pire/test/canondata/test.test_CharacterClasses_/results.txt
new file mode 100644
index 0000000000..7fe80ff82a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/canondata/test.test_CharacterClasses_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "digits";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "spaces";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "xx000xx";
+ %true;
+ %false
+ ];
+ [
+ "lLlLl";
+ %false;
+ %false
+ ];
+ [
+ "a1 b2 c3";
+ %true;
+ %true
+ ];
+ [
+ "xxx yyy";
+ %false;
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/pire/test/cases/Basic.in b/ydb/library/yql/udfs/common/pire/test/cases/Basic.in
new file mode 100644
index 0000000000..ddc6272247
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/cases/Basic.in
@@ -0,0 +1,8 @@
+{"key"="1";"subkey"="1";"value"=""};
+{"key"="2";"subkey"="2";"value"="a"};
+{"key"="3";"subkey"="3";"value"="aax"};
+{"key"="4";"subkey"="4";"value"="xaax"};
+{"key"="5";"subkey"="5";"value"="xaaxaaxaa"};
+{"key"="6";"subkey"="6";"value"="XAXA"};
+{"key"="7";"subkey"="7";"value"="7"};
+{"key"="8";"subkey"="8";"value"="QC transfer task JAVA"};
diff --git a/ydb/library/yql/udfs/common/pire/test/cases/Basic.sql b/ydb/library/yql/udfs/common/pire/test/cases/Basic.sql
new file mode 100644
index 0000000000..b13078f323
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/cases/Basic.sql
@@ -0,0 +1,32 @@
+/* syntax version 1 */
+$match = Pire::Match("a.*");
+$grep = Pire::Grep("axa");
+$insensitive_grep = Pire::Grep("(?i)axa");
+$multi_match = Pire::MultiMatch(@@a.*
+.*a.*
+.*a
+.*axa.*@@);
+$multi_match2 = Pire::MultiMatch(@@YQL.*
+QC.*
+.*transfer task.*@@);
+
+$capture = Pire::Capture(".*x(a).*");
+$capture_many = Pire::Capture(".*x(a+).*");
+$replace = Pire::Replace(".*x(a).*");
+
+SELECT
+ value,
+ $match(value) AS match,
+ $grep(value) AS grep,
+ $insensitive_grep(value) AS insensitive_grep,
+ $multi_match(value) AS multi_match,
+ $multi_match(value).0 AS some_multi_match,
+ $multi_match2(value) AS multi_match2,
+ $multi_match2(value).0 AS some_multi_match2a,
+ $multi_match2(value).1 AS some_multi_match2b,
+ $multi_match2(value).2 AS some_multi_match2c,
+ $capture(value) AS capture,
+ $capture_many(value) AS capture_many,
+ $replace(value, "b") AS replace,
+ $multi_match2(Nothing(String?))
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.in b/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.in
new file mode 100644
index 0000000000..e2737f40a1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.in
@@ -0,0 +1,4 @@
+{"key"="1";"subkey"="1";"value"="xx000xx"};
+{"key"="2";"subkey"="2";"value"="lLlLl"};
+{"key"="3";"subkey"="3";"value"="a1 b2 c3"};
+{"key"="4";"subkey"="4";"value"="xxx yyy"};
diff --git a/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.sql b/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.sql
new file mode 100644
index 0000000000..be8ab6c294
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/cases/CharacterClasses.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+$digits = Pire::Grep("\\d+");
+$spaces = Pire::Grep("\\s+");
+
+SELECT
+ value,
+ $digits(value) AS digits,
+ $spaces(value) AS spaces
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/pire/test/ya.make b/ydb/library/yql/udfs/common/pire/test/ya.make
new file mode 100644
index 0000000000..817bb1ac5c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/pire/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/pire)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/pire/ya.make b/ydb/library/yql/udfs/common/pire/ya.make
index b87ebf9f74..05f4576a8f 100644
--- a/ydb/library/yql/udfs/common/pire/ya.make
+++ b/ydb/library/yql/udfs/common/pire/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/result.json b/ydb/library/yql/udfs/common/re2/test/canondata/result.json
new file mode 100644
index 0000000000..2be3e88681
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/result.json
@@ -0,0 +1,37 @@
+{
+ "test.test[BackslashInLike]": [
+ {
+ "uri": "file://test.test_BackslashInLike_/results.txt"
+ }
+ ],
+ "test.test[BasicOptions]": [
+ {
+ "uri": "file://test.test_BasicOptions_/results.txt"
+ }
+ ],
+ "test.test[Basic]": [
+ {
+ "uri": "file://test.test_Basic_/results.txt"
+ }
+ ],
+ "test.test[DefOptions]": [
+ {
+ "uri": "file://test.test_DefOptions_/results.txt"
+ }
+ ],
+ "test.test[MutableLambda]": [
+ {
+ "uri": "file://test.test_MutableLambda_/results.txt"
+ }
+ ],
+ "test.test[SkipGroup]": [
+ {
+ "uri": "file://test.test_SkipGroup_/results.txt"
+ }
+ ],
+ "test.test[Space]": [
+ {
+ "uri": "file://test.test_Space_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BackslashInLike_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BackslashInLike_/results.txt
new file mode 100644
index 0000000000..cbd3b76eba
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BackslashInLike_/results.txt
@@ -0,0 +1,28 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %false
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BasicOptions_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BasicOptions_/results.txt
new file mode 100644
index 0000000000..ba109c8a08
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_BasicOptions_/results.txt
@@ -0,0 +1,278 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "capture";
+ [
+ "StructType";
+ [
+ [
+ "_0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "_1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "foo";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "capture_member";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "replace";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "count";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "tokens";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ ""
+ ];
+ "0";
+ []
+ ];
+ [
+ "a";
+ %false;
+ %true;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "a"
+ ];
+ "1";
+ [
+ "a"
+ ]
+ ];
+ [
+ "aax";
+ %false;
+ %true;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "aax"
+ ];
+ "2";
+ [
+ "aax"
+ ]
+ ];
+ [
+ "xaax1";
+ %false;
+ %true;
+ [
+ [
+ "xaax1"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "x"
+ ]
+ ];
+ [
+ "aa"
+ ];
+ [
+ "baaz1"
+ ];
+ "2";
+ [
+ "xaax1"
+ ]
+ ];
+ [
+ "xaaxaaxaa";
+ %false;
+ %true;
+ [
+ [
+ "xaaxaaxaa"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "x"
+ ]
+ ];
+ [
+ "aa"
+ ];
+ [
+ "baazaaxaa"
+ ];
+ "6";
+ [
+ "xaaxaaxaa"
+ ]
+ ];
+ [
+ "sup, dude";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "sup, dude"
+ ];
+ "0";
+ [
+ "sup";
+ "dude"
+ ]
+ ];
+ [
+ "one, two, three.";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "one, two, three."
+ ];
+ "0";
+ [
+ "one";
+ "two";
+ "three"
+ ]
+ ];
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD1\x8D\xD1\x82\xD0\xBE \xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB5, \xD0\xB1\xD1\x83\xD0\xBA\xD0\xB2\xD1\213111!";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD1\x8D\xD1\x82\xD0\xBE \xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB5, \xD0\xB1\xD1\x83\xD0\xBA\xD0\xB2\xD1\213111!"
+ ];
+ "0";
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82";
+ "\xD1\x8D\xD1\x82\xD0\xBE";
+ "\xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB5";
+ "\xD0\xB1\xD1\x83\xD0\xBA\xD0\xB2\xD1\213111"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Basic_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Basic_/results.txt
new file mode 100644
index 0000000000..d57d92025e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Basic_/results.txt
@@ -0,0 +1,257 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "match";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "grep";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "capture";
+ [
+ "StructType";
+ [
+ [
+ "_0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "_1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "foo";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "capture_member";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "replace";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "count";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ];
+ [
+ "tokens";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ ""
+ ];
+ "0";
+ []
+ ];
+ [
+ "a";
+ %false;
+ %true;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "a"
+ ];
+ "1";
+ [
+ "a"
+ ]
+ ];
+ [
+ "aax";
+ %false;
+ %true;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "aax"
+ ];
+ "2";
+ [
+ "aax"
+ ]
+ ];
+ [
+ "xaax1";
+ %false;
+ %true;
+ [
+ [
+ "xaax1"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "x"
+ ]
+ ];
+ [
+ "aa"
+ ];
+ [
+ "baaz1"
+ ];
+ "2";
+ [
+ "xaax1"
+ ]
+ ];
+ [
+ "xaaxaaxaa";
+ %false;
+ %true;
+ [
+ [
+ "xaaxaaxaa"
+ ];
+ [
+ "aa"
+ ];
+ [
+ "x"
+ ]
+ ];
+ [
+ "aa"
+ ];
+ [
+ "baazaaxaa"
+ ];
+ "6";
+ [
+ "xaaxaaxaa"
+ ]
+ ];
+ [
+ "sup, dude";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "sup, dude"
+ ];
+ "0";
+ [
+ "sup";
+ "dude"
+ ]
+ ];
+ [
+ "one, two, three.";
+ %false;
+ %false;
+ [
+ #;
+ #;
+ #
+ ];
+ #;
+ [
+ "one, two, three."
+ ];
+ "0";
+ [
+ "one";
+ "two";
+ "three"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_DefOptions_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_DefOptions_/results.txt
new file mode 100644
index 0000000000..1287d3da2e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_DefOptions_/results.txt
@@ -0,0 +1,266 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "StructType";
+ [
+ [
+ "CaseSensitive";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "DotNl";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "Literal";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "LogErrors";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "LongestMatch";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "MaxMem";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "NeverCapture";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "NeverNl";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "OneLine";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "PerlClasses";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "PosixSyntax";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "Utf8";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "WordBoundary";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true;
+ %false;
+ %false;
+ %true;
+ %false;
+ "8388608";
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true;
+ %false
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "StructType";
+ [
+ [
+ "CaseSensitive";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "DotNl";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "Literal";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "LogErrors";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "LongestMatch";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "MaxMem";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "NeverCapture";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "NeverNl";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "OneLine";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "PerlClasses";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "PosixSyntax";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "Utf8";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "WordBoundary";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true;
+ %false;
+ %false;
+ %true;
+ %false;
+ "8388608";
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true;
+ %false
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_MutableLambda_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_MutableLambda_/results.txt
new file mode 100644
index 0000000000..4e62b7d8ce
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_MutableLambda_/results.txt
@@ -0,0 +1,52 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "x";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "e";
+ %false
+ ];
+ [
+ "aa";
+ %true
+ ];
+ [
+ "et";
+ %false
+ ];
+ [
+ "cb";
+ %false
+ ];
+ [
+ "ba";
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_SkipGroup_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_SkipGroup_/results.txt
new file mode 100644
index 0000000000..466ed83950
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_SkipGroup_/results.txt
@@ -0,0 +1,105 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "capture";
+ [
+ "StructType";
+ [
+ [
+ "_0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "_1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "major";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "minor";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "no_groups";
+ [
+ "StructType";
+ [
+ [
+ "_0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari"
+ ];
+ [
+ "Safari"
+ ];
+ [
+ "5"
+ ];
+ [
+ "0"
+ ]
+ ];
+ [
+ [
+ "Intel Mac"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Space_/results.txt b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Space_/results.txt
new file mode 100644
index 0000000000..b62998b697
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/canondata/test.test_Space_/results.txt
@@ -0,0 +1,28 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/BackslashInLike.sql b/ydb/library/yql/udfs/common/re2/test/cases/BackslashInLike.sql
new file mode 100644
index 0000000000..65973c7d81
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/BackslashInLike.sql
@@ -0,0 +1 @@
+select 'utma' like @@%utm\_@@;
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/Basic.in b/ydb/library/yql/udfs/common/re2/test/cases/Basic.in
new file mode 100644
index 0000000000..ba0028e861
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/Basic.in
@@ -0,0 +1,7 @@
+{"key"="1";"subkey"="1";"value"=""};
+{"key"="2";"subkey"="2";"value"="a"};
+{"key"="3";"subkey"="3";"value"="aax"};
+{"key"="4";"subkey"="4";"value"="xaax1"};
+{"key"="5";"subkey"="5";"value"="xaaxaaxaa"};
+{"key"="6";"subkey"="6";"value"="sup, dude"};
+{"key"="7";"subkey"="7";"value"="one, two, three."};
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/Basic.sql b/ydb/library/yql/udfs/common/re2/test/cases/Basic.sql
new file mode 100644
index 0000000000..7d049f88b2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/Basic.sql
@@ -0,0 +1,21 @@
+/* syntax version 1 */
+$match = Re2::Match("[ax]+\d");
+$grep = Re2Posix::Grep("a.*");
+$capture = Re2::Capture(".*(?P<foo>xa?)(a{2,}).*");
+$replace = Re2::Replace("x(a+)x");
+$count = Re2::Count("a");
+-- regex to find all tokens consisting of letters and digist
+-- L stands for "Letters", Nd stands for "Number, decimal digit",
+-- see https://en.wikipedia.org/wiki/Unicode_character_property#General_Category
+$find_and_consume = Re2::FindAndConsume('([\\pL\\p{Nd}]+)');
+
+SELECT
+ value,
+ $match(value) AS match,
+ $grep(value) AS grep,
+ $capture(value) AS capture,
+ $capture(value)._1 AS capture_member,
+ $replace(value, "b\\1z") AS replace,
+ $count(value) AS count,
+ $find_and_consume(value) AS tokens
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.in b/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.in
new file mode 100644
index 0000000000..f63986dffe
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.in
@@ -0,0 +1,8 @@
+{"key"="1";"subkey"="1";"value"=""};
+{"key"="2";"subkey"="2";"value"="a"};
+{"key"="3";"subkey"="3";"value"="aax"};
+{"key"="4";"subkey"="4";"value"="xaax1"};
+{"key"="5";"subkey"="5";"value"="xaaxaaxaa"};
+{"key"="6";"subkey"="6";"value"="sup, dude"};
+{"key"="7";"subkey"="7";"value"="one, two, three."};
+{"key"="7";"subkey"="7";"value"="привет это русские, буквы111!"};
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.sql b/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.sql
new file mode 100644
index 0000000000..a4338c03e1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/BasicOptions.sql
@@ -0,0 +1,22 @@
+/* syntax version 1 */
+$options = Re2::Options(true as Utf8);
+$match = Re2::Match("[ax]+\d",$options);
+$grep = Re2Posix::Grep("a.*",$options);
+$capture = Re2::Capture(".*(?P<foo>xa?)(a{2,}).*",$options);
+$replace = Re2::Replace("x(a+)x",$options);
+$count = Re2::Count("a",$options);
+-- regex to find all tokens consisting of letters and digist
+-- L stands for "Letters", Nd stands for "Number, decimal digit",
+-- see https://en.wikipedia.org/wiki/Unicode_character_property#General_Category
+$find_and_consume = Re2::FindAndConsume('([\\pL\\p{Nd}]+)',$options);
+
+SELECT
+ value,
+ $match(value) AS match,
+ $grep(value) AS grep,
+ $capture(value) AS capture,
+ $capture(value)._1 AS capture_member,
+ $replace(value, "b\\1z") AS replace,
+ $count(value) AS count,
+ $find_and_consume(value) AS tokens
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/DefOptions.sql b/ydb/library/yql/udfs/common/re2/test/cases/DefOptions.sql
new file mode 100644
index 0000000000..d21a7108a8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/DefOptions.sql
@@ -0,0 +1,19 @@
+/* syntax version 1 */
+select Re2::Options(
+ true as `Utf8`,
+ false as PosixSyntax,
+ false as LongestMatch,
+ true as LogErrors,
+ 8<<20 as MaxMem,
+ false as Literal,
+ false as NeverNl,
+ false as DotNl,
+ false as NeverCapture,
+ true as CaseSensitive,
+ false as PerlClasses,
+ false as WordBoundary,
+ false as OneLine
+);
+
+select Re2::Options(
+);
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.in b/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.in
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.in
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.sql b/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.sql
new file mode 100644
index 0000000000..5e3f24be0b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/MutableLambda.sql
@@ -0,0 +1,24 @@
+/* syntax version 1 */
+$regs = AsList("^a","^b");
+
+$input = AsList("e","aa","et","cb","ba");
+
+$table_input = (select * from (select $input as x) flatten by x);
+
+$compiled_regs = ListMap($regs, ($r)->{
+ return Re2::Grep($r);
+});
+
+$f = ($s) -> {
+ $apply_list = ListMap($compiled_regs, ($cr)->{
+ return $cr($s);
+ });
+
+ $filtered = ListFilter($apply_list, ($m)->{
+ return $m;
+ });
+
+ return ListLength(ListTake($filtered,1)) > 0;
+};
+
+select x, $f(x) from $table_input;
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/SkipGroup.sql b/ydb/library/yql/udfs/common/re2/test/cases/SkipGroup.sql
new file mode 100644
index 0000000000..5231c72fcb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/SkipGroup.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+$input = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7";
+$capture = Re2::Capture(
+ "(?:Mozilla|Opera)/(?P<major>\\d)\\.(?P<minor>\\d).*(Safari)"
+);
+$no_groups = Re2::Capture("(?:Intel) Mac");
+
+SELECT
+ $capture($input) AS capture,
+ $no_groups($input) AS no_groups;
diff --git a/ydb/library/yql/udfs/common/re2/test/cases/Space.sql b/ydb/library/yql/udfs/common/re2/test/cases/Space.sql
new file mode 100644
index 0000000000..34f0590ca1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/cases/Space.sql
@@ -0,0 +1,2 @@
+/* syntax version 1 */
+SELECT 'a b c' LIKE 'a b%';
diff --git a/ydb/library/yql/udfs/common/re2/test/ya.make b/ydb/library/yql/udfs/common/re2/test/ya.make
new file mode 100644
index 0000000000..dca0d40179
--- /dev/null
+++ b/ydb/library/yql/udfs/common/re2/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/re2)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/re2/ya.make b/ydb/library/yql/udfs/common/re2/ya.make
index a8269380b8..e68b9105a6 100644
--- a/ydb/library/yql/udfs/common/re2/ya.make
+++ b/ydb/library/yql/udfs/common/re2/ya.make
@@ -16,3 +16,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/result.json b/ydb/library/yql/udfs/common/set/test/canondata/result.json
new file mode 100644
index 0000000000..a235fbf902
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/result.json
@@ -0,0 +1,47 @@
+{
+ "test.test[ListDistinctDictInDict]": [
+ {
+ "uri": "file://test.test_ListDistinctDictInDict_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctDict]": [
+ {
+ "uri": "file://test.test_ListDistinctDict_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctLazyList]": [
+ {
+ "uri": "file://test.test_ListDistinctLazyList_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctLimit]": [
+ {
+ "uri": "file://test.test_ListDistinctLimit_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctSingular]": [
+ {
+ "uri": "file://test.test_ListDistinctSingular_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctStructInDict]": [
+ {
+ "uri": "file://test.test_ListDistinctStructInDict_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctTuple]": [
+ {
+ "uri": "file://test.test_ListDistinctTuple_/results.txt"
+ }
+ ],
+ "test.test[ListDistinctVariant]": [
+ {
+ "uri": "file://test.test_ListDistinctVariant_/results.txt"
+ }
+ ],
+ "test.test[ListDistinct]": [
+ {
+ "uri": "file://test.test_ListDistinct_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDictInDict_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDictInDict_/results.txt
new file mode 100644
index 0000000000..0971436971
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDictInDict_/results.txt
@@ -0,0 +1,79 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DictType";
+ [
+ "DictType";
+ [
+ "DataType";
+ "Int32"
+ ];
+ [
+ "VoidType"
+ ]
+ ];
+ [
+ "VoidType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "Void"
+ ]
+ ];
+ "Void"
+ ]
+ ];
+ [
+ [
+ [
+ [
+ "1";
+ "Void"
+ ]
+ ];
+ "Void"
+ ];
+ [
+ [
+ [
+ "2";
+ "Void"
+ ];
+ [
+ "1";
+ "Void"
+ ]
+ ];
+ "Void"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDict_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDict_/results.txt
new file mode 100644
index 0000000000..c2f9c4e101
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctDict_/results.txt
@@ -0,0 +1,103 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DictType";
+ [
+ "DataType";
+ "Int32"
+ ];
+ [
+ "VoidType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ "1";
+ "Void"
+ ]
+ ];
+ [
+ [
+ "2";
+ "Void"
+ ];
+ [
+ "1";
+ "Void"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DictType";
+ [
+ "DataType";
+ "Int32"
+ ];
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ "1";
+ "3"
+ ]
+ ];
+ [
+ [
+ "1";
+ "2"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLazyList_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLazyList_/results.txt
new file mode 100644
index 0000000000..3749a4a3b7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLazyList_/results.txt
@@ -0,0 +1,85 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "2";
+ "3"
+ ];
+ [
+ "1";
+ "2"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "3"
+ ];
+ [
+ "1";
+ "2"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLimit_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLimit_/results.txt
new file mode 100644
index 0000000000..dbcfe2be9d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctLimit_/results.txt
@@ -0,0 +1,57 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "a";
+ "c";
+ "b"
+ ]
+ ];
+ [
+ "2";
+ [
+ "x";
+ "y";
+ "u"
+ ]
+ ];
+ [
+ "3";
+ [
+ "m"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctSingular_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctSingular_/results.txt
new file mode 100644
index 0000000000..7fb0c4f89b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctSingular_/results.txt
@@ -0,0 +1,115 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "EmptyListType"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ []
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "VoidType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ []
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "EmptyListType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ []
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "EmptyDictType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ []
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctStructInDict_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctStructInDict_/results.txt
new file mode 100644
index 0000000000..09933a72e3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctStructInDict_/results.txt
@@ -0,0 +1,71 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DictType";
+ [
+ "StructType";
+ [
+ [
+ "a";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ];
+ [
+ "VoidType"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ [
+ [
+ "1";
+ "3"
+ ];
+ "Void"
+ ]
+ ];
+ [
+ [
+ [
+ "1";
+ "2"
+ ];
+ "Void"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctTuple_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctTuple_/results.txt
new file mode 100644
index 0000000000..510244f430
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctTuple_/results.txt
@@ -0,0 +1,115 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ [
+ "1";
+ "a"
+ ];
+ [
+ "1";
+ "e"
+ ];
+ [
+ "1";
+ "b"
+ ];
+ [
+ "1";
+ "c"
+ ];
+ [
+ "2";
+ "a"
+ ]
+ ]
+ ];
+ [
+ "2";
+ [
+ [
+ "2";
+ "x"
+ ];
+ [
+ "3";
+ "y"
+ ];
+ [
+ "4";
+ "x"
+ ];
+ [
+ "5";
+ "u"
+ ];
+ [
+ "6";
+ "v"
+ ];
+ [
+ "8";
+ "x"
+ ];
+ [
+ "7";
+ "w"
+ ];
+ [
+ "9";
+ "w"
+ ]
+ ]
+ ];
+ [
+ "3";
+ [
+ [
+ "0";
+ "m"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctVariant_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctVariant_/results.txt
new file mode 100644
index 0000000000..e0ce566a46
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinctVariant_/results.txt
@@ -0,0 +1,108 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Int32"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "str"
+ ];
+ [
+ "0";
+ "1"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "VariantType";
+ [
+ "StructType";
+ [
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "y";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "str"
+ ];
+ [
+ "0";
+ "1"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinct_/results.txt b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinct_/results.txt
new file mode 100644
index 0000000000..937160a457
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/canondata/test.test_ListDistinct_/results.txt
@@ -0,0 +1,60 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "a";
+ "c";
+ "b";
+ "e"
+ ]
+ ];
+ [
+ "2";
+ [
+ "x";
+ "y";
+ "v";
+ "u";
+ "w"
+ ]
+ ];
+ [
+ "3";
+ [
+ "m"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in
new file mode 100644
index 0000000000..af51412a1e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="";"value"="a"};
+{"key"="1";"subkey"="";"value"="b"};
+{"key"="1";"subkey"="";"value"="c"};
+{"key"="1";"subkey"="";"value"="a"};
+{"key"="1";"subkey"="";"value"="e"};
+{"key"="1";"subkey"="";"value"="b"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="y"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="u"};
+{"key"="2";"subkey"="";"value"="v"};
+{"key"="2";"subkey"="";"value"="w"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="w"};
+{"key"="3";"subkey"="";"value"="m"};
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in.attr b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.sql
new file mode 100644
index 0000000000..b13b6c9c71
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinct.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ AGGREGATE_LIST_DISTINCT(value)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDict.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDict.sql
new file mode 100644
index 0000000000..2bee58b66e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDict.sql
@@ -0,0 +1,8 @@
+/* syntax version 1 */
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [{1,2},{1},{1,2}] as x)
+flatten list by x;
+
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [{1:2},{1:3},{1:2}] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDictInDict.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDictInDict.sql
new file mode 100644
index 0000000000..775b8dc797
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctDictInDict.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [{{1,2},{1}},{{1}},{{1,2},{1}}] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLazyList.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLazyList.sql
new file mode 100644
index 0000000000..fcaf49e69d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLazyList.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [[1,2],[1,2,3],YQL::LazyList([1,2])] as x)
+flatten list by x;
+
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [YQL::LazyList([1,2]),[1,3], YQL::LazyList([1,2])] as x)
+flatten list by x;
+
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in
new file mode 100644
index 0000000000..af51412a1e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="";"value"="a"};
+{"key"="1";"subkey"="";"value"="b"};
+{"key"="1";"subkey"="";"value"="c"};
+{"key"="1";"subkey"="";"value"="a"};
+{"key"="1";"subkey"="";"value"="e"};
+{"key"="1";"subkey"="";"value"="b"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="y"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="u"};
+{"key"="2";"subkey"="";"value"="v"};
+{"key"="2";"subkey"="";"value"="w"};
+{"key"="2";"subkey"="";"value"="x"};
+{"key"="2";"subkey"="";"value"="w"};
+{"key"="3";"subkey"="";"value"="m"};
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in.attr b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.sql
new file mode 100644
index 0000000000..439f05776e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctLimit.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ AGGREGATE_LIST_DISTINCT(value, 3)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctSingular.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctSingular.sql
new file mode 100644
index 0000000000..1887ec6180
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctSingular.sql
@@ -0,0 +1,16 @@
+/* syntax version 1 */
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [null, null] as x)
+flatten list by x;
+
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [void(), void()] as x)
+flatten list by x;
+
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [[], []] as x)
+flatten list by x;
+
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [{}, {}] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctStructInDict.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctStructInDict.sql
new file mode 100644
index 0000000000..88acaede01
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctStructInDict.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [{<|a:1,b:2|>},{<|a:1,b:3|>},{<|a:1,b:2|>}] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in
new file mode 100644
index 0000000000..7c638071c1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="1";"value"="a"};
+{"key"="1";"subkey"="1";"value"="b"};
+{"key"="1";"subkey"="1";"value"="c"};
+{"key"="1";"subkey"="2";"value"="a"};
+{"key"="1";"subkey"="1";"value"="e"};
+{"key"="1";"subkey"="1";"value"="b"};
+{"key"="2";"subkey"="2";"value"="x"};
+{"key"="2";"subkey"="3";"value"="y"};
+{"key"="2";"subkey"="4";"value"="x"};
+{"key"="2";"subkey"="5";"value"="u"};
+{"key"="2";"subkey"="6";"value"="v"};
+{"key"="2";"subkey"="7";"value"="w"};
+{"key"="2";"subkey"="8";"value"="x"};
+{"key"="2";"subkey"="9";"value"="w"};
+{"key"="3";"subkey"="0";"value"="m"};
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in.attr b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.sql
new file mode 100644
index 0000000000..8c3472bb85
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctTuple.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ AGGREGATE_LIST_DISTINCT(AsTuple(subkey, value))
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/set/test/cases/ListDistinctVariant.sql b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctVariant.sql
new file mode 100644
index 0000000000..29469d01b1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/cases/ListDistinctVariant.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+$vt1 = Variant<Int32,String>;
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [Variant(1,"0",$vt1),Variant("str","1",$vt1),Variant(1,"0",$vt1)] as x)
+flatten list by x;
+
+$vt2 = Variant<x:Int32,y:String>;
+select AGGREGATE_LIST_DISTINCT(x) from
+(select [Variant(1,"x",$vt2),Variant("str","y",$vt2),Variant(1,"x",$vt2)] as x)
+flatten list by x;
+
diff --git a/ydb/library/yql/udfs/common/set/test/ya.make b/ydb/library/yql/udfs/common/set/test/ya.make
new file mode 100644
index 0000000000..497fb2f653
--- /dev/null
+++ b/ydb/library/yql/udfs/common/set/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/set)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/set/ya.make b/ydb/library/yql/udfs/common/set/ya.make
index 1ad272b98f..05c461cebc 100644
--- a/ydb/library/yql/udfs/common/set/ya.make
+++ b/ydb/library/yql/udfs/common/set/ya.make
@@ -11,3 +11,7 @@ SRCS(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+) \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/result.json b/ydb/library/yql/udfs/common/top/test/canondata/result.json
new file mode 100644
index 0000000000..c09d321f5a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/result.json
@@ -0,0 +1,47 @@
+{
+ "test.test[BottomByTuple]": [
+ {
+ "uri": "file://test.test_BottomByTuple_/results.txt"
+ }
+ ],
+ "test.test[BottomBy]": [
+ {
+ "uri": "file://test.test_BottomBy_/results.txt"
+ }
+ ],
+ "test.test[Bottom]": [
+ {
+ "uri": "file://test.test_Bottom_/results.txt"
+ }
+ ],
+ "test.test[TopBy]": [
+ {
+ "uri": "file://test.test_TopBy_/results.txt"
+ }
+ ],
+ "test.test[TopList]": [
+ {
+ "uri": "file://test.test_TopList_/results.txt"
+ }
+ ],
+ "test.test[TopTuple]": [
+ {
+ "uri": "file://test.test_TopTuple_/results.txt"
+ }
+ ],
+ "test.test[TopVariant]": [
+ {
+ "uri": "file://test.test_TopVariant_/results.txt"
+ }
+ ],
+ "test.test[Top]": [
+ {
+ "uri": "file://test.test_Top_/results.txt"
+ }
+ ],
+ "test.test[Window]": [
+ {
+ "uri": "file://test.test_Window_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomByTuple_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomByTuple_/results.txt
new file mode 100644
index 0000000000..2d0670bd68
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomByTuple_/results.txt
@@ -0,0 +1,119 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ [
+ "13";
+ "f"
+ ];
+ [
+ "2";
+ "b"
+ ];
+ [
+ "4";
+ "d"
+ ];
+ [
+ "5";
+ "a"
+ ];
+ [
+ "7";
+ "c"
+ ];
+ [
+ "8";
+ "e"
+ ]
+ ]
+ ];
+ [
+ "2";
+ [
+ [
+ "1";
+ "g"
+ ];
+ [
+ "2";
+ "c"
+ ];
+ [
+ "3";
+ "e"
+ ];
+ [
+ "4";
+ "a"
+ ];
+ [
+ "6";
+ "b"
+ ];
+ [
+ "9";
+ "d"
+ ];
+ [
+ "9";
+ "f"
+ ];
+ [
+ "9";
+ "h"
+ ]
+ ]
+ ];
+ [
+ "3";
+ [
+ [
+ "1";
+ "a"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomBy_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomBy_/results.txt
new file mode 100644
index 0000000000..9a5eb42565
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_BottomBy_/results.txt
@@ -0,0 +1,61 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "2b";
+ "4d";
+ "5a";
+ "7c";
+ "8e"
+ ]
+ ];
+ [
+ "2";
+ [
+ "1g";
+ "2c";
+ "3e";
+ "4a";
+ "6b"
+ ]
+ ];
+ [
+ "3";
+ [
+ "1a"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_Bottom_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Bottom_/results.txt
new file mode 100644
index 0000000000..4b34ad59ea
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Bottom_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "13";
+ "2";
+ "4";
+ "5"
+ ]
+ ];
+ [
+ "2";
+ [
+ "1";
+ "2";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "3";
+ [
+ "1"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopBy_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopBy_/results.txt
new file mode 100644
index 0000000000..32e6a4c374
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopBy_/results.txt
@@ -0,0 +1,63 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "8e";
+ "7c";
+ "5a";
+ "4d";
+ "2b";
+ "13f"
+ ]
+ ];
+ [
+ "2";
+ [
+ "9d";
+ "9f";
+ "9h";
+ "6b";
+ "4a";
+ "3e"
+ ]
+ ];
+ [
+ "3";
+ [
+ "1a"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopList_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopList_/results.txt
new file mode 100644
index 0000000000..5997422bf7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopList_/results.txt
@@ -0,0 +1,57 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "2";
+ "3"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopTuple_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopTuple_/results.txt
new file mode 100644
index 0000000000..6c5e14b7e2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopTuple_/results.txt
@@ -0,0 +1,103 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ [
+ "8";
+ "e"
+ ];
+ [
+ "7";
+ "c"
+ ];
+ [
+ "5";
+ "a"
+ ];
+ [
+ "4";
+ "d"
+ ];
+ [
+ "2";
+ "b"
+ ]
+ ]
+ ];
+ [
+ "2";
+ [
+ [
+ "9";
+ "h"
+ ];
+ [
+ "9";
+ "f"
+ ];
+ [
+ "9";
+ "d"
+ ];
+ [
+ "6";
+ "b"
+ ];
+ [
+ "4";
+ "a"
+ ]
+ ]
+ ];
+ [
+ "3";
+ [
+ [
+ "1";
+ "a"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopVariant_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopVariant_/results.txt
new file mode 100644
index 0000000000..39139793b1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_TopVariant_/results.txt
@@ -0,0 +1,56 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "VariantType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Int32"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "1";
+ "str"
+ ];
+ [
+ "0";
+ "1"
+ ];
+ [
+ "0";
+ "1"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_Top_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Top_/results.txt
new file mode 100644
index 0000000000..cc053f78cb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Top_/results.txt
@@ -0,0 +1,57 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Float"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ "13";
+ "8";
+ "7"
+ ]
+ ];
+ [
+ "2";
+ [
+ "9";
+ "9";
+ "9"
+ ]
+ ];
+ [
+ "3";
+ [
+ "1"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/canondata/test.test_Window_/results.txt b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Window_/results.txt
new file mode 100644
index 0000000000..2035b95bed
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/canondata/test.test_Window_/results.txt
@@ -0,0 +1,1030 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "upcr_top";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "1"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "7";
+ "1"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "7";
+ "5";
+ "1"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "7";
+ "5";
+ "4"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "7";
+ "5";
+ "4"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "11";
+ "7";
+ "5"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "11";
+ "7";
+ "5"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "upuf_top";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "cruf_top";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "11";
+ "11";
+ "7"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "11";
+ "11";
+ "6"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "11";
+ "11";
+ "6"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "11";
+ "11";
+ "6"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "11";
+ "11";
+ "6"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "11";
+ "6";
+ "2"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "11";
+ "6";
+ "0"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "6";
+ "0"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "6"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "cr22_top";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "7";
+ "5";
+ "1"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "7";
+ "5";
+ "4"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "7";
+ "5";
+ "4"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "11";
+ "7";
+ "5"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "11";
+ "5";
+ "4"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "11";
+ "11";
+ "4"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "11";
+ "11";
+ "3"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "11";
+ "11";
+ "6"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "11";
+ "6";
+ "2"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "11";
+ "6";
+ "0"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "upcr_bottom";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "1"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "1";
+ "7"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "1";
+ "5";
+ "7"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "1";
+ "4";
+ "5"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "1";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "1";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "1";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "1";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "upuf_bottom";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "cruf_bottom";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "0";
+ "1";
+ "2"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "0";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "0";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "0";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "0";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "0";
+ "2";
+ "6"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "0";
+ "2";
+ "6"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "0";
+ "6";
+ "11"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "0";
+ "6"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "6"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "idx";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "x";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ];
+ [
+ "cr22_botto";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ "1";
+ [
+ "1";
+ "5";
+ "7"
+ ]
+ ];
+ [
+ "2";
+ "7";
+ [
+ "1";
+ "4";
+ "5"
+ ]
+ ];
+ [
+ "3";
+ "5";
+ [
+ "1";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "4";
+ "4";
+ [
+ "3";
+ "4";
+ "5"
+ ]
+ ];
+ [
+ "5";
+ "3";
+ [
+ "2";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "6";
+ "11";
+ [
+ "2";
+ "3";
+ "4"
+ ]
+ ];
+ [
+ "7";
+ "2";
+ [
+ "0";
+ "2";
+ "3"
+ ]
+ ];
+ [
+ "8";
+ "11";
+ [
+ "0";
+ "2";
+ "6"
+ ]
+ ];
+ [
+ "9";
+ "0";
+ [
+ "0";
+ "2";
+ "6"
+ ]
+ ];
+ [
+ "10";
+ "6";
+ [
+ "0";
+ "6";
+ "11"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Bottom.in b/ydb/library/yql/udfs/common/top/test/cases/Bottom.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Bottom.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Bottom.in.attr b/ydb/library/yql/udfs/common/top/test/cases/Bottom.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Bottom.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Bottom.sql b/ydb/library/yql/udfs/common/top/test/cases/Bottom.sql
new file mode 100644
index 0000000000..b04ba740c8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Bottom.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ BOTTOM(subkey, 4u)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in.attr b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomBy.sql b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.sql
new file mode 100644
index 0000000000..2d0718da72
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomBy.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ BOTTOM_BY(subkey || value, CAST(subkey AS Uint64), 5u)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in.attr b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.sql b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.sql
new file mode 100644
index 0000000000..cdbda066c7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/BottomByTuple.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ BOTTOM_BY(AsTuple(subkey, value), AsTuple(subkey, value), 10u)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Top.in b/ydb/library/yql/udfs/common/top/test/cases/Top.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Top.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Top.in.attr b/ydb/library/yql/udfs/common/top/test/cases/Top.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Top.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Top.sql b/ydb/library/yql/udfs/common/top/test/cases/Top.sql
new file mode 100644
index 0000000000..6a03eca4ee
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Top.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ TOP(CAST(subkey AS Float), 3u)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopBy.in b/ydb/library/yql/udfs/common/top/test/cases/TopBy.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopBy.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopBy.in.attr b/ydb/library/yql/udfs/common/top/test/cases/TopBy.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopBy.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopBy.sql b/ydb/library/yql/udfs/common/top/test/cases/TopBy.sql
new file mode 100644
index 0000000000..b22309185f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopBy.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ TOP_BY(subkey || value, subkey, 6u)
+FROM Input
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopList.sql b/ydb/library/yql/udfs/common/top/test/cases/TopList.sql
new file mode 100644
index 0000000000..2b06e919fd
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopList.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+select TOP(x,10) from
+(select [[1,2],[1],[1,2,3],[1],[1,2],[1]] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in
new file mode 100644
index 0000000000..1532ec03bb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in
@@ -0,0 +1,15 @@
+{"key"="1";"subkey"="5";"value"="a"};
+{"key"="1";"subkey"="2";"value"="b"};
+{"key"="1";"subkey"="7";"value"="c"};
+{"key"="1";"subkey"="4";"value"="d"};
+{"key"="1";"subkey"="8";"value"="e"};
+{"key"="1";"subkey"="13";"value"="f"};
+{"key"="2";"subkey"="4";"value"="a"};
+{"key"="2";"subkey"="6";"value"="b"};
+{"key"="2";"subkey"="2";"value"="c"};
+{"key"="2";"subkey"="9";"value"="d"};
+{"key"="2";"subkey"="3";"value"="e"};
+{"key"="2";"subkey"="9";"value"="f"};
+{"key"="2";"subkey"="1";"value"="g"};
+{"key"="2";"subkey"="9";"value"="h"};
+{"key"="3";"subkey"="1";"value"="a"};
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in.attr b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopTuple.sql b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.sql
new file mode 100644
index 0000000000..c9d7782696
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopTuple.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key,
+ TOP(AsTuple(subkey, value), 5u)
+FROM Input
+GROUP BY key
+ORDER BY key \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/top/test/cases/TopVariant.sql b/ydb/library/yql/udfs/common/top/test/cases/TopVariant.sql
new file mode 100644
index 0000000000..7f74dfda34
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/TopVariant.sql
@@ -0,0 +1,5 @@
+/* syntax version 1 */
+$vt1 = Variant<Int32,String>;
+select TOP(x,3) from
+(select [Variant(1,"0",$vt1),Variant("str","1",$vt1),Variant(1,"0",$vt1)] as x)
+flatten list by x;
diff --git a/ydb/library/yql/udfs/common/top/test/cases/Window.sql b/ydb/library/yql/udfs/common/top/test/cases/Window.sql
new file mode 100644
index 0000000000..657f765fa9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/cases/Window.sql
@@ -0,0 +1,30 @@
+/* syntax version 1 */
+USE plato;
+
+$src = [
+ <|x:1, idx:1|>,
+ <|x:7, idx:2|>,
+ <|x:5, idx:3|>,
+ <|x:4, idx:4|>,
+ <|x:3, idx:5|>,
+ <|x:11, idx:6|>,
+ <|x:2, idx:7|>,
+ <|x:11, idx:8|>,
+ <|x:0, idx:9|>,
+ <|x:6, idx:10|>,
+];
+
+INSERT INTO @src
+SELECT * FROM AS_TABLE($src) ORDER BY idx;
+
+COMMIT;
+
+SELECT idx, x, TOP(x, 3) OVER (ORDER BY idx ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as upcr_top FROM @src ORDER BY idx;
+SELECT idx, x, TOP(x, 3) OVER () as upuf_top FROM @src ORDER BY idx;
+SELECT idx, x, TOP(x, 3) OVER (ORDER BY idx ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) as cruf_top FROM @src ORDER BY idx;
+SELECT idx, x, TOP(x, 3) OVER (ORDER BY idx ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) as cr22_top FROM @src ORDER BY idx;
+
+SELECT idx, x, BOTTOM(x, 3) OVER (ORDER BY idx ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as upcr_bottom FROM @src ORDER BY idx;
+SELECT idx, x, BOTTOM(x, 3) OVER () as upuf_bottom FROM @src ORDER BY idx;
+SELECT idx, x, BOTTOM(x, 3) OVER (ORDER BY idx ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) as cruf_bottom FROM @src ORDER BY idx;
+SELECT idx, x, BOTTOM(x, 3) OVER (ORDER BY idx ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) as cr22_botto FROM @src ORDER BY idx;
diff --git a/ydb/library/yql/udfs/common/top/test/ya.make b/ydb/library/yql/udfs/common/top/test/ya.make
new file mode 100644
index 0000000000..34ee2b0f6a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/top/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/top)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/top/ya.make b/ydb/library/yql/udfs/common/top/ya.make
index f295d338b6..da0816d2ae 100644
--- a/ydb/library/yql/udfs/common/top/ya.make
+++ b/ydb/library/yql/udfs/common/top/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/result.json b/ydb/library/yql/udfs/common/topfreq/test/canondata/result.json
new file mode 100644
index 0000000000..db452a16ce
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/result.json
@@ -0,0 +1,27 @@
+{
+ "test.test[Floats]": [
+ {
+ "uri": "file://test.test_Floats_/results.txt"
+ }
+ ],
+ "test.test[Mode]": [
+ {
+ "uri": "file://test.test_Mode_/results.txt"
+ }
+ ],
+ "test.test[TopFreqStruct]": [
+ {
+ "uri": "file://test.test_TopFreqStruct_/results.txt"
+ }
+ ],
+ "test.test[TopFreqTuple]": [
+ {
+ "uri": "file://test.test_TopFreqTuple_/results.txt"
+ }
+ ],
+ "test.test[TopFreq]": [
+ {
+ "uri": "file://test.test_TopFreq_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Floats_/results.txt b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Floats_/results.txt
new file mode 100644
index 0000000000..8eac384cff
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Floats_/results.txt
@@ -0,0 +1,55 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "Value";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [
+ "2";
+ "-0"
+ ];
+ [
+ "2";
+ "nan"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Mode_/results.txt b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Mode_/results.txt
new file mode 100644
index 0000000000..9cd67bf0f9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_Mode_/results.txt
@@ -0,0 +1,68 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "Value";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "abc";
+ [
+ [
+ "3";
+ "23"
+ ]
+ ]
+ ];
+ [
+ "bbb";
+ [
+ [
+ "3";
+ "37"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqStruct_/results.txt b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqStruct_/results.txt
new file mode 100644
index 0000000000..e1cf8558d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqStruct_/results.txt
@@ -0,0 +1,103 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "Value";
+ [
+ "StructType";
+ [
+ [
+ "k";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "v";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ [
+ "4";
+ [
+ "101";
+ "1"
+ ]
+ ];
+ [
+ "2";
+ [
+ "103";
+ "1"
+ ]
+ ];
+ [
+ "2";
+ [
+ "104";
+ "1"
+ ]
+ ]
+ ]
+ ];
+ [
+ "2";
+ [
+ [
+ "4";
+ [
+ "037";
+ "2"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqTuple_/results.txt b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqTuple_/results.txt
new file mode 100644
index 0000000000..c131783fc9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreqTuple_/results.txt
@@ -0,0 +1,97 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "Value";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "1";
+ [
+ [
+ "4";
+ [
+ "101";
+ "1"
+ ]
+ ];
+ [
+ "2";
+ [
+ "103";
+ "1"
+ ]
+ ];
+ [
+ "2";
+ [
+ "104";
+ "1"
+ ]
+ ]
+ ]
+ ];
+ [
+ "2";
+ [
+ [
+ "4";
+ [
+ "037";
+ "2"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreq_/results.txt b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreq_/results.txt
new file mode 100644
index 0000000000..c666b42f01
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/canondata/test.test_TopFreq_/results.txt
@@ -0,0 +1,83 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "Frequency";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "Value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "1"
+ ];
+ [
+ [
+ "4";
+ "101"
+ ];
+ [
+ "2";
+ "103"
+ ];
+ [
+ "2";
+ "104"
+ ]
+ ]
+ ];
+ [
+ [
+ "2"
+ ];
+ [
+ [
+ "4";
+ "037"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.in b/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.in
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.in
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.sql b/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.sql
new file mode 100644
index 0000000000..3c2515dc7e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/Floats.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+select topfreq(x,10,10) from (
+select frombytes(tobytes(-0.0),Double) as x
+union all
+select frombytes(tobytes(+0.0),Double) as x
+union all
+select Double("nan") as x
+union all
+select Double("nan") as x
+)
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in
new file mode 100644
index 0000000000..6cd4d92191
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in
@@ -0,0 +1,8 @@
+{"key"="075";"subkey"="1";"value"="abc"};
+{"key"="023";"subkey"="2";"value"="abc"};
+{"key"="023";"subkey"="3";"value"="abc"};
+{"key"="023";"subkey"="4";"value"="abc"};
+{"key"="037";"subkey"="5";"value"="bbb"};
+{"key"="037";"subkey"="6";"value"="bbb"};
+{"key"="200";"subkey"="7";"value"="bbb"};
+{"key"="037";"subkey"="8";"value"="bbb"};
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in.attr b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.sql b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.sql
new file mode 100644
index 0000000000..da1ade32e8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/Mode.sql
@@ -0,0 +1,14 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key, Mode(value)
+FROM
+(SELECT
+ cast (key as Int32) as value,
+ "" as subkey,
+ value as key
+FROM Input)
+AS tmp
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in
new file mode 100644
index 0000000000..b4c81f94c8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in
@@ -0,0 +1,16 @@
+{"key"="101";"subkey"="1";"value"="1"};
+{"key"="101";"subkey"="2";"value"="1"};
+{"key"="101";"subkey"="3";"value"="1"};
+{"key"="101";"subkey"="4";"value"="1"};
+{"key"="103";"subkey"="1";"value"="1"};
+{"key"="103";"subkey"="2";"value"="1"};
+{"key"="104";"subkey"="3";"value"="1"};
+{"key"="104";"subkey"="4";"value"="1"};
+{"key"="102";"subkey"="1";"value"="1"};
+{"key"="105";"subkey"="2";"value"="1"};
+{"key"="106";"subkey"="3";"value"="1"};
+{"key"="107";"subkey"="4";"value"="1"};
+{"key"="037";"subkey"="5";"value"="2"};
+{"key"="037";"subkey"="6";"value"="2"};
+{"key"="037";"subkey"="7";"value"="2"};
+{"key"="037";"subkey"="8";"value"="2"};
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in.attr b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.sql b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.sql
new file mode 100644
index 0000000000..79c412cc87
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreq.sql
@@ -0,0 +1,14 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ key, TopFreq(value, 3, 5u)
+FROM
+(SELECT
+ key as value,
+ "" as subkey,
+ cast (value as Uint32) as key
+FROM Input)
+AS tmp
+GROUP BY key
+ORDER BY key
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in
new file mode 100644
index 0000000000..b4c81f94c8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in
@@ -0,0 +1,16 @@
+{"key"="101";"subkey"="1";"value"="1"};
+{"key"="101";"subkey"="2";"value"="1"};
+{"key"="101";"subkey"="3";"value"="1"};
+{"key"="101";"subkey"="4";"value"="1"};
+{"key"="103";"subkey"="1";"value"="1"};
+{"key"="103";"subkey"="2";"value"="1"};
+{"key"="104";"subkey"="3";"value"="1"};
+{"key"="104";"subkey"="4";"value"="1"};
+{"key"="102";"subkey"="1";"value"="1"};
+{"key"="105";"subkey"="2";"value"="1"};
+{"key"="106";"subkey"="3";"value"="1"};
+{"key"="107";"subkey"="4";"value"="1"};
+{"key"="037";"subkey"="5";"value"="2"};
+{"key"="037";"subkey"="6";"value"="2"};
+{"key"="037";"subkey"="7";"value"="2"};
+{"key"="037";"subkey"="8";"value"="2"};
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in.attr b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.sql b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.sql
new file mode 100644
index 0000000000..b188ce2e5d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqStruct.sql
@@ -0,0 +1,8 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ value, TopFreq(AsStruct(key as k, value as v), 3, 5u)
+FROM Input
+GROUP BY value
+ORDER BY value \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in
new file mode 100644
index 0000000000..b4c81f94c8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in
@@ -0,0 +1,16 @@
+{"key"="101";"subkey"="1";"value"="1"};
+{"key"="101";"subkey"="2";"value"="1"};
+{"key"="101";"subkey"="3";"value"="1"};
+{"key"="101";"subkey"="4";"value"="1"};
+{"key"="103";"subkey"="1";"value"="1"};
+{"key"="103";"subkey"="2";"value"="1"};
+{"key"="104";"subkey"="3";"value"="1"};
+{"key"="104";"subkey"="4";"value"="1"};
+{"key"="102";"subkey"="1";"value"="1"};
+{"key"="105";"subkey"="2";"value"="1"};
+{"key"="106";"subkey"="3";"value"="1"};
+{"key"="107";"subkey"="4";"value"="1"};
+{"key"="037";"subkey"="5";"value"="2"};
+{"key"="037";"subkey"="6";"value"="2"};
+{"key"="037";"subkey"="7";"value"="2"};
+{"key"="037";"subkey"="8";"value"="2"};
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in.attr b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in.attr
new file mode 100644
index 0000000000..2a151e9c47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.in.attr
@@ -0,0 +1,30 @@
+{
+ "_yql_row_spec" = {
+ "Type" = [
+ "StructType";
+ [
+ [
+ "key";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "subkey";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ }
+}
diff --git a/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.sql b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.sql
new file mode 100644
index 0000000000..72dd648f0b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/cases/TopFreqTuple.sql
@@ -0,0 +1,8 @@
+/* syntax version 1 */
+USE plato;
+
+SELECT
+ value, TopFreq(AsTuple(key, value), 3, 5u)
+FROM Input
+GROUP BY value
+ORDER BY value \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/topfreq/test/ya.make b/ydb/library/yql/udfs/common/topfreq/test/ya.make
new file mode 100644
index 0000000000..e13c790915
--- /dev/null
+++ b/ydb/library/yql/udfs/common/topfreq/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/topfreq)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/topfreq/ya.make b/ydb/library/yql/udfs/common/topfreq/ya.make
index c41256b73a..219f4c217a 100644
--- a/ydb/library/yql/udfs/common/topfreq/ya.make
+++ b/ydb/library/yql/udfs/common/topfreq/ya.make
@@ -17,5 +17,7 @@ PEERDIR(
END()
RECURSE_FOR_TESTS(
+ test
ut
)
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/result.json b/ydb/library/yql/udfs/common/unicode_base/test/canondata/result.json
new file mode 100644
index 0000000000..0b47a67444
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/result.json
@@ -0,0 +1,67 @@
+{
+ "test.test[Find]": [
+ {
+ "uri": "file://test.test_Find_/results.txt"
+ }
+ ],
+ "test.test[IsCategory]": [
+ {
+ "uri": "file://test.test_IsCategory_/results.txt"
+ }
+ ],
+ "test.test[List]": [
+ {
+ "uri": "file://test.test_List_/results.txt"
+ }
+ ],
+ "test.test[Remove]": [
+ {
+ "uri": "file://test.test_Remove_/results.txt"
+ }
+ ],
+ "test.test[Replace]": [
+ {
+ "uri": "file://test.test_Replace_/results.txt"
+ }
+ ],
+ "test.test[Strip]": [
+ {
+ "uri": "file://test.test_Strip_/results.txt"
+ }
+ ],
+ "test.test[ToUint64F0]": [
+ {
+ "uri": "file://test.test_ToUint64F0_/extracted"
+ }
+ ],
+ "test.test[ToUint64F1]": [
+ {
+ "uri": "file://test.test_ToUint64F1_/extracted"
+ }
+ ],
+ "test.test[ToUint64F2]": [
+ {
+ "uri": "file://test.test_ToUint64F2_/extracted"
+ }
+ ],
+ "test.test[ToUint64]": [
+ {
+ "uri": "file://test.test_ToUint64_/results.txt"
+ }
+ ],
+ "test.test[To]": [
+ {
+ "uri": "file://test.test_To_/results.txt"
+ }
+ ],
+ "test.test[TryToUint64]": [
+ {
+ "uri": "file://test.test_TryToUint64_/results.txt"
+ }
+ ],
+ "test.test[Unicode]": [
+ {
+ "uri": "file://test.test_Unicode_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Find_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Find_/results.txt
new file mode 100644
index 0000000000..bcccb2b511
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Find_/results.txt
@@ -0,0 +1,86 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "\xC3\xA4stig, m\xC3\266chten, ausf\xC3\xBChrlich, sp\xC3\xA4ter, k\xC3\xB6nnen, nat\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r\xC3\274ckw\xC3\xA4rts, k\xC3\xA4mpfen, m\xC3\xB6gen, \xC3\274berall, regelm";
+ "\xC3\266chten, ausf\xC3\xBChrlich, sp\xC3\xA4ter, k\xC3\xB6nnen, nat\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r\xC3\274ckw\xC3\xA4rts, k\xC3\xA4mpfen, m";
+ "\xC3\xBChrlich, sp\xC3\xA4ter, k\xC3\xB6nnen, nat\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r\xC3\274ckw\xC3\xA4rts, k\xC3\xA4mpfen, m\xC3\xB6gen, "
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "\xC3\xA4ter, k\xC3\xB6nnen, nat\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r\xC3\274ckw\xC3\xA4rts, k";
+ "\xC3\266chten, ausf\xC3\xBChrlich, sp\xC3\xA4ter, k\xC3\xB6nnen, nat\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r\xC3\274ckw\xC3\xA4rts, k\xC3\xA4mpfen, m";
+ "\xC3\xBCrlich, universit\xC3\xA4t, \xC3\266ffentlich, r"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_IsCategory_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_IsCategory_/results.txt
new file mode 100644
index 0000000000..a6fd861c64
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_IsCategory_/results.txt
@@ -0,0 +1,164 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column7";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column8";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column9";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column10";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column11";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column12";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column13";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column14";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column15";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column16";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column17";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false;
+ %true;
+ %false
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_List_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_List_/results.txt
new file mode 100644
index 0000000000..5cf8e238cf
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_List_/results.txt
@@ -0,0 +1,265 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "equals_to_original";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "replace_delimeter";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "just_split";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "skip_empty";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "multichar_delim_set";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "multichar_delim_string";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "limited";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "a@b@c";
+ "a@b@c";
+ "a#b#c";
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "a"
+ ];
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "a";
+ "";
+ "";
+ "c"
+ ];
+ [
+ "a@";
+ "c"
+ ];
+ [
+ "a";
+ "b@c"
+ ]
+ ];
+ [
+ "@a@b@c";
+ "@a@b@c";
+ "#a#b#c";
+ [
+ "";
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ ""
+ ];
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "";
+ "a";
+ "";
+ "";
+ "c"
+ ];
+ [
+ "@a@";
+ "c"
+ ];
+ [
+ "";
+ "a@b@c"
+ ]
+ ];
+ [
+ "@@@a@a";
+ "@@@a@a";
+ "###a#a";
+ [
+ "";
+ "";
+ "";
+ "a";
+ "a"
+ ];
+ [
+ ""
+ ];
+ [
+ "a";
+ "a"
+ ];
+ [
+ "";
+ "";
+ "";
+ "a";
+ "a"
+ ];
+ [
+ "@@@a@a"
+ ];
+ [
+ "";
+ "@@a@a"
+ ]
+ ];
+ [
+ "d#e#f";
+ "d#e#f";
+ "d#e#f";
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ]
+ ];
+ [
+ "d";
+ "d";
+ "d";
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ]
+ ];
+ [
+ "";
+ "";
+ "";
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Remove_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Remove_/results.txt
new file mode 100644
index 0000000000..11bcb15a2f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Remove_/results.txt
@@ -0,0 +1,178 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "all";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "last";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "last2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ]
+ ];
+ [
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ]
+ ];
+ [
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB2\xD1\x8B\xD1\x8B\xD0\xB2\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ]
+ ];
+ [
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB0\xD1\x8B"
+ ]
+ ];
+ [
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Replace_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Replace_/results.txt
new file mode 100644
index 0000000000..7390dbdbc3
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Replace_/results.txt
@@ -0,0 +1,228 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "all";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "last";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "last2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "first3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "last3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2z\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2z"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2zzz\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2zzz"
+ ]
+ ];
+ [
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8Fz\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0z\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8Fzzz\xD0\xB0\xD1\x87\xD1\x8B"
+ ];
+ [
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0zzz\xD1\x87\xD1\x8B"
+ ]
+ ];
+ [
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "z\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2z"
+ ];
+ [
+ "\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2"
+ ];
+ [
+ "zzz\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0"
+ ];
+ [
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2zzz"
+ ]
+ ];
+ [
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0zzz\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2z\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0z\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2zzz\xD0\xB0\xD1\x84\xD1\x8B"
+ ];
+ [
+ "gd2\xD1\x86\xD0\2713\xD1\x8B\xD0\xB2\xD0\xB0zzz\xD1\x84\xD1\x8B"
+ ]
+ ];
+ [
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Strip_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Strip_/results.txt
new file mode 100644
index 0000000000..613b639ed0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Strip_/results.txt
@@ -0,0 +1,76 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0";
+ "\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD1\x87\xD1\x81\xD1\x8F\xD0\xB0\xD0\xB0\xD1\x87\xD1\x8B";
+ "\xD0\xB0\xD0\xB0\xD0\xB2\xD1\x8B\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0\xD1\x8B\xD0\xB2\xD0\xB0";
+ "\xD0\xB0\xD0\xB0\xD0\xB2 \xD1\x8B\xD0\xB0 \xD1\x8B\xD0\xB2\xD0\xB0 \xD1\x8B\xD0\xB2\xD0\xB0";
+ "\xD1\x8B\xD0\xB2\xD0\xB0";
+ "\xD0\xB2\xD0\xB0\xD0\xBE\xD0\xB0\xD0\xBE";
+ ""
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F0_/extracted b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F0_/extracted
new file mode 100644
index 0000000000..d03cedfb32
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F0_/extracted
@@ -0,0 +1,8 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Input string is not a number
+ SELECT
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F1_/extracted b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F1_/extracted
new file mode 100644
index 0000000000..3ed803548b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F1_/extracted
@@ -0,0 +1,8 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Input string contains junk after the number
+ SELECT
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F2_/extracted b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F2_/extracted
new file mode 100644
index 0000000000..c441fbf4e1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64F2_/extracted
@@ -0,0 +1,8 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Converted value falls out of Uint64 range
+ SELECT
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64_/results.txt
new file mode 100644
index 0000000000..9334d2f22d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_ToUint64_/results.txt
@@ -0,0 +1,76 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "305441741";
+ "4";
+ "420";
+ "1052688";
+ "42";
+ "33288";
+ "101"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_To_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_To_/results.txt
new file mode 100644
index 0000000000..7f7b2525d7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_To_/results.txt
@@ -0,0 +1,102 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "lower";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "upper";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "title";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "reverse";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "test";
+ "test";
+ "TEST";
+ "Test";
+ "tset"
+ ];
+ [
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2";
+ "\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD1\x81\xD0\xB5\xD1\x82"
+ ];
+ [
+ "TeSt";
+ "test";
+ "TEST";
+ "Test";
+ "tSeT"
+ ];
+ [
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2";
+ "\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD0\xA2\xD1\x81\xD0\x95\xD1\x82"
+ ];
+ [
+ "Eyl\xC3\xBCl";
+ "eyl\xC3\xBCl";
+ "EYL\xC3\x9CL";
+ "Eyl\xC3\xBCl";
+ "l\xC3\xBClyE"
+ ];
+ [
+ "6";
+ "6";
+ "6";
+ "6";
+ "6"
+ ];
+ [
+ "";
+ "";
+ "";
+ "";
+ ""
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_TryToUint64_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_TryToUint64_/results.txt
new file mode 100644
index 0000000000..594ac1486c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_TryToUint64_/results.txt
@@ -0,0 +1,198 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "305441741"
+ ];
+ [
+ "4"
+ ];
+ [
+ "420"
+ ];
+ [
+ "1052688"
+ ];
+ [
+ "42"
+ ];
+ [
+ "101010"
+ ];
+ [
+ "101"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Unicode_/results.txt b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Unicode_/results.txt
new file mode 100644
index 0000000000..465ad35055
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/canondata/test.test_Unicode_/results.txt
@@ -0,0 +1,509 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "normalize";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "is";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "length";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "one_end_substring";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "two_end_substring";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "remove_all";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "levenstein";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "code_point_list";
+ [
+ "OptionalType";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Uint32"
+ ]
+ ]
+ ]
+ ];
+ [
+ "from_code_point_list";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "from_lazy_code_point_list";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "reverse";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "find";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "rfind";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "find_from";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "rfind_from";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ %true;
+ [
+ "5"
+ ];
+ [
+ "yl\xC3\xBCl"
+ ];
+ [
+ "Ey"
+ ];
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "5"
+ ];
+ [
+ [
+ "69";
+ "121";
+ "108";
+ "252";
+ "108"
+ ]
+ ];
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "l\xC3\xBClyE"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ "\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ [
+ "\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ %true;
+ [
+ "6"
+ ];
+ [
+ "\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ [
+ "\xD0\xB6\xD0\xBD"
+ ];
+ [
+ "\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ [
+ "5"
+ ];
+ [
+ [
+ "1078";
+ "1085";
+ "1110";
+ "1118";
+ "1085";
+ "1103"
+ ]
+ ];
+ [
+ "\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ [
+ "\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"
+ ];
+ [
+ "\xD1\x8F\xD0\xBD\xD1\x9E\xD1\x96\xD0\xBD\xD0\xB6"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ "\xC3\xBAnora"
+ ];
+ [
+ "\xC3\xBAnora"
+ ];
+ %true;
+ [
+ "5"
+ ];
+ [
+ "nora"
+ ];
+ [
+ "\xC3\xBAn"
+ ];
+ [
+ "\xC3\xBAnoa"
+ ];
+ [
+ "5"
+ ];
+ [
+ [
+ "250";
+ "110";
+ "111";
+ "114";
+ "97"
+ ]
+ ];
+ [
+ "\xC3\xBAnora"
+ ];
+ [
+ "\xC3\xBAnora"
+ ];
+ [
+ "aron\xC3\xBA"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ "Ci\xD1\x87 Ci\xD1\x87"
+ ];
+ [
+ "Ci\xD1\x87 Ci\xD1\x87"
+ ];
+ %true;
+ [
+ "7"
+ ];
+ [
+ "i\xD1\x87 Ci\xD1\x87"
+ ];
+ [
+ "Ci"
+ ];
+ [
+ "Ci Ci"
+ ];
+ [
+ "5"
+ ];
+ [
+ [
+ "67";
+ "105";
+ "1095";
+ "32";
+ "67";
+ "105";
+ "1095"
+ ]
+ ];
+ [
+ "Ci\xD1\x87 Ci\xD1\x87"
+ ];
+ [
+ "Ci\xD1\x87 Ci\xD1\x87"
+ ];
+ [
+ "\xD1\x87iC \xD1\x87iC"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ %true;
+ [
+ "13"
+ ];
+ [
+ "\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ [
+ "\xD0\xBF\xD1\x80"
+ ];
+ [
+ "\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ [
+ "5"
+ ];
+ [
+ [
+ "1087";
+ "1088";
+ "1080";
+ "1074";
+ "1077";
+ "1090";
+ "32";
+ "1087";
+ "1088";
+ "1080";
+ "1074";
+ "1077";
+ "1090"
+ ]
+ ];
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ];
+ [
+ "\xD1\x82\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x80\xD0\xBF \xD1\x82\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x80\xD0\xBF"
+ ];
+ [
+ "4"
+ ];
+ [
+ "11"
+ ];
+ [
+ "11"
+ ];
+ [
+ "4"
+ ]
+ ];
+ [
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ %true;
+ [
+ "1"
+ ];
+ [
+ ""
+ ];
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ [
+ "1"
+ ];
+ [
+ [
+ "54"
+ ]
+ ];
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ #;
+ #;
+ #;
+ #
+ ];
+ [
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ %true;
+ [
+ "0"
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ "0"
+ ];
+ [
+ []
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Find.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/Find.sql
new file mode 100644
index 0000000000..9a9a58752e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Find.sql
@@ -0,0 +1,13 @@
+$text ="lästig, möchten, ausführlich, später, können, natürlich, universität, öffentlich, rückwärts, kämpfen, mögen, überall, regelmäßig"u;
+
+SELECT
+ Unicode::Substring($text, Unicode::Find($text, "ä"u), Unicode::RFind($text, "ä"u) - Unicode::Find($text, "ä"u)),
+ Unicode::Substring($text, Unicode::Find($text, "ö"u), Unicode::RFind($text, "ö"u) - Unicode::Find($text, "ö"u)),
+ Unicode::Substring($text, Unicode::Find($text, "ü"u), Unicode::RFind($text, "ü"u) - Unicode::Find($text, "ü"u));
+
+
+SELECT
+ Unicode::Substring($text, Unicode::Find($text, "ä"u, 30ul), Unicode::RFind($text, "ä"u, 123ul) - Unicode::Find($text, "ä"u, 30ul)),
+ Unicode::Substring($text, Unicode::Find($text, "ö"u, 9ul), Unicode::RFind($text, "ö"u, 103ul) - Unicode::Find($text, "ö"u, 9ul)),
+ Unicode::Substring($text, Unicode::Find($text, "ü"u, 45ul), Unicode::RFind($text, "ü"u, 83ul) - Unicode::Find($text, "ü"u, 45ul));
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/IsCategory.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/IsCategory.sql
new file mode 100644
index 0000000000..2effa23221
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/IsCategory.sql
@@ -0,0 +1,21 @@
+/* syntax version 1 */
+SELECT
+ Unicode::IsAscii("sdf"u),
+ Unicode::IsAscii("выавыа"u),
+ Unicode::IsSpace(" \u2002\u200a"u),
+ Unicode::IsSpace("выавыа"u),
+ Unicode::IsUpper("ФЫВ"u),
+ Unicode::IsUpper("вВаВыа"u),
+ Unicode::IsLower("фыв"u),
+ Unicode::IsLower("вВаВыа"u),
+ Unicode::IsDigit("1234"u),
+ Unicode::IsDigit("выавыа"u),
+ Unicode::IsAlpha("фвфы"u),
+ Unicode::IsAlpha("вы2в-а"u),
+ Unicode::IsAlnum("фыв13в"u),
+ Unicode::IsAlnum("выа1-}ыв"u),
+ Unicode::IsHex("0F3A4E"u),
+ Unicode::IsHex("ваоао"u),
+ Unicode::IsUnicodeSet("ваоао"u, "[вао]"u),
+ Unicode::IsUnicodeSet("ваоао"u, "[ваб]"u)
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in
new file mode 100644
index 0000000000..949cf26c77
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in
@@ -0,0 +1,6 @@
+{"key"="1";"subkey"="1";"value"="a@b@c"};
+{"key"="1";"subkey"="1";"value"="@a@b@c"};
+{"key"="1";"subkey"="1";"value"="@@@a@a"};
+{"key"="2";"subkey"="2";"value"="d#e#f"};
+{"key"="3";"subkey"="3";"value"="d"};
+{"key"="4";"subkey"="4";"value"=""};
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in.attr b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in.attr
new file mode 100644
index 0000000000..990efb1ff2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.in.attr
@@ -0,0 +1,12 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["key";["DataType";"Utf8"]];
+ ["subkey";["DataType";"Utf8"]];
+ ["value";["DataType";"Utf8"]]
+ ]];
+ "SortDirections"=[1;1;];
+ "SortedBy"=["key";"subkey";];
+ "SortedByTypes"=[["DataType";"Utf8";];["DataType";"Utf8";];];
+ "SortMembers"=["key";"subkey";];
+}}
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/List.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.sql
new file mode 100644
index 0000000000..814c5cb27b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/List.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ value,
+ Ensure(value, Unicode::JoinFromList(Unicode::SplitToList(value, "@"u), "@"u) == value) AS equals_to_original,
+ Unicode::JoinFromList(Unicode::SplitToList(value, "@"u), "#"u) AS replace_delimeter,
+ Unicode::SplitToList(value, "@"u) AS just_split,
+ Unicode::SplitToList(value, "@"u)[0] as first,
+ Unicode::SplitToList(value, "@"u, true AS SkipEmpty) AS skip_empty,
+ Unicode::SplitToList(value, "b@"u, false AS DelimeterString) AS multichar_delim_set,
+ Unicode::SplitToList(value, "b@"u, true AS DelimeterString) AS multichar_delim_string,
+ Unicode::SplitToList(value, "@"u, 1 AS Limit) AS limited
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Remove.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/Remove.sql
new file mode 100644
index 0000000000..ee96037f79
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Remove.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+SELECT
+ CAST(value AS Utf8),
+ Unicode::RemoveAll(CAST(value AS Utf8), Utf8("фа")) AS all,
+ Unicode::RemoveFirst(CAST(value AS Utf8), Utf8("а")) AS first,
+ Unicode::RemoveLast(CAST(value AS Utf8), Utf8("а")) AS last,
+ Unicode::RemoveFirst(CAST(value AS Utf8), Utf8("фа")) AS first2,
+ Unicode::RemoveLast(CAST(value AS Utf8), Utf8("фа")) AS last2
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Replace.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/Replace.sql
new file mode 100644
index 0000000000..d623984413
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Replace.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+SELECT
+ CAST(value AS Utf8),
+ Unicode::ReplaceAll(CAST(value AS Utf8), Utf8("аф"), Utf8("zzz")) AS all,
+ Unicode::ReplaceFirst(CAST(value AS Utf8), Utf8("а"), Utf8("z")) AS first,
+ Unicode::ReplaceLast(CAST(value AS Utf8), Utf8("а"), Utf8("z")) AS last,
+ Unicode::ReplaceFirst(CAST(value AS Utf8), Utf8("а"), Utf8("")) AS first2,
+ Unicode::ReplaceLast(CAST(value AS Utf8), Utf8("а"), Utf8("")) AS last2,
+ Unicode::ReplaceFirst(CAST(value AS Utf8), Utf8("а"), Utf8("zzz")) AS first3,
+ Unicode::ReplaceLast(CAST(value AS Utf8), Utf8("а"), Utf8("zzz")) AS last3
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Strip.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/Strip.sql
new file mode 100644
index 0000000000..45bde163e0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Strip.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+SELECT
+ Unicode::Strip("ываыва"u),
+ Unicode::Strip(" ячсячсяаачы"u),
+ Unicode::Strip("аавыаываыва "u),
+ Unicode::Strip("аав ыа ыва ыва "u),
+ Unicode::Strip("\u2009ыва\n"u),
+ Unicode::Strip("\u200aваоао\u2002"u),
+ Unicode::Strip(""u)
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in
new file mode 100644
index 0000000000..5effdb9971
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in
@@ -0,0 +1,8 @@
+{"key"="1";"subkey"="1";"value"="test"};
+{"key"="2";"subkey"="2";"value"="\xD1\x82\xD0\xB5\xD1\x81\xD1\x82"};
+{"key"="3";"subkey"="3";"value"="TeSt"};
+{"key"="4";"subkey"="4";"value"="\xD1\x82\xD0\x95\xD1\x81\xD0\xA2"};
+{"key"="5";"subkey"="5";"value"="Eyl\xC3\xBCl"};
+{"key"="6";"subkey"="6";"value"="6"};
+{"key"="4";"subkey"="4";"value"=""};
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in.attr b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in.attr
new file mode 100644
index 0000000000..990efb1ff2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.in.attr
@@ -0,0 +1,12 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["key";["DataType";"Utf8"]];
+ ["subkey";["DataType";"Utf8"]];
+ ["value";["DataType";"Utf8"]]
+ ]];
+ "SortDirections"=[1;1;];
+ "SortedBy"=["key";"subkey";];
+ "SortedByTypes"=[["DataType";"Utf8";];["DataType";"Utf8";];];
+ "SortMembers"=["key";"subkey";];
+}}
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/To.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.sql
new file mode 100644
index 0000000000..c7207d2dcd
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/To.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+SELECT
+ value,
+ Unicode::ToLower(value) AS lower,
+ Unicode::ToUpper(value) AS upper,
+ Unicode::ToTitle(value) AS title,
+ Unicode::Reverse(value) AS reverse,
+FROM Input;
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64.sql
new file mode 100644
index 0000000000..c4059a8582
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64.sql
@@ -0,0 +1,9 @@
+SELECT
+ Unicode::ToUint64("0x1234abcd"),
+ Unicode::ToUint64("0X4"),
+ Unicode::ToUint64("0644"),
+ Unicode::ToUint64("0101010", 16),
+ Unicode::ToUint64("0101010", 2),
+ Unicode::ToUint64("0101010"),
+ Unicode::ToUint64("101");
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.cfg b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.cfg
new file mode 100644
index 0000000000..83cfd96179
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.cfg
@@ -0,0 +1,2 @@
+xfail
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.sql
new file mode 100644
index 0000000000..dd1182a562
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F0.sql
@@ -0,0 +1,3 @@
+SELECT
+ Unicode::ToUint64("hell");
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.cfg b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.cfg
new file mode 100644
index 0000000000..83cfd96179
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.cfg
@@ -0,0 +1,2 @@
+xfail
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.sql
new file mode 100644
index 0000000000..f42380ee80
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F1.sql
@@ -0,0 +1,3 @@
+SELECT
+ Unicode::ToUint64("01238");
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.cfg b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.cfg
new file mode 100644
index 0000000000..83cfd96179
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.cfg
@@ -0,0 +1,2 @@
+xfail
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.sql
new file mode 100644
index 0000000000..1a9b7e2449
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/ToUint64F2.sql
@@ -0,0 +1,3 @@
+SELECT
+ Unicode::ToUint64("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/TryToUint64.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/TryToUint64.sql
new file mode 100644
index 0000000000..b2f4fa850a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/TryToUint64.sql
@@ -0,0 +1,17 @@
+SELECT
+ Unicode::TryToUint64("hell", 10);
+
+SELECT
+ Unicode::TryToUint64("01238", 8);
+
+SELECT
+ Unicode::TryToUint64("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 16);
+
+SELECT
+ Unicode::TryToUint64("0x1234abcd", 16),
+ Unicode::TryToUint64("0X4", 16),
+ Unicode::TryToUint64("0644", 8),
+ Unicode::TryToUint64("0101010", 16),
+ Unicode::TryToUint64("0101010", 2),
+ Unicode::TryToUint64("0101010", 10),
+ Unicode::TryToUint64("101", 10);
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.in b/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.in
new file mode 100644
index 0000000000..55f0307e35
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.in
@@ -0,0 +1,7 @@
+{"key"="";"subkey"="";"value"="Eyl\xC3\xBCl"};
+{"key"="";"subkey"="";"value"="\xD0\xB6\xD0\xBD\xD1\x96\xD1\x9E\xD0\xBD\xD1\x8F"};
+{"key"="";"subkey"="";"value"="\xC3\xBAnora"};
+{"key"="";"subkey"="";"value"="Ci\xD1\x87 Ci\xD1\x87"};
+{"key"="";"subkey"="";"value"="\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82 \xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"};
+{"key"="";"subkey"="";"value"="6"};
+{"key"="";"subkey"="";"value"=""};
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.sql b/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.sql
new file mode 100644
index 0000000000..b330682b6e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/Unicode.sql
@@ -0,0 +1,19 @@
+/* syntax version 1 */
+SELECT
+ value AS value,
+ Unicode::Normalize(value) AS normalize,
+ Unicode::IsUtf(value) AS is,
+ Unicode::GetLength(value) AS length,
+ Unicode::Substring(value, 1) AS one_end_substring,
+ Unicode::Substring(value, 0, 2) AS two_end_substring,
+ Unicode::RemoveAll(value, "\xD1\x87пr") AS remove_all,
+ Unicode::LevensteinDistance(value, value || Unicode::Substring(value, 0, 5)) AS levenstein,
+ Unicode::ToCodePointList(value) AS code_point_list,
+ Unicode::FromCodePointList(Unicode::ToCodePointList(value)) AS from_code_point_list,
+ Unicode::FromCodePointList(YQL::LazyList(Unicode::ToCodePointList(value))) AS from_lazy_code_point_list,
+ Unicode::Reverse(value) AS reverse,
+ Unicode::Find(value, "ет"u) AS find,
+ Unicode::RFind(value, "ет"u) AS rfind,
+ Unicode::Find(value, "ет"u, 7ul) AS find_from,
+ Unicode::RFind(value, "ет"u, 7ul) AS rfind_from
+FROM (SELECT CAST(value AS Utf8) AS value FROM Input);
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/cases/default.in b/ydb/library/yql/udfs/common/unicode_base/test/cases/default.in
new file mode 100644
index 0000000000..6a9412ca37
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/cases/default.in
@@ -0,0 +1,5 @@
+{"key"="1";"subkey"="1";"value"="ываыва"};
+{"key"="2";"subkey"="2";"value"="ячсячсяаачы"};
+{"key"="3";"subkey"="3";"value"="аавыаываыва"};
+{"key"="4";"subkey"="4";"value"="gd2цй3ываафы"};
+{"key"="5";"subkey"="5";"value"=""};
diff --git a/ydb/library/yql/udfs/common/unicode_base/test/ya.make b/ydb/library/yql/udfs/common/unicode_base/test/ya.make
new file mode 100644
index 0000000000..bf0cb0b708
--- /dev/null
+++ b/ydb/library/yql/udfs/common/unicode_base/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/unicode_base)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/unicode_base/ya.make b/ydb/library/yql/udfs/common/unicode_base/ya.make
index 8bfa9fd967..8d6834136b 100644
--- a/ydb/library/yql/udfs/common/unicode_base/ya.make
+++ b/ydb/library/yql/udfs/common/unicode_base/ya.make
@@ -15,3 +15,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/result.json b/ydb/library/yql/udfs/common/url_base/test/canondata/result.json
new file mode 100644
index 0000000000..98e905ecde
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/result.json
@@ -0,0 +1,47 @@
+{
+ "test.test[BlockPunycode]": [
+ {
+ "uri": "file://test.test_BlockPunycode_/results.txt"
+ }
+ ],
+ "test.test[BlockTld]": [
+ {
+ "uri": "file://test.test_BlockTld_/results.txt"
+ }
+ ],
+ "test.test[BlockUrl]": [
+ {
+ "uri": "file://test.test_BlockUrl_/results.txt"
+ }
+ ],
+ "test.test[Punycode]": [
+ {
+ "uri": "file://test.test_Punycode_/results.txt"
+ }
+ ],
+ "test.test[Tld]": [
+ {
+ "uri": "file://test.test_Tld_/results.txt"
+ }
+ ],
+ "test.test[UrlQueryMaxFieldsErr]": [
+ {
+ "uri": "file://test.test_UrlQueryMaxFieldsErr_/extracted"
+ }
+ ],
+ "test.test[UrlQueryStrictErr]": [
+ {
+ "uri": "file://test.test_UrlQueryStrictErr_/extracted"
+ }
+ ],
+ "test.test[UrlQuery]": [
+ {
+ "uri": "file://test.test_UrlQuery_/results.txt"
+ }
+ ],
+ "test.test[Url]": [
+ {
+ "uri": "file://test.test_Url_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockPunycode_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockPunycode_/results.txt
new file mode 100644
index 0000000000..69224c4ac6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockPunycode_/results.txt
@@ -0,0 +1,106 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "hostname_utf";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "punycode_hostname";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "hostname_utf_forced";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "punycode_hostname_forced";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "can_be_punycode";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "ab\xC3\246cd\xC3\266ef";
+ #;
+ #;
+ "ab\xC3\246cd\xC3\266ef";
+ "xn--abcdef-qua4k";
+ %false
+ ];
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ #;
+ #;
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ "xn--d1acpjx3f.xn--p1ag";
+ %false
+ ];
+ [
+ "yandex.ru";
+ [
+ "yandex.ru"
+ ];
+ [
+ "yandex.ru"
+ ];
+ "yandex.ru";
+ "yandex.ru";
+ %false
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ag";
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ag"
+ ];
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ "xn--d1acpjx3f.xn--p1ag";
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockTld_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockTld_/results.txt
new file mode 100644
index 0000000000..f45bb011da
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockTld_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "tld";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "known";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "well_known";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "ru";
+ %true;
+ %true
+ ];
+ [
+ "123";
+ %false;
+ %false
+ ];
+ [
+ "yandex";
+ %true;
+ %false
+ ];
+ [
+ "sdfsdfsdf";
+ %false;
+ %false
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockUrl_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockUrl_/results.txt
new file mode 100644
index 0000000000..7b5257063b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_BlockUrl_/results.txt
@@ -0,0 +1,1212 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "encode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "decode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "param";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_qs_and_fragment";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "host";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_www";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_www2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "tld";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "punycode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_scheme";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "host_port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "scheme_host";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "scheme_host_port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "tail";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "path";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "fragment";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "domain0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain_level";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "norm";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "http://";
+ [
+ "http://"
+ ];
+ [
+ "http://"
+ ];
+ #;
+ "http://";
+ #;
+ #;
+ #;
+ "";
+ [
+ "http://"
+ ];
+ #;
+ #;
+ [
+ "http://"
+ ];
+ [
+ "http://"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ #;
+ #;
+ "1";
+ #
+ ];
+ [
+ "http://lenta.ru";
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ #;
+ "http://lenta.ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ "ru";
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "http://lenta.ru/"
+ ]
+ ];
+ [
+ "http://someone.livejournal.com/blog";
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ #;
+ "http://someone.livejournal.com/blog";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "com";
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ [
+ "someone.livejournal.com/blog"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "http://someone.livejournal.com"
+ ];
+ [
+ "http://someone.livejournal.com"
+ ];
+ [
+ "/blog"
+ ];
+ [
+ "/blog"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ [
+ "http://someone.livejournal.com/blog"
+ ]
+ ];
+ [
+ "http://bbc.co.uk/";
+ [
+ "http://bbc.co.uk/"
+ ];
+ [
+ "http://bbc.co.uk/"
+ ];
+ #;
+ "http://bbc.co.uk/";
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "uk";
+ [
+ "http://bbc.co.uk/"
+ ];
+ [
+ "bbc.co.uk/"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "http://bbc.co.uk"
+ ];
+ [
+ "http://bbc.co.uk"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "3";
+ [
+ "http://bbc.co.uk/"
+ ]
+ ];
+ [
+ "https://www.yandex.com.tr/search";
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ #;
+ "https://www.yandex.com.tr/search";
+ [
+ "www.yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "tr";
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ [
+ "www.yandex.com.tr/search"
+ ];
+ [
+ "www.yandex.com.tr"
+ ];
+ [
+ "https://www.yandex.com.tr"
+ ];
+ [
+ "https://www.yandex.com.tr"
+ ];
+ [
+ "/search"
+ ];
+ [
+ "/search"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "4";
+ [
+ "https://www.yandex.com.tr/search"
+ ]
+ ];
+ [
+ "https://www2.yandex.com.tr/search";
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ #;
+ "https://www2.yandex.com.tr/search";
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "tr";
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ [
+ "www2.yandex.com.tr/search"
+ ];
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "https://www2.yandex.com.tr"
+ ];
+ [
+ "https://www2.yandex.com.tr"
+ ];
+ [
+ "/search"
+ ];
+ [
+ "/search"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "4";
+ [
+ "https://www2.yandex.com.tr/search"
+ ]
+ ];
+ [
+ "lenta.ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ #;
+ "lenta.ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ "ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ #;
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ #
+ ];
+ [
+ "bbc.co.uk/news";
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "bbc.co.uk/news"
+ ];
+ #;
+ "bbc.co.uk/news";
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "uk";
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "/news"
+ ];
+ [
+ "/news"
+ ];
+ #;
+ #;
+ #;
+ [
+ "uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "3";
+ #
+ ];
+ [
+ "yandex.com.tr/maps?foo=";
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ ""
+ ];
+ "yandex.com.tr/maps";
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "tr";
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "/maps?foo="
+ ];
+ [
+ "/maps"
+ ];
+ #;
+ #;
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "3";
+ #
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top";
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "bar"
+ ];
+ "someone.livejournal.com";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "com";
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "/?foo=bar#top"
+ ];
+ [
+ "/"
+ ];
+ [
+ "top"
+ ];
+ #;
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ #
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n";
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ #;
+ "a.b.c.d.e.f.g.h.i.j.k";
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ "k";
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "/#l.m.n"
+ ];
+ [
+ "/"
+ ];
+ [
+ "l.m.n"
+ ];
+ #;
+ #;
+ [
+ "k"
+ ];
+ [
+ "i.j.k"
+ ];
+ "11";
+ #
+ ];
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4";
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "foo.tl.md/ \xD1\x8E\xD0\xBD\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xB4"
+ ];
+ #;
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4";
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ "md";
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ #;
+ #;
+ #;
+ [
+ "md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ "3";
+ #
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai";
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ #;
+ "xn--d1acpjx3f.xn--p1ai";
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ "xn--p1ai";
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x84"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ #;
+ #;
+ [
+ "xn--p1ai"
+ ];
+ #;
+ "2";
+ #
+ ];
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top";
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ #;
+ "https://ya.ru:80/search/";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ "ru";
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "ya.ru:80"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "https://ya.ru:80"
+ ];
+ [
+ "/search/?text=test&lr=213#top"
+ ];
+ [
+ "/search/"
+ ];
+ [
+ "top"
+ ];
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "https://ya.ru:80/search/?text=test&lr=213"
+ ]
+ ];
+ [
+ "https://ya.ru/search/?text=%2B";
+ [
+ "https://ya.ru/search/?text=%2B"
+ ];
+ [
+ "https://ya.ru/search/?text=+"
+ ];
+ #;
+ "https://ya.ru/search/";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ "ru";
+ [
+ "https://ya.ru/search/?text=%2B"
+ ];
+ [
+ "ya.ru/search/?text=%2B"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "/search/?text=%2B"
+ ];
+ [
+ "/search/"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "https://ya.ru/search/?text=%2B"
+ ]
+ ];
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible";
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ #;
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible";
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ "ru";
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "goal://market.yandex.ru"
+ ];
+ [
+ "goal://market.yandex.ru"
+ ];
+ [
+ "/product-page_scroll-box_product_visible"
+ ];
+ [
+ "/product-page_scroll-box_product_visible"
+ ];
+ #;
+ #;
+ #;
+ [
+ "ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ "3";
+ #
+ ];
+ [
+ "Http://ya.ru";
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ #;
+ "Http://ya.ru";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ "ru";
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "http://ya.ru/"
+ ]
+ ];
+ [
+ "ftp://someone.livejournal.com:80/blog";
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ #;
+ "ftp://someone.livejournal.com:80/blog";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "com";
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ [
+ "someone.livejournal.com:80/blog"
+ ];
+ [
+ "someone.livejournal.com:80"
+ ];
+ [
+ "ftp://someone.livejournal.com"
+ ];
+ [
+ "ftp://someone.livejournal.com:80"
+ ];
+ [
+ "/blog"
+ ];
+ [
+ "/blog"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Punycode_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Punycode_/results.txt
new file mode 100644
index 0000000000..69224c4ac6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Punycode_/results.txt
@@ -0,0 +1,106 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "hostname_utf";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "punycode_hostname";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "hostname_utf_forced";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "punycode_hostname_forced";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "can_be_punycode";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "ab\xC3\246cd\xC3\266ef";
+ #;
+ #;
+ "ab\xC3\246cd\xC3\266ef";
+ "xn--abcdef-qua4k";
+ %false
+ ];
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ #;
+ #;
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ "xn--d1acpjx3f.xn--p1ag";
+ %false
+ ];
+ [
+ "yandex.ru";
+ [
+ "yandex.ru"
+ ];
+ [
+ "yandex.ru"
+ ];
+ "yandex.ru";
+ "yandex.ru";
+ %false
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ag";
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ag"
+ ];
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x83";
+ "xn--d1acpjx3f.xn--p1ag";
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Tld_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Tld_/results.txt
new file mode 100644
index 0000000000..f45bb011da
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Tld_/results.txt
@@ -0,0 +1,59 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "tld";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "known";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "well_known";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "ru";
+ %true;
+ %true
+ ];
+ [
+ "123";
+ %false;
+ %false
+ ];
+ [
+ "yandex";
+ %true;
+ %false
+ ];
+ [
+ "sdfsdfsdf";
+ %false;
+ %false
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryMaxFieldsErr_/extracted b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryMaxFieldsErr_/extracted
new file mode 100644
index 0000000000..e80a93b299
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryMaxFieldsErr_/extracted
@@ -0,0 +1,8 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:4:10: Fatal: Max number of fields (2) exceeded: got 3
+ Url::QueryStringToList("glfilter=78318%3A79492&glfilter=561%3A121037&hid=904", 2 AS MaxFields)
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryStrictErr_/extracted b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryStrictErr_/extracted
new file mode 100644
index 0000000000..6326332de1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQueryStrictErr_/extracted
@@ -0,0 +1,8 @@
+<tmp_path>/program.sql:<main>: Fatal: Execution
+
+ <tmp_path>/program.sql:<main>:2:1: Fatal: Execution of node: Result
+ SELECT
+ ^
+ <tmp_path>/program.sql:<main>:4:10: Fatal: Bad query field: "mistaken"
+ Url::QueryStringToList("glfilter=78318%3A79492&mistaken&glfilter=1&hid=904")
+ ^ \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQuery_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQuery_/results.txt
new file mode 100644
index 0000000000..303f480161
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_UrlQuery_/results.txt
@@ -0,0 +1,1112 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "base_list";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "base_list_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "keep_blank_list";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "keep_blank_list_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "sep_semicol_list";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "sep_semicol_list_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "base_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "base_dict_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "keep_blank_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "keep_blank_dict_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "sep_semicol_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "sep_semicol_dict_build";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1&hid=90404&onstock=0&local-offers-first=0";
+ [
+ [
+ "glfilter";
+ "7893318:7949252"
+ ];
+ [
+ "glfilter";
+ "5099461:12103637"
+ ];
+ [
+ "glfilter";
+ "8292645:1"
+ ];
+ [
+ "hid";
+ "90404"
+ ];
+ [
+ "onstock";
+ "0"
+ ];
+ [
+ "local-offers-first";
+ "0"
+ ]
+ ];
+ "glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1&hid=90404&onstock=0&local-offers-first=0";
+ [
+ [
+ "glfilter";
+ "7893318:7949252"
+ ];
+ [
+ "glfilter";
+ "5099461:12103637"
+ ];
+ [
+ "glfilter";
+ "8292645:1"
+ ];
+ [
+ "hid";
+ "90404"
+ ];
+ [
+ "onstock";
+ "0"
+ ];
+ [
+ "local-offers-first";
+ "0"
+ ]
+ ];
+ "glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1&hid=90404&onstock=0&local-offers-first=0";
+ [
+ [
+ "glfilter";
+ "7893318:7949252&glfilter=5099461:12103637&glfilter=8292645:1&hid=90404&onstock=0&local-offers-first=0"
+ ]
+ ];
+ "glfilter=7893318%3A7949252%26glfilter%3D5099461%3A12103637%26glfilter%3D8292645%3A1%26hid%3D90404%26onstock%3D0%26local-offers-first%3D0";
+ [
+ [
+ "glfilter";
+ [
+ "7893318:7949252";
+ "5099461:12103637";
+ "8292645:1"
+ ]
+ ];
+ [
+ "hid";
+ [
+ "90404"
+ ]
+ ];
+ [
+ "onstock";
+ [
+ "0"
+ ]
+ ];
+ [
+ "local-offers-first";
+ [
+ "0"
+ ]
+ ]
+ ];
+ "local-offers-first=0&onstock=0&hid=90404&glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1";
+ [
+ [
+ "glfilter";
+ [
+ "7893318:7949252";
+ "5099461:12103637";
+ "8292645:1"
+ ]
+ ];
+ [
+ "hid";
+ [
+ "90404"
+ ]
+ ];
+ [
+ "onstock";
+ [
+ "0"
+ ]
+ ];
+ [
+ "local-offers-first";
+ [
+ "0"
+ ]
+ ]
+ ];
+ "local-offers-first=0&onstock=0&hid=90404&glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1";
+ [
+ [
+ "glfilter";
+ [
+ "7893318:7949252&glfilter=5099461:12103637&glfilter=8292645:1&hid=90404&onstock=0&local-offers-first=0"
+ ]
+ ]
+ ];
+ "glfilter=7893318%3A7949252%26glfilter%3D5099461%3A12103637%26glfilter%3D8292645%3A1%26hid%3D90404%26onstock%3D0%26local-offers-first%3D0"
+ ];
+ [
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ ""
+ ];
+ [
+ "&";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ ""
+ ];
+ [
+ "&&";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ "";
+ [];
+ ""
+ ];
+ [
+ "=";
+ [];
+ "";
+ [
+ [
+ "";
+ ""
+ ]
+ ];
+ "=";
+ [];
+ "";
+ [];
+ "";
+ [
+ [
+ "";
+ [
+ ""
+ ]
+ ]
+ ];
+ "=";
+ [];
+ ""
+ ];
+ [
+ "&=";
+ [];
+ "";
+ [
+ [
+ "";
+ ""
+ ]
+ ];
+ "=";
+ [];
+ "";
+ [];
+ "";
+ [
+ [
+ "";
+ [
+ ""
+ ]
+ ]
+ ];
+ "=";
+ [];
+ ""
+ ];
+ [
+ "=&";
+ [];
+ "";
+ [
+ [
+ "";
+ ""
+ ]
+ ];
+ "=";
+ [
+ [
+ "";
+ "&"
+ ]
+ ];
+ "=%26";
+ [];
+ "";
+ [
+ [
+ "";
+ [
+ ""
+ ]
+ ]
+ ];
+ "=";
+ [
+ [
+ "";
+ [
+ "&"
+ ]
+ ]
+ ];
+ "=%26"
+ ];
+ [
+ "&==";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "&";
+ "="
+ ]
+ ];
+ "%26=%3D";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "&";
+ [
+ "="
+ ]
+ ]
+ ];
+ "%26=%3D"
+ ];
+ [
+ "&==&";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "&";
+ "=&"
+ ]
+ ];
+ "%26=%3D%26";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "&";
+ [
+ "=&"
+ ]
+ ]
+ ];
+ "%26=%3D%26"
+ ];
+ [
+ "==&";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ "="
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ "=&"
+ ]
+ ];
+ "=%3D%26";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ [
+ "="
+ ]
+ ]
+ ];
+ "=%3D";
+ [
+ [
+ "";
+ [
+ "=&"
+ ]
+ ]
+ ];
+ "=%3D%26"
+ ];
+ [
+ "=&=";
+ [];
+ "";
+ [
+ [
+ "";
+ ""
+ ];
+ [
+ "";
+ ""
+ ]
+ ];
+ "=&=";
+ [
+ [
+ "";
+ "&="
+ ]
+ ];
+ "=%26%3D";
+ [];
+ "";
+ [
+ [
+ "";
+ [
+ "";
+ ""
+ ]
+ ]
+ ];
+ "=&=";
+ [
+ [
+ "";
+ [
+ "&="
+ ]
+ ]
+ ];
+ "=%26%3D"
+ ];
+ [
+ "=a";
+ [
+ [
+ "";
+ "a"
+ ]
+ ];
+ "=a";
+ [
+ [
+ "";
+ "a"
+ ]
+ ];
+ "=a";
+ [
+ [
+ "";
+ "a"
+ ]
+ ];
+ "=a";
+ [
+ [
+ "";
+ [
+ "a"
+ ]
+ ]
+ ];
+ "=a";
+ [
+ [
+ "";
+ [
+ "a"
+ ]
+ ]
+ ];
+ "=a";
+ [
+ [
+ "";
+ [
+ "a"
+ ]
+ ]
+ ];
+ "=a"
+ ];
+ [
+ "a";
+ [];
+ "";
+ [
+ [
+ "a";
+ ""
+ ]
+ ];
+ "a=";
+ [];
+ "";
+ [];
+ "";
+ [
+ [
+ "a";
+ [
+ ""
+ ]
+ ]
+ ];
+ "a=";
+ [];
+ ""
+ ];
+ [
+ "a=";
+ [];
+ "";
+ [
+ [
+ "a";
+ ""
+ ]
+ ];
+ "a=";
+ [];
+ "";
+ [];
+ "";
+ [
+ [
+ "a";
+ [
+ ""
+ ]
+ ]
+ ];
+ "a=";
+ [];
+ ""
+ ];
+ [
+ "&a=b";
+ [
+ [
+ "a";
+ "b"
+ ]
+ ];
+ "a=b";
+ [
+ [
+ "a";
+ "b"
+ ]
+ ];
+ "a=b";
+ [
+ [
+ "&a";
+ "b"
+ ]
+ ];
+ "%26a=b";
+ [
+ [
+ "a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ "a=b";
+ [
+ [
+ "a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ "a=b";
+ [
+ [
+ "&a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ "%26a=b"
+ ];
+ [
+ "a=a+b&b=b+c";
+ [
+ [
+ "a";
+ "a b"
+ ];
+ [
+ "b";
+ "b c"
+ ]
+ ];
+ "a=a+b&b=b+c";
+ [
+ [
+ "a";
+ "a b"
+ ];
+ [
+ "b";
+ "b c"
+ ]
+ ];
+ "a=a+b&b=b+c";
+ [
+ [
+ "a";
+ "a b&b=b c"
+ ]
+ ];
+ "a=a+b%26b%3Db+c";
+ [
+ [
+ "a";
+ [
+ "a b"
+ ]
+ ];
+ [
+ "b";
+ [
+ "b c"
+ ]
+ ]
+ ];
+ "b=b+c&a=a+b";
+ [
+ [
+ "a";
+ [
+ "a b"
+ ]
+ ];
+ [
+ "b";
+ [
+ "b c"
+ ]
+ ]
+ ];
+ "b=b+c&a=a+b";
+ [
+ [
+ "a";
+ [
+ "a b&b=b c"
+ ]
+ ]
+ ];
+ "a=a+b%26b%3Db+c"
+ ];
+ [
+ "a=a+b=&b=b+=c";
+ [
+ [
+ "a";
+ "a b="
+ ];
+ [
+ "b";
+ "b =c"
+ ]
+ ];
+ "a=a+b%3D&b=b+%3Dc";
+ [
+ [
+ "a";
+ "a b="
+ ];
+ [
+ "b";
+ "b =c"
+ ]
+ ];
+ "a=a+b%3D&b=b+%3Dc";
+ [
+ [
+ "a";
+ "a b=&b=b =c"
+ ]
+ ];
+ "a=a+b%3D%26b%3Db+%3Dc";
+ [
+ [
+ "a";
+ [
+ "a b="
+ ]
+ ];
+ [
+ "b";
+ [
+ "b =c"
+ ]
+ ]
+ ];
+ "b=b+%3Dc&a=a+b%3D";
+ [
+ [
+ "a";
+ [
+ "a b="
+ ]
+ ];
+ [
+ "b";
+ [
+ "b =c"
+ ]
+ ]
+ ];
+ "b=b+%3Dc&a=a+b%3D";
+ [
+ [
+ "a";
+ [
+ "a b=&b=b =c"
+ ]
+ ]
+ ];
+ "a=a+b%3D%26b%3Db+%3Dc"
+ ];
+ [
+ "a=1&a=2";
+ [
+ [
+ "a";
+ "1"
+ ];
+ [
+ "a";
+ "2"
+ ]
+ ];
+ "a=1&a=2";
+ [
+ [
+ "a";
+ "1"
+ ];
+ [
+ "a";
+ "2"
+ ]
+ ];
+ "a=1&a=2";
+ [
+ [
+ "a";
+ "1&a=2"
+ ]
+ ];
+ "a=1%26a%3D2";
+ [
+ [
+ "a";
+ [
+ "1";
+ "2"
+ ]
+ ]
+ ];
+ "a=1&a=2";
+ [
+ [
+ "a";
+ [
+ "1";
+ "2"
+ ]
+ ]
+ ];
+ "a=1&a=2";
+ [
+ [
+ "a";
+ [
+ "1&a=2"
+ ]
+ ]
+ ];
+ "a=1%26a%3D2"
+ ];
+ [
+ ";a=b";
+ [
+ [
+ ";a";
+ "b"
+ ]
+ ];
+ ";a=b";
+ [
+ [
+ ";a";
+ "b"
+ ]
+ ];
+ ";a=b";
+ [
+ [
+ "a";
+ "b"
+ ]
+ ];
+ "a=b";
+ [
+ [
+ ";a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ ";a=b";
+ [
+ [
+ ";a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ ";a=b";
+ [
+ [
+ "a";
+ [
+ "b"
+ ]
+ ]
+ ];
+ "a=b"
+ ];
+ [
+ "a=a+b;b=b+c";
+ [
+ [
+ "a";
+ "a b;b=b c"
+ ]
+ ];
+ "a=a+b;b%3Db+c";
+ [
+ [
+ "a";
+ "a b;b=b c"
+ ]
+ ];
+ "a=a+b;b%3Db+c";
+ [
+ [
+ "a";
+ "a b"
+ ];
+ [
+ "b";
+ "b c"
+ ]
+ ];
+ "a=a+b;b=b+c";
+ [
+ [
+ "a";
+ [
+ "a b;b=b c"
+ ]
+ ]
+ ];
+ "a=a+b;b%3Db+c";
+ [
+ [
+ "a";
+ [
+ "a b;b=b c"
+ ]
+ ]
+ ];
+ "a=a+b;b%3Db+c";
+ [
+ [
+ "a";
+ [
+ "a b"
+ ]
+ ];
+ [
+ "b";
+ [
+ "b c"
+ ]
+ ]
+ ];
+ "b=b+c;a=a+b"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Url_/results.txt b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Url_/results.txt
new file mode 100644
index 0000000000..09115e9400
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/canondata/test.test_Url_/results.txt
@@ -0,0 +1,1640 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "parse";
+ [
+ "StructType";
+ [
+ [
+ "Frag";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Host";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "ParseError";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Pass";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Path";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Query";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "Scheme";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "User";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "significant_domain";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "tl_is_significant";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "tld";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "punycode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "encode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "decode";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "param";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_qs_and_fragment";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "cut_www";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_www2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "host";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "host_port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "scheme_host";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "scheme_host_port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "cut_scheme";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "tail";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "path";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "fragment";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "port";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "domain0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "domain_level";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "norm";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "http://";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "";
+ "";
+ "";
+ [
+ "http://"
+ ];
+ [
+ "http://"
+ ];
+ [
+ "http://"
+ ];
+ #;
+ "http://";
+ #;
+ #;
+ #;
+ #;
+ [
+ "http://"
+ ];
+ [
+ "http://"
+ ];
+ #;
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ #;
+ #;
+ "1";
+ #
+ ];
+ [
+ "http://lenta.ru";
+ [
+ #;
+ [
+ "lenta.ru"
+ ];
+ #;
+ #;
+ [
+ "/"
+ ];
+ #;
+ #;
+ [
+ "http"
+ ];
+ #
+ ];
+ "lenta.ru";
+ "lenta.ru";
+ "ru";
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ #;
+ "http://lenta.ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "http://lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "http://lenta.ru/"
+ ]
+ ];
+ [
+ "http://someone.livejournal.com/blog";
+ [
+ #;
+ [
+ "someone.livejournal.com"
+ ];
+ #;
+ #;
+ [
+ "/blog"
+ ];
+ #;
+ #;
+ [
+ "http"
+ ];
+ #
+ ];
+ "livejournal.com";
+ "livejournal.com";
+ "com";
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ [
+ "http://someone.livejournal.com/blog"
+ ];
+ #;
+ "http://someone.livejournal.com/blog";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "http://someone.livejournal.com"
+ ];
+ [
+ "http://someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com/blog"
+ ];
+ [
+ "/blog"
+ ];
+ [
+ "/blog"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ [
+ "http://someone.livejournal.com/blog"
+ ]
+ ];
+ [
+ "http://bbc.co.uk/";
+ [
+ #;
+ [
+ "bbc.co.uk"
+ ];
+ #;
+ #;
+ [
+ "/"
+ ];
+ #;
+ #;
+ [
+ "http"
+ ];
+ #
+ ];
+ "bbc.co.uk";
+ "co.uk";
+ "uk";
+ [
+ "http://bbc.co.uk/"
+ ];
+ [
+ "http://bbc.co.uk/"
+ ];
+ [
+ "http://bbc.co.uk/"
+ ];
+ #;
+ "http://bbc.co.uk/";
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "http://bbc.co.uk"
+ ];
+ [
+ "http://bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk/"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "3";
+ [
+ "http://bbc.co.uk/"
+ ]
+ ];
+ [
+ "https://www.yandex.com.tr/search";
+ [
+ #;
+ [
+ "www.yandex.com.tr"
+ ];
+ #;
+ #;
+ [
+ "/search"
+ ];
+ #;
+ #;
+ [
+ "https"
+ ];
+ #
+ ];
+ "yandex.com.tr";
+ "com.tr";
+ "tr";
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ [
+ "https://www.yandex.com.tr/search"
+ ];
+ #;
+ "https://www.yandex.com.tr/search";
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "www.yandex.com.tr"
+ ];
+ [
+ "www.yandex.com.tr"
+ ];
+ [
+ "https://www.yandex.com.tr"
+ ];
+ [
+ "https://www.yandex.com.tr"
+ ];
+ [
+ "www.yandex.com.tr/search"
+ ];
+ [
+ "/search"
+ ];
+ [
+ "/search"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "4";
+ [
+ "https://www.yandex.com.tr/search"
+ ]
+ ];
+ [
+ "https://www2.yandex.com.tr/search";
+ [
+ #;
+ [
+ "www2.yandex.com.tr"
+ ];
+ #;
+ #;
+ [
+ "/search"
+ ];
+ #;
+ #;
+ [
+ "https"
+ ];
+ #
+ ];
+ "yandex.com.tr";
+ "com.tr";
+ "tr";
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ [
+ "https://www2.yandex.com.tr/search"
+ ];
+ #;
+ "https://www2.yandex.com.tr/search";
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "www2.yandex.com.tr"
+ ];
+ [
+ "https://www2.yandex.com.tr"
+ ];
+ [
+ "https://www2.yandex.com.tr"
+ ];
+ [
+ "www2.yandex.com.tr/search"
+ ];
+ [
+ "/search"
+ ];
+ [
+ "/search"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "4";
+ [
+ "https://www2.yandex.com.tr/search"
+ ]
+ ];
+ [
+ "lenta.ru";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "lenta.ru";
+ "lenta.ru";
+ "ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ #;
+ "lenta.ru";
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "lenta.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ #;
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ #
+ ];
+ [
+ "bbc.co.uk/news";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "bbc.co.uk";
+ "co.uk";
+ "uk";
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "bbc.co.uk/news"
+ ];
+ #;
+ "bbc.co.uk/news";
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ [
+ "bbc.co.uk/news"
+ ];
+ [
+ "/news"
+ ];
+ [
+ "/news"
+ ];
+ #;
+ #;
+ #;
+ [
+ "uk"
+ ];
+ [
+ "bbc.co.uk"
+ ];
+ "3";
+ #
+ ];
+ [
+ "yandex.com.tr/maps?foo=";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "yandex.com.tr";
+ "com.tr";
+ "tr";
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ ""
+ ];
+ "yandex.com.tr/maps";
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ [
+ "yandex.com.tr/maps?foo="
+ ];
+ [
+ "/maps?foo="
+ ];
+ [
+ "/maps"
+ ];
+ #;
+ #;
+ #;
+ [
+ "tr"
+ ];
+ [
+ "yandex.com.tr"
+ ];
+ "3";
+ #
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "livejournal.com";
+ "livejournal.com";
+ "com";
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "bar"
+ ];
+ "someone.livejournal.com";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com?foo=bar#top"
+ ];
+ [
+ "/?foo=bar#top"
+ ];
+ [
+ "/"
+ ];
+ [
+ "top"
+ ];
+ #;
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ #
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "j.k";
+ "j.k";
+ "k";
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ #;
+ "a.b.c.d.e.f.g.h.i.j.k";
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k"
+ ];
+ [
+ "a.b.c.d.e.f.g.h.i.j.k#l.m.n"
+ ];
+ [
+ "/#l.m.n"
+ ];
+ [
+ "/"
+ ];
+ [
+ "l.m.n"
+ ];
+ #;
+ #;
+ [
+ "k"
+ ];
+ [
+ "i.j.k"
+ ];
+ "11";
+ #
+ ];
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "tl.md";
+ "foo.tl.md";
+ "md";
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "foo.tl.md/ \xD1\x8E\xD0\xBD\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xB4"
+ ];
+ #;
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4";
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ [
+ "foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ [
+ "/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
+ ];
+ #;
+ #;
+ #;
+ [
+ "md"
+ ];
+ [
+ "foo.tl.md"
+ ];
+ "3";
+ #
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai";
+ [
+ #;
+ #;
+ [
+ "ParsedBadFormat"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "xn--d1acpjx3f.xn--p1ai";
+ "xn--d1acpjx3f.xn--p1ai";
+ "xn--p1ai";
+ [
+ "\xD1\x8F\xD0\xBD\xD0\xB4\xD0\xB5\xD0\xBA\xD1\x81.\xD1\x80\xD1\x84"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ #;
+ "xn--d1acpjx3f.xn--p1ai";
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "xn--d1acpjx3f.xn--p1ai"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ #;
+ #;
+ [
+ "xn--p1ai"
+ ];
+ #;
+ "2";
+ #
+ ];
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top";
+ [
+ [
+ "top"
+ ];
+ [
+ "ya.ru"
+ ];
+ #;
+ #;
+ [
+ "/search/"
+ ];
+ [
+ "80"
+ ];
+ [
+ "text=test&lr=213"
+ ];
+ [
+ "https"
+ ];
+ #
+ ];
+ "ya.ru";
+ "ya.ru";
+ "ru";
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "https://ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ #;
+ "https://ya.ru:80/search/";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru:80"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "https://ya.ru:80"
+ ];
+ [
+ "ya.ru:80/search/?text=test&lr=213#top"
+ ];
+ [
+ "/search/?text=test&lr=213#top"
+ ];
+ [
+ "/search/"
+ ];
+ [
+ "top"
+ ];
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "https://ya.ru:80/search/?text=test&lr=213"
+ ]
+ ];
+ [
+ "https://ya.ru/search/?text=%2B";
+ [
+ #;
+ [
+ "ya.ru"
+ ];
+ #;
+ #;
+ [
+ "/search/"
+ ];
+ #;
+ [
+ "text=%2B"
+ ];
+ [
+ "https"
+ ];
+ #
+ ];
+ "ya.ru";
+ "ya.ru";
+ "ru";
+ [
+ "https://ya.ru/search/?text=%2B"
+ ];
+ [
+ "https://ya.ru/search/?text=%2B"
+ ];
+ [
+ "https://ya.ru/search/?text=+"
+ ];
+ #;
+ "https://ya.ru/search/";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "https://ya.ru"
+ ];
+ [
+ "ya.ru/search/?text=%2B"
+ ];
+ [
+ "/search/?text=%2B"
+ ];
+ [
+ "/search/"
+ ];
+ #;
+ [
+ "443"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "https://ya.ru/search/?text=%2B"
+ ]
+ ];
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible";
+ [
+ #;
+ #;
+ [
+ "ParsedBadScheme"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #
+ ];
+ "yandex.ru";
+ "yandex.ru";
+ "ru";
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ #;
+ "goal://market.yandex.ru/product-page_scroll-box_product_visible";
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ [
+ "goal://market.yandex.ru"
+ ];
+ [
+ "goal://market.yandex.ru"
+ ];
+ [
+ "market.yandex.ru/product-page_scroll-box_product_visible"
+ ];
+ [
+ "/product-page_scroll-box_product_visible"
+ ];
+ [
+ "/product-page_scroll-box_product_visible"
+ ];
+ #;
+ #;
+ #;
+ [
+ "ru"
+ ];
+ [
+ "market.yandex.ru"
+ ];
+ "3";
+ #
+ ];
+ [
+ "Http://ya.ru";
+ [
+ #;
+ [
+ "ya.ru"
+ ];
+ #;
+ #;
+ [
+ "/"
+ ];
+ #;
+ #;
+ [
+ "http"
+ ];
+ #
+ ];
+ "ya.ru";
+ "ya.ru";
+ "ru";
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ #;
+ "Http://ya.ru";
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "Http://ya.ru"
+ ];
+ [
+ "ya.ru"
+ ];
+ [
+ "/"
+ ];
+ [
+ "/"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "ru"
+ ];
+ #;
+ "2";
+ [
+ "http://ya.ru/"
+ ]
+ ];
+ [
+ "ftp://someone.livejournal.com:80/blog";
+ [
+ #;
+ [
+ "someone.livejournal.com"
+ ];
+ #;
+ #;
+ [
+ "/blog"
+ ];
+ [
+ "80"
+ ];
+ #;
+ [
+ "ftp"
+ ];
+ #
+ ];
+ "livejournal.com";
+ "livejournal.com";
+ "com";
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ];
+ #;
+ "ftp://someone.livejournal.com:80/blog";
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ [
+ "someone.livejournal.com:80"
+ ];
+ [
+ "ftp://someone.livejournal.com"
+ ];
+ [
+ "ftp://someone.livejournal.com:80"
+ ];
+ [
+ "someone.livejournal.com:80/blog"
+ ];
+ [
+ "/blog"
+ ];
+ [
+ "/blog"
+ ];
+ #;
+ [
+ "80"
+ ];
+ #;
+ [
+ "com"
+ ];
+ [
+ "someone.livejournal.com"
+ ];
+ "3";
+ [
+ "ftp://someone.livejournal.com:80/blog"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.in b/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.in
new file mode 100644
index 0000000000..50a35c6876
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.in
@@ -0,0 +1,4 @@
+{"key"="";"subkey"="";"value"="abæcdöef"};
+{"key"="";"subkey"="";"value"="яндекс.ру"};
+{"key"="";"subkey"="";"value"="yandex.ru"};
+{"key"="";"subkey"="";"value"="xn--d1acpjx3f.xn--p1ag"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.sql b/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.sql
new file mode 100644
index 0000000000..3dcee5ca48
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockPunycode.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+PRAGMA UseBlocks;
+SELECT
+ value,
+ Url::PunycodeToHostName(value) AS hostname_utf,
+ Url::HostNameToPunycode(Url::PunycodeToHostName(value)) as punycode_hostname,
+ Url::ForcePunycodeToHostName(value) AS hostname_utf_forced,
+ Url::ForceHostNameToPunycode(Url::ForcePunycodeToHostName(value)) as punycode_hostname_forced,
+ Url::CanBePunycodeHostName(value) as can_be_punycode
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.in b/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.in
new file mode 100644
index 0000000000..d98c9c2522
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.in
@@ -0,0 +1,4 @@
+{"key"="";"subkey"="";"value"="ru"};
+{"key"="";"subkey"="";"value"="123"};
+{"key"="";"subkey"="";"value"="yandex"};
+{"key"="";"subkey"="";"value"="sdfsdfsdf"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.sql b/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.sql
new file mode 100644
index 0000000000..7af5d71b1c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockTld.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+PRAGMA UseBlocks;
+SELECT
+ Url::GetTLD(value) AS tld,
+ Url::IsKnownTLD(value) AS known,
+ Url::IsWellKnownTLD(value) AS well_known
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.in b/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.in
new file mode 100644
index 0000000000..94f998d48f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.in
@@ -0,0 +1,18 @@
+{"key"="";"subkey"="";"value"="http://"};
+{"key"="";"subkey"="";"value"="http://lenta.ru"};
+{"key"="";"subkey"="";"value"="http://someone.livejournal.com/blog"};
+{"key"="";"subkey"="";"value"="http://bbc.co.uk/"};
+{"key"="";"subkey"="";"value"="https://www.yandex.com.tr/search"};
+{"key"="";"subkey"="";"value"="https://www2.yandex.com.tr/search"};
+{"key"="";"subkey"="";"value"="lenta.ru"};
+{"key"="";"subkey"="";"value"="bbc.co.uk/news"};
+{"key"="";"subkey"="";"value"="yandex.com.tr/maps?foo="};
+{"key"="";"subkey"="";"value"="someone.livejournal.com?foo=bar#top"};
+{"key"="";"subkey"="";"value"="a.b.c.d.e.f.g.h.i.j.k#l.m.n"};
+{"key"="";"subkey"="";"value"="foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"};
+{"key"="";"subkey"="";"value"="xn--d1acpjx3f.xn--p1ai"};
+{"key"="";"subkey"="";"value"="https://ya.ru:80/search/?text=test&lr=213#top"};
+{"key"="";"subkey"="";"value"="https://ya.ru/search/?text=%2B"};
+{"key"="";"subkey"="";"value"="goal://market.yandex.ru/product-page_scroll-box_product_visible"};
+{"key"="";"subkey"="";"value"="Http://ya.ru"};
+{"key"="";"subkey"="";"value"="ftp://someone.livejournal.com:80/blog"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.sql b/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.sql
new file mode 100644
index 0000000000..9b1726c1da
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/BlockUrl.sql
@@ -0,0 +1,27 @@
+/* syntax version 1 */
+PRAGMA UseBlocks;
+SELECT
+ value,
+ Url::Encode(value) AS encode,
+ Url::Decode(value) AS decode,
+ Url::GetCGIParam(value, "foo") AS param,
+ Url::CutQueryStringAndFragment(value) AS cut_qs_and_fragment,
+ Url::GetHost(value) as host,
+ Url::CutWWW(Url::GetHost(value)) AS cut_www,
+ Url::CutWWW2(Url::GetHost(value)) AS cut_www2,
+ Url::GetTLD(value) AS tld,
+ Url::PunycodeToHostName(value) AS punycode,
+ Url::CutScheme(value) AS cut_scheme,
+ Url::GetHostPort(value) as host_port,
+ Url::GetSchemeHost(value) AS scheme_host,
+ Url::GetSchemeHostPort(value) AS scheme_host_port,
+ Url::GetTail(value) AS tail,
+ Url::GetPath(value) AS path,
+ Url::GetFragment(value) AS fragment,
+ Url::GetPort(value) AS port,
+ Url::GetDomain(value, 0) as domain0,
+ Url::GetDomain(value, 1) as domain1,
+ Url::GetDomain(value, 3) as domain3,
+ Url::GetDomainLevel(value) as domain_level,
+ Url::Normalize(value) as norm
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.in b/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.in
new file mode 100644
index 0000000000..50a35c6876
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.in
@@ -0,0 +1,4 @@
+{"key"="";"subkey"="";"value"="abæcdöef"};
+{"key"="";"subkey"="";"value"="яндекс.ру"};
+{"key"="";"subkey"="";"value"="yandex.ru"};
+{"key"="";"subkey"="";"value"="xn--d1acpjx3f.xn--p1ag"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.sql b/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.sql
new file mode 100644
index 0000000000..e5dad2e303
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Punycode.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+SELECT
+ value,
+ Url::PunycodeToHostName(value) AS hostname_utf,
+ Url::HostNameToPunycode(Url::PunycodeToHostName(value)) as punycode_hostname,
+ Url::ForcePunycodeToHostName(value) AS hostname_utf_forced,
+ Url::ForceHostNameToPunycode(Url::ForcePunycodeToHostName(value)) as punycode_hostname_forced,
+ Url::CanBePunycodeHostName(value) as can_be_punycode
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Tld.in b/ydb/library/yql/udfs/common/url_base/test/cases/Tld.in
new file mode 100644
index 0000000000..d98c9c2522
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Tld.in
@@ -0,0 +1,4 @@
+{"key"="";"subkey"="";"value"="ru"};
+{"key"="";"subkey"="";"value"="123"};
+{"key"="";"subkey"="";"value"="yandex"};
+{"key"="";"subkey"="";"value"="sdfsdfsdf"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Tld.sql b/ydb/library/yql/udfs/common/url_base/test/cases/Tld.sql
new file mode 100644
index 0000000000..a26600cf63
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Tld.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+SELECT
+ Url::GetTLD(value) AS tld,
+ Url::IsKnownTLD(value) AS known,
+ Url::IsWellKnownTLD(value) AS well_known
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Url.in b/ydb/library/yql/udfs/common/url_base/test/cases/Url.in
new file mode 100644
index 0000000000..94f998d48f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Url.in
@@ -0,0 +1,18 @@
+{"key"="";"subkey"="";"value"="http://"};
+{"key"="";"subkey"="";"value"="http://lenta.ru"};
+{"key"="";"subkey"="";"value"="http://someone.livejournal.com/blog"};
+{"key"="";"subkey"="";"value"="http://bbc.co.uk/"};
+{"key"="";"subkey"="";"value"="https://www.yandex.com.tr/search"};
+{"key"="";"subkey"="";"value"="https://www2.yandex.com.tr/search"};
+{"key"="";"subkey"="";"value"="lenta.ru"};
+{"key"="";"subkey"="";"value"="bbc.co.uk/news"};
+{"key"="";"subkey"="";"value"="yandex.com.tr/maps?foo="};
+{"key"="";"subkey"="";"value"="someone.livejournal.com?foo=bar#top"};
+{"key"="";"subkey"="";"value"="a.b.c.d.e.f.g.h.i.j.k#l.m.n"};
+{"key"="";"subkey"="";"value"="foo.tl.md/+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"};
+{"key"="";"subkey"="";"value"="xn--d1acpjx3f.xn--p1ai"};
+{"key"="";"subkey"="";"value"="https://ya.ru:80/search/?text=test&lr=213#top"};
+{"key"="";"subkey"="";"value"="https://ya.ru/search/?text=%2B"};
+{"key"="";"subkey"="";"value"="goal://market.yandex.ru/product-page_scroll-box_product_visible"};
+{"key"="";"subkey"="";"value"="Http://ya.ru"};
+{"key"="";"subkey"="";"value"="ftp://someone.livejournal.com:80/blog"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/Url.sql b/ydb/library/yql/udfs/common/url_base/test/cases/Url.sql
new file mode 100644
index 0000000000..ed50d29ae2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/Url.sql
@@ -0,0 +1,29 @@
+/* syntax version 1 */
+SELECT
+ value,
+ Url::Parse(value) AS parse,
+ Url::GetSignificantDomain(value) AS significant_domain,
+ Url::GetSignificantDomain(value, AsList("tl")) AS tl_is_significant,
+ Url::GetTLD(value) AS tld,
+ Url::PunycodeToHostName(value) AS punycode,
+ Url::Encode(value) AS encode,
+ Url::Decode(value) AS decode,
+ Url::GetCGIParam(value, "foo") AS param,
+ Url::CutQueryStringAndFragment(value) AS cut_qs_and_fragment,
+ Url::CutWWW(Url::GetHost(value)) AS cut_www,
+ Url::CutWWW2(Url::GetHost(value)) AS cut_www2,
+ Url::GetHost(value) as host,
+ Url::GetHostPort(value) as host_port,
+ Url::GetSchemeHost(value) AS scheme_host,
+ Url::GetSchemeHostPort(value) AS scheme_host_port,
+ Url::CutScheme(value) AS cut_scheme,
+ Url::GetTail(value) AS tail,
+ Url::GetPath(value) AS path,
+ Url::GetFragment(value) AS fragment,
+ Url::GetPort(value) AS port,
+ Url::GetDomain(value, 0) as domain0,
+ Url::GetDomain(value, 1) as domain1,
+ Url::GetDomain(value, 3) as domain3,
+ Url::GetDomainLevel(value) as domain_level,
+ Url::Normalize(value) as norm
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.in b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.in
new file mode 100644
index 0000000000..d9f5d84527
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.in
@@ -0,0 +1,20 @@
+{"key"="";"subkey"="";"value"="glfilter=7893318%3A7949252&glfilter=5099461%3A12103637&glfilter=8292645%3A1&hid=90404&onstock=0&local-offers-first=0"};
+{"key"="";"subkey"="";"value"=""};
+{"key"="";"subkey"="";"value"="&"};
+{"key"="";"subkey"="";"value"="&&"};
+{"key"="";"subkey"="";"value"="="};
+{"key"="";"subkey"="";"value"="&="};
+{"key"="";"subkey"="";"value"="=&"};
+{"key"="";"subkey"="";"value"="&=="};
+{"key"="";"subkey"="";"value"="&==&"};
+{"key"="";"subkey"="";"value"="==&"};
+{"key"="";"subkey"="";"value"="=&="};
+{"key"="";"subkey"="";"value"="=a"};
+{"key"="";"subkey"="";"value"="a"};
+{"key"="";"subkey"="";"value"="a="};
+{"key"="";"subkey"="";"value"="&a=b"};
+{"key"="";"subkey"="";"value"="a=a+b&b=b+c"};
+{"key"="";"subkey"="";"value"="a=a+b=&b=b+=c"};
+{"key"="";"subkey"="";"value"="a=1&a=2"};
+{"key"="";"subkey"="";"value"=";a=b"};
+{"key"="";"subkey"="";"value"="a=a+b;b=b+c"};
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.sql b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.sql
new file mode 100644
index 0000000000..4179fd0a0c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQuery.sql
@@ -0,0 +1,15 @@
+SELECT
+ value,
+ Url::QueryStringToList(value, false AS Strict) AS base_list,
+ Url::BuildQueryString(Url::QueryStringToList(value, false AS Strict)) AS base_list_build,
+ Url::QueryStringToList(value, true AS KeepBlankValues, false AS Strict) AS keep_blank_list,
+ Url::BuildQueryString(Url::QueryStringToList(value, true AS KeepBlankValues, false AS Strict)) AS keep_blank_list_build,
+ Url::QueryStringToList(value, ";" AS Separator, false AS Strict) AS sep_semicol_list,
+ Url::BuildQueryString(Url::QueryStringToList(value, ";" AS Separator, false AS Strict), ";" AS Separator) AS sep_semicol_list_build,
+ Url::QueryStringToDict(value, false AS Strict) AS base_dict,
+ Url::BuildQueryString(Url::QueryStringToDict(value, false AS Strict)) AS base_dict_build,
+ Url::QueryStringToDict(value, true AS KeepBlankValues, false AS Strict) AS keep_blank_dict,
+ Url::BuildQueryString(Url::QueryStringToDict(value, true AS KeepBlankValues, false AS Strict)) AS keep_blank_dict_build,
+ Url::QueryStringToDict(value, ";" AS Separator, false AS Strict) AS sep_semicol_dict,
+ Url::BuildQueryString(Url::QueryStringToDict(value, ";" AS Separator, false AS Strict), ";" AS Separator) AS sep_semicol_dict_build,
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.cfg b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.cfg
new file mode 100644
index 0000000000..5dae597903
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.cfg
@@ -0,0 +1 @@
+xfail
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.sql b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.sql
new file mode 100644
index 0000000000..5cb0cbfc9d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryMaxFieldsErr.sql
@@ -0,0 +1,2 @@
+SELECT
+ Url::QueryStringToList("glfilter=78318%3A79492&glfilter=561%3A121037&hid=904", 2 AS MaxFields)
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.cfg b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.cfg
new file mode 100644
index 0000000000..5dae597903
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.cfg
@@ -0,0 +1 @@
+xfail
diff --git a/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.sql b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.sql
new file mode 100644
index 0000000000..b036ed5451
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/cases/UrlQueryStrictErr.sql
@@ -0,0 +1,2 @@
+SELECT
+ Url::QueryStringToList("glfilter=78318%3A79492&mistaken&glfilter=1&hid=904")
diff --git a/ydb/library/yql/udfs/common/url_base/test/ya.make b/ydb/library/yql/udfs/common/url_base/test/ya.make
new file mode 100644
index 0000000000..225accf577
--- /dev/null
+++ b/ydb/library/yql/udfs/common/url_base/test/ya.make
@@ -0,0 +1,17 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/url_base)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+DATA(
+ sbr://451427803 # Robots.in
+)
+
+END()
diff --git a/ydb/library/yql/udfs/common/url_base/ya.make b/ydb/library/yql/udfs/common/url_base/ya.make
index 31b529e968..0dded35dfc 100644
--- a/ydb/library/yql/udfs/common/url_base/ya.make
+++ b/ydb/library/yql/udfs/common/url_base/ya.make
@@ -16,3 +16,8 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/result.json b/ydb/library/yql/udfs/common/yson2/test/canondata/result.json
new file mode 100644
index 0000000000..f4c95fca9e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/result.json
@@ -0,0 +1,167 @@
+{
+ "test.test[AccessJson]": [
+ {
+ "uri": "file://test.test_AccessJson_/results.txt"
+ }
+ ],
+ "test.test[Access]": [
+ {
+ "uri": "file://test.test_Access_/results.txt"
+ }
+ ],
+ "test.test[Attrs]": [
+ {
+ "uri": "file://test.test_Attrs_/results.txt"
+ }
+ ],
+ "test.test[AutoConvertTo]": [
+ {
+ "uri": "file://test.test_AutoConvertTo_/results.txt"
+ }
+ ],
+ "test.test[Contains]": [
+ {
+ "uri": "file://test.test_Contains_/results.txt"
+ }
+ ],
+ "test.test[ConvertTo]": [
+ {
+ "uri": "file://test.test_ConvertTo_/results.txt"
+ }
+ ],
+ "test.test[Dicts]": [
+ {
+ "uri": "file://test.test_Dicts_/results.txt"
+ }
+ ],
+ "test.test[EmptyDicts]": [
+ {
+ "uri": "file://test.test_EmptyDicts_/results.txt"
+ }
+ ],
+ "test.test[EmptyLists]": [
+ {
+ "uri": "file://test.test_EmptyLists_/results.txt"
+ }
+ ],
+ "test.test[Equals]": [
+ {
+ "uri": "file://test.test_Equals_/results.txt"
+ }
+ ],
+ "test.test[From]": [
+ {
+ "uri": "file://test.test_From_/results.txt"
+ }
+ ],
+ "test.test[GenericConvertToEmptyStruct]": [
+ {
+ "uri": "file://test.test_GenericConvertToEmptyStruct_/results.txt"
+ }
+ ],
+ "test.test[GenericConvertToWithAutoConvert]": [
+ {
+ "uri": "file://test.test_GenericConvertToWithAutoConvert_/results.txt"
+ }
+ ],
+ "test.test[GenericConvertToWithNoStrict]": [
+ {
+ "uri": "file://test.test_GenericConvertToWithNoStrict_/results.txt"
+ }
+ ],
+ "test.test[GenericConvertTo]": [
+ {
+ "uri": "file://test.test_GenericConvertTo_/results.txt"
+ }
+ ],
+ "test.test[GenericFrom]": [
+ {
+ "uri": "file://test.test_GenericFrom_/results.txt"
+ }
+ ],
+ "test.test[GetHash]": [
+ {
+ "uri": "file://test.test_GetHash_/results.txt"
+ }
+ ],
+ "test.test[Get]": [
+ {
+ "uri": "file://test.test_Get_/results.txt"
+ }
+ ],
+ "test.test[GoodForYsonBadForJson]": [
+ {
+ "uri": "file://test.test_GoodForYsonBadForJson_/results.txt"
+ }
+ ],
+ "test.test[ImplicitFromRes]": [
+ {
+ "uri": "file://test.test_ImplicitFromRes_/results.txt"
+ }
+ ],
+ "test.test[IsType]": [
+ {
+ "uri": "file://test.test_IsType_/results.txt"
+ }
+ ],
+ "test.test[JsonSerializeSkipMapEntity]": [
+ {
+ "uri": "file://test.test_JsonSerializeSkipMapEntity_/results.txt"
+ }
+ ],
+ "test.test[JsonWithUtf8]": [
+ {
+ "uri": "file://test.test_JsonWithUtf8_/results.txt"
+ }
+ ],
+ "test.test[Lists]": [
+ {
+ "uri": "file://test.test_Lists_/results.txt"
+ }
+ ],
+ "test.test[Lookup]": [
+ {
+ "uri": "file://test.test_Lookup_/results.txt"
+ }
+ ],
+ "test.test[NegativeArrayIndex]": [
+ {
+ "uri": "file://test.test_NegativeArrayIndex_/results.txt"
+ }
+ ],
+ "test.test[ParseString]": [
+ {
+ "uri": "file://test.test_ParseString_/results.txt"
+ }
+ ],
+ "test.test[Scalars]": [
+ {
+ "uri": "file://test.test_Scalars_/results.txt"
+ }
+ ],
+ "test.test[SerializeDouble]": [
+ {
+ "uri": "file://test.test_SerializeDouble_/results.txt"
+ }
+ ],
+ "test.test[Serialize]": [
+ {
+ "uri": "file://test.test_Serialize_/results.txt"
+ }
+ ],
+ "test.test[WeakYsonRest]": [
+ {
+ "uri": "file://test.test_WeakYsonRest_/results.txt"
+ }
+ ],
+ "test.test[WithAttrs]": [
+ {
+ "uri": "file://test.test_WithAttrs_/results.txt"
+ }
+ ],
+ "test.test[YPath]": [
+ {
+ "uri": "file://test.test_YPath_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AccessJson_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AccessJson_/results.txt
new file mode 100644
index 0000000000..b3f2875518
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AccessJson_/results.txt
@@ -0,0 +1,126 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Access_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Access_/results.txt
new file mode 100644
index 0000000000..c9b9064518
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Access_/results.txt
@@ -0,0 +1,33 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "text";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "hello world"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Attrs_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Attrs_/results.txt
new file mode 100644
index 0000000000..72c297fab4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Attrs_/results.txt
@@ -0,0 +1,568 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column17";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column18";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column19";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column20";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column21";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column22";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column23";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column24";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column25";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column26";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column27";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column28";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column29";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column30";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column31";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column32";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column33";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column34";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column35";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column36";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column37";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column38";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column39";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column40";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column41";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column42";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ %true
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "3"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "foo"
+ ];
+ [
+ "very loooooooooooooooooong string"
+ ];
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "3"
+ ]
+ ];
+ [
+ "b";
+ "c"
+ ];
+ [
+ "a";
+ "b"
+ ];
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ];
+ [
+ "a";
+ "b"
+ ];
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ];
+ [
+ "a";
+ "b"
+ ];
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AutoConvertTo_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AutoConvertTo_/results.txt
new file mode 100644
index 0000000000..034a71cae2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_AutoConvertTo_/results.txt
@@ -0,0 +1,556 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "zero_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "bool_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "int_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "uint_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "negative_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "double_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "string_to_bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "zero_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "bool_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "int_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "uint_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "negative_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "double_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "string_to_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "zero_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "bool_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "int_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "uint_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "negative_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "double_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "string_to_uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "zero_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "bool_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "int_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "uint_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "negative_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "double_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "string_to_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "zero_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "bool_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "int_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "uint_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "negative_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "double_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "string_to_string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "struct_stub";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "x";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "y";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "z";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "tuple_stub";
+ [
+ "OptionalType";
+ [
+ "TupleType";
+ [
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "DataType";
+ "Int64"
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %false
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ "0"
+ ];
+ [
+ "1"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "-123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "0"
+ ];
+ [
+ "1"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "18446744073709551493"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "0"
+ ];
+ [
+ "1"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "-123"
+ ];
+ [
+ "123.456"
+ ];
+ [
+ "123"
+ ];
+ [
+ "0"
+ ];
+ [
+ "true"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "-123"
+ ];
+ [
+ "123.456"
+ ];
+ [
+ "123"
+ ];
+ [
+ [
+ #;
+ "0";
+ []
+ ]
+ ];
+ [
+ [
+ #;
+ "0";
+ []
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Contains_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Contains_/results.txt
new file mode 100644
index 0000000000..8d72c6dad2
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Contains_/results.txt
@@ -0,0 +1,122 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true
+ ];
+ [
+ %false
+ ];
+ [
+ %false
+ ];
+ [
+ %true
+ ];
+ [
+ %false
+ ];
+ [
+ %true
+ ];
+ [
+ %false
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ConvertTo_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ConvertTo_/results.txt
new file mode 100644
index 0000000000..4061e6a4f8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ConvertTo_/results.txt
@@ -0,0 +1,245 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "incorrect";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "number_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "string_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "yson_list";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ];
+ [
+ "incorrect_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "number_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "string_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "yson_dict";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "incorrect_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ [
+ "123"
+ ];
+ #;
+ [
+ "1";
+ "2";
+ "3"
+ ];
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ [
+ "123"
+ ];
+ [
+ "{\"a\":1,\"b\":2,\"c\":3}"
+ ];
+ [
+ "{\"a\":4,\"b\":5,\"c\":6}"
+ ]
+ ];
+ [];
+ [
+ [
+ "a";
+ "1"
+ ];
+ [
+ "b";
+ "2"
+ ];
+ [
+ "c";
+ "3"
+ ]
+ ];
+ [
+ [
+ "a";
+ "aaa"
+ ];
+ [
+ "b";
+ "bbb"
+ ];
+ [
+ "c";
+ "ccc"
+ ]
+ ];
+ [
+ "[\"ccc\",\"ddd\"]"
+ ];
+ []
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Dicts_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Dicts_/results.txt
new file mode 100644
index 0000000000..e4b9cb5435
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Dicts_/results.txt
@@ -0,0 +1,178 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %false;
+ "2";
+ [
+ "a";
+ "b"
+ ];
+ [
+ [
+ "1"
+ ];
+ #
+ ];
+ [
+ [
+ "a";
+ [
+ "1"
+ ]
+ ];
+ [
+ "b";
+ #
+ ]
+ ];
+ %true;
+ %false;
+ [
+ "1"
+ ];
+ #;
+ [
+ "c";
+ "d"
+ ];
+ [
+ [
+ "3"
+ ];
+ [
+ "4"
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyDicts_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyDicts_/results.txt
new file mode 100644
index 0000000000..34e7c5f783
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyDicts_/results.txt
@@ -0,0 +1,103 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "ListType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %false;
+ "0";
+ [];
+ [];
+ [];
+ %false;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyLists_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyLists_/results.txt
new file mode 100644
index 0000000000..7a8b8c82e5
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_EmptyLists_/results.txt
@@ -0,0 +1,50 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %false;
+ "0";
+ []
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Equals_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Equals_/results.txt
new file mode 100644
index 0000000000..736f668ab4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Equals_/results.txt
@@ -0,0 +1,124 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "a1";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "a2";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "a3";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "c";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "d";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "e";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "f";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "g";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "h";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "i";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "attrs1";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "attrs2";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ %true;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_From_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_From_/results.txt
new file mode 100644
index 0000000000..d1e62592cc
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_From_/results.txt
@@ -0,0 +1,188 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column7";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column8";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column9";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column10";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column11";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column12";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column13";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column14";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column15";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ %true;
+ %false;
+ {
+ "$type" = "boolean";
+ "$value" = "true"
+ };
+ #;
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ #;
+ {
+ "$type" = "uint64";
+ "$value" = "2"
+ };
+ #;
+ {
+ "$type" = "double";
+ "$value" = "3"
+ };
+ #;
+ {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ {
+ "$type" = "string";
+ "$value" = "fooooooooooooooooooooooooooooooooo"
+ };
+ #;
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "3"
+ }
+ ];
+ {
+ "a" = {
+ "$type" = "string";
+ "$value" = "x"
+ };
+ "b" = {
+ "$type" = "string";
+ "$value" = "y"
+ }
+ }
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToEmptyStruct_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToEmptyStruct_/results.txt
new file mode 100644
index 0000000000..1029a098e1
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToEmptyStruct_/results.txt
@@ -0,0 +1,34 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "list_of_empty_structs";
+ [
+ "ListType";
+ [
+ "StructType";
+ []
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ [];
+ []
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithAutoConvert_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithAutoConvert_/results.txt
new file mode 100644
index 0000000000..875f9a5aae
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithAutoConvert_/results.txt
@@ -0,0 +1,338 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "bool";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "int";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "uint";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "optional_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "empty_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "string";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "utf8";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "int_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "nested_list";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "int_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "tuple";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Int8"
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "DataType";
+ "Yson"
+ ];
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ];
+ [
+ "struct";
+ [
+ "StructType";
+ [
+ [
+ "a";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Int8"
+ ]
+ ];
+ [
+ "c";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "d";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "e";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Double"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "x";
+ [
+ "TupleType";
+ [
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "y";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int16"
+ ]
+ ]
+ ];
+ [
+ "z";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int8"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ "0";
+ "123";
+ [
+ "1.23"
+ ];
+ [
+ "0"
+ ];
+ "1.23";
+ "0";
+ [
+ "1";
+ "2";
+ "3";
+ "7";
+ "8";
+ "0"
+ ];
+ [
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ];
+ [
+ [
+ "3"
+ ];
+ #
+ ];
+ [];
+ []
+ ];
+ [
+ [
+ "bar";
+ "2"
+ ];
+ [
+ "foo";
+ "1"
+ ];
+ [
+ "xxx";
+ "0"
+ ]
+ ];
+ [
+ %false;
+ "1";
+ [
+ "foo"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ #;
+ "null"
+ ];
+ [
+ %false;
+ "1";
+ [
+ "foo"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "bar"
+ ];
+ [
+ #;
+ #
+ ];
+ #;
+ []
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithNoStrict_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithNoStrict_/results.txt
new file mode 100644
index 0000000000..5b6f73d609
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertToWithNoStrict_/results.txt
@@ -0,0 +1,287 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "bool";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "uint";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "optional_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "empty_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "string";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "utf8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ]
+ ];
+ [
+ "int_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "nested_list";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "int_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "tuple";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Int8"
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "struct";
+ [
+ "StructType";
+ [
+ [
+ "a";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Int8"
+ ]
+ ];
+ [
+ "c";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "d";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "e";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Double"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "y";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int16"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1";
+ "2";
+ "3"
+ ];
+ [
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ];
+ [
+ [
+ "3"
+ ];
+ #
+ ]
+ ];
+ [
+ [
+ "foo";
+ "1"
+ ]
+ ];
+ [
+ %false;
+ "1";
+ #;
+ [
+ "1";
+ "2"
+ ]
+ ];
+ [
+ %false;
+ "1";
+ [
+ "foo"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "bar"
+ ];
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertTo_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertTo_/results.txt
new file mode 100644
index 0000000000..c1e579f258
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericConvertTo_/results.txt
@@ -0,0 +1,379 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "bool";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "int";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "uint";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ];
+ [
+ "optional_double";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "empty_int";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int32"
+ ]
+ ]
+ ];
+ [
+ "string";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "utf8";
+ [
+ "DataType";
+ "Utf8"
+ ]
+ ];
+ [
+ "yson";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "json";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "int_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "nested_list";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "int_dict";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "tuple";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Bool"
+ ];
+ [
+ "DataType";
+ "Int8"
+ ];
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "struct";
+ [
+ "StructType";
+ [
+ [
+ "a";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Int8"
+ ]
+ ];
+ [
+ "c";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "d";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "e";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Double"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "resource";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "list_of_floats";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Float"
+ ]
+ ]
+ ];
+ [
+ "bad_member";
+ [
+ "OptionalType";
+ [
+ "StructType";
+ [
+ [
+ "a";
+ [
+ "StructType";
+ [
+ [
+ "b";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ [
+ "bad_element";
+ [
+ "OptionalType";
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Int64"
+ ];
+ [
+ "TupleType";
+ [
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ "123";
+ "123";
+ [
+ "1.23"
+ ];
+ #;
+ "123";
+ "\xD0\xBF\xD1\x80\xD0\xB8\xD1\x91\xD0\xBC";
+ [
+ {
+ "a" = {
+ "$type" = "string";
+ "$value" = "b"
+ };
+ "c" = #
+ }
+ ];
+ [
+ "[{\"a\":1},{\"a\":2},{\"a\":3}]"
+ ];
+ [
+ "1";
+ "2";
+ "3"
+ ];
+ [
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ]
+ ];
+ [
+ [
+ "3"
+ ];
+ #
+ ]
+ ];
+ [
+ [
+ "bar";
+ "2"
+ ];
+ [
+ "foo";
+ "1"
+ ]
+ ];
+ [
+ %false;
+ "1";
+ [
+ "foo"
+ ];
+ [
+ "1";
+ "2"
+ ]
+ ];
+ [
+ %false;
+ "1";
+ [
+ "foo"
+ ];
+ [
+ "1";
+ "2"
+ ];
+ [
+ "1";
+ "bar"
+ ]
+ ];
+ {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ [
+ "-3.1416";
+ "42";
+ "0.003"
+ ];
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericFrom_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericFrom_/results.txt
new file mode 100644
index 0000000000..7281b38aef
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GenericFrom_/results.txt
@@ -0,0 +1,345 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "null";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "empty_list";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "empty_dict";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "bool";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "int";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "uint";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "optional_double";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "empty_int";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "string";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "int_list";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "nested_list";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "int_dict";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "tuple";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "struct";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "utf8";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "yson";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "json";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "resource_list";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "variants";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "double_optional";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [];
+ {};
+ {
+ "$type" = "boolean";
+ "$value" = "true"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "123"
+ };
+ {
+ "$type" = "uint64";
+ "$value" = "123"
+ };
+ {
+ "$type" = "double";
+ "$value" = "1.23"
+ };
+ #;
+ {
+ "$type" = "string";
+ "$value" = "123"
+ };
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "3"
+ }
+ ];
+ [
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ }
+ ];
+ [
+ {
+ "$type" = "int64";
+ "$value" = "3"
+ };
+ #
+ ]
+ ];
+ {
+ "bar" = {
+ "$type" = "int64";
+ "$value" = "2"
+ };
+ "foo" = {
+ "$type" = "int64";
+ "$value" = "1"
+ }
+ };
+ [
+ {
+ "$type" = "boolean";
+ "$value" = "false"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ }
+ ]
+ ];
+ {
+ "a" = {
+ "$type" = "boolean";
+ "$value" = "false"
+ };
+ "b" = {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ "c" = {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ "d" = [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ }
+ ];
+ "e" = [
+ {
+ "$type" = "double";
+ "$value" = "1"
+ };
+ {
+ "$type" = "string";
+ "$value" = "bar"
+ }
+ ]
+ };
+ {
+ "$type" = "string";
+ "$value" = "\xC3\x90\xC2\xBF\xC3\x91\xC2\x80\xC3\x90\xC2\xBE\xC3\x90\xC2\xB2\xC3\x90\xC2\xB5\xC3\x91\xC2\x80\xC3\x90\xC2\xBA\xC3\x90\xC2\xB0 \xC3\x91\xC2\x81\xC3\x90\xC2\xB2\xC3\x91\xC2\x8F\xC3\x90\xC2\xB7\xC3\x90\xC2\xB8"
+ };
+ {
+ "a" = {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ "b" = #
+ };
+ {
+ "a" = {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ "b" = [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "3"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "4"
+ };
+ {
+ "$type" = "int64";
+ "$value" = "5"
+ }
+ ]
+ };
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "string";
+ "$value" = "foo"
+ }
+ ];
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ };
+ {
+ "$type" = "string";
+ "$value" = "2"
+ }
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GetHash_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GetHash_/results.txt
new file mode 100644
index 0000000000..273c8cc125
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GetHash_/results.txt
@@ -0,0 +1,116 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "a1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "a2";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "a3";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "b";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "c";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "d";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "e";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "f";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "g";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "h";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "i";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "j";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "7079824331463246373";
+ "7079824331463246373";
+ "7079824331463246373";
+ "9619972962658888907";
+ "7079824331463246372";
+ "16786623923823870811";
+ "5024551639089484741";
+ "18074785969708127853";
+ "12660212615513087259";
+ "6712964724129011716";
+ "6712964724129011716";
+ "16371845032759913096"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Get_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Get_/results.txt
new file mode 100644
index 0000000000..45886142d0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Get_/results.txt
@@ -0,0 +1,57 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "list_length";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "dict_length";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "scalar_length";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "3"
+ ];
+ [
+ "1"
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GoodForYsonBadForJson_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GoodForYsonBadForJson_/results.txt
new file mode 100644
index 0000000000..e40c1593de
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_GoodForYsonBadForJson_/results.txt
@@ -0,0 +1,82 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ {
+ "$type" = "double";
+ "$value" = "inf"
+ };
+ {
+ "$type" = "string";
+ "$value" = "\"12345\xC3\2667\""
+ }
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ImplicitFromRes_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ImplicitFromRes_/results.txt
new file mode 100644
index 0000000000..e3310fc118
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ImplicitFromRes_/results.txt
@@ -0,0 +1,41 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [];
+ [
+ []
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_IsType_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_IsType_/results.txt
new file mode 100644
index 0000000000..33e0a72bb9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_IsType_/results.txt
@@ -0,0 +1,154 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "is_string";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_int64";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_uint64";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_double";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_entity";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_bool";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_list";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "is_dict";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %true;
+ %false;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true;
+ %false;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true;
+ %false
+ ];
+ [
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ %true
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonSerializeSkipMapEntity_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonSerializeSkipMapEntity_/results.txt
new file mode 100644
index 0000000000..00bda17c89
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonSerializeSkipMapEntity_/results.txt
@@ -0,0 +1,124 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "res1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "res8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "{\"a\":123}"
+ ];
+ [
+ "{}"
+ ];
+ [
+ "{\"a\":123}"
+ ];
+ [
+ "[123,null]"
+ ];
+ [
+ "{\"a\":1,\"c\":1}"
+ ];
+ [
+ "{\"a\":{\"$attributes\":{\"c\":1,\"e\":3},\"$value\":23},\"b\":1}"
+ ];
+ [
+ "{\"b\":1}"
+ ];
+ [
+ "{\"$attributes\":{},\"$value\":23}"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonWithUtf8_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonWithUtf8_/results.txt
new file mode 100644
index 0000000000..6b113045b0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_JsonWithUtf8_/results.txt
@@ -0,0 +1,67 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "\"\xD0\xA5\xD1\x8D\xD0\xBB\xD0\xBB\xD0\xBE\xD1\x83!\""
+ ];
+ [
+ "\"\xC3\x90\xC2\xA5\xC3\x91\xC2\x8D\xC3\x90\xC2\xBB\xC3\x90\xC2\xBB\xC3\x90\xC2\xBE\xC3\x91\xC2\x83!\""
+ ];
+ %true;
+ [
+ "\"\xC3\x90\xC2\xA5\xC3\x91\xC2\x8D\xC3\x90\xC2\xBB\xC3\x90\xC2\xBB\xC3\x90\xC2\xBE\xC3\x91\xC2\x83!\""
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lists_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lists_/results.txt
new file mode 100644
index 0000000000..dde36e1865
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lists_/results.txt
@@ -0,0 +1,142 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "ListType";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ %false;
+ "3";
+ [
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ #
+ ];
+ [
+ [];
+ [];
+ [
+ [
+ "3"
+ ];
+ [
+ "4"
+ ]
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ };
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "ListType";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ #;
+ [
+ "456"
+ ]
+ ];
+ [
+ [
+ "123"
+ ];
+ #
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lookup_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lookup_/results.txt
new file mode 100644
index 0000000000..2938fff72b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Lookup_/results.txt
@@ -0,0 +1,225 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ "1"
+ ];
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "2"
+ ];
+ [
+ "3"
+ ];
+ [
+ "3"
+ ];
+ [
+ "x"
+ ];
+ [
+ "x"
+ ];
+ "2";
+ [
+ "2"
+ ];
+ "1";
+ [
+ "1"
+ ];
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_NegativeArrayIndex_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_NegativeArrayIndex_/results.txt
new file mode 100644
index 0000000000..86f5896b24
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_NegativeArrayIndex_/results.txt
@@ -0,0 +1,133 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "2"
+ ];
+ [
+ "7"
+ ];
+ [
+ "3"
+ ];
+ [
+ "6"
+ ];
+ [
+ "7"
+ ];
+ [
+ "1"
+ ];
+ #;
+ #;
+ [
+ "1"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ParseString_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ParseString_/results.txt
new file mode 100644
index 0000000000..f599aeaeaa
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_ParseString_/results.txt
@@ -0,0 +1,128 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ {
+ "$type" = "uint64";
+ "$value" = "0"
+ }
+ ];
+ [
+ {
+ "$type" = "uint64";
+ "$value" = "1"
+ }
+ ];
+ [
+ {
+ "$type" = "int64";
+ "$value" = "2"
+ }
+ ];
+ [
+ {
+ "$type" = "int64";
+ "$value" = "3"
+ }
+ ];
+ #;
+ #;
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Scalars_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Scalars_/results.txt
new file mode 100644
index 0000000000..32556166cb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Scalars_/results.txt
@@ -0,0 +1,462 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column3";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column4";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column5";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column6";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column7";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column8";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "column9";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column10";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column11";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column12";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column13";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column14";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column15";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "column16";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column17";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column18";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column19";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column20";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column21";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column22";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column23";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ];
+ [
+ "column24";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column25";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column26";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column27";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column28";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column29";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column30";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Double"
+ ]
+ ]
+ ];
+ [
+ "column31";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column32";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column33";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column34";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column35";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column36";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column37";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ #;
+ [
+ %true
+ ];
+ [
+ %true
+ ];
+ [
+ %false
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "1"
+ ];
+ [
+ "2"
+ ];
+ [
+ "3"
+ ];
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ #;
+ [
+ "foo"
+ ];
+ [
+ "very loooooooooooooooooong string"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_SerializeDouble_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_SerializeDouble_/results.txt
new file mode 100644
index 0000000000..1891e2e7ab
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_SerializeDouble_/results.txt
@@ -0,0 +1,66 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Json"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ {
+ "double1" = {
+ "$type" = "double";
+ "$value" = "1.0000000001"
+ };
+ "double2" = {
+ "$type" = "double";
+ "$value" = "1.000000001"
+ };
+ "double3" = {
+ "$type" = "double";
+ "$value" = "1000000000.5"
+ };
+ "double4" = {
+ "$type" = "double";
+ "$value" = "10000000005"
+ };
+ "double5" = {
+ "$type" = "double";
+ "$value" = "10000000000.5"
+ };
+ "double6" = {
+ "$type" = "double";
+ "$value" = "100000000005"
+ }
+ };
+ [
+ "{\"double1\":1.0000000001,\"double2\":1.000000001,\"double3\":1000000000.5,\"double4\":10000000005,\"double5\":10000000000.5,\"double6\":100000000005}"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Serialize_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Serialize_/results.txt
new file mode 100644
index 0000000000..a9f067d9a0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_Serialize_/results.txt
@@ -0,0 +1,70 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ {
+ "$attributes" = {
+ "a" = {
+ "$type" = "int64";
+ "$value" = "1"
+ }
+ };
+ "$value" = [
+ #;
+ {
+ "a" = {
+ "$type" = "int64";
+ "$value" = "1"
+ }
+ };
+ {
+ "b" = {
+ "$type" = "uint64";
+ "$value" = "2"
+ };
+ "c" = []
+ };
+ {
+ "$attributes" = {
+ "q" = {
+ "$type" = "string";
+ "$value" = "foo"
+ }
+ };
+ "$type" = "double";
+ "$value" = "3"
+ };
+ {};
+ {
+ "$type" = "string";
+ "$value" = "foo"
+ };
+ {
+ "$type" = "string";
+ "$value" = "very loooooooooooooooooong string"
+ }
+ ]
+ }
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WeakYsonRest_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WeakYsonRest_/results.txt
new file mode 100644
index 0000000000..46991df7fb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WeakYsonRest_/results.txt
@@ -0,0 +1,53 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "animal";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "wombat"
+ ]
+ ];
+ [
+ [
+ "dog"
+ ]
+ ];
+ [
+ [
+ "chipmunk"
+ ]
+ ];
+ [
+ [
+ "hamster"
+ ]
+ ];
+ [
+ [
+ "dingo"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WithAttrs_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WithAttrs_/results.txt
new file mode 100644
index 0000000000..3110db586f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_WithAttrs_/results.txt
@@ -0,0 +1,69 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "column2";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ {
+ "$attributes" = {
+ "a" = {
+ "$type" = "int64";
+ "$value" = "2"
+ }
+ };
+ "$type" = "int64";
+ "$value" = "1"
+ }
+ ];
+ [
+ {
+ "$type" = "int64";
+ "$value" = "1"
+ }
+ ];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_YPath_/results.txt b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_YPath_/results.txt
new file mode 100644
index 0000000000..b1f2759eda
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/canondata/test.test_YPath_/results.txt
@@ -0,0 +1,112 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "data";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "attrs";
+ [
+ "DictType";
+ [
+ "DataType";
+ "String"
+ ];
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "miss";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Yson"
+ ]
+ ]
+ ];
+ [
+ "num";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ]
+ ];
+ [
+ "str_attr";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "miss_attr";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ]
+ ];
+ [
+ "bad_conv";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "123"
+ ];
+ [
+ [
+ "x";
+ "y"
+ ]
+ ];
+ #;
+ [
+ "123"
+ ];
+ [
+ "y"
+ ];
+ #;
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Access.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Access.sql
new file mode 100644
index 0000000000..13ae815e27
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Access.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+$yson = cast('{"commands"=[{"command"="say";"text"="hello world"}]}' as yson);
+SELECT Yson::ConvertToString($yson["command" || "s"].0["text"]) as text;
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/AccessJson.sql b/ydb/library/yql/udfs/common/yson2/test/cases/AccessJson.sql
new file mode 100644
index 0000000000..504da2c711
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/AccessJson.sql
@@ -0,0 +1,12 @@
+PRAGMA yson.DisableStrict;
+$yson = cast(@@{a="привет"}@@ as yson);
+$yson_node = Yson::Parse($yson);
+
+select Yson::ConvertToString($yson.a);
+select Yson::ConvertToString($yson_node.a);
+
+$json = cast(@@{"a":"привет"}@@ as json);
+$json_node = Yson::ParseJson($json);
+
+select Yson::ConvertToString($json.a);
+select Yson::ConvertToString($json_node.a);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Attrs.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Attrs.sql
new file mode 100644
index 0000000000..41709ce806
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Attrs.sql
@@ -0,0 +1,56 @@
+/* syntax version 1 */
+
+$no_strict = Yson::Options(false AS Strict);
+
+select
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>#')), $no_strict),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>%true'))),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>1')), $no_strict),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>2u')), $no_strict),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>3.0')), $no_strict),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>foo')), $no_strict),
+Yson::ConvertToBool(Yson::Parse(Yson('<a=1>"very loooooooooooooooooong string"')), $no_strict),
+
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>#')), $no_strict),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>%true')), $no_strict),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>1'))),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>2u'))),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>3.0')), $no_strict),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>foo')), $no_strict),
+Yson::ConvertToInt64(Yson::Parse(Yson('<a=1>"very loooooooooooooooooong string"')), $no_strict),
+
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>#')), $no_strict),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>%true')), $no_strict),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>1'))),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>2u'))),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>3.0')), $no_strict),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>foo')), $no_strict),
+Yson::ConvertToUint64(Yson::Parse(Yson('<a=1>"very loooooooooooooooooong string"')), $no_strict),
+
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>#')), $no_strict),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>%true')), $no_strict),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>1'))),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>2u'))),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>3.0'))),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>foo')), $no_strict),
+Yson::ConvertToDouble(Yson::Parse(Yson('<a=1>"very loooooooooooooooooong string"')), $no_strict),
+
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>#')), $no_strict),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>%true')), $no_strict),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>1')), $no_strict),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>2u')), $no_strict),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>3.0')), $no_strict),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>foo'))),
+Yson::ConvertToString(Yson::Parse(Yson('<a=1>"very loooooooooooooooooong string"'))),
+
+ListMap(Yson::ConvertToList(Yson::Parse(Yson('<a=1>[1;2;3]'))), Yson::ConvertToInt64),
+DictKeys(Yson::ConvertToDict(Yson::Parse(Yson('<a=1>{b=1;c=2}')))),
+
+DictKeys(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>#')))),
+ListMap(DictPayloads(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>#')))), Yson::ConvertToInt64),
+
+DictKeys(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>[]')))),
+ListMap(DictPayloads(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>[]')))), Yson::ConvertToInt64),
+
+DictKeys(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>{}')))),
+ListMap(DictPayloads(Yson::Attributes(Yson::Parse(Yson('<a=1;b=2>{}')))), Yson::ConvertToInt64);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/AutoConvertTo.sql b/ydb/library/yql/udfs/common/yson2/test/cases/AutoConvertTo.sql
new file mode 100644
index 0000000000..0655fea2ec
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/AutoConvertTo.sql
@@ -0,0 +1,53 @@
+$zero = Yson::Parse("0u");
+$bool = Yson::FromBool(true);
+$int = Yson::Parse("123");
+$uint = Yson::Parse("123u");
+$negative = Yson::Parse("-123");
+$double = Yson::Parse("123.456");
+$string = Yson::Parse("\"123\"");
+
+$options = Yson::Options(true AS AutoConvert);
+
+SELECT
+ Yson::ConvertToBool($zero, $options) AS zero_to_bool,
+ Yson::ConvertToBool($bool, $options) AS bool_to_bool,
+ Yson::ConvertToBool($int, $options) AS int_to_bool,
+ Yson::ConvertToBool($uint, $options) AS uint_to_bool,
+ Yson::ConvertToBool($negative, $options) AS negative_to_bool,
+ Yson::ConvertToBool($double, $options) AS double_to_bool,
+ Yson::ConvertToBool($string, $options) AS string_to_bool,
+
+ Yson::ConvertToInt64($zero, $options) AS zero_to_int,
+ Yson::ConvertToInt64($bool, $options) AS bool_to_int,
+ Yson::ConvertToInt64($int, $options) AS int_to_int,
+ Yson::ConvertToInt64($uint, $options) AS uint_to_int,
+ Yson::ConvertToInt64($negative, $options) AS negative_to_int,
+ Yson::ConvertToInt64($double, $options) AS double_to_int,
+ Yson::ConvertToInt64($string, $options) AS string_to_int,
+
+ Yson::ConvertToUint64($zero, $options) AS zero_to_uint,
+ Yson::ConvertToUint64($bool, $options) AS bool_to_uint,
+ Yson::ConvertToUint64($int, $options) AS int_to_uint,
+ Yson::ConvertToUint64($uint, $options) AS uint_to_uint,
+ Yson::ConvertToUint64($negative, $options) AS negative_to_uint,
+ Yson::ConvertToUint64($double, $options) AS double_to_uint,
+ Yson::ConvertToUint64($string, $options) AS string_to_uint,
+
+ Yson::ConvertToDouble($zero, $options) AS zero_to_double,
+ Yson::ConvertToDouble($bool, $options) AS bool_to_double,
+ Yson::ConvertToDouble($int, $options) AS int_to_double,
+ Yson::ConvertToDouble($uint, $options) AS uint_to_double,
+ Yson::ConvertToDouble($negative, $options) AS negative_to_double,
+ Yson::ConvertToDouble($double, $options) AS double_to_double,
+ Yson::ConvertToDouble($string, $options) AS string_to_double,
+
+ Yson::ConvertToString($zero, $options) AS zero_to_string,
+ Yson::ConvertToString($bool, $options) AS bool_to_string,
+ Yson::ConvertToString($int, $options) AS int_to_string,
+ Yson::ConvertToString($uint, $options) AS uint_to_string,
+ Yson::ConvertToString($negative, $options) AS negative_to_string,
+ Yson::ConvertToString($double, $options) AS double_to_string,
+ Yson::ConvertToString($string, $options) AS string_to_string,
+
+ Yson::ConvertTo($string, Struct<x:Double?, y:Int64, z:List<Bool>>, $options) AS struct_stub,
+ Yson::ConvertTo($double, Tuple<Double?, Int64, List<Bool>>, $options) AS tuple_stub;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Contains.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Contains.sql
new file mode 100644
index 0000000000..565a999e5f
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Contains.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+
+select
+Yson::Contains(Yson::Parse('{a=1}'),'a'),
+Yson::Contains(Yson::Parse('{a=1}'),'b'),
+Yson::Contains(Yson::Parse('[]'),'0'),
+Yson::Contains(Yson::Parse('[1;2]'),'0'),
+Yson::Contains(Yson::Parse('[1;2]'),'2'),
+Yson::Contains(Yson::Parse('[1;2]'),'-2'),
+Yson::Contains(Yson::Parse('[1;2]'),'-3'),
+Yson::Contains(Yson::Parse('2'),'2', Yson::Options(false AS Strict));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/ConvertTo.sql b/ydb/library/yql/udfs/common/yson2/test/cases/ConvertTo.sql
new file mode 100644
index 0000000000..b15c524920
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/ConvertTo.sql
@@ -0,0 +1,34 @@
+/* syntax version 1 */
+$bool = Yson::Parse("true");
+$number = Yson::Parse("123");
+$string = Yson::Parse("\"123\"");
+$number_list = Yson::Parse("[1;2;3]");
+$string_list = Yson::Parse("[\"a\";\"b\";\"c\"]");
+$yson_list = Yson::Parse("[123;{a=1;b=2;c=3};{a=4;b=5;c=6}]");
+$number_dict = Yson::Parse("{a=1;b=2;c=3}");
+$string_dict = Yson::Parse("{a=\"aaa\";b=\"bbb\";c=\"ccc\"}");
+$yson_dict = Yson::Parse("{a=123;b=\"bbb\";c=[\"ccc\";\"ddd\"]}");
+$options = Yson::Options(true AS Strict);
+$no_strict = Yson::Options(false AS Strict);
+
+SELECT
+ Yson::ConvertToBool($bool, $options) AS `bool`,
+ Yson::ConvertToInt64($number, $options) AS `int`,
+ Yson::ConvertToUint64($number, $options) AS `uint`,
+ Yson::ConvertToDouble($number, $options) AS `double`,
+ Yson::ConvertToString($string, $options) AS `string`,
+ Yson::ConvertToInt64($string, $no_strict) AS incorrect,
+ Yson::ConvertToUint64List($number_list) AS number_list,
+ Yson::ConvertToStringList($string_list) AS string_list,
+ ListMap(
+ Yson::ConvertToList($yson_list),
+ ($item) -> { return Yson::SerializeJson($item); }
+ ) AS yson_list,
+ Yson::ConvertToStringList($number_list, $no_strict) AS incorrect_list,
+ Yson::ConvertToInt64Dict($number_dict) AS number_dict,
+ Yson::ConvertToStringDict($string_dict) AS string_dict,
+ Yson::SerializeJson(
+ Yson::ConvertToDict($yson_dict)["c"]
+ ) AS yson_dict,
+ Yson::ConvertToBoolDict($number_dict, $no_strict) AS incorrect_dict;
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Dicts.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Dicts.sql
new file mode 100644
index 0000000000..a0b9ce5968
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Dicts.sql
@@ -0,0 +1,13 @@
+$x = Yson::Parse("{a=1;a=2;b={c=3;d=4}}");
+$no_strict = Yson::Options(false AS Strict);
+select Yson::ConvertToDict($x) is null,
+ DictLength(Yson::ConvertToDict($x)),
+ DictKeys(Yson::ConvertToDict($x)),
+ ListMap(DictPayloads(Yson::ConvertToDict($x)), ($i)->(Yson::ConvertToInt64($i, $no_strict))),
+ ListMap(DictItems(Yson::ConvertToDict($x)),($p)->(($p.0,Yson::ConvertToInt64($p.1, $no_strict)))),
+ DictContains(Yson::ConvertToDict($x),"a"),
+ DictContains(Yson::ConvertToDict($x),"c"),
+ Yson::ConvertToInt64(DictLookup(Yson::ConvertToDict($x),"a")),
+ Yson::ConvertToInt64(DictLookup(Yson::ConvertToDict($x),"c")),
+ DictKeys(Yson::ConvertToDict(Yson::ConvertToDict($x)["b"])),
+ ListMap(DictPayloads(Yson::ConvertToDict(Yson::ConvertToDict($x)["b"])),($y)->(Yson::ConvertToInt64($y)))
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/EmptyDicts.sql b/ydb/library/yql/udfs/common/yson2/test/cases/EmptyDicts.sql
new file mode 100644
index 0000000000..779634413a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/EmptyDicts.sql
@@ -0,0 +1,9 @@
+/* syntax version 1 */
+$x = Yson::Parse("{}");
+select Yson::ConvertToDict($x) is null,
+ DictLength(Yson::ConvertToDict($x)),
+ DictKeys(Yson::ConvertToDict($x)),
+ ListMap(DictPayloads(Yson::ConvertToDict($x)),($y)->(Yson::ConvertToInt64($y))),
+ ListMap(DictItems(Yson::ConvertToDict($x)),($p)->(($p.0,Yson::ConvertToInt64($p.1)))),
+ DictContains(Yson::ConvertToDict($x),"a"),
+ Yson::ConvertToInt64(DictLookup(Yson::ConvertToDict($x),"a"));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/EmptyLists.sql b/ydb/library/yql/udfs/common/yson2/test/cases/EmptyLists.sql
new file mode 100644
index 0000000000..60c879a948
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/EmptyLists.sql
@@ -0,0 +1,5 @@
+/* syntax version 1 */
+$x = Yson::Parse("[]");
+select Yson::ConvertToList($x) is null,
+ ListLength(Yson::ConvertToList($x)),
+ ListMap(Yson::ConvertToList($x), ($y)->(Yson::ConvertToInt64($y)));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Equals.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Equals.sql
new file mode 100644
index 0000000000..a64ea70b05
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Equals.sql
@@ -0,0 +1,26 @@
+$a1 = Yson::Parse(Yson("{a=1;b=2}"));
+$a2 = Yson::Parse(Yson("{a=1;b=2;}"));
+$a3 = Yson::Parse(Yson("{b=2;a=1}"));
+$b = Yson::Parse(Yson("#"));
+$c = Yson::Parse(Yson("{a=1;b=3}"));
+$d = Yson::Parse(Yson("{a=#}"));
+$e = Yson::Parse(Yson("[a;1;b;2]"));
+$f = Yson::Parse(Yson("{a=1u;b=2}"));
+$g = Yson::Parse(Yson("{a=1;b=\"2\"}"));
+$h = Yson::Parse(Yson("<foo=bar>{a=1;b=2}"));
+$i = Yson::Parse(Yson("{a=1;b=<foo=bar>2}"));
+
+SELECT
+ Yson::Equals($a1, $a1) AS a1,
+ Yson::Equals($a1, $a2) AS a2,
+ Yson::Equals($a1, $a3) AS a3,
+ Yson::Equals($a1, $b) AS b,
+ Yson::Equals($a1, $c) AS c,
+ Yson::Equals($a1, $d) AS d,
+ Yson::Equals($a1, $e) AS e,
+ Yson::Equals($a1, $f) AS f,
+ Yson::Equals($a1, $g) AS g,
+ Yson::Equals($a1, $h) AS h,
+ Yson::Equals($a1, $i) AS i,
+ Yson::Equals($h, $i) AS attrs1,
+ Yson::Equals($i, $i) AS attrs2;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/From.sql b/ydb/library/yql/udfs/common/yson2/test/cases/From.sql
new file mode 100644
index 0000000000..2a1f6ed15a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/From.sql
@@ -0,0 +1,21 @@
+/* syntax version 1 */
+select
+Yson::IsEntity(Yson::From(NULL)),
+Yson::IsEntity(Yson::Parse(Yson("#"))),
+Yson::IsEntity(Yson::Parse(Yson("1"))),
+
+Yson::SerializeText(Yson::FromBool(true)),
+Yson::SerializeText(Yson::FromBool(Nothing(Bool?))),
+Yson::SerializeText(Yson::FromInt64(1l)),
+Yson::SerializeText(Yson::FromInt64(Nothing(Int64?))),
+Yson::SerializeText(Yson::FromUint64(2ul)),
+Yson::SerializeText(Yson::FromUint64(Nothing(Uint64?))),
+Yson::SerializeText(Yson::FromDouble(3.)),
+Yson::SerializeText(Yson::FromDouble(Nothing(Double?))),
+Yson::SerializeText(Yson::FromString("foo")),
+Yson::SerializeText(Yson::FromString("fooooooooooooooooooooooooooooooooo")),
+Yson::SerializeText(Yson::FromString(Nothing(String?))),
+
+Yson::SerializeText(Yson::FromList(Yson::ConvertToList(Yson::Parse(Yson("[1;2;3]"))))),
+Yson::SerializeText(Yson::FromDict(Yson::ConvertToDict(Yson::Parse(Yson("{a=x;b=y}")))));
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertTo.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertTo.sql
new file mode 100644
index 0000000000..b23d524cff
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertTo.sql
@@ -0,0 +1,19 @@
+SELECT
+ Yson::ConvertTo(Yson::Parse(Yson("%true")), Bool) AS `bool`,
+ Yson::ConvertTo(Yson::Parse(Yson("123")), Int64) AS `int`,
+ Yson::ConvertTo(Yson::Parse(Yson("123u")), Uint8) AS `uint`,
+ Yson::ConvertTo(Yson::Parse(Yson("1.23")), Double?) AS optional_double,
+ Yson::ConvertTo(Yson::Parse(Yson("#")), Int32?) AS empty_int,
+ Yson::ConvertTo(Yson::Parse(Yson("\"123\"")), String) AS `string`,
+ Yson::ConvertTo(Yson::Parse(Yson("\"приём\"")), Utf8) AS `utf8`,
+ Yson::ConvertTo(Yson::Parse(Yson("{a=b;c=#}")), Yson?) AS `yson`,
+ Yson::ConvertTo(Yson::Parse(Yson("[{a=1};{a=2};{a=3}]")), Json?) AS `json`,
+ Yson::ConvertTo(Yson::Parse(Yson("[1;2;3]")), List<Int64>) AS int_list,
+ Yson::ConvertTo(Yson::Parse(Yson("[[1;2];[3;#]]")), List<List<Int64?>>) AS nested_list,
+ Yson::ConvertTo(Yson::Parse(Yson("{foo=1;bar=2}")), Dict<String,Int64>) AS int_dict,
+ Yson::ConvertTo(Yson::Parse(Yson("[%false;1;\"foo\";[1;2]]")), Tuple<Bool,Int8,String?,List<Int64>>) AS `tuple`,
+ Yson::ConvertTo(Yson::Parse(Yson("{a=%false;b=1;c=foo;d=[1;2];e=[1.0;bar]}")), Struct<a:Bool,b:Int8,c:String?,d:List<Int64>,e:Tuple<Double,String>>) AS `struct`,
+ Yson::Serialize(Yson::ConvertTo(Yson::Parse(Yson("foo")), Resource<'Yson2.Node'>)) AS `resource`,
+ Yson::ConvertTo(Yson::Parse(Yson("[-3.1416; 42.0; 0.003]")), List<Float>) AS list_of_floats,
+ Yson::ConvertTo(@@{a=[1]}@@y, Struct<a: Struct<b: Int64>>?, Yson::Options(false AS Strict)) as bad_member,
+ Yson::ConvertTo(@@[1;2]@@y, Tuple<Int64, Tuple<Int64>>?, Yson::Options(false AS Strict)) as bad_element;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToEmptyStruct.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToEmptyStruct.sql
new file mode 100644
index 0000000000..7210c1d47a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToEmptyStruct.sql
@@ -0,0 +1,2 @@
+SELECT
+ Yson::ConvertTo(@@[{"year"="9999"; "a"="three"; "b"=3}; {"year"="9999"; "a"="four"; "b"=4}]@@y, List<Struct<>>) as list_of_empty_structs;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithAutoConvert.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithAutoConvert.sql
new file mode 100644
index 0000000000..6f1e0a9ff4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithAutoConvert.sql
@@ -0,0 +1,15 @@
+$ac = Yson::Options(true AS AutoConvert);
+
+SELECT
+ Yson::ConvertTo(Yson::Parse(Yson("yes")), Bool, $ac) AS `bool`,
+ Yson::ConvertTo(Yson::Parse(Yson("no")), Int64, $ac) AS `int`,
+ Yson::ConvertTo(Yson::Parse(Yson("123.7")), Uint8, $ac) AS `uint`,
+ Yson::ConvertTo(Yson::Parse(Yson(@@"1.23"@@)), Double?, $ac) AS optional_double,
+ Yson::ConvertTo(Yson::Parse(Yson("many")), Int32?, $ac) AS empty_int,
+ Yson::ConvertTo(Yson::Parse(Yson("1.23")), String, $ac) AS `string`,
+ Yson::ConvertTo(Yson::Parse(Yson("0u")), Utf8, $ac) AS `utf8`,
+ Yson::ConvertTo(Yson::Parse(Yson(@@[1;2;3;7.7;"8";"9.0"]@@)), List<Int64>, $ac) AS int_list,
+ Yson::ConvertTo(Yson::Parse(Yson("[[1;2];[3;#];5;#]")), List<List<Int64?>>, $ac) AS nested_list,
+ Yson::ConvertTo(Yson::Parse(Yson("{foo=1;bar=2.0;xxx=#}")), Dict<String,Int64>, $ac) AS int_dict,
+ Yson::ConvertTo(Yson::Parse(Yson("[%false;1;\"foo\";[1;2]]")), Tuple<Bool,Int8,String?,List<Int64>,Yson,Json>, $ac) AS `tuple`,
+ Yson::ConvertTo(Yson::Parse(Yson("{a=%false;b=1;c=foo;d=[1;2];e=[1.0;bar]}")), Struct<a:Bool,b:Int8,c:String?,d:List<Int64>,e:Tuple<Double,String>,x:Tuple<Double?,String?>,y:Int16?,z:List<Int8>>, $ac) AS `struct`;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithNoStrict.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithNoStrict.sql
new file mode 100644
index 0000000000..f87b30c997
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GenericConvertToWithNoStrict.sql
@@ -0,0 +1,15 @@
+$ns = Yson::Options(false AS Strict);
+
+SELECT
+ Yson::ConvertTo(Yson::Parse(Yson("yes")), Bool?, $ns) AS `bool`,
+ Yson::ConvertTo(Yson::Parse(Yson("no")), Int64?, $ns) AS `int`,
+ Yson::ConvertTo(Yson::Parse(Yson("123.7")), Uint8?, $ns) AS `uint`,
+ Yson::ConvertTo(Yson::Parse(Yson(@@"1.23"@@)), Double?, $ns) AS optional_double,
+ Yson::ConvertTo(Yson::Parse(Yson("many")), Int32?, $ns) AS empty_int,
+ Yson::ConvertTo(Yson::Parse(Yson("1.23")), String?, $ns) AS `string`,
+ Yson::ConvertTo(Yson::Parse(Yson("0u")), Utf8?, $ns) AS `utf8`,
+ Yson::ConvertTo(Yson::Parse(Yson(@@[1;2;3;7.7;"8";"9.0"]@@)), List<Int64>, $ns) AS int_list,
+ Yson::ConvertTo(Yson::Parse(Yson("[[1;2];[3;#];5;#]")), List<List<Int64?>>, $ns) AS nested_list,
+ Yson::ConvertTo(Yson::Parse(Yson("{foo=1;bar=2.0;xxx=#}")), Dict<String,Int64>, $ns) AS int_dict,
+ Yson::ConvertTo(Yson::Parse(Yson("[%false;1;42;[1;2;3.3]]")), Tuple<Bool,Int8,String?,List<Int64>>, $ns) AS `tuple`,
+ Yson::ConvertTo(Yson::Parse(Yson("{a=%false;b=1;c=foo;d=[1;2];e=[1.0;bar]}")), Struct<a:Bool,b:Int8,c:String?,d:List<Int64>,e:Tuple<Double,String>,y:Int16?>, $ns) AS `struct`;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GenericFrom.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GenericFrom.sql
new file mode 100644
index 0000000000..2f42d8fb95
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GenericFrom.sql
@@ -0,0 +1,21 @@
+SELECT
+ Yson::Serialize(Yson::From(null)) AS `null`,
+ Yson::Serialize(Yson::From([])) AS `empty_list`,
+ Yson::Serialize(Yson::From({})) AS `empty_dict`,
+ Yson::Serialize(Yson::From(true)) AS `bool`,
+ Yson::Serialize(Yson::From(123)) AS `int`,
+ Yson::Serialize(Yson::From(123u)) AS `uint`,
+ Yson::Serialize(Yson::From(Just(1.23))) AS optional_double,
+ Yson::Serialize(Yson::From(Nothing(Int8?))) AS empty_int,
+ Yson::Serialize(Yson::From("123")) AS `string`,
+ Yson::Serialize(Yson::From(AsList(1, 2, 3))) AS int_list,
+ Yson::Serialize(Yson::From(AsList(AsList(1, 2), AsList(3, 1/0)))) AS nested_list,
+ Yson::Serialize(Yson::From(AsDict(AsTuple("foo", 1), AsTuple("bar", 2)))) AS int_dict,
+ Yson::Serialize(Yson::From(AsTuple(false, 1, "foo", AsList(1,2)))) AS `tuple`,
+ Yson::Serialize(Yson::From(AsStruct(false AS a, 1 AS b, "foo" AS c, AsList(1,2) AS d, AsTuple(1.0, "bar") AS e))) AS `struct`,
+ Yson::Serialize(Yson::From(Utf8("проверка связи"))) AS `utf8`,
+ Yson::Serialize(Yson::From(Yson("{a=1;b=#}"))) AS `yson`,
+ Yson::Serialize(Yson::From(Json(@@{"a":"foo","b":[1,2,3,4,5]}@@))) AS `json`,
+ Yson::Serialize(Yson::From(AsList(Yson::From(1), Yson::From("foo")))) AS resource_list,
+ Yson::Serialize(Yson::From([AsVariant(1, "one"), AsVariant("2", "two")])) AS `variants`,
+ Yson::Serialize(Yson::From(Just(1u/0u))) AS double_optional;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Get.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Get.sql
new file mode 100644
index 0000000000..4449aef41d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Get.sql
@@ -0,0 +1,8 @@
+$list = Yson::Parse("[\"abc\"; 123; #;]");
+$dict = Yson::Parse("{\"a\"=1;}");
+$scalar = Yson::Parse("123");
+
+SELECT
+ Yson::GetLength($list) AS list_length,
+ Yson::GetLength($dict) AS dict_length,
+ Yson::GetLength($scalar, Yson::Options(false AS Strict)) AS scalar_length;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GetHash.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GetHash.sql
new file mode 100644
index 0000000000..e869c45e9a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GetHash.sql
@@ -0,0 +1,27 @@
+$a1 = Yson::Parse(Yson("{a=1;b=2}"));
+$a2 = Yson::Parse(Yson("{a=1;b=2;}"));
+$a3 = Yson::Parse(Yson("{b=2;a=1}"));
+$b = Yson::Parse(Yson("#"));
+$c = Yson::Parse(Yson("{a=1;b=3}"));
+$d = Yson::Parse(Yson("{a=#}"));
+$e = Yson::Parse(Yson("[a;1;b;2]"));
+$f = Yson::Parse(Yson("{a=1u;b=2}"));
+$g = Yson::Parse(Yson("{a=1;b=\"2\"}"));
+$h = Yson::Parse(Yson("<foo=bar>{a=1;b=2}"));
+$i = Yson::Parse(Yson("{a=1;b=<foo=bar>2}"));
+$j = Yson::Parse(Yson("[1;a;b;2]"));
+
+SELECT
+ Yson::GetHash($a1) AS a1,
+ Yson::GetHash($a2) AS a2,
+ Yson::GetHash($a3) AS a3,
+ Yson::GetHash($b) AS b,
+ Yson::GetHash($c) AS c,
+ Yson::GetHash($d) AS d,
+ Yson::GetHash($e) AS e,
+ Yson::GetHash($f) AS f,
+ Yson::GetHash($g) AS g,
+ Yson::GetHash($h) AS h,
+ Yson::GetHash($i) AS i,
+ Yson::GetHash($j) AS j,
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/GoodForYsonBadForJson.sql b/ydb/library/yql/udfs/common/yson2/test/cases/GoodForYsonBadForJson.sql
new file mode 100644
index 0000000000..034b19e890
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/GoodForYsonBadForJson.sql
@@ -0,0 +1,7 @@
+$inf = Yson::From(1./0.);
+$binary = Yson::From("\"12345\xf67\"");
+
+SELECT Yson::Serialize($inf), Yson::Serialize($binary);
+
+PRAGMA yson.DisableStrict;
+SELECT Yson::SerializeJson($inf), Yson::SerializeJson($binary);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/ImplicitFromRes.sql b/ydb/library/yql/udfs/common/yson2/test/cases/ImplicitFromRes.sql
new file mode 100644
index 0000000000..a42e370c59
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/ImplicitFromRes.sql
@@ -0,0 +1,4 @@
+/* syntax version 1 */
+select
+ Yson::Parse(Yson::Parse("[]"y)),
+ Yson::ParseJson(Yson::Parse("[]"y));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/IsType.sql b/ydb/library/yql/udfs/common/yson2/test/cases/IsType.sql
new file mode 100644
index 0000000000..1407ad4366
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/IsType.sql
@@ -0,0 +1,12 @@
+$all = [@@"str"@@y, "-13"y, "42u"y, "3.14"y, "#"y, "%false"y, "[1;2;3;]"y, "{}"y];
+
+select
+ Yson::IsString(y) as is_string,
+ Yson::IsInt64(y) as is_int64,
+ Yson::IsUint64(y) as is_uint64,
+ Yson::IsDouble(y) as is_double,
+ Yson::IsEntity(y) as is_entity,
+ Yson::IsBool(y) as is_bool,
+ Yson::IsList(y) as is_list,
+ Yson::IsDict(y) as is_dict
+FROM AS_TABLE(ListMap($all, ($y)->(<|'y':$y|>)));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/JsonSerializeSkipMapEntity.sql b/ydb/library/yql/udfs/common/yson2/test/cases/JsonSerializeSkipMapEntity.sql
new file mode 100644
index 0000000000..e2b292f495
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/JsonSerializeSkipMapEntity.sql
@@ -0,0 +1,18 @@
+$node1 = Yson::Parse(Yson(@@{a=123}@@));
+$node2 = Yson::Parse(Yson(@@{a=#}@@));
+$node3 = Yson::Parse(Yson(@@{a=123;b=#}@@));
+$node4 = Yson::Parse(Yson(@@[123;#]@@));
+$node5 = Yson::Parse(Yson(@@{a=1;b=#;c=1;d=#;e=#}@@));
+$node6 = Yson::Parse(Yson(@@{b=1;a=<c=1;d=#;e=3>23}@@));
+$node7 = Yson::Parse(Yson(@@{b=1;a=<c=1;d=#;e=3>#}@@));
+$node8 = Yson::Parse(Yson(@@<d=#>23@@));
+
+SELECT
+ Yson::SerializeJson($node1, true as SkipMapEntity) AS res1,
+ Yson::SerializeJson($node2, true as SkipMapEntity) AS res2,
+ Yson::SerializeJson($node3, true as SkipMapEntity) AS res3,
+ Yson::SerializeJson($node4, true as SkipMapEntity) AS res4,
+ Yson::SerializeJson($node5, true as SkipMapEntity) AS res5,
+ Yson::SerializeJson($node6, true as SkipMapEntity) AS res6,
+ Yson::SerializeJson($node7, true as SkipMapEntity) AS res7,
+ Yson::SerializeJson($node8, true as SkipMapEntity) AS res8;
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/JsonWithUtf8.sql b/ydb/library/yql/udfs/common/yson2/test/cases/JsonWithUtf8.sql
new file mode 100644
index 0000000000..00f4c98cd9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/JsonWithUtf8.sql
@@ -0,0 +1,5 @@
+$src = Yson::From("Хэллоу!");
+SELECT Yson::SerializeJson($src, false AS EncodeUtf8), Yson::SerializeJson($src, true AS EncodeUtf8),
+ Yson::Equals(Yson::ParseJson(Json("\"\xD0\xA5\xD1\x8D\xD0\xBB\xD0\xBB\xD0\xBE\xD1\x83!\"")), Yson::ParseJsonDecodeUtf8(Json("\"\xC3\x90\xC2\xA5\xC3\x91\xC2\x8D\xC3\x90\xC2\xBB\xC3\x90\xC2\xBB\xC3\x90\xC2\xBE\xC3\x91\xC2\x83!\""))),
+ Yson::SerializeJsonEncodeUtf8($src);
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Lists.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Lists.sql
new file mode 100644
index 0000000000..4d1c74e6cb
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Lists.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+$x = Yson::Parse("[1;2;[3;4]]");
+$no_strict = Yson::Options(false AS Strict);
+select Yson::ConvertToList($x) is null,
+ ListLength(Yson::ConvertToList($x)),
+ ListMap(Yson::ConvertToList($x), ($i)->(Yson::ConvertToInt64($i,$no_strict))),
+ ListMap(Yson::ConvertToList($x), ($x)->(ListMap(Yson::ConvertToList($x, Yson::Options(false AS Strict)), Yson::ConvertToInt64)));
+
+$int_and_str = Yson(@@[123;"456"]@@);
+SELECT ListMap(Yson::ConvertToList($int_and_str), Yson::ConvertToString), ListMap(Yson::ConvertToList($int_and_str), Yson::ConvertToInt64);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Lookup.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Lookup.sql
new file mode 100644
index 0000000000..e24b156417
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Lookup.sql
@@ -0,0 +1,29 @@
+/* syntax version 1 */
+$no_strict = Yson::Options(false AS Strict);
+
+select
+Yson::ConvertToBool(Yson::Lookup(Yson::Parse('{a=%true}'), 'a')),
+Yson::LookupBool(Yson::Parse('{a=%true}'), 'a'),
+
+Yson::ConvertToInt64(Yson::Lookup(Yson::Parse('{a=1}'), 'a')),
+Yson::LookupInt64(Yson::Parse('{a=1}'), 'a'),
+
+Yson::ConvertToUint64(Yson::Lookup(Yson::Parse('{a=2u}'), 'a')),
+Yson::LookupUint64(Yson::Parse('{a=2u}'), 'a'),
+
+Yson::ConvertToDouble(Yson::Lookup(Yson::Parse('{a=3.0}'), 'a')),
+Yson::LookupDouble(Yson::Parse('{a=3.0}'), 'a'),
+
+Yson::ConvertToString(Yson::Lookup(Yson::Parse('{a=x}'), 'a')),
+Yson::LookupString(Yson::Parse('{a=x}'), 'a'),
+
+ListLength(Yson::ConvertToList(Yson::Lookup(Yson::Parse('{a=[1;2]}'), 'a'))),
+ListLength(Yson::LookupList(Yson::Parse('{a=[1;2]}'), 'a')),
+
+DictLength(Yson::ConvertToDict(Yson::Lookup(Yson::Parse('{a={b=c}}'), 'a'))),
+DictLength(Yson::LookupDict(Yson::Parse('{a={b=c}}'), 'a')),
+
+Yson::LookupString(Yson::Parse('[]'), '0'),
+
+Yson::LookupString(Yson::Parse('{a=12345}'), 'a', $no_strict),
+Yson::LookupDouble(Yson::Parse(@@{a="12345"}@@), 'a', $no_strict);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/NegativeArrayIndex.sql b/ydb/library/yql/udfs/common/yson2/test/cases/NegativeArrayIndex.sql
new file mode 100644
index 0000000000..bc1f0bc6b5
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/NegativeArrayIndex.sql
@@ -0,0 +1,13 @@
+$node = Yson::Parse(@@[1;2;3;4;5;6;7]@@);
+
+SELECT
+ Yson::YPathInt64($node, "/+1"),
+ Yson::YPathInt64($node, "/-1"),
+ Yson::YPathInt64($node, "/+2"),
+ Yson::YPathInt64($node, "/-2"),
+ Yson::YPathInt64($node, "/+6"),
+ Yson::YPathInt64($node, "/-7"),
+ Yson::YPathInt64($node, "/+7"),
+ Yson::YPathInt64($node, "/-8"),
+ Yson::YPathInt64($node, "/0");
+
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/ParseString.sql b/ydb/library/yql/udfs/common/yson2/test/cases/ParseString.sql
new file mode 100644
index 0000000000..6968ec07c6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/ParseString.sql
@@ -0,0 +1,11 @@
+$options = Yson::Options(false AS Strict);
+
+SELECT
+ Yson::Parse("0u"),
+ Yson::Parse(Just("1u")),
+ Yson::ParseJson("2"),
+ Yson::ParseJson(Just("3")),
+ Yson::Parse("", $options),
+ Yson::Parse(Just(""), $options),
+ Yson::ParseJson("", $options),
+ Yson::ParseJson(Just(""), $options);
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Scalars.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Scalars.sql
new file mode 100644
index 0000000000..2b8d751957
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Scalars.sql
@@ -0,0 +1,46 @@
+/* syntax version 1 */
+$no_strict = Yson::Options(false AS Strict);
+
+select
+Yson::ConvertToBool(Yson::Parse('#'), $no_strict),
+Yson::ConvertToBool(Yson::Parse('%true')),
+Yson::ConvertToBool(Yson::Parse('true')),
+Yson::ConvertToBool(Yson::Parse('false')),
+Yson::ConvertToBool(Yson::Parse('1'), $no_strict),
+Yson::ConvertToBool(Yson::Parse('2u'), $no_strict),
+Yson::ConvertToBool(Yson::Parse('3.0'), $no_strict),
+Yson::ConvertToBool(Yson::Parse('foo'), $no_strict),
+Yson::ConvertToBool(Yson::Parse('"very loooooooooooooooooong string"'), $no_strict),
+
+Yson::ConvertToInt64(Yson::Parse('#'), $no_strict),
+Yson::ConvertToInt64(Yson::Parse('%true'), $no_strict),
+Yson::ConvertToInt64(Yson::Parse('1')),
+Yson::ConvertToInt64(Yson::Parse('2u')),
+Yson::ConvertToInt64(Yson::Parse('3.0'), $no_strict),
+Yson::ConvertToInt64(Yson::Parse('foo'), $no_strict),
+Yson::ConvertToInt64(Yson::Parse('"very loooooooooooooooooong string"'), $no_strict),
+
+Yson::ConvertToUint64(Yson::Parse('#'), $no_strict),
+Yson::ConvertToUint64(Yson::Parse('%true'), $no_strict),
+Yson::ConvertToUint64(Yson::Parse('-1'), $no_strict),
+Yson::ConvertToUint64(Yson::Parse('1')),
+Yson::ConvertToUint64(Yson::Parse('2u')),
+Yson::ConvertToUint64(Yson::Parse('3.0'), $no_strict),
+Yson::ConvertToUint64(Yson::Parse('foo'), $no_strict),
+Yson::ConvertToUint64(Yson::Parse('"very loooooooooooooooooong string"'), $no_strict),
+
+Yson::ConvertToDouble(Yson::Parse('#'), $no_strict),
+Yson::ConvertToDouble(Yson::Parse('%true'), $no_strict),
+Yson::ConvertToDouble(Yson::Parse('1')),
+Yson::ConvertToDouble(Yson::Parse('2u')),
+Yson::ConvertToDouble(Yson::Parse('3.0')),
+Yson::ConvertToDouble(Yson::Parse('foo'), $no_strict),
+Yson::ConvertToDouble(Yson::Parse('"very loooooooooooooooooong string"'), $no_strict),
+
+Yson::ConvertToString(Yson::Parse('#'), $no_strict),
+Yson::ConvertToString(Yson::Parse('%true'), $no_strict),
+Yson::ConvertToString(Yson::Parse('1'), $no_strict),
+Yson::ConvertToString(Yson::Parse('2u'), $no_strict),
+Yson::ConvertToString(Yson::Parse('3.0'), $no_strict),
+Yson::ConvertToString(Yson::Parse('foo')),
+Yson::ConvertToString(Yson::Parse('"very loooooooooooooooooong string"')),
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/Serialize.sql b/ydb/library/yql/udfs/common/yson2/test/cases/Serialize.sql
new file mode 100644
index 0000000000..88eb075d87
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/Serialize.sql
@@ -0,0 +1,3 @@
+/* syntax version 1 */
+select
+Yson::SerializeText(Yson::Parse(Yson('<a=1>[#;{a=1};{b=2u;c=[]};<q=foo>3.0;{};foo;"very loooooooooooooooooong string"]')));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/SerializeDouble.sql b/ydb/library/yql/udfs/common/yson2/test/cases/SerializeDouble.sql
new file mode 100644
index 0000000000..5b3b1c4402
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/SerializeDouble.sql
@@ -0,0 +1,13 @@
+$s = <|
+ double1: 1.0000000001,
+ double2: 1.000000001,
+ double3: 1000000000.5,
+ double4: 10000000005.0,
+ double5: 10000000000.5,
+ double6: 100000000005.0,
+|>;
+
+SELECT
+ Yson::Serialize(Yson::From($s)),
+ Yson::SerializeJson(Yson::From($s))
+; \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in
new file mode 100644
index 0000000000..18703eb252
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in
@@ -0,0 +1,5 @@
+{"key"="020";"subkey"="1";"_rest"={"animal"="wombat";"size"="small";"weightMin"=20.;"weightMax"=35.;"wild"=%true};"binZ"="\x04";"strY"="\1\x08test";"realZ"="\x03\x18-DT\xfb!\t@" ;"uiData"=1};
+{"key"="075";"subkey"="5";"_rest"={"animal"="dog";"size"="huge";"weightMin"=5.;"weightMax"=75.;"pet"=%true} ;"binZ"=%true ;"strY"="\1\nfunny" ;"realZ"="\x03iW\x14\x8b\n\xbf\x05@" ;"uiData"=1u};
+{"key"="150";"subkey"="4";"_rest"={"animal"="chipmunk";"size"="small";"weightMin"=0.05;"weightMax"=0.15;"wild"=%true} ;"binZ"="\x05";"strY"="\1\nbunny" ;"realZ"="\x03\xcd;\x7ff\x9e\xa0\xf6?" ;"uiData"=100500u};
+{"key"="500";"subkey"="2";"_rest"={"animal"="hamster";"size"="verysmall";"weightMin"=0.015;"weightMax"=0.045;"pet"=%true} ;"binZ"=%false;"strY"="33.33" ;"realZ"="\x03\x00\x00\x00\x00\x00\x00\xf0?" ;"uiData"=10010005001000000u};
+{"key"="800";"subkey"="3";"_rest"={"animal"="dingo";"size"="huge";"weightMin"=10.;"weightMax"=20.;"wild"=%true} ;"binZ"=%false;"strY"="\1\x06zzz" ;"realZ"="\x03\x00\x00\x00\x00\x00\x00\xf0\xbf";"uiData"=33};
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in.attr b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in.attr
new file mode 100644
index 0000000000..6ce47a0015
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.in.attr
@@ -0,0 +1,12 @@
+{"_yql_row_spec"={
+ "Type"=["StructType";[
+ ["key";["DataType";"String"]];
+ ["subkey";["DataType";"String"]];
+ ["_rest";["OptionalType";["DataType";"Yson"]]]
+ ]];
+ "SortDirections"=[1;1;];
+ "SortedBy"=["key";"subkey";];
+ "SortedByTypes"=[["DataType";"String";];["DataType";"String";];];
+ "SortMembers"=["key";"subkey";];
+ "DefaultValues"={"key"="\"\"";"subkey"="\"\"";}
+}}
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.sql b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.sql
new file mode 100644
index 0000000000..2c84ad498b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/WeakYsonRest.sql
@@ -0,0 +1,7 @@
+/* postgres can not */
+USE plato;
+
+--INSERT INTO Output
+SELECT
+ WeakField(animal, "String")
+FROM Input
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/WithAttrs.sql b/ydb/library/yql/udfs/common/yson2/test/cases/WithAttrs.sql
new file mode 100644
index 0000000000..d346b936e4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/WithAttrs.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+
+select
+Yson::SerializeText(Yson::WithAttributes(Yson::Parse('1'), Yson::Parse('{a=2}'))),
+Yson::SerializeText(Yson::WithAttributes(Yson::Parse('1'), Yson::Parse('{}'))),
+Yson::SerializeText(Yson::WithAttributes(Yson::Parse('1'), Yson::Parse('#')));
diff --git a/ydb/library/yql/udfs/common/yson2/test/cases/YPath.sql b/ydb/library/yql/udfs/common/yson2/test/cases/YPath.sql
new file mode 100644
index 0000000000..30b3bc372c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/cases/YPath.sql
@@ -0,0 +1,13 @@
+$node = Yson::Parse(@@<x="y">{abc=123;}@@);
+$data = Yson::YPath($node, "/abc");
+$attrs = Yson::YPath($node, "/@");
+$miss = Yson::YPath($node, "/def");
+
+SELECT
+ Yson::ConvertToInt64($data) AS data,
+ Yson::ConvertToStringDict($attrs) AS attrs,
+ Yson::SerializePretty($miss) AS miss,
+ Yson::YPathInt64($node, "/abc") AS num,
+ Yson::YPathString($node, "/@/x") AS str_attr,
+ Yson::YPathBool($node, "/@/mis") AS miss_attr,
+ Yson::YPathString($node, "/abc", Yson::Options(false as Strict)) AS bad_conv;
diff --git a/ydb/library/yql/udfs/common/yson2/test/ya.make b/ydb/library/yql/udfs/common/yson2/test/ya.make
new file mode 100644
index 0000000000..f79b79e571
--- /dev/null
+++ b/ydb/library/yql/udfs/common/yson2/test/ya.make
@@ -0,0 +1,12 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/yson2)
+
+TIMEOUT(300)
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/yson2/ya.make b/ydb/library/yql/udfs/common/yson2/ya.make
index d1ddd064b3..0a0c84b396 100644
--- a/ydb/library/yql/udfs/common/yson2/ya.make
+++ b/ydb/library/yql/udfs/common/yson2/ya.make
@@ -17,3 +17,7 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)