diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/Cygwin Tools.rules b/ydb/library/benchmarks/gen/tpcds-dbgen/Cygwin Tools.rules
new file mode 100644
index 000000000000..a84206dd45fe
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/Cygwin Tools.rules
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/EULA.txt b/ydb/library/benchmarks/gen/tpcds-dbgen/EULA.txt
new file mode 100644
index 000000000000..b8a82040fd91
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/EULA.txt
@@ -0,0 +1,79 @@
+END USER LICENSE AGREEMENT
+VERSION 2.2
+
+
+READ THE TERMS AND CONDITIONS OF THIS AGREEMENT (“AGREEMENT”) CAREFULLY BEFORE INSTALLING OR USING THE ACCOMPANYING SOFTWARE. BY INSTALLING OR USING THE SOFTWARE OR RELATED DOCUMENTATION, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THE SOFTWARE. IF YOU ARE ACCESSING THE SOFTWARE ON BEHALF OF YOUR ORGANIZATION, YOU REPRESENT AND WARRANT THAT YOU HAVE SUFFICIENT AUTHORITY TO BIND YOUR ORGANIZATION TO THIS AGREEMENT.
+
+USE AND RE-EXPORT OF THE SOFTWARE IS SUBJECT TO THE UNITED STATES EXPORT CONTROL ADMINISTRATION REGULATIONS. THE SOFTWARE MAY NOT BE USED BY UNLICENSED PERSONS OR ENTITIES, AND MAY NOT BE RE-EXPORTED TO ANOTHER COUNTRY. SEE EXPORT ASSURANCE (CLAUSE 13) OF THIS LICENSE.
+
+This is a legal agreement between you (or, if you are accessing the software on behalf of your organization, your organization) (“You” or “User”) and the Transaction Processing Performance Council (“TPC”). This Agreement states the terms and conditions upon which TPC offers to license the Software, including, but not limited to, the source code, scripts, executable programs, drivers, libraries and data files associated with such programs, and modifications thereof (the “Software”), and online, electronic or printed documentation (“Documentation,” together with the Software, “Materials”).
+
+
+
+LICENSE
+
+1. Definitions
+“Executive Summary” shall mean a short summary of a TPC Benchmark Result that shows the configuration, primary metrics, performance data, and pricing details. The exact requirements for the Executive Summary are defined in each TPC Benchmark Standard.
+“Full Disclosure Report (FDR)” shall mean a document that describes The TPC Benchmark Result in sufficient detail such that the Result could be recreated. The exact requirements for the FDR are defined in each TPC Benchmark Standard.
+
+“TPC Benchmark Result (Result)” shall mean a performance test submitted to the TPC attested to meet the requirements of a TPC Benchmark Standard at the time of submission. A Result is documented by an Executive Summary and, if required, a FDR
+“TPC Benchmark Standard” shall mean a TPC Benchmark Specification and any associated code or binaries approved by the TPC. The various TPC Benchmark Standards can be found at http://www.tpc.org/information/current_specifications.asp.
+“TPC Policies” shall mean the guiding principles for how the TPC conducts its operations and business. The current TPC Policies can be found at http://www.tpc.org/information/current_specifications.asp.
+2. Ownership. The Materials are licensed, not sold, to You for use only under the terms of this Agreement. As between You and TPC (and, to the extent applicable, its licensors), TPC retains all rights, title and interest to and ownership of the Materials and reserves all rights not expressly granted to You.
+3. License Grant. Subject to Your compliance in all material respects with the terms and conditions of this Agreement, TPC grants You a restricted, non-exclusive, revocable license to install and use the Materials, but only as expressly permitted herein. You may only use the Software on computer systems under Your direct control. You may download multiple copies of the Materials and make verbatim copies of the original of the Software so long as Your use of such copies complies with the terms of this Agreement.
+a. Use by Individual. If You are accessing the Materials as an individual, only You (as an individual) may access and use the Materials.
+b. Use by Organization. If You are accessing the Materials on behalf of Your organization, only You and those within Your organization may use the Materials. Your organization must identify a contact person to TPC and conduct communications with TPC through that contact person.
+4. Restrictions. The following restrictions apply to all use of the Materials by You.
+a. General: You may not:
+(1) use, copy, print, modify, adapt, create derivative works from, market, deliver, rent, lease, sublicense, make, have made, assign, pledge, transfer, sell, offer to sell, import, reproduce, distribute, publicly perform, publicly display or otherwise grant rights to the Materials, or any copy thereof, in whole or in part, except as expressly permitted under this Agreement; or
+(2) use the Materials in any way that does not comply with all applicable laws and regulations.
+b. Modification: You may modify the Software.
+c. Public Disclosure: You may not publicly disclose any performance results produced while using the Software except in the following circumstances:
+(1) as part of a TPC Benchmark Result. For purposes of this Agreement, a “TPC Benchmark Result” is a performance test submitted to the TPC, documented by a Full Disclosure Report and Executive Summary, claiming to meet the requirements of an official TPC Benchmark Standard. You agree that TPC Benchmark Results may only be published in accordance with the TPC Policies. viewable at http: //www.tpc.org
+(2) as part of an academic or research effort that does not imply or state a marketing position
+(3) any other use of the Software, provided that any performance results must be clearly identified as not being comparable to TPC Benchmark Results unless specifically authorized by TPC.
+5. License Modification. Requests for modification of this license shall be addressed to info@tpc.org. You may not remove or modify this license without permission.
+6. Copyright. The Materials are owned by TPC and/or its licensors, and are protected by United States copyright laws and international treaty provisions. You may not remove the copyright notice from the original or any copy of the Materials, and You must apply the notice if You extract part of the Materials not bearing a notice.
+7. Use of Name. You acknowledge and agree that TPC owns all trademark and trade name rights in the names, trademarks and logos used by TPC in the Materials. User shall preserve any notices regarding such ownership. User may only use such names, trademarks and logos in accordance with the usage guidelines specified by the TPC Policies.
+8. Merger or Integration. Any portion of the Materials merged into or integrated with other software or documentation will continue to be subject to the terms and conditions of this Agreement.
+9. Limited Grants of Sublicense. You may distribute the Software as provided or as modified as permitted under clause 4 b. of this Agreement, provided You comply with all of the terms of this Agreement and the following conditions:
+a. If You distribute any portion of the Software in its original form You may do so only under this Agreement by including a complete copy of this Agreement with Your distribution, and if You distribute the Software in modified form, You may only do so under a license that at a minimum provides all of the protections and conditions of use contained within this Agreement;
+b. You must include on each copy of the Software that You distribute the following legend in all caps, at the top of the label and license, and in a font not less than 12 point and no less prominent than any other printing: “THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.”;
+c. You must retain all copyright, patent, trademark, and attribution notices that are present in the Software; and
+d. You may not charge a fee for the distribution of this Software, including any modifications permitted under clause 4.b.
+10. Term and Termination.
+a. Term. The license granted to You is effective until terminated.
+b. Termination.
+(1) By You. You may terminate this Agreement at any time by returning the Materials (including any portions or copies thereof) to TPC or providing written notice to the TPC that all copies of the Materials within Your custody or control have been deleted or destroyed.
+(2) By TPC. In the event You materially fail to comply with any term or condition of this Agreement, and You fail to remedy such non-compliance within 30 days after the receipt of notice to that effect, then TPC shall have the right to terminate this Agreement immediately upon written notice at the end of such 30-day period.
+c. Effect of Termination. Termination of this Agreement in accordance with this clause 10 will not terminate the rights of end users sublicensed by You pursuant to this Agreement. Moreover, upon termination and at TPC’s written request, You agree to either (1) return the Materials (including any portions or copies thereof) to TPC or (2) immediately destroy all copies of the Materials within Your custody or control and inform the TPC of the destruction of the Materials. Upon termination, TPC may also enforce any rights provided by law. The provisions of this Agreement that protect the proprietary rights of TPC and its Licensors will continue in force after termination.
+11. No Warranty; Materials Provided “As Is”. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE MATERIALS ARE PROVIDED “AS IS” AND WITH ALL FAULTS, AND TPC (AND ITS LICENSORS) AND THE AUTHORS AND DEVELOPERS OF THE MATERIALS HEREBY DISCLAIM ALL WARRANTIES, REPRESENTATIONS AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES, DUTIES OR CONDITIONS RELATING TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR COMPLETENESS OF RESPONSES, RESULTS, WORKMANLIKE EFFORT, LACK OF VIRUSES, LACK OF NEGLIGENCE, TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NONINFRINGEMENT.
+USER RECOGNIZES THAT THE MATERIALS ARE THE RESULT OF A COOPERATIVE, NON-PROFIT EFFORT AND THAT TPC DOES NOT CONDUCT A TYPICAL BUSINESS. USER ACCEPTS THE MATERIALS “AS IS” AND WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED.
+Without limitation, TPC (and its licensors) do not warrant that the functions contained in the Software or Materials will meet Your requirements or that the operation of the Software will be uninterrupted, error-free or free from malicious code. For purposes of this paragraph, “malicious code” means any program code designed to contaminate other computer programs or computer data, consume computer resources, modify, destroy, record, or transmit data, or in some other fashion usurp the normal operation of the computer, computer system, or computer network, including viruses, Trojan horses, droppers, worms, logic bombs, and the like.
+TPC (and its licensors) shall not be liable for the accuracy of any information provided by TPC or third-party technical support personnel, or any damages caused, either directly or indirectly, by acts taken or omissions made by You as a result of such technical support.
+You assume full responsibility for the selection of the Materials to achieve Your intended results, and for the installation, use and results obtained from the Materials. You also assume the entire risk as it applies to the quality and performance of the Materials. Should the Materials prove defective, You (and not TPC) assume the entire liability of any and all necessary servicing, repair or correction.
+Some countries/states do not allow the exclusion of implied warranties, so the above exclusion may not apply to You. TPC (and its licensors) further disclaims all warranties of any kind if the Materials were customized, repackaged or altered in any way by any party other than TPC (or its licensors).
+12. Disclaimer of Liability. TPC (and its licensors) assumes no liability with respect to the Materials, including liability for infringement of intellectual property rights, negligence, or any other liability. TPC is not aware of any infringement of copyright or patent that may result from its grant of rights to User of the Materials. If User receives any notice of infringement, such notice shall be immediately communicated to TPC who will have sole discretion to take action to evaluate the claim and, if practicable, modify the Materials as necessary to avoid infringement. In the event that TPC determines that the Materials cannot be modified to avoid such infringement (or any other infringement claim communicated to TPC), TPC may terminate this Agreement immediately. User shall suspend use of the Materials until modifications to avoid claims of infringement have been completed. User waives any claim against TPC in the event of such infringement claims by others.
+13. Export Assurance. Use and re-export of the Materials and related technical information is subject to the Export Administration Regulations (EAR) of the United States Department of Commerce. User hereby agrees that User (a) assumes responsibility for compliance with the EAR in its use of the Materials and technical information, and (b) will not export, re-export, or otherwise disclose directly or indirectly, the Materials, technical data, or any direct product of the Materials or technical data in violation of the EAR.
+14. Limitation of Remedies And Damages. IN NO EVENT WILL TPC OR ITS LICENSORS OR LICENSEE BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR FOR ANY LOST PROFITS, LOST SAVINGS, LOST REVENUES OR LOST DATA ARISING FROM OR RELATING TO THE MATERIALS OR THIS AGREEMENT, EVEN IF TPC OR ITS LICENSORS OR LICENSEE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL TPC’S OR ITS LICENSORS’ LIABILITY OR DAMAGES TO YOU OR ANY OTHER PERSON EVER EXCEED U.S. ONE HUNDRED DOLLARS (US $100), REGARDLESS OF THE FORM OF THE CLAIM. IN NO EVENT WILL LICENSEE'S LIABILITY OR DAMAGES TO TPC OR ANY OTHER PERSON EVER EXCEED $1,000,000, REGARDLESS OF THE FORM OF THE CLAIM. Some countries/states do not allow the limitation or exclusion of liability for incidental or consequential damages, so the above limitation or exclusion may not apply to You.
+15. U.S. Government Restricted Rights. All Software and related documentation are provided with restricted rights. Use, duplication or disclosure by the U.S. Government is subject to restrictions as set forth in subdivision (b)(3)(ii) of the Rights in Technical Data and Computer Software Clause at 252.227-7013. If You are using the Software outside of the United States, You will comply with the applicable local laws of Your country, U.S. export control law, and the English version of this Agreement.
+16. Contractor/Manufacturer. The Contractor/Manufacturer for the Software is:
+Transaction Processing Performance Council
+572B Ruger Street, P.O. Box 29920
+San Francisco, CA 94129
+
+17. General. This Agreement is binding on You as well as Your employees, employers, contractors and agents, and on any successors and assignees. This Agreement is governed by the laws of the State of California (except to the extent federal law governs copyrights and trademarks) without respect to any provisions of California law that would cause application of the law of another state or country. The parties agree that the United Nations Convention on Contracts for the International Sale of Goods will not govern this Agreement. This Agreement is the entire agreement between us regarding the subject matter hereof and supersedes any other understandings or agreements with respect to the Materials or the subject matter hereof. If any provision of this Agreement is deemed invalid or unenforceable by any court having jurisdiction, that particular provision will be deemed modified to the extent necessary to make the provision valid and enforceable, and the remaining provisions will remain in full force and effect.
+
+
+
+SPECIAL PROVISIONS APPLICABLE TO THE EUROPEAN UNION
+
+If You acquired the Materials in the European Union (EU), the following provisions also apply to You. If there is any inconsistency between the terms of the Software License Agreement set out earlier and the following provisions, the following provisions shall take precedence.
+
+1. Distribution. You may sublicense modifications of the Software covered in this Agreement if they meet the requirements of clause 9 above.
+2. Limited Warranty. EXCEPT AS STATED EARLIER IN THIS AGREEMENT, AND AS PROVIDED UNDER THE HEADING “STATUTORY RIGHTS”, THE SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES, NONINFRINGEMENT, OR CONDITIONS OF MERCHANTABILITY, QUALITY AND FITNESS FOR A PARTICULAR PURPOSE.
+3. Limitation of Remedy and Damages. THE LIMITATIONS OF REMEDIES AND DAMAGES IN THE SOFTWARE LICENSE AGREEMENT SHALL NOT APPLY TO PERSONAL INJURY (INCLUDING DEATH) TO ANY PERSON CAUSED BY TPC’S NEGLIGENCE AND ARE SUBJECT TO THE PROVISION SET OUT UNDER THE HEADING “STATUTORY RIGHTS”.
+4. Statutory Rights: Irish law provides that certain conditions and warranties may be implied in contracts for the sale of goods and in contracts for the supply of services. Such conditions and warranties are hereby excluded, to the extent such exclusion, in the context of this transaction, is lawful under Irish law. Conversely, such conditions and warranties, insofar as they may not be lawfully excluded, shall apply. Accordingly nothing in this Agreement shall prejudice any rights that You may enjoy by virtue of Sections 12, 13, 14 or 15 of the Irish Sale of Goods Act 1893 (as amended).
+5. General. This Agreement is governed by the laws of the Republic of Ireland. The local language version of this agreement shall apply to Materials acquired in the EU. This Agreement is the entire agreement between us with respect to the subject matter hereof and You agree that TPC will not have any liability for any untrue statement or representation made by it, its agents or anyone else (whether innocently or negligently) upon which You relied upon entering this Agreement, unless such untrue statement or representation was made fraudulently.
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide-DS-V2.0.0.docx b/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide-DS-V2.0.0.docx
new file mode 100644
index 000000000000..bc773094000c
Binary files /dev/null and b/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide-DS-V2.0.0.docx differ
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide.doc b/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide.doc
new file mode 100644
index 000000000000..b8f9c6fbb72a
Binary files /dev/null and b/ydb/library/benchmarks/gen/tpcds-dbgen/How_To_Guide.doc differ
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/Makefile.suite b/ydb/library/benchmarks/gen/tpcds-dbgen/Makefile.suite
new file mode 100644
index 000000000000..c572ea5ebd5f
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/Makefile.suite
@@ -0,0 +1,685 @@
+#
+# Legal Notice
+#
+# This document and associated source code (the "Work") is a part of a
+# benchmark specification maintained by the TPC.
+#
+# The TPC reserves all right, title, and interest to the Work as provided
+# under U.S. and international laws, including without limitation all patent
+# and trademark rights therein.
+#
+# No Warranty
+#
+# 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+# CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+# AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+# WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+# INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+# DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+# PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+# WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+# ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+# QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+# WITH REGARD TO THE WORK.
+# 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+# ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+# COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+# OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+# INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+# OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+# RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+# ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+#
+# Contributors:
+# Gradient Systems
+#
+#
+#
+################
+## TARGET OS HERE
+################
+# OS Values: AIX, LINUX, SOLARIS, NCR, HPUX
+OS = LINUX
+###########
+# No changes should be necessary below this point
+# Each compile variable is adjusted for the target platform using the OS setting above
+###########
+# CC
+AIX_CC = xlC
+HPUX_CC = gcc
+LINUX_CC = gcc
+NCR_CC = cc
+SOLARIS_CC = gcc
+SOL86_CC = cc
+CC = $($(OS)_CC)
+# CFLAGS
+AIX_CFLAGS = -q64 -O3 -D_LARGE_FILES
+HPUX_CFLAGS = -O3 -Wall
+LINUX_CFLAGS = -g -Wall
+NCR_CFLAGS = -g
+SOLARIS_CFLAGS = -O3 -Wall
+SOL86_CFLAGS = -O3
+BASE_CFLAGS = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DYYDEBUG #-maix64 -DMEM_TEST
+CFLAGS = $(BASE_CFLAGS) -D$(OS) $($(OS)_CFLAGS)
+# EXE
+AIX_EXE =
+HPUX_EXE =
+LINUX_EXE =
+NCR_EXE =
+SOLARIS_EXE =
+SOL86_EXE =
+EXE = $($(OS)_EXE)
+# LEX
+AIX_LEX = flex
+HPUX_LEX = flex
+LINUX_LEX = lex
+NCR_LEX = lex
+SOLARIS_LEX = lex
+SOL86_LEX = lex
+LEX = $($(OS)_LEX)
+# LIBS
+AIX_LIBS = -lm
+HPUX_LIBS = -lm -ll
+LINUX_LIBS = -lm
+NCR_LIBS = -lm -lc89
+SOLARIS_LIBS = -ly -ll -lm
+SOL86_LIBS = -ly -ll -lm
+LIBS = $($(OS)_LIBS)
+# YACC
+AIX_YACC = yacc
+HPUX_YACC = bison -y
+LINUX_YACC = yacc
+NCR_YACC = yacc
+SOLARIS_YACC = yacc
+SOL86_YACC = yacc
+YACC = $($(OS)_YACC)
+# YFLAGS
+AIX_YFLAGS = -d -v
+HPUX_YFLAGS = -y -d -v
+LINUX_YFLAGS = -d -v
+NCR_YFLAGS = -d -v
+SOLARIS_YFLAGS = -d -v
+SOL86_YFLAGS = -d -v
+YFLAGS = $($(OS)_YFLAGS)
+###############
+TREE_ROOT=/tmp/tree
+#
+PROG1 = dsdgen$(EXE)
+PROG2 = dsqgen$(EXE)
+PROG3 = distcomp$(EXE)
+PROG4 = mkheader$(EXE)
+PROG5 = checksum$(EXE)
+PROGS = $(PROG1) $(PROG2) $(PROG3) $(PROG4) $(PROG5)
+#
+COMMON_HDR = address.h build_support.h config.h constants.h date.h \
+ dcgram.h dcomp.h dcomp_params.h decimal.h dist.h driver.h \
+ error_msg.h expr.h genrand.h grammar.h grammar_support.h \
+ list.h load.h misc.h nulls.h parallel.h params.h \
+ permute.h porting.h pricing.h print.h qgen_params.h query_handler.h \
+ release.h r_params.h StringBuffer.h tdef_functions.h \
+ tdefs.h template.h scd.h mathops.h scd.h sparse.h validate.h
+DISTCOMP_HDR = dcgram.h dcomp.h dcomp_params.h grammar.h nulls.h
+QGEN_HDR = eval.h substitution.h keywords.h permute.h qgen_params.h
+S_HDR = s_brand.h s_customer_address.h scaling.h s_call_center.h s_catalog.h \
+ s_catalog_order.h s_catalog_order_lineitem.h s_catalog_page.h \
+ s_catalog_promotional_item.h s_catalog_returns.h s_category.h \
+ s_class.h s_company.h s_customer.h s_division.h s_inventory.h \
+ s_item.h s_manager.h s_manufacturer.h s_market.h s_pline.h s_product.h \
+ s_promotion.h s_purchase.h s_reason.h s_store.h \
+ s_store_promotional_item.h s_store_returns.h s_subcategory.h \
+ s_subclass.h s_warehouse.h s_web_order.h \
+ s_web_order_lineitem.h s_web_page.h s_web_promotional_item.h \
+ s_web_returns.h s_web_site.h s_tdefs.h s_zip_to_gmt.h
+W_HDR = w_call_center.h w_catalog_page.h w_catalog_returns.h \
+ w_catalog_sales.h w_customer_address.h w_customer_demographics.h \
+ w_customer.h w_datetbl.h w_household_demographics.h w_income_band.h \
+ w_inventory.h w_item.h \
+ w_promotion.h w_reason.h w_ship_mode.h \
+ w_store.h w_store_returns.h w_store_sales.h w_tdefs.h w_timetbl.h \
+ w_warehouse.h w_web_page.h w_web_returns.h w_web_sales.h w_web_site.h \
+ dbgen_version.h
+HDR = $(COMMON_HDR) $(DISTCOMP_HDR) $(QGEN_HDR) $(S_HDR) $(W_HDR)
+#
+COMMON_SRC = address.c build_support.c date.c \
+ decimal.c dist.c driver.c error_msg.c expr.c genrand.c \
+ grammar_support.c join.c list.c load.c misc.c \
+ nulls.c parallel.c permute.c pricing.c print.c r_params.c StringBuffer.c \
+ tdef_functions.c tdefs.c text.c scd.c scaling.c release.c scd.c sparse.c \
+ porting.c validate.c
+DISTCOMP_SRC = dcgram.c dcomp.c grammar.c
+QGEN_SRC = tokenizer.l substitution.c QgenMain.c qgen.y query_handler.c \
+ eval.c keywords.c
+S_SRC = s_brand.c s_customer_address.c scaling.c s_call_center.c s_catalog.c \
+ s_catalog_order.c s_catalog_order_lineitem.c s_catalog_page.c \
+ s_catalog_promotional_item.c s_catalog_returns.c s_category.c \
+ s_class.c s_company.c s_customer.c s_division.c s_inventory.c s_item.c \
+ s_manager.c s_manufacturer.c s_market.c s_pline.c s_product.c \
+ s_promotion.c s_purchase.c s_reason.c s_store.c \
+ s_store_promotional_item.c s_store_returns.c s_subcategory.c \
+ s_subclass.c s_warehouse.c s_web_order.c s_web_order_lineitem.c \
+ s_web_page.c s_web_promotinal_item.c s_web_returns.c s_web_site.c \
+ s_zip_to_gmt.c
+W_SRC = w_call_center.c w_catalog_page.c w_catalog_returns.c w_catalog_sales.c \
+ w_customer_address.c w_customer.c w_customer_demographics.c \
+ w_datetbl.c w_household_demographics.c w_income_band.c w_inventory.c \
+ w_item.c \
+ w_promotion.c w_reason.c w_ship_mode.c w_store.c w_store_returns.c \
+ w_store_sales.c w_timetbl.c w_warehouse.c w_web_page.c w_web_returns.c \
+ w_web_sales.c w_web_site.c dbgen_version.c
+SRC = $(COMMON_SRC) $(DISTCOMP_SRC) $(S_SRC) $(W_SRC) $(QGEN_SRC) mkheader.c checksum.c
+#
+DBGEN_OBJ = address.o build_support.o date.o \
+ decimal.o dist.o driver.o error_msg.o genrand.o \
+ join.o list.o load.o misc.o \
+ nulls.o parallel.o permute.o pricing.o print.o r_params.o StringBuffer.o \
+ tdef_functions.o tdefs.o text.o scd.o scaling.o release.o sparse.o validate.o
+DISTCOMP_OBJ = dcgram.o dcomp.o grammar.o error_msg.o StringBuffer.o r_params.o
+QGEN_OBJ = address.o date.o decimal.o dist.o error_msg.o expr.o \
+ eval.o genrand.o grammar_support.o keywords.o list.o \
+ nulls.o permute.o print.o QgenMain.o query_handler.o r_params.o \
+ scaling.o StringBuffer.o substitution.o tdefs.o text.o tokenizer.o w_inventory.o y.tab.o \
+ release.o scd.o build_support.o parallel.o
+S_OBJ = s_brand.o s_customer_address.o s_call_center.o s_catalog.o \
+ s_catalog_order.o s_catalog_order_lineitem.o s_catalog_page.o \
+ s_catalog_promotional_item.o s_catalog_returns.o s_category.o \
+ s_class.o s_company.o s_customer.o s_division.o s_inventory.o s_item.o \
+ s_manager.o s_manufacturer.o s_market.o s_pline.o s_product.o \
+ s_promotion.o s_purchase.o s_reason.o s_store.o \
+ s_store_promotional_item.o s_store_returns.o s_subcategory.o \
+ s_subclass.o s_warehouse.o s_web_order.o s_web_order_lineitem.o \
+ s_web_page.o s_web_promotinal_item.o s_web_returns.o s_web_site.o \
+ s_zip_to_gmt.o
+W_OBJ = w_call_center.o w_catalog_page.o w_catalog_returns.o w_catalog_sales.o \
+ w_customer_address.o w_customer.o w_customer_demographics.o \
+ w_datetbl.o w_household_demographics.o w_income_band.o w_inventory.o \
+ w_item.o \
+ w_promotion.o w_reason.o w_ship_mode.o w_store.o w_store_returns.o \
+ w_store_sales.o w_timetbl.o w_warehouse.o w_web_page.o w_web_returns.o \
+ w_web_sales.o w_web_site.o dbgen_version.o
+#
+OBJ1 = $(S_OBJ) $(W_OBJ) $(DBGEN_OBJ)
+OBJ2 = $(QGEN_OBJ)
+OBJ3 = $(DISTCOMP_OBJ)
+OBJ4 = mkheader.o
+OBJ5 = checksum.o
+OBJ = $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5)
+#
+IDX = tpcds.idx
+IDXSRC = calendar.dst cities.dst english.dst fips.dst names.dst \
+ streets.dst tpcds.dst items.dst scaling.dst
+#
+DOC = README HISTORY PORTING.NOTES QGEN.doc \
+ ReleaseNotes.txt README_grammar.txt How_To_Guide.doc
+DDL = tpcds.sql tpcds.wam source_schema.wam tpcds_source.sql
+OTHER= Makefile.suite column_list.txt parallel.sh specification.doc tpcds_ri.sql
+WIN_MAKE=dbgen2.vcproj distcomp.vcproj qgen2.vcproj mkheader.vcproj \
+ y.tab.c y.tab.h tokenizer.c grammar.vcproj dbgen2.sln Cygwin\ Tools.rules checksum.vcproj
+#
+FQD = query_templates/*
+VARIANTS = query_variants/*
+TESTS = tests/*.sh tests/*.sql
+ANS = answer_sets/*.ans
+QUERY_SRC = $(FQD) $(VARIANTS)
+TREE_DOC =
+JUNK = tags *.idx columns.h streams.h y.tab.h y.tab.c tokenizer.c \
+ y.output .ctags_updated tpcds.idx.h
+DBGENSRC = $(SRC) $(HDR) $(OTHER) $(DOC) $(DDL) $(IDXSRC) $(WIN_MAKE) $(QUERY_SRC) $(TESTS) $(ANS)
+GENERATED = tables.h streams.h columns.h
+DATE_STAMP = `date '+%Y%m%d'`
+#
+all: .ctags_updated $(PROGS) $(IDX)
+
+$(PROG1): $(OBJ1) $(IDX)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROG1) $(OBJ1) $(LIBS)
+$(PROG2): $(OBJ2)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROG2) $(OBJ2) $(LIBS)
+$(PROG3): $(OBJ3)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROG3) $(OBJ3) $(LIBS)
+$(PROG4): $(OBJ4)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROG4) $(OBJ4) $(LIBS)
+$(PROG5): $(OBJ5)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROG5) $(OBJ5) $(LIBS)
+$(IDX): $(PROG3) $(IDXSRC)
+ ./$(PROG3) -i tpcds.dst -o $(IDX)
+
+clean:
+ -rm -f $(PROGS) $(OBJ) $(JUNK) $(IDX)
+.ctags_updated: $(SRC)
+ -ctags $(SRC) 2> /dev/null
+ date > .ctags_updated
+current_source:
+ cvs update
+depend: $(SRC) $(HDR)
+ touch columns.h streams.h
+ -makedepend -f Makefile.suite -Y -- $(CFLAGS) -- $(SRC) 2> /dev/null
+ date > .depend_updated
+ rm -f columns.h streams.h
+lint:
+ lint $(CFLAGS) -u -x -wO -p $(SRC1)
+ lint $(CFLAGS) -u -x -wO -p $(SRC2)
+release: current_source depend sum tar zip test_build
+ rm -f tpcds_`date '+%Y%m%d'`.sum
+ rm -rf test
+tar: $(DBGENSRC)
+ tar cvzf tpcds_`date '+%Y%m%d'`.tar.gz $(DBGENSRC) tpcds_`date '+%Y%m%d'`.sum
+zip: $(DBGENSRC)
+ zip tpcds_`date '+%Y%m%d'` $(DBGENSRC) tpcds_`date '+%Y%m%d'`.sum
+data_set: /data/dbgen_version.dat
+ touch data_set
+/data/dbgen_version.dat: $(PROG1)
+ rm -f /data/*.dat
+ ./$(PROG1) -f -sc 1 -dir /data
+ ./$(PROG1) -f -sc 1 -dir /data -update 1
+sum: $(PROG1) data_set
+ sum /data/*.dat > tpcds_`date '+%Y%m%d'`.sum
+test_build:
+ (cd tests; sh -x test_list.sh `date '+%Y%m%d'` 1 1)
+####
+# Dependencies. Partially hand coded, partially generated by makedepend
+####
+$(GENERATED): $(PROG4) column_list.txt
+ ./$(PROG4) column_list.txt
+tokenizer.c: tokenizer.l
+y.tab.c: qgen.y
+ $(YACC) $(YFLAGS) qgen.y
+y.tab.o: y.tab.c
+y.tab.h: qgen.y
+ $(YACC) $(YFLAGS) qgen.y
+tpcds.idx.h: $(IDXSRC) $(PROG3)
+ ./$(PROG3) -i tpcds.dst -o tpcds.idx
+expr.o: y.tab.h
+qgen_error.o: error_msg.c
+ $(CC) $(CFLAGS) -DQGEN -c -o qgen_error.o error_msg.c
+qgen:
+ @make qgen2$(EXE)
+join.o: tpcds.idx.h
+driver.o: tpcds.idx.h
+mkheader.o: mkheader.c
+$(OBJ1) $(OBJ2) $(OBJ3): $(GENERATED)
+# DO NOT DELETE
+
+address.o: config.h porting.h address.h constants.h dist.h r_params.h
+address.o: genrand.h decimal.h mathops.h date.h columns.h tables.h tdefs.h
+address.o: tdef_functions.h permute.h scaling.h
+build_support.o: config.h porting.h decimal.h mathops.h constants.h dist.h
+build_support.o: r_params.h genrand.h date.h address.h tdefs.h tables.h
+build_support.o: columns.h tdef_functions.h build_support.h pricing.h
+build_support.o: StringBuffer.h error_msg.h scaling.h
+date.o: config.h porting.h date.h mathops.h dist.h
+decimal.o: config.h porting.h decimal.h mathops.h
+dist.o: config.h porting.h decimal.h mathops.h date.h dist.h genrand.h
+dist.o: address.h constants.h error_msg.h r_params.h dcomp.h grammar.h
+driver.o: config.h porting.h date.h mathops.h decimal.h genrand.h dist.h
+driver.o: address.h constants.h tdefs.h tables.h columns.h tdef_functions.h
+driver.o: build_support.h pricing.h params.h r_params.h release.h parallel.h
+driver.o: scaling.h load.h error_msg.h print.h tpcds.idx.h grammar_support.h
+driver.o: scd.h
+error_msg.o: config.h porting.h error_msg.h grammar_support.h
+expr.o: config.h porting.h error_msg.h StringBuffer.h expr.h list.h mathops.h
+expr.o: y.tab.h substitution.h eval.h grammar_support.h date.h keywords.h
+expr.o: dist.h genrand.h decimal.h address.h constants.h permute.h
+genrand.o: config.h porting.h decimal.h mathops.h date.h genrand.h dist.h
+genrand.o: address.h constants.h r_params.h params.h release.h columns.h
+genrand.o: tables.h streams.h
+grammar_support.o: config.h porting.h StringBuffer.h expr.h list.h mathops.h
+grammar_support.o: grammar_support.h keywords.h error_msg.h qgen_params.h
+grammar_support.o: r_params.h release.h substitution.h eval.h
+join.o: config.h porting.h date.h mathops.h decimal.h dist.h constants.h
+join.o: columns.h genrand.h address.h tdefs.h tables.h tdef_functions.h
+join.o: build_support.h pricing.h tpcds.idx.h scaling.h w_web_sales.h
+join.o: error_msg.h scd.h r_params.h sparse.h
+list.o: config.h porting.h list.h error_msg.h
+load.o: config.h porting.h tables.h
+misc.o: config.h porting.h date.h mathops.h decimal.h dist.h misc.h tdefs.h
+misc.o: tables.h columns.h tdef_functions.h r_params.h genrand.h address.h
+misc.o: constants.h
+nulls.o: config.h porting.h nulls.h genrand.h decimal.h mathops.h date.h
+nulls.o: dist.h address.h constants.h tdefs.h tables.h columns.h
+nulls.o: tdef_functions.h
+parallel.o: config.h porting.h r_params.h scaling.h tdefs.h tables.h
+parallel.o: columns.h tdef_functions.h genrand.h decimal.h mathops.h date.h
+parallel.o: dist.h address.h constants.h
+permute.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+permute.o: address.h constants.h
+pricing.o: config.h porting.h decimal.h mathops.h pricing.h constants.h
+pricing.o: columns.h error_msg.h dist.h driver.h genrand.h date.h address.h
+pricing.o: w_web_sales.h s_pline.h
+print.o: config.h porting.h tables.h print.h tdef_functions.h r_params.h
+print.o: date.h mathops.h decimal.h tdefs.h columns.h nulls.h constants.h
+print.o: build_support.h dist.h pricing.h
+r_params.o: config.h porting.h r_params.h tdefs.h tables.h columns.h
+r_params.o: tdef_functions.h release.h
+StringBuffer.o: config.h porting.h StringBuffer.h
+tdef_functions.o: w_call_center.h constants.h pricing.h decimal.h config.h
+tdef_functions.o: porting.h mathops.h address.h date.h w_catalog_page.h
+tdef_functions.o: w_catalog_returns.h w_catalog_sales.h w_customer.h
+tdef_functions.o: w_customer_address.h w_customer_demographics.h w_datetbl.h
+tdef_functions.o: w_household_demographics.h w_income_band.h w_inventory.h
+tdef_functions.o: w_item.h w_promotion.h w_reason.h w_ship_mode.h w_store.h
+tdef_functions.o: w_store_returns.h w_store_sales.h w_timetbl.h w_warehouse.h
+tdef_functions.o: w_web_page.h w_web_returns.h w_web_sales.h w_web_site.h
+tdef_functions.o: dbgen_version.h s_brand.h s_customer_address.h
+tdef_functions.o: s_call_center.h s_catalog.h s_catalog_order.h
+tdef_functions.o: s_catalog_order_lineitem.h s_catalog_page.h
+tdef_functions.o: s_catalog_promotional_item.h s_catalog_returns.h
+tdef_functions.o: s_category.h s_class.h s_company.h s_customer.h
+tdef_functions.o: s_division.h s_inventory.h s_item.h s_manager.h
+tdef_functions.o: s_manufacturer.h s_market.h s_pline.h s_product.h
+tdef_functions.o: s_promotion.h s_purchase.h s_reason.h s_store.h
+tdef_functions.o: s_store_promotional_item.h s_store_returns.h
+tdef_functions.o: s_subcategory.h s_subclass.h s_warehouse.h s_web_order.h
+tdef_functions.o: s_web_order_lineitem.h s_web_page.h
+tdef_functions.o: s_web_promotional_item.h s_web_returns.h s_web_site.h
+tdef_functions.o: s_zip_to_gmt.h tdef_functions.h tables.h validate.h
+tdefs.o: config.h porting.h tables.h columns.h genrand.h decimal.h mathops.h
+tdefs.o: date.h dist.h address.h constants.h tdefs.h tdef_functions.h
+tdefs.o: scaling.h w_tdefs.h s_tdefs.h r_params.h
+text.o: config.h porting.h decimal.h mathops.h date.h genrand.h dist.h
+text.o: address.h constants.h
+scd.o: config.h porting.h tdefs.h tables.h columns.h tdef_functions.h scd.h
+scd.o: decimal.h mathops.h build_support.h date.h dist.h pricing.h scaling.h
+scd.o: genrand.h address.h constants.h parallel.h params.h r_params.h
+scd.o: release.h print.h permute.h
+scaling.o: config.h porting.h dist.h constants.h genrand.h decimal.h
+scaling.o: mathops.h date.h address.h columns.h tdefs.h tables.h
+scaling.o: tdef_functions.h error_msg.h r_params.h w_inventory.h scaling.h
+scaling.o: tpcds.idx.h print.h parallel.h scd.h
+release.o: config.h porting.h release.h r_params.h
+scd.o: config.h porting.h tdefs.h tables.h columns.h tdef_functions.h scd.h
+scd.o: decimal.h mathops.h build_support.h date.h dist.h pricing.h scaling.h
+scd.o: genrand.h address.h constants.h parallel.h params.h r_params.h
+scd.o: release.h print.h permute.h
+sparse.o: config.h porting.h scaling.h genrand.h decimal.h mathops.h date.h
+sparse.o: dist.h address.h constants.h sparse.h tdefs.h tables.h columns.h
+sparse.o: tdef_functions.h error_msg.h
+porting.o: config.h porting.h
+validate.o: config.h porting.h tdefs.h tables.h columns.h tdef_functions.h
+validate.o: r_params.h parallel.h constants.h scd.h decimal.h mathops.h
+validate.o: permute.h print.h
+dcgram.o: config.h porting.h error_msg.h grammar.h dist.h dcomp.h r_params.h
+dcgram.o: dcgram.h
+dcomp.o: config.h porting.h r_params.h dcomp_params.h error_msg.h grammar.h
+dcomp.o: dist.h dcgram.h dcomp.h substitution.h StringBuffer.h expr.h list.h
+dcomp.o: mathops.h eval.h grammar_support.h
+grammar.o: config.h porting.h grammar.h error_msg.h StringBuffer.h expr.h
+grammar.o: list.h mathops.h decimal.h date.h
+s_brand.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_brand.o: address.h constants.h s_brand.h print.h columns.h build_support.h
+s_brand.o: pricing.h tables.h parallel.h
+s_customer_address.o: config.h porting.h w_customer_address.h constants.h
+s_customer_address.o: address.h s_customer_address.h date.h mathops.h
+s_customer_address.o: decimal.h genrand.h dist.h columns.h build_support.h
+s_customer_address.o: pricing.h print.h tables.h nulls.h tdefs.h
+s_customer_address.o: tdef_functions.h
+scaling.o: config.h porting.h dist.h constants.h genrand.h decimal.h
+scaling.o: mathops.h date.h address.h columns.h tdefs.h tables.h
+scaling.o: tdef_functions.h error_msg.h r_params.h w_inventory.h scaling.h
+scaling.o: tpcds.idx.h print.h parallel.h scd.h
+s_call_center.o: config.h porting.h s_call_center.h genrand.h decimal.h
+s_call_center.o: mathops.h date.h dist.h address.h constants.h r_params.h
+s_call_center.o: scaling.h tables.h build_support.h columns.h pricing.h
+s_call_center.o: print.h w_call_center.h permute.h scd.h
+s_catalog.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_catalog.o: address.h constants.h s_catalog.h print.h columns.h
+s_catalog.o: build_support.h pricing.h misc.h tables.h
+s_catalog_order.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_catalog_order.o: dist.h address.h constants.h s_catalog_order.h
+s_catalog_order.o: s_catalog_order_lineitem.h pricing.h s_catalog_returns.h
+s_catalog_order.o: print.h columns.h build_support.h tables.h misc.h
+s_catalog_order.o: scaling.h params.h r_params.h release.h w_web_sales.h
+s_catalog_order.o: parallel.h
+s_catalog_order_lineitem.o: config.h porting.h genrand.h decimal.h mathops.h
+s_catalog_order_lineitem.o: date.h dist.h address.h constants.h
+s_catalog_order_lineitem.o: s_catalog_order_lineitem.h pricing.h
+s_catalog_order_lineitem.o: s_catalog_order.h w_web_sales.h print.h columns.h
+s_catalog_order_lineitem.o: build_support.h tables.h parallel.h permute.h
+s_catalog_order_lineitem.o: scaling.h scd.h
+s_catalog_page.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_catalog_page.o: dist.h address.h constants.h s_catalog_page.h
+s_catalog_page.o: w_catalog_page.h print.h columns.h build_support.h
+s_catalog_page.o: pricing.h tables.h scaling.h tdef_functions.h validate.h
+s_catalog_page.o: parallel.h
+s_catalog_promotional_item.o: config.h porting.h genrand.h decimal.h
+s_catalog_promotional_item.o: mathops.h date.h dist.h address.h constants.h
+s_catalog_promotional_item.o: s_catalog_promotional_item.h print.h columns.h
+s_catalog_promotional_item.o: build_support.h pricing.h tables.h
+s_catalog_returns.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_catalog_returns.o: dist.h address.h constants.h s_catalog_returns.h
+s_catalog_returns.o: pricing.h s_catalog_order.h s_catalog_order_lineitem.h
+s_catalog_returns.o: print.h columns.h build_support.h tables.h parallel.h
+s_category.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_category.o: address.h constants.h s_category.h print.h columns.h
+s_category.o: build_support.h pricing.h tables.h misc.h
+s_class.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_class.o: address.h constants.h s_class.h print.h build_support.h columns.h
+s_class.o: pricing.h tables.h misc.h parallel.h
+s_company.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_company.o: address.h constants.h s_company.h print.h columns.h
+s_company.o: build_support.h pricing.h tables.h parallel.h
+s_customer.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_customer.o: address.h constants.h s_customer.h print.h columns.h
+s_customer.o: build_support.h pricing.h tables.h scaling.h parallel.h
+s_customer.o: w_customer_demographics.h w_customer_address.h permute.h
+s_division.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_division.o: address.h constants.h s_division.h print.h columns.h
+s_division.o: build_support.h pricing.h tables.h parallel.h
+s_inventory.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_inventory.o: address.h constants.h s_inventory.h print.h columns.h
+s_inventory.o: build_support.h pricing.h tables.h r_params.h parallel.h
+s_inventory.o: scaling.h scd.h
+s_item.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_item.o: address.h constants.h s_item.h w_item.h print.h columns.h
+s_item.o: build_support.h pricing.h tables.h misc.h parallel.h permute.h
+s_item.o: scaling.h scd.h tdef_functions.h r_params.h
+s_manager.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_manager.o: address.h constants.h s_manager.h print.h columns.h
+s_manager.o: build_support.h pricing.h tables.h parallel.h
+s_manufacturer.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_manufacturer.o: dist.h address.h constants.h s_manufacturer.h print.h
+s_manufacturer.o: columns.h build_support.h pricing.h tables.h parallel.h
+s_market.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_market.o: address.h constants.h s_market.h print.h columns.h
+s_market.o: build_support.h pricing.h tables.h misc.h parallel.h
+s_pline.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_pline.o: address.h constants.h s_pline.h pricing.h s_purchase.h print.h
+s_pline.o: columns.h build_support.h tables.h misc.h parallel.h scaling.h
+s_pline.o: permute.h scd.h
+s_product.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_product.o: address.h constants.h s_product.h print.h columns.h
+s_product.o: build_support.h pricing.h tables.h parallel.h
+s_promotion.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_promotion.o: address.h constants.h s_promotion.h w_promotion.h print.h
+s_promotion.o: columns.h build_support.h pricing.h tables.h misc.h parallel.h
+s_promotion.o: permute.h scaling.h tdef_functions.h scd.h r_params.h
+s_purchase.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_purchase.o: address.h constants.h s_purchase.h s_pline.h pricing.h
+s_purchase.o: s_store_returns.h print.h columns.h build_support.h tables.h
+s_purchase.o: r_params.h misc.h scaling.h parallel.h
+s_reason.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_reason.o: address.h constants.h s_reason.h print.h columns.h
+s_reason.o: build_support.h pricing.h tables.h misc.h parallel.h
+s_store.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_store.o: address.h constants.h s_store.h w_store.h print.h columns.h
+s_store.o: build_support.h pricing.h tables.h parallel.h permute.h scaling.h
+s_store.o: scd.h
+s_store_promotional_item.o: config.h porting.h genrand.h decimal.h mathops.h
+s_store_promotional_item.o: date.h dist.h address.h constants.h
+s_store_promotional_item.o: s_store_promotional_item.h print.h columns.h
+s_store_promotional_item.o: build_support.h pricing.h tables.h parallel.h
+s_store_returns.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_store_returns.o: dist.h address.h constants.h s_store_returns.h pricing.h
+s_store_returns.o: s_purchase.h s_pline.h print.h columns.h build_support.h
+s_store_returns.o: tables.h parallel.h
+s_subcategory.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_subcategory.o: dist.h address.h constants.h s_subcategory.h print.h
+s_subcategory.o: columns.h build_support.h pricing.h tables.h misc.h
+s_subcategory.o: parallel.h
+s_subclass.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_subclass.o: address.h constants.h s_subclass.h print.h columns.h
+s_subclass.o: build_support.h pricing.h tables.h misc.h parallel.h
+s_warehouse.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_warehouse.o: address.h constants.h s_warehouse.h w_warehouse.h print.h
+s_warehouse.o: columns.h build_support.h pricing.h tables.h misc.h parallel.h
+s_warehouse.o: permute.h scaling.h
+s_web_order.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_web_order.o: address.h constants.h s_web_order.h print.h columns.h
+s_web_order.o: build_support.h pricing.h tables.h misc.h
+s_web_order.o: s_web_order_lineitem.h params.h r_params.h release.h scaling.h
+s_web_order.o: w_web_sales.h s_web_returns.h parallel.h
+s_web_order_lineitem.o: config.h porting.h genrand.h decimal.h mathops.h
+s_web_order_lineitem.o: date.h dist.h address.h constants.h
+s_web_order_lineitem.o: s_web_order_lineitem.h pricing.h s_web_order.h
+s_web_order_lineitem.o: print.h columns.h build_support.h tables.h
+s_web_order_lineitem.o: w_web_sales.h parallel.h permute.h scaling.h scd.h
+s_web_page.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_web_page.o: address.h constants.h s_web_page.h w_web_page.h print.h
+s_web_page.o: columns.h build_support.h pricing.h tables.h scaling.h
+s_web_page.o: parallel.h permute.h scd.h tdef_functions.h
+s_web_promotinal_item.o: config.h porting.h genrand.h decimal.h mathops.h
+s_web_promotinal_item.o: date.h dist.h address.h constants.h
+s_web_promotinal_item.o: s_web_promotional_item.h print.h columns.h
+s_web_promotinal_item.o: build_support.h pricing.h tables.h parallel.h
+s_web_returns.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_web_returns.o: dist.h address.h constants.h s_web_returns.h pricing.h
+s_web_returns.o: print.h columns.h build_support.h tables.h w_web_sales.h
+s_web_returns.o: s_web_order.h s_web_order_lineitem.h parallel.h
+s_web_site.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+s_web_site.o: address.h constants.h s_web_site.h w_web_site.h print.h
+s_web_site.o: columns.h build_support.h pricing.h tables.h scaling.h
+s_web_site.o: permute.h scd.h
+s_zip_to_gmt.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+s_zip_to_gmt.o: dist.h address.h constants.h s_zip_to_gmt.h print.h columns.h
+s_zip_to_gmt.o: build_support.h pricing.h tables.h tdef_functions.h
+s_zip_to_gmt.o: r_params.h parallel.h tdefs.h
+w_call_center.o: config.h porting.h w_call_center.h constants.h pricing.h
+w_call_center.o: decimal.h mathops.h address.h date.h genrand.h dist.h
+w_call_center.o: r_params.h scaling.h columns.h tables.h misc.h
+w_call_center.o: build_support.h print.h tdefs.h tdef_functions.h nulls.h
+w_call_center.o: scd.h
+w_catalog_page.o: config.h porting.h constants.h w_catalog_page.h date.h
+w_catalog_page.o: mathops.h decimal.h genrand.h dist.h address.h
+w_catalog_page.o: build_support.h columns.h pricing.h misc.h print.h tables.h
+w_catalog_page.o: scaling.h nulls.h tdefs.h tdef_functions.h
+w_catalog_returns.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+w_catalog_returns.o: dist.h address.h constants.h w_catalog_returns.h
+w_catalog_returns.o: pricing.h w_catalog_sales.h print.h columns.h
+w_catalog_returns.o: build_support.h tables.h nulls.h tdefs.h
+w_catalog_returns.o: tdef_functions.h parallel.h
+w_catalog_sales.o: config.h porting.h w_catalog_sales.h pricing.h decimal.h
+w_catalog_sales.o: mathops.h w_catalog_returns.h date.h genrand.h dist.h
+w_catalog_sales.o: address.h constants.h columns.h tables.h build_support.h
+w_catalog_sales.o: print.h nulls.h tdefs.h tdef_functions.h scaling.h
+w_catalog_sales.o: permute.h params.h r_params.h release.h parallel.h scd.h
+w_customer_address.o: config.h porting.h w_customer_address.h constants.h
+w_customer_address.o: address.h date.h mathops.h decimal.h genrand.h dist.h
+w_customer_address.o: columns.h build_support.h pricing.h print.h tables.h
+w_customer_address.o: nulls.h tdefs.h tdef_functions.h
+w_customer.o: config.h porting.h constants.h columns.h w_customer.h genrand.h
+w_customer.o: decimal.h mathops.h date.h dist.h address.h build_support.h
+w_customer.o: pricing.h tables.h print.h nulls.h tdefs.h tdef_functions.h
+w_customer_demographics.o: config.h porting.h w_customer_demographics.h
+w_customer_demographics.o: genrand.h decimal.h mathops.h date.h dist.h
+w_customer_demographics.o: address.h constants.h columns.h build_support.h
+w_customer_demographics.o: pricing.h tables.h print.h nulls.h tdefs.h
+w_customer_demographics.o: tdef_functions.h sparse.h
+w_datetbl.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_datetbl.o: address.h constants.h w_datetbl.h print.h columns.h
+w_datetbl.o: build_support.h pricing.h tables.h nulls.h tdefs.h
+w_datetbl.o: tdef_functions.h
+w_household_demographics.o: config.h porting.h genrand.h decimal.h mathops.h
+w_household_demographics.o: date.h dist.h address.h constants.h
+w_household_demographics.o: w_household_demographics.h print.h columns.h
+w_household_demographics.o: build_support.h pricing.h tables.h nulls.h
+w_household_demographics.o: tdefs.h tdef_functions.h sparse.h
+w_income_band.o: config.h porting.h genrand.h decimal.h mathops.h date.h
+w_income_band.o: dist.h address.h constants.h w_income_band.h print.h
+w_income_band.o: columns.h build_support.h pricing.h tables.h nulls.h tdefs.h
+w_income_band.o: tdef_functions.h
+w_inventory.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_inventory.o: address.h constants.h w_inventory.h print.h columns.h
+w_inventory.o: build_support.h pricing.h tables.h scaling.h nulls.h tdefs.h
+w_inventory.o: tdef_functions.h scd.h
+w_item.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_item.o: address.h constants.h w_item.h print.h columns.h build_support.h
+w_item.o: pricing.h tables.h misc.h nulls.h tdefs.h tdef_functions.h scd.h
+w_promotion.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_promotion.o: address.h constants.h w_promotion.h print.h columns.h
+w_promotion.o: build_support.h pricing.h tables.h misc.h nulls.h tdefs.h
+w_promotion.o: tdef_functions.h
+w_reason.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_reason.o: address.h constants.h w_reason.h print.h columns.h
+w_reason.o: build_support.h pricing.h tables.h nulls.h tdefs.h
+w_reason.o: tdef_functions.h
+w_ship_mode.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+w_ship_mode.o: address.h constants.h w_ship_mode.h print.h columns.h
+w_ship_mode.o: build_support.h pricing.h tables.h nulls.h tdefs.h
+w_ship_mode.o: tdef_functions.h
+w_store.o: config.h porting.h constants.h w_store.h address.h decimal.h
+w_store.o: mathops.h date.h genrand.h dist.h build_support.h columns.h
+w_store.o: pricing.h misc.h print.h tables.h scaling.h nulls.h tdefs.h
+w_store.o: tdef_functions.h scd.h
+w_store_returns.o: config.h porting.h w_store_returns.h pricing.h decimal.h
+w_store_returns.o: mathops.h w_store_sales.h constants.h tables.h print.h
+w_store_returns.o: columns.h genrand.h date.h dist.h address.h
+w_store_returns.o: build_support.h nulls.h tdefs.h tdef_functions.h
+w_store_sales.o: config.h porting.h decimal.h mathops.h w_store_sales.h
+w_store_sales.o: constants.h pricing.h w_store_returns.h genrand.h date.h
+w_store_sales.o: dist.h address.h columns.h build_support.h tables.h print.h
+w_store_sales.o: nulls.h tdefs.h tdef_functions.h scaling.h permute.h scd.h
+w_store_sales.o: parallel.h
+w_timetbl.o: config.h porting.h constants.h w_timetbl.h date.h mathops.h
+w_timetbl.o: decimal.h genrand.h dist.h address.h build_support.h columns.h
+w_timetbl.o: pricing.h misc.h print.h tables.h nulls.h tdefs.h
+w_timetbl.o: tdef_functions.h
+w_warehouse.o: config.h porting.h constants.h w_warehouse.h address.h date.h
+w_warehouse.o: mathops.h decimal.h genrand.h dist.h build_support.h columns.h
+w_warehouse.o: pricing.h misc.h print.h tables.h nulls.h tdefs.h
+w_warehouse.o: tdef_functions.h
+w_web_page.o: config.h porting.h constants.h w_web_page.h date.h mathops.h
+w_web_page.o: decimal.h genrand.h dist.h address.h build_support.h columns.h
+w_web_page.o: pricing.h misc.h print.h scaling.h tables.h nulls.h tdefs.h
+w_web_page.o: tdef_functions.h scd.h
+w_web_returns.o: config.h porting.h pricing.h decimal.h mathops.h
+w_web_returns.o: w_web_returns.h w_web_sales.h date.h genrand.h dist.h
+w_web_returns.o: address.h constants.h build_support.h columns.h misc.h
+w_web_returns.o: print.h error_msg.h tables.h nulls.h tdefs.h
+w_web_returns.o: tdef_functions.h
+w_web_sales.o: config.h porting.h pricing.h decimal.h mathops.h w_web_sales.h
+w_web_sales.o: w_web_returns.h date.h genrand.h dist.h address.h constants.h
+w_web_sales.o: build_support.h columns.h misc.h print.h tables.h nulls.h
+w_web_sales.o: tdefs.h tdef_functions.h scaling.h permute.h scd.h parallel.h
+w_web_site.o: config.h porting.h constants.h address.h w_web_site.h decimal.h
+w_web_site.o: mathops.h genrand.h date.h dist.h tables.h columns.h print.h
+w_web_site.o: scaling.h build_support.h pricing.h misc.h nulls.h tdefs.h
+w_web_site.o: tdef_functions.h scd.h
+dbgen_version.o: config.h porting.h dbgen_version.h print.h columns.h
+dbgen_version.o: build_support.h decimal.h mathops.h date.h dist.h pricing.h
+dbgen_version.o: tables.h misc.h release.h
+tokenizer.o: config.h porting.h keywords.h expr.h StringBuffer.h list.h
+tokenizer.o: mathops.h y.tab.h qgen_params.h r_params.h release.h
+tokenizer.o: substitution.h eval.h grammar_support.h
+substitution.o: config.h porting.h error_msg.h dist.h date.h mathops.h
+substitution.o: decimal.h misc.h genrand.h address.h constants.h
+substitution.o: substitution.h StringBuffer.h expr.h list.h eval.h
+QgenMain.o: config.h porting.h StringBuffer.h expr.h list.h mathops.h
+QgenMain.o: grammar_support.h keywords.h substitution.h eval.h error_msg.h
+QgenMain.o: qgen_params.h r_params.h release.h genrand.h decimal.h date.h
+QgenMain.o: dist.h address.h constants.h query_handler.h permute.h
+QgenMain.o: tdef_functions.h tables.h
+qgen.o: config.h porting.h StringBuffer.h expr.h list.h mathops.h
+qgen.o: grammar_support.h keywords.h substitution.h eval.h error_msg.h
+qgen.o: tables.h qgen_params.h r_params.h release.h tdefs.h columns.h
+qgen.o: tdef_functions.h query_handler.h dist.h scaling.h
+query_handler.o: config.h porting.h StringBuffer.h eval.h substitution.h
+query_handler.o: expr.h list.h mathops.h error_msg.h qgen_params.h r_params.h
+query_handler.o: release.h genrand.h decimal.h date.h dist.h address.h
+query_handler.o: constants.h
+eval.o: config.h porting.h genrand.h decimal.h mathops.h date.h dist.h
+eval.o: address.h constants.h eval.h expr.h StringBuffer.h list.h
+eval.o: substitution.h error_msg.h tdefs.h tables.h columns.h
+eval.o: tdef_functions.h build_support.h pricing.h scaling.h y.tab.h
+eval.o: permute.h keywords.h dcomp.h grammar.h
+keywords.o: config.h porting.h keywords.h expr.h StringBuffer.h list.h
+keywords.o: mathops.h y.tab.h substitution.h eval.h error_msg.h
+keywords.o: query_handler.h
+mkheader.o: config.h porting.h
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/PORTING.NOTES b/ydb/library/benchmarks/gen/tpcds-dbgen/PORTING.NOTES
new file mode 100644
index 000000000000..c122c22b879a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/PORTING.NOTES
@@ -0,0 +1,201 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+1. General
+ 1.1 Makefile.suite
+ 1.2 Executables and usage
+2. Platform-Specific Issues
+ 2.1 Linux
+ 2.2 AIX
+ 2.3 Windows
+3. Troubleshooting
+ 3.1 Manifest
+ 3.1 makedepend
+4. Extensions
+
+1. General
+============
+Porting of DBGEN is intended to be very straightforward. The code is written
+in C. Any required changes should be limited to the files outlined below. If
+you encounter any problems porting the code to a new environment (i.e., one
+not mentioned in section 2, please contact Jack Stephens
+(jms@gradientsystems.com).
+
+1.1 Makefile.suite
+Copy Makefile.suite to Makefile in the installation directory.
+The changes to the Makefile should be limited to the variable
+definitions in the first few lines of the file.
+ CC: ANSI compiler
+ OS: one of LINUX, WIN32, AIX, SOLARIS, HPUX.
+
+OS-specific changes are detailed in section 2, below. Once any required
+changes have been made, it should be possible to create the required
+executables by executing 'make'.
+
+1.2 Executables and usage
+The make command should result in the creation of 3 executables:
+ -- distcomp: a distribution compiler
+ -- dbgen2: the data generator
+ -- qgen2: the query generator
+
+dbgen2 is the data generator for tpcds. It will produce flat files to
+populate the data warehouse schema. See the README file for more
+information on its use.
+
+qgen2 is the query generator for tpcds. It will translate query templates
+into valid SQL. See the README file for more information on its use.
+
+distcomp compiles the ASCII distribution definitons found in the .dst
+files into a binary form, stored in tpcds.idx. Both dbgen2 and qgen2 rely
+on this binary file, and it must be distributed along with any
+executables. It is not necessary to distribute distcomp, or the dst
+files.
+
+
+2. Platform-Specific Issues
+==============================
+The code for these utilites has been structured to minimize the changes
+required to move it from one platform to the next. The following sections
+detail the environments under which it has been tested and the
+configuration changes required.
+
+2.1 Linux
+The testing was completed under RedHat 8.0 on an Intel platform. Makefile
+settings/changes were:
+OS = LINUX
+
+2.2 AIX
+The testing was completed under AIX 5.1 Makefile settings/changes were:
+OS = AIX
+
+2.3 WINDOWS
+The testing was completed under Windows 2000, Professional, using Visual
+C++ 6.0. The makefile is not used in this environment, but the
+distribution includes workspace and project files which should allow the
+executables to be built without further change. The test configuration
+stored the source files in c:\tpc\tpcds, but the internal paths appear to
+be relative, and should allow rellocation.
+
+Most windows installations do not include Lex or Yacc, the compiler-generation tools. The
+distribution includes files that they would generate (tokenizer.c, qgen.c, y.tab.h). Should
+it be necessary to regenerate these files, build the grammar project within the DBGEN2 workspace.
+
+
+3. Troubleshooting
+==================
+The source files are detailed below. It is likely that most issues can be
+resolved with minor corrections to config.h or porting.h. Please forward
+any problem reports, and any suggested corrections, to the subcommittee
+and Jack.
+
+3.1 Manifest
+Build files
+----------------------
+Makefile.suite: make input file
+dbgen2.dsp: Project file (windows only)
+dbgen2.dsw: Workspace file (windows only)
+qgen2.dsp: Project file (windows only)
+distcomp.dsp: Project file (windows only)
+BUGS: Docuementation
+HISTORY: Docuementation
+PORTING.NOTES: Docuementation
+README: Docuementation
+
+dbgen2/qgen2 files
+----------------------
+build.c: table population routines
+build_support.c
+build_support.h
+columns.h: schema definitions
+config.h: porting defines
+constants.h: schema definitions
+date.c: data type support
+date.h: data type support
+decimal.c: data type support
+decimal.h: data type support
+dist.c: distributtion support
+dist.h: distributtion support
+driver.c: dbgen2 main routines
+driver.h: dbgen2 main routines
+error_msg.h
+genrand.c: RNG routines
+genrand.h: RNG routines
+grammar.c: general grammar routines, used by qgen2 and distcomp
+grammar.h: general grammar routines, used by qgen2 and distcomp
+load.c: in-line load stubs
+load.h: in-line load stubs
+misc.c
+misc.h
+newqgen.c: qgen2 main routines
+newqgen.h: qgen2 main routines
+parallel.c: parallelism stubs
+parallel.h: parallelism stubs
+params.h: command line support
+porting.h: porting defines
+print.c: table print routines
+qgen_params.h: command line support
+r_params.c: command line support
+r_params.h: command line support
+tables.h: schema definitions
+tdefs.h: schema definitions
+template.c: qgen2 template parsing routines
+template.h: qgen2 template parsing routines
+text.c: data type support
+
+Distribution/distcomp files
+----------------------
+dcgram.c: grammar definition
+dcgram.h: grammar definition
+dcomp.c: distcomp main routine
+dcomp.h: distcomp main routine
+dcomp_params.h: command line options
+calendar.dst: distribution definitions; included in tpcds.dst
+cities.dst: distribution definitions; included in tpcds.dst
+english.dst: distribution definitions; included in tpcds.dst
+fips.dst: distribution definitions; included in tpcds.dst
+names.dst: distribution definitions; included in tpcds.dst
+streets.dst: distribution definitions; included in tpcds.dst
+tpcds.dst: distribution definitions
+
+3.2 Make Depend
+The dependecies in Makefile.suite have been hand coded, to aid in portability. If you have trouble compliling for
+a particular platform, and makedend is available, then 'make depend' should introduce any required,
+platform-specific dependencies.
+
+
+4. Extensions
+=============
+TBD
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/QGEN.doc b/ydb/library/benchmarks/gen/tpcds-dbgen/QGEN.doc
new file mode 100644
index 000000000000..7a509f79b35b
Binary files /dev/null and b/ydb/library/benchmarks/gen/tpcds-dbgen/QGEN.doc differ
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/QgenMain.c b/ydb/library/benchmarks/gen/tpcds-dbgen/QgenMain.c
new file mode 100644
index 000000000000..c1b99888849b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/QgenMain.c
@@ -0,0 +1,375 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#define DECLARER
+#include "config.h"
+#include "porting.h"
+#include
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+#include "StringBuffer.h"
+#include "expr.h"
+#include "grammar_support.h"
+#include "keywords.h"
+#include "substitution.h"
+#include "error_msg.h"
+#include "qgen_params.h"
+#include "genrand.h"
+#include "query_handler.h"
+#include "release.h"
+#include "list.h"
+#include "permute.h"
+#include "dist.h"
+#include "tdef_functions.h"
+
+template_t *pCurrentQuery,
+ *g_Template;
+list_t *TemplateList;
+
+
+int g_nQueryNumber,
+ g_nStreamNumber;
+StringBuffer_t *g_sbTemplateName = NULL;
+
+
+int yydebug;
+int yyparse(void);
+extern FILE *yyin;
+extern file_ref_t *pCurrentFile;
+table_func_t w_tdef_funcs[MAX_TABLE];
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+parseTemplate(char *szFileName, int nIndex)
+{
+ int nWarning,
+ nError;
+ char szPath[1024];
+
+ pCurrentQuery = (template_t *)malloc(sizeof(struct TEMPLATE_T));
+ MALLOC_CHECK(pCurrentQuery);
+ if (!pCurrentQuery)
+ ReportErrorNoLine(QERR_NO_MEMORY, "parseQueries()", 1);
+ memset(pCurrentQuery, 0, sizeof(struct TEMPLATE_T));
+ pCurrentQuery->SegmentList = makeList(L_FL_TAIL, NULL);
+ pCurrentQuery->SubstitutionList = makeList(L_FL_SORT, compareSubstitution);
+ pCurrentQuery->DistributionList = makeList(L_FL_SORT, di_compare);
+
+ /*
+ * each query template is parsed as though:
+ * it had explicitly included the dialect template
+ * it began the query with a [_begin] substitution
+ * it ended the query with an [_end] substitution
+ */
+ pCurrentFile = NULL;
+ if (is_set("DIRECTORY"))
+ sprintf(szPath, "%s/%s", get_str("DIRECTORY"),szFileName);
+ else
+ strcpy(szPath, szFileName);
+ if (include_file(szPath, pCurrentQuery) < 0)
+ ReportErrorNoLine(QERR_NO_FILE, szPath, 1);
+ sprintf(szPath, "%s/%s.tpl", get_str("DIRECTORY"), get_str("DIALECT"));
+ if (include_file(szPath, pCurrentQuery) < 0)
+ ReportErrorNoLine(QERR_NO_FILE, szPath, 1);
+
+ /* parse the template file */
+ yyparse();
+
+ /*
+ * add in query start substitution, now that it has been defined
+ */
+ pCurrentQuery->SegmentList->nFlags &= ~L_FL_TAIL;
+ pCurrentQuery->SegmentList->nFlags |= L_FL_HEAD;
+ AddQuerySegment(pCurrentQuery, "\n");
+ AddQuerySegment(pCurrentQuery, "");
+ ((segment_t *)pCurrentQuery->SegmentList->head->pData)->pSubstitution = findSubstitution(pCurrentQuery, "_BEGIN", 0);
+ pCurrentQuery->SegmentList->nFlags &= ~L_FL_HEAD;
+ pCurrentQuery->SegmentList->nFlags |= L_FL_TAIL;
+
+ /* check for any parsing errors */
+ GetErrorCounts(&nError, &nWarning);
+ if (nError)
+ {
+ printf("%d Errors encountered parsing %s\n",
+ nError, szFileName);
+ exit(1);
+ }
+ if (nWarning)
+ {
+ printf("WARNING: %d warnings encountered parsing %s\nWARNING: Query output may not be correct!\n",
+ nWarning, szFileName);
+ }
+
+ addList(TemplateList, pCurrentQuery);
+ pCurrentQuery->index = nIndex;
+ pCurrentQuery->name = strdup(szFileName);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+parseQueries(void)
+{
+ char szFileName[1024],
+ *cp;
+ FILE *pInputFile;
+ int nIndex = 1;
+
+ if (!is_set("INPUT"))
+ {
+ ReportErrorNoLine(QERR_NO_QUERYLIST, NULL, 1);
+ }
+
+ strcpy(szFileName, get_str("INPUT"));
+
+#ifndef WIN32
+ if ((pInputFile = fopen(szFileName, "r")) == NULL)
+#else
+ if ((pInputFile = fopen(szFileName, "rt")) == NULL)
+#endif
+ {
+ SetErrorGlobals(szFileName, NULL);
+ ReportErrorNoLine(QERR_OPEN_FAILED, szFileName, 1);
+ }
+
+ while (fgets(szFileName, 1024, pInputFile))
+ {
+ if (strncmp(szFileName, "--", 2) == 0)
+ continue;
+ if ((cp = strchr(szFileName, '\n')))
+ *cp = '\0';
+ if (!strlen(szFileName))
+ continue;
+
+ parseTemplate(szFileName, nIndex++);
+ }
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+generateQueryStreams(void)
+{
+ int nStream,
+ nQuery,
+ nQueryCount,
+ *pPermutation = NULL,
+ nVersionCount,
+ nCount,
+ nQID;
+ FILE *pOutFile;
+ FILE *pLogFile = NULL;
+ char szPath[1024];
+
+ nQueryCount = length(TemplateList);
+ nVersionCount = get_int("COUNT");
+
+ if (is_set("LOG"))
+ {
+#ifndef WIN32
+ if ((pLogFile = fopen(get_str("LOG"), "w")) == NULL)
+#else
+ if ((pLogFile = fopen(get_str("LOG"), "wt")) == NULL)
+#endif
+ {
+ SetErrorGlobals(get_str("LOG"), NULL);
+ ReportErrorNoLine(QERR_OPEN_FAILED, get_str("LOG"), 1);
+ }
+ }
+
+ for (nStream=0; nStream < get_int("STREAMS"); nStream++)
+ {
+ /*
+ * use stream 1 for permutation, and stream 0 for all other RNG calls in qgen,
+ * to assure permutation stability regardless of command line seed
+ */
+ Streams[1].nInitialSeed = 19620718;
+ Streams[1].nSeed = 19620718;
+ pPermutation = makePermutation(pPermutation, nQueryCount, 1);
+
+ sprintf(szPath, "%s%squery_%d.sql",
+ get_str("OUTPUT_DIR"),
+ get_str("PATH_SEP"),
+ nStream);
+ if (!is_set("FILTER"))
+ {
+#ifndef WIN32
+ if ((pOutFile = fopen(szPath, "w")) == NULL)
+#else
+ if ((pOutFile = fopen(szPath, "wt")) == NULL)
+#endif
+ {
+ SetErrorGlobals(szPath, NULL);
+ ReportErrorNoLine(QERR_OPEN_FAILED, szPath, 1);
+ }
+ }
+ else
+ pOutFile = stdout;
+
+ g_nStreamNumber = nStream;
+ if (pLogFile)
+ fprintf(pLogFile, "BEGIN STREAM %d\n", nStream);
+ for (nQuery = 1; nQuery <= nQueryCount; nQuery++)
+ {
+ for (nCount = 1; nCount <= nVersionCount; nCount++)
+ {
+ g_nQueryNumber = nQuery;
+ if (is_set("QUALIFY"))
+ nQID = nQuery;
+ else
+ nQID = getPermutationEntry(pPermutation, nQuery);
+ GenerateQuery(pOutFile, pLogFile, nQID);
+ if (pLogFile)
+ fprintf(pLogFile, "\n");
+ }
+ }
+ if (pLogFile)
+ fprintf(pLogFile, "END STREAM %d\n", nStream);
+
+ if (!is_set("FILTER"))
+ fclose(pOutFile);
+ }
+
+ if (pLogFile)
+ fclose(pLogFile);
+
+ return;
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+main(int ac, char* av[])
+{
+ template_t *pTemplate;
+
+ process_options (ac, av);
+
+ if (!is_set("QUIET"))
+ {
+ fprintf (stderr,
+ "%s Query Generator (Version %d.%d.%d%s)\n",
+ get_str("PROG"), VERSION, RELEASE, MODIFICATION, PATCH);
+ fprintf (stderr, "Copyright %s %s\n", COPYRIGHT, C_DATES);
+ }
+
+ TemplateList = makeList(L_FL_TAIL, NULL);
+
+ /* sync the keyword defines between lex/yacc/qgen */
+ InitKeywords();
+
+ if (is_set("YYDEBUG"))
+ yydebug = 1;
+
+
+ if (is_set("TEMPLATE"))
+ parseTemplate(get_str("TEMPLATE"), 1);
+ else
+ parseQueries(); /* load the query templates */
+
+
+ if (is_set("VERBOSE") && !is_set("QUIET"))
+ fprintf(stderr, "Parsed %d templates\n", length(TemplateList));
+ if (is_set("DUMP"))
+ {
+ for (pTemplate = (template_t *)getHead(TemplateList); pTemplate; pTemplate = (template_t *)getNext(TemplateList))
+ PrintTemplate(pTemplate);
+ }
+
+ init_rand();
+
+ generateQueryStreams(); /* output the resulting SQL */
+
+ exit(0);
+
+}
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/README_grammar.txt b/ydb/library/benchmarks/gen/tpcds-dbgen/README_grammar.txt
new file mode 100644
index 000000000000..338cab0ea862
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/README_grammar.txt
@@ -0,0 +1,63 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+The following information applies to the Windows development environment.
+
+The migration to the latest development environment (Visual Studio 2005)
+resulted in a number of changes to the build process. Most changes are
+transparent to the user of the toolkit. One is not.
+
+The toolkit sources include a separate project ("grammar") that uses lex
+and YACC to produce a simple compiler for the query template files. The
+output from lex and YACC are included in the sources compiled as part of the
+QGEN project within the toolkit, so that most people will not need to install
+anything other than a standard Windows development IDE. If you need to regenerate
+any of the following files, You will need to follow the step below:
+ y.tab.c
+ y.tab.h
+ qgen.lexer.c
+
+To rebuild the grammar project:
+
+
+1. Install cygwin (www.redhat.com/cygwin), including lex and yacc
+2. Enable the cygwin build rules for the grammar project
+ a. Right click on the grammar project within the SOluation View of the IDE
+ b. Select 'Custom Build Rules...'
+ c. Select 'Find Existing...'
+ d. Navigate to C:\cygwin
+ e. Accept the changes
+ f. Build the grammar project
+3. Build the remaining projects as usual
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/ReleaseNotes.txt b/ydb/library/benchmarks/gen/tpcds-dbgen/ReleaseNotes.txt
new file mode 100644
index 000000000000..6759c58a881d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/ReleaseNotes.txt
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+ 0000129 DBGEN minor resolved (jack.stephens) 12-02-04 dist wrong for i_current_price
+ 0000127 1 QGEN minor resolved (jack.stephens) 12-02-04 qgen core dumps on some templates
+ 0000126 DBGEN feature resolved (jack.stephens) 11-23-04 add comparabiltiy zones to w_item
+ 0000125 QGEN feature resolved (jack.stephens) 11-17-04 allow LIST() on TEXT()
+ 0000120 DBGEN minor resolved (jack.stephens) 11-24-04 I_product_name should be unique
+ 0000119 1 DBGEN minor resolved (jack.stephens) 11-24-04 ws_web_page_sk
+ 0000118 1 DBGEN minor resolved (jack.stephens) 11-24-04 Wr_sold_time_sk should start with 1
+ 0000117 DBGEN minor resolved (jack.stephens) 11-24-04 Wr_sold_date_sk cannot start with 0
+ 0000116 DBGEN major resolved (jack.stephens) 11-24-04 Ss_sold_date_sk has to start with 2450815, not with 245814
+ 0000114 DBGEN major resolved (jack.stephens) 12-01-04 some history keeping dimension entries in the history table do not have NULL
+ 0000112 1 DBGEN minor closed (jack.stephens) 12-02-04 c_first_sales_date_sk and c_first_shipto_date_sk are unique
+ 0000110 1 DBGEN minor closed (jack.stephens) 12-02-04 cs_net_profit is always null
+ 0000109 1 DBGEN major closed (jack.stephens) 12-02-04 Gen of store_sales/returns terminated with no error message
+ 0000106 1 DBGEN major resolved (jack.stephens) 11-30-04 parallel data doesn' t match serial generation
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.c b/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.c
new file mode 100644
index 000000000000..6c6519fba471
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.c
@@ -0,0 +1,189 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include "StringBuffer.h"
+
+/*
+* Routine: InitBuffer
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+StringBuffer_t *InitBuffer(int nSize, int nIncrement)
+{
+ StringBuffer_t *pBuf;
+
+ pBuf = (StringBuffer_t *)malloc(sizeof(struct STRING_BUFFER_T));
+ MALLOC_CHECK(pBuf);
+ if (pBuf == NULL)
+ return(NULL);
+ memset((void *)pBuf, 0, sizeof(struct STRING_BUFFER_T));
+
+ pBuf->pText = (char *)malloc(sizeof(char) * nSize);
+ MALLOC_CHECK(pBuf->pText);
+ if (pBuf->pText == NULL)
+ return(NULL);
+ memset((void *)pBuf->pText, 0, sizeof(char) * nSize);
+
+ pBuf->nIncrement = nIncrement;
+ pBuf->nBytesAllocated = nSize;
+ pBuf->nFlags = SB_INIT;
+
+ return(pBuf);
+}
+
+/*
+* Routine: AddBuffer
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int AddBuffer(StringBuffer_t *pBuf, char *pStr)
+{
+ int nRemaining = pBuf->nBytesAllocated - pBuf->nBytesUsed,
+ nRequested = strlen(pStr);
+
+ if (!nRequested)
+ return(0);
+
+ while (nRequested >= nRemaining)
+ {
+ pBuf->pText = (char *)realloc((void *)pBuf->pText, pBuf->nBytesAllocated + pBuf->nIncrement);
+ if (!pBuf->pText)
+ return(-1);
+ pBuf->nBytesAllocated += pBuf->nIncrement;
+ nRemaining += pBuf->nIncrement;
+ }
+
+ strcat(pBuf->pText, pStr);
+ if (pBuf->nBytesUsed == 0) /* first string adds a terminator */
+ pBuf->nBytesUsed = 1;
+ pBuf->nBytesUsed += nRequested;
+
+ return(0);
+}
+
+
+/*
+* Routine: ResetStringBuffer
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int ResetBuffer(StringBuffer_t *pBuf)
+{
+ pBuf->nBytesUsed = 0;
+ if (pBuf->nBytesAllocated)
+ pBuf->pText[0] = '\0';
+
+ return(0);
+}
+
+/*
+* Routine: GetBuffer
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+char *GetBuffer(StringBuffer_t *pBuf)
+{
+ return(pBuf->pText);
+}
+
+/*
+* Routine: FreeBuffer
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void FreeBuffer(StringBuffer_t *pBuf)
+{
+ if (!pBuf)
+ return;
+ if (pBuf->pText)
+ free((void *)pBuf->pText);
+ free((void *)pBuf);
+
+ return;
+}
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.h b/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.h
new file mode 100644
index 000000000000..d6311c8d8e6d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/StringBuffer.h
@@ -0,0 +1,58 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#ifndef STRING_BUFFER_H
+#define STRING_BUFFER_H
+
+#define SB_INIT 0x01
+
+typedef struct STRING_BUFFER_T
+{
+ int nFlags;
+ int nBytesAllocated;
+ int nBytesUsed;
+ int nIncrement;
+ char *pText;
+} StringBuffer_t;
+
+StringBuffer_t *InitBuffer(int nSize, int nIncrement);
+int AddBuffer(StringBuffer_t *pBuf, char *pStr);
+int ResetBuffer(StringBuffer_t *pBuf);
+char *GetBuffer(StringBuffer_t *pBuf);
+void FreeBuffer(StringBuffer_t *pBuf);
+#endif
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/address.c b/ydb/library/benchmarks/gen/tpcds-dbgen/address.c
new file mode 100644
index 000000000000..2daf3894cba6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/address.c
@@ -0,0 +1,350 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "address.h"
+#include "dist.h"
+#include "r_params.h"
+#include "genrand.h"
+#include "columns.h"
+#include "tables.h"
+#include "tdefs.h"
+#include "permute.h"
+#include "scaling.h"
+
+static int s_nCountyCount = 0;
+static int s_nCityCount = 0;
+
+void
+resetCountCount(void)
+{
+ s_nCountyCount = 0;
+ s_nCityCount = 0;
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_address(ds_addr_t *pAddr, int nColumn)
+{
+ int i,
+ nRegion;
+ char *szZipPrefix,
+ szAddr[100];
+ static int nMaxCities,
+ nMaxCounties,
+ bInit = 0;
+ tdef *pTdef;
+
+ if (!bInit)
+ {
+ nMaxCities = (int)get_rowcount(ACTIVE_CITIES);
+ nMaxCounties = (int)get_rowcount(ACTIVE_COUNTIES);
+ bInit = 1;
+ }
+
+ /* street_number is [1..1000] */
+ genrand_integer(&pAddr->street_num, DIST_UNIFORM, 1, 1000, 0, nColumn);
+
+ /* street names are picked from a distribution */
+ pick_distribution(&pAddr->street_name1, "street_names",1, 1, nColumn);
+ pick_distribution(&pAddr->street_name2, "street_names", 1, 2, nColumn);
+
+ /* street type is picked from a distribution */
+ pick_distribution(&pAddr->street_type, "street_type", 1, 1, nColumn);
+
+ /* suite number is alphabetic 50% of the time */
+ genrand_integer(&i, DIST_UNIFORM, 1, 100, 0, nColumn);
+ if (i & 0x01)
+ {
+ sprintf(pAddr->suite_num, "Suite %d", (i >> 1) * 10);
+ }
+ else
+ {
+ sprintf(pAddr->suite_num, "Suite %c", ((i >> 1) % 25) + 'A');
+ }
+
+ pTdef = getTdefsByNumber(getTableFromColumn(nColumn));
+
+ /* city is picked from a distribution which maps to large/medium/small */
+ if (pTdef->flags & FL_SMALL)
+ {
+ i = (int)get_rowcount(getTableFromColumn(nColumn));
+ genrand_integer(&i, DIST_UNIFORM, 1, (nMaxCities > i)?i:nMaxCities, 0, nColumn);
+ dist_member(&pAddr->city, "cities", i, 1);
+ }
+ else
+ pick_distribution(&pAddr->city, "cities", 1, 6, nColumn);
+
+
+ /* county is picked from a distribution, based on population and keys the rest */
+ if (pTdef->flags & FL_SMALL)
+ {
+ i = (int)get_rowcount(getTableFromColumn(nColumn));
+ genrand_integer(&nRegion, DIST_UNIFORM, 1, (nMaxCounties > i)?i:nMaxCounties, 0, nColumn);
+ dist_member(&pAddr->county, "fips_county", nRegion, 2);
+ }
+ else
+ nRegion = pick_distribution(&pAddr->county, "fips_county", 2, 1, nColumn);
+
+ /* match state with the selected region/county */
+ dist_member(&pAddr->state, "fips_county", nRegion, 3);
+
+ /* match the zip prefix with the selected region/county */
+ pAddr->zip = city_hash(0, pAddr->city);
+ /* 00000 - 00600 are unused. Avoid them */
+ dist_member((void *)&szZipPrefix, "fips_county", nRegion, 5);
+ if (!(szZipPrefix[0] - '0') && (pAddr->zip < 9400))
+ pAddr->zip += 600;
+ pAddr->zip += (szZipPrefix[0] - '0') * 10000;
+
+ sprintf(szAddr, "%d %s %s %s",
+ pAddr->street_num, pAddr->street_name1, pAddr->street_name2, pAddr->street_type);
+ pAddr->plus4 = city_hash(0, szAddr);
+ dist_member (&pAddr->gmt_offset, "fips_county", nRegion, 6);
+ strcpy(pAddr->country, "United States");
+
+ return(0);
+}
+
+
+/*
+* Routine: mk_streetnumber
+* Purpose:
+* one of a set of routines that creates addresses
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* nTable: target table (and, by extension, address) to allow differing distributions
+* dest: destination for the random number
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20030422 jms should be replaced if there is no table variation
+*/
+int mk_streetnumber(int nTable, int *dest)
+{
+ genrand_integer(dest, DIST_UNIFORM, 1, 1000, 0, nTable);
+
+ return(0);
+}
+
+/*
+* Routine: mk_suitenumber()
+* Purpose:
+* one of a set of routines that creates addresses
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* nTable: target table (and, by extension, address) to allow differing distributions
+* dest: destination for the random number
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20010615 JMS return code is meaningless
+*/
+int mk_suitenumber(int nTable, char *dest)
+{
+ int i;
+
+ genrand_integer(&i, DIST_UNIFORM, 1, 100, 0, nTable);
+ if (i <= 50)
+ {
+ genrand_integer(&i, DIST_UNIFORM, 1, 1000, 0, nTable);
+ sprintf(dest, "Suite %d", i);
+ }
+ else
+ {
+ genrand_integer(&i, DIST_UNIFORM, 0, 25, 0, nTable);
+ sprintf(dest, "Suite %c", i + 'A');
+ }
+
+ return(0);
+}
+
+/*
+* Routine: mk_streetname()
+* Purpose:
+* one of a set of routines that creates addresses
+* Algorithm:
+* use a staggered distibution and the 150 most common street names in the US
+* Data Structures:
+*
+* Params:
+* nTable: target table (and, by extension, address) to allow differing distributions
+* dest: destination for the street name
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20010615 JMS return code is meaningless
+*/
+int mk_streetname(int nTable, char *dest)
+{
+ char *pTemp1 = NULL,
+ *pTemp2 = NULL;
+
+ pick_distribution((void *)&pTemp1, "street_names", (int)1, (int)1, nTable);
+ pick_distribution((void *)&pTemp2, "street_names", (int)1, (int)2, nTable);
+ if (strlen(pTemp2))
+ sprintf(dest, "%s %s", pTemp1, pTemp2);
+ else
+ strcpy(dest, pTemp1);
+
+ return(0);
+}
+
+/*
+* Routine: mk_city
+* Purpose:
+* one of a set of routines that creates addresses
+* Algorithm:
+* use a staggered distibution of 1000 most common place names in the US
+* Data Structures:
+*
+* Params:
+* nTable: target table (and, by extension, address) to allow differing distributions
+* dest: destination for the city name
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20030423 jms should be replaced if there is no per-table variation
+*/
+int mk_city(int nTable, char **dest)
+{
+ pick_distribution((void *)dest, "cities", (int)1, (int)get_int("_SCALE_INDEX"), 11);
+
+ return(0);
+}
+
+/*
+* Routine: city_hash()
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+city_hash(int nTable, char *name)
+{
+ char *cp;
+ int hash_value = 0,
+ res = 0;
+
+ for (cp = name; *cp; cp++)
+ {
+ hash_value *= 26;
+ hash_value -= 'A';
+ hash_value += *cp;
+ if (hash_value > 1000000)
+ {
+ hash_value %= 10000;
+ res += hash_value;
+ hash_value = 0;
+ }
+ }
+ hash_value %= 1000;
+ res += hash_value;
+ res %= 10000; /* looking for a 4 digit result */
+
+ return(res);
+
+}
+
+/*
+* Routine:
+* one of a set of routines that creates addresses
+* Algorithm:
+* use a compound distribution of the 3500 counties in the US
+* Data Structures:
+*
+* Params:
+* nTable: target table (and, by extension, address) to allow differing distributions
+* dest: destination for the city name
+* nRegion: the county selected
+* city: the city name selected
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20010615 JMS return code is meaningless
+*/
+int mk_zipcode(int nTable, char *dest, int nRegion, char *city)
+{
+ char *szZipPrefix = NULL;
+ int nCityCode;
+ int nPlusFour;
+
+ dist_member((void *)&szZipPrefix, "fips_county", nRegion, 5);
+ nCityCode = city_hash(nTable, city);
+ genrand_integer(&nPlusFour, DIST_UNIFORM, 1, 9999, 0, nTable);
+ sprintf(dest, "%s%04d-%04d", szZipPrefix, nCityCode, nPlusFour);
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/address.h b/ydb/library/benchmarks/gen/tpcds-dbgen/address.h
new file mode 100644
index 000000000000..6c9571e75eb6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/address.h
@@ -0,0 +1,79 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#ifndef DS_ADDRESS_H
+#define DS_ADDRESS_H
+#include "constants.h"
+
+typedef struct DS_ADDR_T {
+ char suite_num[RS_CC_SUITE_NUM + 1];
+ int street_num;
+ char *street_name1;
+ char *street_name2;
+ char *street_type;
+ char *city;
+ char *county;
+ char *state;
+ char country[RS_CC_COUNTRY + 1];
+ int zip;
+ int plus4;
+ int gmt_offset;
+} ds_addr_t;
+
+#define DS_ADDR_SUITE_NUM 0
+#define DS_ADDR_STREET_NUM 1
+#define DS_ADDR_STREET_NAME1 2
+#define DS_ADDR_STREET_NAME2 3
+#define DS_ADDR_STREET_TYPE 4
+#define DS_ADDR_CITY 5
+#define DS_ADDR_COUNTY 6
+#define DS_ADDR_STATE 7
+#define DS_ADDR_COUNTRY 8
+#define DS_ADDR_ZIP 9
+#define DS_ADDR_PLUS4 10
+#define DS_ADDR_GMT_OFFSET 11
+
+int mk_address(ds_addr_t *pDest, int nColumn);
+int mk_streetnumber(int nTable, int *dest);
+int mk_suitenumber(int nTable, char *dest);
+int mk_streetname(int nTable, char *dest);
+int mk_city(int nTable, char **dest);
+int city_hash(int nTable, char *name);
+int mk_zipcode(int nTable, char *dest, int nRegion, char *city);
+void printAddressPart(FILE *fp, ds_addr_t *pAddr, int nAddressPart);
+void resetCountCount(void);
+#endif
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.c b/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.c
new file mode 100644
index 000000000000..659c97b404ee
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.c
@@ -0,0 +1,448 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#ifndef WIN32
+#include
+#endif
+#include
+#include "decimal.h"
+#include "constants.h"
+#include "dist.h"
+#include "r_params.h"
+#include "genrand.h"
+#include "tdefs.h"
+#include "tables.h"
+#include "build_support.h"
+#include "genrand.h"
+#include "columns.h"
+#include "StringBuffer.h"
+#include "error_msg.h"
+#include "scaling.h"
+
+/*
+* Routine: hierarchy_item
+* Purpose:
+* select the hierarchy entry for this level
+* Algorithm: Assumes a top-down ordering
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+void
+hierarchy_item(int h_level, ds_key_t *id, char **name, ds_key_t kIndex)
+{
+ static int bInit = 0,
+ nLastCategory = -1,
+ nLastClass = -1,
+ nBrandBase;
+ int nBrandCount;
+ static char *szClassDistName = NULL;
+ char sTemp[6];
+
+ if (!bInit)
+ {
+ bInit = 1;
+ }
+
+ switch(h_level)
+ {
+ case I_CATEGORY:
+ nLastCategory = pick_distribution(name, "categories", 1, 1, h_level);
+ *id = nLastCategory;
+ nBrandBase = nLastCategory;
+ nLastClass = -1;
+ break;
+ case I_CLASS:
+ if (nLastCategory == -1)
+ ReportErrorNoLine(DBGEN_ERROR_HIERACHY_ORDER, "I_CLASS before I_CATEGORY", 1);
+ dist_member(&szClassDistName, "categories", nLastCategory, 2);
+ nLastClass = pick_distribution(name, szClassDistName, 1, 1, h_level);
+ nLastCategory = -1;
+ *id = nLastClass;
+ break;
+ case I_BRAND:
+ if (nLastClass == -1)
+ ReportErrorNoLine(DBGEN_ERROR_HIERACHY_ORDER, "I_BRAND before I_CLASS", 1);
+ dist_member(&nBrandCount, szClassDistName, nLastClass, 2);
+ *id = kIndex % nBrandCount + 1;
+ mk_word(*name, "brand_syllables", nBrandBase * 10 + nLastClass, 45, I_BRAND);
+ sprintf(sTemp, " #%d", (int)*id);
+ strcat(*name, sTemp);
+ *id += (nBrandBase * 1000 + nLastClass) * 1000;
+ break;
+ default:
+ printf("ERROR: Invalid call to hierarchy_item with argument '%d'\n",
+ h_level);
+ exit(1);
+ }
+
+ return;
+}
+
+/*
+* Routine: mk_companyname()
+* Purpose:
+* yet another member of a set of routines used for address creation
+* Algorithm:
+* create a hash, based on an index value, so that the same result can be derived
+* reliably and then build a word from a syllable set
+* Data Structures:
+*
+* Params:
+* char * dest: target for resulting name
+* int nTable: to allow differing distributions
+* int nCompany: index value
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20010615 JMS return code is meaningless
+* 20030422 JMS should be replaced if there is no per-table variation
+*/
+int mk_companyname(char *dest, int nTable, int nCompany)
+{
+ mk_word(dest, "syllables", nCompany, 10, CC_COMPANY_NAME);
+
+ return(0);
+}
+
+/*
+* Routine: set_locale()
+* Purpose:
+* generate a reasonable lattitude and longitude based on a region and the USGS data on
+* 3500 counties in the US
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20011230 JMS set_locale() is just a placeholder; do we need geographic coords?
+*/
+int set_locale(int nRegion, decimal_t *longitude, decimal_t *latitude)
+{
+ static int init = 0;
+ static decimal_t dZero;
+
+ if (!init)
+ {
+ strtodec(&dZero, "0.00");
+ init = 1;
+ }
+
+ memcpy(longitude, &dZero, sizeof(decimal_t));
+ memcpy(latitude, &dZero, sizeof(decimal_t));
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+bitmap_to_dist(void *pDest, char *distname, ds_key_t *modulus, int vset, int stream)
+{
+ int32_t m,
+ s;
+ char msg[80];
+
+ if ((s = distsize(distname)) == -1)
+ {
+ sprintf(msg, "Invalid distribution name '%s'", distname);
+ INTERNAL(msg);
+ }
+ m = (int32_t)((*modulus % s) + 1);
+ *modulus /= s;
+
+ dist_member(pDest, distname, m, vset);
+
+ return;
+}
+
+/*
+* Routine: void dist_to_bitmap(int *pDest, char *szDistName, int nValueSet, int nWeightSet, int nStream)
+* Purpose: Reverse engineer a composite key based on distributions
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+dist_to_bitmap(int *pDest, char *szDistName, int nValue, int nWeight, int nStream)
+{
+ *pDest *= distsize(szDistName);
+ *pDest += pick_distribution(NULL, szDistName, nValue, nWeight, nStream);
+
+ return;
+}
+
+/*
+* Routine: void random_to_bitmap(int *pDest, int nDist, int nMin, int nMax, int nMean, int nStream)
+* Purpose: Reverse engineer a composite key based on an integer range
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+random_to_bitmap(int *pDest, int nDist, int nMin, int nMax, int nMean, int nStream)
+{
+ *pDest *= nMax;
+ *pDest += genrand_integer(NULL, nDist, nMin, nMax, nMean, nStream);
+
+ return;
+}
+
+
+/*
+* Routine: mk_word()
+* Purpose:
+* generate a gibberish word from a given syllable set
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+void
+mk_word(char *dest, char *syl_set, ds_key_t src, int char_cnt, int col)
+{
+ ds_key_t i = src,
+ nSyllableCount;
+ char *cp;
+
+ *dest = '\0';
+ while (i > 0)
+ {
+ nSyllableCount = distsize(syl_set);
+ dist_member(&cp, syl_set, (int)(i % nSyllableCount) + 1, 1);
+ i /= nSyllableCount;
+ if ((int)(strlen(dest) + strlen(cp)) <= char_cnt)
+ strcat(dest, cp);
+ else
+ break;
+ }
+
+ return;
+}
+
+/*
+* Routine: mk_surrogate()
+* Purpose: create a character based surrogate key from a 64-bit value
+* Algorithm: since the RNG routines produce a 32bit value, and surrogate keys can
+* reach beyond that, use the RNG output to generate the lower end of a random string,
+* and build the upper end from a ds_key_t
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls: ltoc()
+* Assumptions: output is a 16 character string. Space is not checked
+* Side Effects:
+* TODO:
+* 20020830 jms may need to define a 64-bit form of htonl() for portable shift operations
+*/
+static char szXlate[16] = "ABCDEFGHIJKLMNOP";
+static void ltoc(char *szDest, unsigned long nVal)
+{
+ int i;
+ char c;
+
+ for (i=0; i < 8; i++)
+ {
+ c = szXlate[(nVal & 0xF)];
+ *szDest++ = c;
+ nVal >>= 4;
+ }
+ *szDest = '\0';
+}
+
+void
+mk_bkey(char *szDest, ds_key_t kPrimary, int nStream)
+{
+ unsigned long nTemp;
+
+ nTemp = (unsigned long)(kPrimary >> 32);
+ ltoc(szDest, nTemp);
+
+ nTemp = (unsigned long)(kPrimary & 0xFFFFFFFF);
+ ltoc(szDest + 8, nTemp);
+
+ return;
+}
+
+/*
+* Routine: embed_string(char *szDest, char *szDist, int nValue, int nWeight, int nStream)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+embed_string(char *szDest, char *szDist, int nValue, int nWeight, int nStream)
+{
+ int nPosition;
+ char *szWord = NULL;
+
+ pick_distribution(&szWord, szDist, nValue, nWeight, nStream);
+ nPosition = genrand_integer(NULL, DIST_UNIFORM, 0, strlen(szDest) - strlen(szWord) - 1, 0, nStream);
+ strncpy(&szDest[nPosition], szWord, strlen(szWord));
+
+ return(0);
+}
+
+/*
+* Routine: set_scale()
+* Purpose: link SCALE and SCALE_INDEX
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+SetScaleIndex(char *szName, char *szValue)
+{
+ int nScale;
+ char szScale[2];
+
+ if ((nScale = atoi(szValue)) == 0)
+ nScale = 1;
+
+ nScale = 1 + (int)log10(nScale);
+ szScale[0] = '0' + nScale;
+ szScale[1] = '\0';
+
+ set_int("_SCALE_INDEX", szScale);
+
+ return(atoi(szValue));
+}
+
+/*
+* Routine: adjust the valid date window for source schema tables, based on
+* based on the update count, update window size, etc.
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+setUpdateDateRange(int nTable, date_t *pMinDate, date_t *pMaxDate)
+{
+ static int nUpdateNumber,
+ bInit = 0;
+
+ if (!bInit)
+ {
+ nUpdateNumber = get_int("UPDATE");
+ bInit = 1;
+ }
+
+ switch(nTable) /* no per-table changes at the moment; but could be */
+ {
+ default:
+ strtodt(pMinDate, WAREHOUSE_LOAD_DATE);
+ pMinDate->julian += UPDATE_INTERVAL * (nUpdateNumber - 1);
+ jtodt(pMinDate, pMinDate->julian);
+ jtodt(pMaxDate, pMinDate->julian + UPDATE_INTERVAL);
+ break;
+ }
+
+ return;
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.h b/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.h
new file mode 100644
index 000000000000..ae708c11ca34
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/build_support.h
@@ -0,0 +1,59 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef BUILD_SUPPORT_H
+#define BUILD_SUPPORT_H
+#include "decimal.h"
+#include "date.h"
+#include "dist.h"
+#include "columns.h"
+#include "pricing.h"
+
+void bitmap_to_dist(void *pDest, char *distname, ds_key_t *modulus, int vset, int stream);
+void dist_to_bitmap(int *pDest, char *szDistName, int nValue, int nWeight, int nStream);
+void random_to_bitmap(int *pDest, int nDist, int nMin, int nMax, int nMean, int nStream);
+int city_hash(int nTable, char *city);
+void hierarchy_item(int h_level, ds_key_t *id, char **name, ds_key_t kIndex);
+ds_key_t mk_join(int from_tbl, int to_tbl, ds_key_t ref_key);
+ds_key_t getCatalogNumberFromPage(ds_key_t kPageNumber);
+void mk_word(char *dest, char *syl_set, ds_key_t src, int char_cnt, int col);
+int set_locale(int nRegion, decimal_t *longitude, decimal_t *latitude);
+int adj_time(ds_key_t *res_date, ds_key_t *res_time, ds_key_t base_date, ds_key_t base_time, ds_key_t offset_key, int tabid);
+void mk_bkey(char *szDest, ds_key_t kPrimary, int nStream);
+int embed_string(char *szDest, char *szDist, int nValue, int nWeight, int nStream);
+int SetScaleIndex(char *szName, char *szValue);
+int mk_companyname(char *dest, int nTable, int nCompany);
+void setUpdateDateRange(int nTable, date_t *pMinDate, date_t *pMaxDate);
+#endif /* BUILD_SUPPORT_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/calendar.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/calendar.dst
new file mode 100644
index 000000000000..db3c6c13d8d0
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/calendar.dst
@@ -0,0 +1,441 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+-- Begin distribution definitions
+-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+------
+-- calendar
+-- value weight
+-- ===== ======
+-- 1 day number uniform, non-leap year
+-- 2 month name uniform, leap year
+-- 3 day of month sales liklihood (skewed)
+-- 4 season "" "" (leap year)
+-- 5 month number returns liklihood (skewed)
+-- 6 quarter "" "" (leap year)
+-- 7 first of month combined skew (low+medium_high)
+-- 8 is_holiday low
+-- 9 medium
+-- 10 high
+------
+create calendar;
+set types = (int, varchar, int, varchar, int, int, int, int);
+set weights = 10;
+set names = (day_seq, month_name, date, season, month_num, quarter, fom, holiday:uniform, uniform_leap, sales, sales_leap, returns, returns_leap, skewed, low, medium, high);
+add (1, "January", 1, "Winter", 1, 1, 1, 1:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (2, "January", 2, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (3, "January", 3, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (4, "January", 4, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (5, "January", 5, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (6, "January", 6, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (7, "January", 7, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (8, "January", 8, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (9, "January", 9, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (10, "January", 10, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (11, "January", 11, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (12, "January", 12, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (13, "January", 13, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (14, "January", 14, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (15, "January", 15, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (16, "January", 16, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (17, "January", 17, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (18, "January", 18, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (19, "January", 19, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (20, "January", 20, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (21, "January", 21, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (22, "January", 22, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (23, "January", 23, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (24, "January", 24, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (25, "January", 25, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (26, "January", 26, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (27, "January", 27, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (28, "January", 28, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (29, "January", 29, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (30, "January", 30, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (31, "January", 31, "Winter", 1, 1, 1, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (32, "February", 1, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (33, "February", 2, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (34, "February", 3, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (35, "February", 4, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (36, "February", 5, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (37, "February", 6, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (38, "February", 7, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (39, "February", 8, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (40, "February", 9, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (41, "February", 10, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (42, "February", 11, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (43, "February", 12, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (44, "February", 13, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (45, "February", 14, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (46, "February", 15, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (47, "February", 16, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (48, "February", 17, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (49, "February", 18, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (50, "February", 19, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (51, "February", 20, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (52, "February", 21, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (53, "February", 22, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (54, "February", 23, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (55, "February", 24, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (56, "February", 25, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (57, "February", 26, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (58, "February", 27, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (59, "February", 28, "Winter", 2, 1, 32, 0:1, 1, 29, 29, 100, 100, 29, 1, 0, 0);
+add (60, "February", 29, "Winter", 2, 1, 32, 0:0, 1, 0, 29, 0, 100, 0, 0, 0, 0);
+add (61, "March", 1, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (62, "March", 2, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (63, "March", 3, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (64, "March", 4, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (65, "March", 5, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (66, "March", 6, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (67, "March", 7, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (68, "March", 8, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (69, "March", 9, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (70, "March", 10, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (71, "March", 11, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (72, "March", 12, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (73, "March", 13, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (74, "March", 14, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (75, "March", 15, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (76, "March", 16, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (77, "March", 17, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (78, "March", 18, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (79, "March", 19, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (80, "March", 20, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (81, "March", 21, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (82, "March", 22, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (83, "March", 23, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (84, "March", 24, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (85, "March", 25, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (86, "March", 26, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (87, "March", 27, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (88, "March", 28, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (89, "March", 29, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (90, "March", 30, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (91, "March", 31, "Spring", 3, 1, 61, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (92, "April", 1, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (93, "April", 2, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (94, "April", 3, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (95, "April", 4, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (96, "April", 5, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (97, "April", 6, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (98, "April", 7, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (99, "April", 8, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (100, "April", 9, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (101, "April", 10, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (102, "April", 11, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (103, "April", 12, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (104, "April", 13, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (105, "April", 14, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (106, "April", 15, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (107, "April", 16, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (108, "April", 17, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (109, "April", 18, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (110, "April", 19, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (111, "April", 20, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (112, "April", 21, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (113, "April", 22, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (114, "April", 23, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (115, "April", 24, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (116, "April", 25, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (117, "April", 26, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (118, "April", 27, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (119, "April", 28, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (120, "April", 29, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (121, "April", 30, "Spring", 4, 2, 92, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (122, "May", 1, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (123, "May", 2, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (124, "May", 3, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (125, "May", 4, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (126, "May", 5, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (127, "May", 6, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (128, "May", 7, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (129, "May", 8, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (130, "May", 9, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (131, "May", 10, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (132, "May", 11, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (133, "May", 12, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (134, "May", 13, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (135, "May", 14, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (136, "May", 15, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (137, "May", 16, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (138, "May", 17, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (139, "May", 18, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (140, "May", 19, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (141, "May", 20, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (142, "May", 21, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (143, "May", 22, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (144, "May", 23, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (145, "May", 24, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (146, "May", 25, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (147, "May", 26, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (148, "May", 27, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (149, "May", 28, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (150, "May", 29, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (151, "May", 30, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (152, "May", 31, "Spring", 5, 2, 122, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (153, "June", 1, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (154, "June", 2, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (155, "June", 3, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (156, "June", 4, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (157, "June", 5, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (158, "June", 6, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (159, "June", 7, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (160, "June", 8, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (161, "June", 9, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (162, "June", 10, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (163, "June", 11, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (164, "June", 12, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (165, "June", 13, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (166, "June", 14, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (167, "June", 15, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (168, "June", 16, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (169, "June", 17, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (170, "June", 18, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (171, "June", 19, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (172, "June", 20, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (173, "June", 21, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (174, "June", 22, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (175, "June", 23, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (176, "June", 24, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (177, "June", 25, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (178, "June", 26, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (179, "June", 27, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (180, "June", 28, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (181, "June", 29, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (182, "June", 30, "Summer", 6, 2, 153, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (183, "July", 1, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (184, "July", 2, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (185, "July", 3, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (186, "July", 4, "Summer", 7, 3, 183, 1:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (187, "July", 5, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (188, "July", 6, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (189, "July", 7, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (190, "July", 8, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (191, "July", 9, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (192, "July", 10, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (193, "July", 11, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (194, "July", 12, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (195, "July", 13, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (196, "July", 14, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (197, "July", 15, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (198, "July", 16, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (199, "July", 17, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (200, "July", 18, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (201, "July", 19, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (202, "July", 20, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (203, "July", 21, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (204, "July", 22, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (205, "July", 23, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (206, "July", 24, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (207, "July", 25, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (208, "July", 26, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (209, "July", 27, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (210, "July", 28, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (211, "July", 29, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (212, "July", 30, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (213, "July", 31, "Summer", 7, 3, 183, 0:1, 1, 29, 29, 29, 29, 29, 1, 0, 0);
+add (214, "August", 1, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (215, "August", 2, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (216, "August", 3, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (217, "August", 4, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (218, "August", 5, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (219, "August", 6, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (220, "August", 7, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (221, "August", 8, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (222, "August", 9, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (223, "August", 10, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (224, "August", 11, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (225, "August", 12, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (226, "August", 13, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (227, "August", 14, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (228, "August", 15, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (229, "August", 16, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (230, "August", 17, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (231, "August", 18, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (232, "August", 19, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (233, "August", 20, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (234, "August", 21, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (235, "August", 22, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (236, "August", 23, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (237, "August", 24, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (238, "August", 25, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (239, "August", 26, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (240, "August", 27, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (241, "August", 28, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (242, "August", 29, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (243, "August", 30, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (244, "August", 31, "Summer", 8, 3, 214, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (245, "September", 1, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (246, "September", 2, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (247, "September", 3, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (248, "September", 4, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (249, "September", 5, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (250, "September", 6, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (251, "September", 7, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (252, "September", 8, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (253, "September", 9, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (254, "September", 10, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (255, "September", 11, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (256, "September", 12, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (257, "September", 13, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (258, "September", 14, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (259, "September", 15, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (260, "September", 16, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (261, "September", 17, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (262, "September", 18, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (263, "September", 19, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (264, "September", 20, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (265, "September", 21, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (266, "September", 22, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (267, "September", 23, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (268, "September", 24, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (269, "September", 25, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (270, "September", 26, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (271, "September", 27, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (272, "September", 28, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (273, "September", 29, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (274, "September", 30, "Fall", 9, 3, 245, 0:1, 1, 66, 66, 29, 29, 66, 0, 1, 0);
+add (275, "October", 1, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (276, "October", 2, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (277, "October", 3, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (278, "October", 4, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (279, "October", 5, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (280, "October", 6, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (281, "October", 7, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (282, "October", 8, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (283, "October", 9, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (284, "October", 10, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (285, "October", 11, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (286, "October", 12, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (287, "October", 13, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (288, "October", 14, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (289, "October", 15, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (290, "October", 16, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (291, "October", 17, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (292, "October", 18, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (293, "October", 19, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (294, "October", 20, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (295, "October", 21, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (296, "October", 22, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (297, "October", 23, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (298, "October", 24, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (299, "October", 25, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (300, "October", 26, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (301, "October", 27, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (302, "October", 28, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (303, "October", 29, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (304, "October", 30, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (305, "October", 31, "Fall", 10, 4, 275, 0: 1, 1, 66, 66, 66, 66, 66, 0, 1, 0);
+add (306, "November", 1, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (307, "November", 2, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (308, "November", 3, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (309, "November", 4, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (310, "November", 5, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (311, "November", 6, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (312, "November", 7, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (313, "November", 8, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (314, "November", 9, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (315, "November", 10, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (316, "November", 11, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (317, "November", 12, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (318, "November", 13, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (319, "November", 14, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (320, "November", 15, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (321, "November", 16, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (322, "November", 17, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (323, "November", 18, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (324, "November", 19, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (325, "November", 20, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (326, "November", 21, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (327, "November", 22, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (328, "November", 23, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (329, "November", 24, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (330, "November", 25, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (331, "November", 26, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (332, "November", 27, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (333, "November", 28, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (334, "November", 29, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (335, "November", 30, "Fall", 11, 4, 306, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (336, "December", 1, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (337, "December", 2, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (338, "December", 3, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (339, "December", 4, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (340, "December", 5, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (341, "December", 6, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (342, "December", 7, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (343, "December", 8, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (344, "December", 9, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (345, "December", 10, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (346, "December", 11, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (347, "December", 12, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (348, "December", 13, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (349, "December", 14, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (350, "December", 15, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (351, "December", 16, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (352, "December", 17, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (353, "December", 18, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (354, "December", 19, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (355, "December", 20, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (356, "December", 21, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (357, "December", 22, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (358, "December", 23, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (359, "December", 24, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (360, "December", 25, "Winter", 12, 4, 336, 1: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (361, "December", 26, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (362, "December", 27, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (363, "December", 28, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (364, "December", 29, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (365, "December", 30, "Winter", 12, 4, 336, 0: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+add (366, "December", 31, "Winter", 12, 4, 336, 1: 1, 1, 100, 100, 66, 66, 100, 0, 0, 1);
+
+------
+-- week_info
+-- values: ("name", is_weekday, is_weekend)
+-- weights: (uniform, skewed)
+------
+create week_info;
+set types = (varchar, int, int);
+set weights = 1;
+add ("Sunday", 0, 1: 1);
+add ("Monday", 1, 0: 1);
+add ("Tuesday", 1, 0: 1);
+add ("Wednesday", 1, 0: 1);
+add ("Thursday", 1, 0: 1);
+add ("Friday", 1, 0: 1);
+add ("Saturday", 0, 1: 1);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/checksum.c b/ydb/library/benchmarks/gen/tpcds-dbgen/checksum.c
new file mode 100644
index 000000000000..3c6020389621
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/checksum.c
@@ -0,0 +1,98 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#define _LARGEFILE64_SOURCE 1
+#define _FILE_OFFSET_BITS 64
+#include
+#include
+
+unsigned short GetCCITT (unsigned short crc, unsigned short ch)
+{
+ static unsigned int i;
+
+ ch <<= 8;
+ for (i=8; i>0; i--) {
+ if ((ch ^ crc) & 0X8000)
+ crc = (crc << 1 ) ^ 0x1021;
+ else
+ crc <<= 1;
+ ch <<= 1;
+ }
+ return (crc);
+}
+
+int main(int argc, char *argv[]) {
+ FILE *fin;
+ char *buffer;
+ size_t i, j;
+ long long int nLF=0, nCR=0, nChar=0, nDelim=0;
+ unsigned short crc=0;
+
+ if (argc < 2) {
+ fin = stdin;
+ } else {
+ if (( fin = fopen (argv[1], "rb")) == NULL ) {
+ fprintf (stderr, "Cannot open %s\n", argv[1]);
+ return (1);
+ }
+ }
+
+ if ((buffer = (char *)malloc(32766)) == NULL) {
+ fprintf (stderr, "Out of memory\n");
+ return (1);
+ }
+
+ for (;;) {
+ i = fread(buffer, 1, 32766, fin);
+ if (i == 0) {
+ if (feof (fin)) {
+ printf("CCITT CRC for %s is %04X; #LF/#CR is %lld/%lld; #Delim is %lld; #Chars is %lld\n",
+ argv[1], crc, nLF, nCR, nDelim, nChar);
+ return (0);
+ }
+ else
+ continue;
+ }
+ for (j=0; j
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/cities.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/cities.dst
new file mode 100644
index 000000000000..3fef27b87792
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/cities.dst
@@ -0,0 +1,1057 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+--
+--
+------
+-- cities.dst
+-- the 1000 most common place names, from the USGS list of populated places
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. city name 1. skewed from USGS (usgs)
+-- 2. uniform (uniform)
+-- 3. large cities (large)
+-- 4. medium step (medium)
+-- 5. small cities (small)
+-- 6. unified step function
+------
+create cities;
+set types = (varchar);
+set weights = 6;
+set names = (name:usgs, uniform, large, medium, small, unified);
+add ("Midway":212, 1, 1, 0, 0, 600);
+add ("Fairview":199, 1, 1, 0, 0, 600);
+add ("Oak Grove":160, 1, 1, 0, 0, 600);
+add ("Five Points":147, 1, 1, 0, 0, 600);
+add ("Pleasant Hill":119, 1, 1, 0, 0, 600);
+add ("Riverside":117, 1, 1, 0, 0, 600);
+add ("Mount Pleasant":116, 1, 1, 0, 0, 600);
+add ("Centerville":108, 1, 1, 0, 0, 600);
+add ("Bethel":108, 1, 1, 0, 0, 600);
+add ("New Hope":105, 1, 1, 0, 0, 600);
+add ("Liberty":98, 1, 1, 0, 0, 600);
+add ("Union":94, 1, 1, 0, 0, 600);
+add ("Pleasant Valley":90, 1, 1, 0, 0, 600);
+add ("Oakland":87, 1, 1, 0, 0, 600);
+add ("Salem":86, 1, 1, 0, 0, 600);
+add ("Pleasant Grove":86, 1, 1, 0, 0, 600);
+add ("Greenwood":85, 1, 1, 0, 0, 600);
+add ("Shady Grove":84, 1, 1, 0, 0, 600);
+add ("Pine Grove":82, 1, 1, 0, 0, 600);
+add ("Shiloh":78, 1, 1, 0, 0, 600);
+add ("Oak Hill":77, 1, 1, 0, 0, 600);
+add ("Concord":74, 1, 1, 0, 0, 600);
+add ("Georgetown":73, 1, 1, 0, 0, 600);
+add ("Cedar Grove":73, 1, 1, 0, 0, 600);
+add ("Lakeview":72, 1, 1, 0, 0, 600);
+add ("Antioch":71, 1, 1, 0, 0, 600);
+add ("Glendale":70, 1, 1, 0, 0, 600);
+add ("Hopewell":67, 1, 1, 0, 0, 600);
+add ("Friendship":67, 1, 1, 0, 0, 600);
+add ("Sunnyside":66, 1, 1, 0, 0, 600);
+add ("Spring Hill":65, 1, 1, 0, 0, 600);
+add ("Lakewood":65, 1, 1, 0, 0, 600);
+add ("Springfield":64, 1, 1, 0, 0, 600);
+add ("Stringtown":62, 1, 1, 0, 0, 600);
+add ("Harmony":62, 1, 1, 0, 0, 600);
+add ("Riverview":60, 1, 1, 0, 0, 600);
+add ("Buena Vista":60, 1, 1, 0, 0, 600);
+add ("Highland":59, 1, 1, 0, 0, 600);
+add ("Highland Park":58, 1, 1, 0, 0, 600);
+add ("Franklin":58, 1, 1, 0, 0, 600);
+add ("Woodlawn":56, 1, 1, 0, 0, 600);
+add ("Mount Vernon":56, 1, 1, 0, 0, 600);
+add ("Lakeside":56, 1, 1, 0, 0, 600);
+add ("Glenwood":55, 1, 1, 0, 0, 600);
+add ("Fairfield":55, 1, 1, 0, 0, 600);
+add ("Oakdale":54, 1, 1, 0, 0, 600);
+add ("Spring Valley":53, 1, 1, 0, 0, 600);
+add ("Walnut Grove":52, 1, 1, 0, 0, 600);
+add ("Providence":52, 1, 1, 0, 0, 600);
+add ("Mount Zion":52, 1, 1, 0, 0, 600);
+add ("Greenville":52, 1, 1, 0, 0, 600);
+add ("Mount Olive":51, 1, 1, 0, 0, 600);
+add ("Wildwood":50, 1, 1, 0, 0, 600);
+add ("Hillcrest":50, 1, 1, 0, 0, 600);
+add ("Crossroads":50, 1, 1, 0, 0, 600);
+add ("Belmont":50, 1, 1, 0, 0, 600);
+add ("Wilson":49, 1, 1, 0, 0, 600);
+add ("Riverdale":49, 1, 1, 0, 0, 600);
+add ("Newport":49, 1, 1, 0, 0, 600);
+add ("Springdale":48, 1, 1, 0, 0, 600);
+add ("Mountain View":48, 1, 1, 0, 0, 600);
+add ("Forest Hills":48, 1, 1, 0, 0, 600);
+add ("Bridgeport":48, 1, 1, 0, 0, 600);
+add ("White Oak":47, 1, 1, 0, 0, 600);
+add ("Oakwood":47, 1, 1, 0, 0, 600);
+add ("Newtown":47, 1, 1, 0, 0, 600);
+add ("Macedonia":47, 1, 1, 0, 0, 600);
+add ("Five Forks":47, 1, 1, 0, 0, 600);
+add ("Edgewood":47, 1, 1, 0, 0, 600);
+add ("Arlington":47, 1, 1, 0, 0, 600);
+add ("Unionville":46, 1, 1, 0, 0, 600);
+add ("Red Hill":46, 1, 1, 0, 0, 600);
+add ("Clinton":46, 1, 1, 0, 0, 600);
+add ("Woodville":45, 1, 1, 0, 0, 600);
+add ("Summit":45, 1, 1, 0, 0, 600);
+add ("Jamestown":45, 1, 1, 0, 0, 600);
+add ("Hamilton":45, 1, 1, 0, 0, 600);
+add ("Clifton":45, 1, 1, 0, 0, 600);
+add ("Union Hill":44, 1, 1, 0, 0, 600);
+add ("Sulphur Springs":44, 1, 1, 0, 0, 600);
+add ("Lincoln":44, 1, 1, 0, 0, 600);
+add ("Lebanon":44, 1, 1, 0, 0, 600);
+add ("Farmington":44, 1, 1, 0, 0, 600);
+add ("Enterprise":43, 1, 1, 0, 0, 600);
+add ("Brownsville":43, 1, 1, 0, 0, 600);
+add ("Ashland":43, 1, 1, 0, 0, 600);
+add ("Woodland":42, 1, 1, 0, 0, 600);
+add ("Waterloo":42, 1, 1, 0, 0, 600);
+add ("Valley View":42, 1, 1, 0, 0, 600);
+add ("Oak Ridge":42, 1, 1, 0, 0, 600);
+add ("Maple Grove":42, 1, 1, 0, 0, 600);
+add ("Kingston":42, 1, 1, 0, 0, 600);
+add ("Jackson":42, 1, 1, 0, 0, 600);
+add ("Greenfield":42, 1, 1, 0, 0, 600);
+add ("Green Acres":42, 1, 1, 0, 0, 600);
+add ("Plainview":41, 1, 1, 0, 0, 600);
+add ("Marion":41, 1, 1, 0, 0, 600);
+add ("Florence":41, 1, 1, 0, 0, 600);
+add ("Deerfield":41, 1, 1, 0, 0, 600);
+add ("Bunker Hill":41, 1, 1, 0, 0, 600);
+add ("Smithville":40, 1, 0, 0, 1, 1);
+add ("Rockville":40, 1, 0, 0, 1, 1);
+add ("Melrose":40, 1, 0, 0, 1, 1);
+add ("Magnolia":40, 1, 0, 0, 1, 1);
+add ("Jefferson":40, 1, 0, 0, 1, 1);
+add ("Jacksonville":40, 1, 0, 0, 1, 1);
+add ("Hebron":40, 1, 0, 0, 1, 1);
+add ("Avondale":40, 1, 0, 0, 1, 1);
+add ("Petersburg":39, 1, 0, 0, 1, 1);
+add ("Needmore":39, 1, 0, 0, 1, 1);
+add ("Mount Carmel":39, 1, 0, 0, 1, 1);
+add ("Eureka":39, 1, 0, 0, 1, 1);
+add ("Eden":39, 1, 0, 0, 1, 1);
+add ("Dover":39, 1, 0, 0, 1, 1);
+add ("Corinth":39, 1, 0, 0, 1, 1);
+add ("Buffalo":39, 1, 0, 0, 1, 1);
+add ("Rosedale":38, 1, 0, 0, 1, 1);
+add ("Pleasant View":38, 1, 0, 0, 1, 1);
+add ("Milton":38, 1, 0, 0, 1, 1);
+add ("Independence":38, 1, 0, 0, 1, 1);
+add ("Grandview":38, 1, 0, 0, 1, 1);
+add ("Four Corners":38, 1, 0, 0, 1, 1);
+add ("Cloverdale":38, 1, 0, 0, 1, 1);
+add ("Westwood":37, 1, 0, 0, 1, 1);
+add ("Vernon":37, 1, 0, 0, 1, 1);
+add ("Sharon":37, 1, 0, 0, 1, 1);
+add ("Richland":37, 1, 0, 0, 1, 1);
+add ("Beulah":37, 1, 0, 0, 1, 1);
+add ("Williamsburg":36, 1, 0, 0, 1, 1);
+add ("Hollywood":36, 1, 0, 0, 1, 1);
+add ("Hillsdale":36, 1, 0, 0, 1, 1);
+add ("Ebenezer":36, 1, 0, 0, 1, 1);
+add ("Cross Roads":36, 1, 0, 0, 1, 1);
+add ("Winchester":35, 1, 0, 0, 1, 1);
+add ("Washington":35, 1, 0, 0, 1, 1);
+add ("Troy":35, 1, 0, 0, 1, 1);
+add ("Prospect":35, 1, 0, 0, 1, 1);
+add ("Oxford":35, 1, 0, 0, 1, 1);
+add ("Norwood":35, 1, 0, 0, 1, 1);
+add ("Mill Creek":35, 1, 0, 0, 1, 1);
+add ("Middletown":35, 1, 0, 0, 1, 1);
+add ("Jericho":35, 1, 0, 0, 1, 1);
+add ("Forest Hills":35, 1, 0, 0, 1, 1);
+add ("Columbia":35, 1, 0, 0, 1, 1);
+add ("Bethlehem":35, 1, 0, 0, 1, 1);
+add ("Anderson":35, 1, 0, 0, 1, 1);
+add ("Waverly":34, 1, 0, 0, 1, 1);
+add ("Watson":34, 1, 0, 0, 1, 1);
+add ("Rose Hill":34, 1, 0, 0, 1, 1);
+add ("Pine Hill":34, 1, 0, 0, 1, 1);
+add ("Monroe":34, 1, 0, 0, 1, 1);
+add ("Milltown":34, 1, 0, 0, 1, 1);
+add ("Manchester":34, 1, 0, 0, 1, 1);
+add ("Hilltop":34, 1, 0, 0, 1, 1);
+add ("Harrisburg":34, 1, 0, 0, 1, 1);
+add ("Dixie":34, 1, 0, 0, 1, 1);
+add ("Bellevue":34, 1, 0, 0, 1, 1);
+add ("Smyrna":33, 1, 0, 0, 1, 1);
+add ("Sherwood Forest":33, 1, 0, 0, 1, 1);
+add ("Pleasant Ridge":33, 1, 0, 0, 1, 1);
+add ("Forest Park":33, 1, 0, 0, 1, 1);
+add ("Dayton":33, 1, 0, 0, 1, 1);
+add ("Clayton":33, 1, 0, 0, 1, 1);
+add ("Chester":33, 1, 0, 0, 1, 1);
+add ("Webster":32, 1, 0, 0, 1, 1);
+add ("Warren":32, 1, 0, 0, 1, 1);
+add ("Somerset":32, 1, 0, 0, 1, 1);
+add ("Richmond":32, 1, 0, 0, 1, 1);
+add ("Milford":32, 1, 0, 0, 1, 1);
+add ("Johnson":32, 1, 0, 0, 1, 1);
+add ("Evergreen":32, 1, 0, 0, 1, 1);
+add ("Elmwood":32, 1, 0, 0, 1, 1);
+add ("Bloomfield":32, 1, 0, 0, 1, 1);
+add ("Bethany":32, 1, 0, 0, 1, 1);
+add ("Auburn":32, 1, 0, 0, 1, 1);
+add ("Williams":31, 1, 0, 0, 1, 1);
+add ("Walker":31, 1, 0, 0, 1, 1);
+add ("Rosemont":31, 1, 0, 0, 1, 1);
+add ("Millville":31, 1, 0, 0, 1, 1);
+add ("Mechanicsville":31, 1, 0, 0, 1, 1);
+add ("Liberty Hill":31, 1, 0, 0, 1, 1);
+add ("Huntington":31, 1, 0, 0, 1, 1);
+add ("Hillsboro":31, 1, 0, 0, 1, 1);
+add ("Hickory Grove":31, 1, 0, 0, 1, 1);
+add ("Germantown":31, 1, 0, 0, 1, 1);
+add ("Flat Rock":31, 1, 0, 0, 1, 1);
+add ("Douglas":31, 1, 0, 0, 1, 1);
+add ("Cleveland":31, 1, 0, 0, 1, 1);
+add ("Central":31, 1, 0, 0, 1, 1);
+add ("Brooklyn":31, 1, 0, 0, 1, 1);
+add ("Brighton":31, 1, 0, 0, 1, 1);
+add ("Alpine":31, 1, 0, 0, 1, 1);
+add ("Weston":30, 1, 0, 0, 1, 1);
+add ("Taylor":30, 1, 0, 0, 1, 1);
+add ("Sherwood Forest":30, 1, 0, 0, 1, 1);
+add ("Rockdale":30, 1, 0, 0, 1, 1);
+add ("Princeton":30, 1, 0, 0, 1, 1);
+add ("Preston":30, 1, 0, 0, 1, 1);
+add ("Nelson":30, 1, 0, 0, 1, 1);
+add ("Martin":30, 1, 0, 0, 1, 1);
+add ("Madison":30, 1, 0, 0, 1, 1);
+add ("Logan":30, 1, 0, 0, 1, 1);
+add ("Linwood":30, 1, 0, 0, 1, 1);
+add ("Hope":30, 1, 0, 0, 1, 1);
+add ("Holland":30, 1, 0, 0, 1, 1);
+add ("High Point":30, 1, 0, 0, 1, 1);
+add ("Goshen":30, 1, 0, 0, 1, 1);
+add ("Danville":30, 1, 0, 0, 1, 1);
+add ("Burlington":30, 1, 0, 0, 1, 1);
+add ("Wallace":29, 1, 0, 0, 1, 1);
+add ("Rock Creek":29, 1, 0, 0, 1, 1);
+add ("Oak Park":29, 1, 0, 0, 1, 1);
+add ("Meadowbrook":29, 1, 0, 0, 1, 1);
+add ("Locust Grove":29, 1, 0, 0, 1, 1);
+add ("Lexington":29, 1, 0, 0, 1, 1);
+add ("Howard":29, 1, 0, 0, 1, 1);
+add ("Henderson":29, 1, 0, 0, 1, 1);
+add ("Hanover":29, 1, 0, 0, 1, 1);
+add ("Hampton":29, 1, 0, 0, 1, 1);
+add ("Hamburg":29, 1, 0, 0, 1, 1);
+add ("Five Corners":29, 1, 0, 0, 1, 1);
+add ("Fairmount":29, 1, 0, 0, 1, 1);
+add ("Chapel Hill":29, 1, 0, 0, 1, 1);
+add ("Canton":29, 1, 0, 0, 1, 1);
+add ("Campbell":29, 1, 0, 0, 1, 1);
+add ("Berlin":29, 1, 0, 0, 1, 1);
+add ("Baker":29, 1, 0, 0, 1, 1);
+add ("Avon":29, 1, 0, 0, 1, 1);
+add ("Arcadia":29, 1, 0, 0, 1, 1);
+add ("Windsor":28, 1, 0, 0, 1, 1);
+add ("Westfield":28, 1, 0, 0, 1, 1);
+add ("Sardis":28, 1, 0, 0, 1, 1);
+add ("Russellville":28, 1, 0, 0, 1, 1);
+add ("Rogers":28, 1, 0, 0, 1, 1);
+add ("Rock Springs":28, 1, 0, 0, 1, 1);
+add ("Riverton":28, 1, 0, 0, 1, 1);
+add ("Randolph":28, 1, 0, 0, 1, 1);
+add ("Plymouth":28, 1, 0, 0, 1, 1);
+add ("Piney Grove":28, 1, 0, 0, 1, 1);
+add ("Pinehurst":28, 1, 0, 0, 1, 1);
+add ("Mount Hope":28, 1, 0, 0, 1, 1);
+add ("Montrose":28, 1, 0, 0, 1, 1);
+add ("Miller":28, 1, 0, 0, 1, 1);
+add ("Marshall":28, 1, 0, 0, 1, 1);
+add ("Lowell":28, 1, 0, 0, 1, 1);
+add ("Keystone":28, 1, 0, 0, 1, 1);
+add ("Indian Hills":28, 1, 0, 0, 1, 1);
+add ("Hudson":28, 1, 0, 0, 1, 1);
+add ("Geneva":28, 1, 0, 0, 1, 1);
+add ("Englewood":28, 1, 0, 0, 1, 1);
+add ("Cottonwood":28, 1, 0, 0, 1, 1);
+add ("Clyde":28, 1, 0, 0, 1, 1);
+add ("Cedar Hill":28, 1, 0, 0, 1, 1);
+add ("Bristol":28, 1, 0, 0, 1, 1);
+add ("Beechwood":28, 1, 0, 0, 1, 1);
+add ("Aurora":28, 1, 0, 0, 1, 1);
+add ("West Point":27, 1, 0, 0, 1, 1);
+add ("Trenton":27, 1, 0, 0, 1, 1);
+add ("Sunset":27, 1, 0, 0, 1, 1);
+add ("Sunrise":27, 1, 0, 0, 1, 1);
+add ("Spring Creek":27, 1, 0, 0, 1, 1);
+add ("Rolling Hills":27, 1, 0, 0, 1, 1);
+add ("Portland":27, 1, 0, 0, 1, 1);
+add ("Pine Ridge":27, 1, 0, 0, 1, 1);
+add ("Paradise":27, 1, 0, 0, 1, 1);
+add ("Monticello":27, 1, 0, 0, 1, 1);
+add ("Monterey":27, 1, 0, 0, 1, 1);
+add ("Mitchell":27, 1, 0, 0, 1, 1);
+add ("Midland":27, 1, 0, 0, 1, 1);
+add ("Jordan":27, 1, 0, 0, 1, 1);
+add ("Green Valley":27, 1, 0, 0, 1, 1);
+add ("Garfield":27, 1, 0, 0, 1, 1);
+add ("Garden City":27, 1, 0, 0, 1, 1);
+add ("Cold Spring":27, 1, 0, 0, 1, 1);
+add ("Clarksville":27, 1, 0, 0, 1, 1);
+add ("Cameron":27, 1, 0, 0, 1, 1);
+add ("Cambridge":27, 1, 0, 0, 1, 1);
+add ("Asbury":27, 1, 0, 0, 1, 1);
+add ("Adams":27, 1, 0, 0, 1, 1);
+add ("York":26, 1, 0, 0, 1, 1);
+add ("White Rock":26, 1, 0, 0, 1, 1);
+add ("Wakefield":26, 1, 0, 0, 1, 1);
+add ("Victoria":26, 1, 0, 0, 1, 1);
+add ("Unity":26, 1, 0, 0, 1, 1);
+add ("Twin Lakes":26, 1, 0, 0, 1, 1);
+add ("Three Forks":26, 1, 0, 0, 1, 1);
+add ("Sycamore":26, 1, 0, 0, 1, 1);
+add ("Springville":26, 1, 0, 0, 1, 1);
+add ("Russell":26, 1, 0, 0, 1, 1);
+add ("Ridgeway":26, 1, 0, 0, 1, 1);
+add ("Pisgah":26, 1, 0, 0, 1, 1);
+add ("Morgan":26, 1, 0, 0, 1, 1);
+add ("Mayfield":26, 1, 0, 0, 1, 1);
+add ("Maplewood":26, 1, 0, 0, 1, 1);
+add ("Longview":26, 1, 0, 0, 1, 1);
+add ("Linden":26, 1, 0, 0, 1, 1);
+add ("Lancaster":26, 1, 0, 0, 1, 1);
+add ("Harris":26, 1, 0, 0, 1, 1);
+add ("Good Hope":26, 1, 0, 0, 1, 1);
+add ("Gibson":26, 1, 0, 0, 1, 1);
+add ("Fulton":26, 1, 0, 0, 1, 1);
+add ("Deer Park":26, 1, 0, 0, 1, 1);
+add ("Charleston":26, 1, 0, 0, 1, 1);
+add ("Center":26, 1, 0, 0, 1, 1);
+add ("Canaan":26, 1, 0, 0, 1, 1);
+add ("Boston":26, 1, 0, 0, 1, 1);
+add ("Beverly Hills":26, 1, 0, 0, 1, 1);
+add ("Benton":26, 1, 0, 0, 1, 1);
+add ("Woodstock":25, 1, 0, 0, 1, 1);
+add ("White City":25, 1, 0, 0, 1, 1);
+add ("Westville":25, 1, 0, 0, 1, 1);
+add ("Waterford":25, 1, 0, 0, 1, 1);
+add ("Walnut Hill":25, 1, 0, 0, 1, 1);
+add ("Verona":25, 1, 0, 0, 1, 1);
+add ("Turner":25, 1, 0, 0, 1, 1);
+add ("Sterling":25, 1, 0, 0, 1, 1);
+add ("Sheridan":25, 1, 0, 0, 1, 1);
+add ("Sand Hill":25, 1, 0, 0, 1, 1);
+add ("Pumpkin Center":25, 1, 0, 0, 1, 1);
+add ("Powell":25, 1, 0, 0, 1, 1);
+add ("Poplar Grove":25, 1, 0, 0, 1, 1);
+add ("Perry":25, 1, 0, 0, 1, 1);
+add ("Parker":25, 1, 0, 0, 1, 1);
+add ("Old Town":25, 1, 0, 0, 1, 1);
+add ("Oakley":25, 1, 0, 0, 1, 1);
+add ("Newton":25, 1, 0, 0, 1, 1);
+add ("New Salem":25, 1, 0, 0, 1, 1);
+add ("Nashville":25, 1, 0, 0, 1, 1);
+add ("Lyons":25, 1, 0, 0, 1, 1);
+add ("Lone Star":25, 1, 0, 0, 1, 1);
+add ("Klondike":25, 1, 0, 0, 1, 1);
+add ("Johnstown":25, 1, 0, 0, 1, 1);
+add ("Holly Springs":25, 1, 0, 0, 1, 1);
+add ("Harrison":25, 1, 0, 0, 1, 1);
+add ("Garland":25, 1, 0, 0, 1, 1);
+add ("Foster":25, 1, 0, 0, 1, 1);
+add ("Egypt":25, 1, 0, 0, 1, 1);
+add ("Davis":25, 1, 0, 0, 1, 1);
+add ("Chestnut Hill":25, 1, 0, 0, 1, 1);
+add ("Camden":25, 1, 0, 0, 1, 1);
+add ("Buckeye":25, 1, 0, 0, 1, 1);
+add ("Brookside":25, 1, 0, 0, 1, 1);
+add ("Brentwood":25, 1, 0, 0, 1, 1);
+add ("Austin":25, 1, 0, 0, 1, 1);
+add ("Allen":25, 1, 0, 0, 1, 1);
+add ("Woodside":24, 1, 0, 0, 1, 1);
+add ("Stony Point":24, 1, 0, 0, 1, 1);
+add ("Stanley":24, 1, 0, 0, 1, 1);
+add ("Simpson":24, 1, 0, 0, 1, 1);
+add ("Silver Lake":24, 1, 0, 0, 1, 1);
+add ("Saint Paul":24, 1, 0, 0, 1, 1);
+add ("Rome":24, 1, 0, 0, 1, 1);
+add ("Rockland":24, 1, 0, 0, 1, 1);
+add ("Ridgewood":24, 1, 0, 0, 1, 1);
+add ("Raymond":24, 1, 0, 0, 1, 1);
+add ("Piedmont":24, 1, 0, 0, 1, 1);
+add ("Paris":24, 1, 0, 0, 1, 1);
+add ("Palmyra":24, 1, 0, 0, 1, 1);
+add ("Orange":24, 1, 0, 0, 1, 1);
+add ("Oakville":24, 1, 0, 0, 1, 1);
+add ("Montgomery":24, 1, 0, 0, 1, 1);
+add ("Lincoln Park":24, 1, 0, 0, 1, 1);
+add ("Laurel":24, 1, 0, 0, 1, 1);
+add ("Lake City":24, 1, 0, 0, 1, 1);
+add ("Kenwood":24, 1, 0, 0, 1, 1);
+add ("Jonesville":24, 1, 0, 0, 1, 1);
+add ("Huntsville":24, 1, 0, 0, 1, 1);
+add ("Hickory Hill":24, 1, 0, 0, 1, 1);
+add ("Grant":24, 1, 0, 0, 1, 1);
+add ("Fernwood":24, 1, 0, 0, 1, 1);
+add ("Enon":24, 1, 0, 0, 1, 1);
+add ("Columbus":24, 1, 0, 0, 1, 1);
+add ("Carlisle":24, 1, 0, 0, 1, 1);
+add ("Brookfield":24, 1, 0, 0, 1, 1);
+add ("Bradford":24, 1, 0, 0, 1, 1);
+add ("Boyd":24, 1, 0, 0, 1, 1);
+add ("Baldwin":24, 1, 0, 0, 1, 1);
+add ("Alton":24, 1, 0, 0, 1, 1);
+add ("Allendale":24, 1, 0, 0, 1, 1);
+add ("Whitehall":23, 1, 0, 0, 1, 1);
+add ("Westwood":23, 1, 0, 0, 1, 1);
+add ("Wayne":23, 1, 0, 0, 1, 1);
+add ("Utica":23, 1, 0, 0, 1, 1);
+add ("Union Grove":23, 1, 0, 0, 1, 1);
+add ("Thornton":23, 1, 0, 0, 1, 1);
+add ("Shirley":23, 1, 0, 0, 1, 1);
+add ("Robinson":23, 1, 0, 0, 1, 1);
+add ("Patterson":23, 1, 0, 0, 1, 1);
+add ("Palestine":23, 1, 0, 0, 1, 1);
+add ("Norton":23, 1, 0, 0, 1, 1);
+add ("Northwood":23, 1, 0, 0, 1, 1);
+add ("New Haven":23, 1, 0, 0, 1, 1);
+add ("Moscow":23, 1, 0, 0, 1, 1);
+add ("Lakeland":23, 1, 0, 0, 1, 1);
+add ("Indian Springs":23, 1, 0, 0, 1, 1);
+add ("Hillside":23, 1, 0, 0, 1, 1);
+add ("Helena":23, 1, 0, 0, 1, 1);
+add ("Harrisville":23, 1, 0, 0, 1, 1);
+add ("Green Acres":23, 1, 0, 0, 1, 1);
+add ("Fairfax":23, 1, 0, 0, 1, 1);
+add ("Ellis":23, 1, 0, 0, 1, 1);
+add ("Easton":23, 1, 0, 0, 1, 1);
+add ("Durham":23, 1, 0, 0, 1, 1);
+add ("Diamond":23, 1, 0, 0, 1, 1);
+add ("Dale":23, 1, 0, 0, 1, 1);
+add ("Cuba":23, 1, 0, 0, 1, 1);
+add ("Cooper":23, 1, 0, 0, 1, 1);
+add ("Cold Springs":23, 1, 0, 0, 1, 1);
+add ("Cherry Hill":23, 1, 0, 0, 1, 1);
+add ("Center Point":23, 1, 0, 0, 1, 1);
+add ("Cairo":23, 1, 0, 0, 1, 1);
+add ("Butler":23, 1, 0, 0, 1, 1);
+add ("Buckhorn":23, 1, 0, 0, 1, 1);
+add ("Beech Grove":23, 1, 0, 0, 1, 1);
+add ("Augusta":23, 1, 0, 0, 1, 1);
+add ("Athens":23, 1, 0, 0, 1, 1);
+add ("Albion":23, 1, 0, 0, 1, 1);
+add ("Winona":22, 1, 0, 0, 1, 1);
+add ("Willard":22, 1, 0, 0, 1, 1);
+add ("Westport":22, 1, 0, 0, 1, 1);
+add ("West End":22, 1, 0, 0, 1, 1);
+add ("Wellington":22, 1, 0, 0, 1, 1);
+add ("Ward":22, 1, 0, 0, 1, 1);
+add ("Victor":22, 1, 0, 0, 1, 1);
+add ("Sunset Beach":22, 1, 0, 0, 1, 1);
+add ("Stanton":22, 1, 0, 0, 1, 1);
+add ("Spencer":22, 1, 0, 0, 1, 1);
+add ("Smithfield":22, 1, 0, 0, 1, 1);
+add ("Slabtown":22, 1, 0, 0, 1, 1);
+add ("Sidney":22, 1, 0, 0, 1, 1);
+add ("Sherwood":22, 1, 0, 0, 1, 1);
+add ("Rock Hill":22, 1, 0, 0, 1, 1);
+add ("Ramsey":22, 1, 0, 0, 1, 1);
+add ("Porter":22, 1, 0, 0, 1, 1);
+add ("Poplar Springs":22, 1, 0, 0, 1, 1);
+add ("Perryville":22, 1, 0, 0, 1, 1);
+add ("Palmer":22, 1, 0, 0, 1, 1);
+add ("Newburg":22, 1, 0, 0, 1, 1);
+add ("Middleton":22, 1, 0, 0, 1, 1);
+add ("Mapleton":22, 1, 0, 0, 1, 1);
+add ("Lawrence":22, 1, 0, 0, 1, 1);
+add ("Lafayette":22, 1, 0, 0, 1, 1);
+add ("Jonestown":22, 1, 0, 0, 1, 1);
+add ("Jimtown":22, 1, 0, 0, 1, 1);
+add ("Hunter":22, 1, 0, 0, 1, 1);
+add ("Houston":22, 1, 0, 0, 1, 1);
+add ("Happy Valley":22, 1, 0, 0, 1, 1);
+add ("Hammond":22, 1, 0, 0, 1, 1);
+add ("Green Hill":22, 1, 0, 0, 1, 1);
+add ("Gordon":22, 1, 0, 0, 1, 1);
+add ("Glencoe":22, 1, 0, 0, 1, 1);
+add ("Elgin":22, 1, 0, 0, 1, 1);
+add ("Dundee":22, 1, 0, 0, 1, 1);
+add ("Duncan":22, 1, 0, 0, 1, 1);
+add ("Delta":22, 1, 0, 0, 1, 1);
+add ("Dalton":22, 1, 0, 0, 1, 1);
+add ("Crawford":22, 1, 0, 0, 1, 1);
+add ("Country Club Estates":22, 1, 0, 0, 1, 1);
+add ("Cedar Springs":22, 1, 0, 0, 1, 1);
+add ("Briarwood":22, 1, 0, 0, 1, 1);
+add ("Bradley":22, 1, 0, 0, 1, 1);
+add ("Bloomington":22, 1, 0, 0, 1, 1);
+add ("Arnold":22, 1, 0, 0, 1, 1);
+add ("Albany":22, 1, 0, 0, 1, 1);
+add ("Adamsville":22, 1, 0, 0, 1, 1);
+add ("Zion":21, 1, 0, 0, 1, 1);
+add ("Westover":21, 1, 0, 0, 1, 1);
+add ("Waterville":21, 1, 0, 0, 1, 1);
+add ("Upton":21, 1, 0, 0, 1, 1);
+add ("Trinity":21, 1, 0, 0, 1, 1);
+add ("Thompson":21, 1, 0, 0, 1, 1);
+add ("Thomas":21, 1, 0, 0, 1, 1);
+add ("Tanglewood":21, 1, 0, 0, 1, 1);
+add ("Sunshine":21, 1, 0, 0, 1, 1);
+add ("Sugar Grove":21, 1, 0, 0, 1, 1);
+add ("Stockton":21, 1, 0, 0, 1, 1);
+add ("Snow Hill":21, 1, 0, 0, 1, 1);
+add ("Sherman":21, 1, 0, 0, 1, 1);
+add ("Scotland":21, 1, 0, 0, 1, 1);
+add ("Roseville":21, 1, 0, 0, 1, 1);
+add ("Roosevelt":21, 1, 0, 0, 1, 1);
+add ("Rockport":21, 1, 0, 0, 1, 1);
+add ("Rochester":21, 1, 0, 0, 1, 1);
+add ("Plainfield":21, 1, 0, 0, 1, 1);
+add ("Osceola":21, 1, 0, 0, 1, 1);
+add ("Mulberry":21, 1, 0, 0, 1, 1);
+add ("Millwood":21, 1, 0, 0, 1, 1);
+add ("McDonald":21, 1, 0, 0, 1, 1);
+add ("Maysville":21, 1, 0, 0, 1, 1);
+add ("Mason":21, 1, 0, 0, 1, 1);
+add ("Marysville":21, 1, 0, 0, 1, 1);
+add ("Mansfield":21, 1, 0, 0, 1, 1);
+add ("Lodi":21, 1, 0, 0, 1, 1);
+add ("Livingston":21, 1, 0, 0, 1, 1);
+add ("Kirkwood":21, 1, 0, 0, 1, 1);
+add ("Kent":21, 1, 0, 0, 1, 1);
+add ("Ingleside":21, 1, 0, 0, 1, 1);
+add ("Hyde Park":21, 1, 0, 0, 1, 1);
+add ("Homer":21, 1, 0, 0, 1, 1);
+add ("Hickory Hills":21, 1, 0, 0, 1, 1);
+add ("Hawthorne":21, 1, 0, 0, 1, 1);
+add ("Hartford":21, 1, 0, 0, 1, 1);
+add ("Fredonia":21, 1, 0, 0, 1, 1);
+add ("Evansville":21, 1, 0, 0, 1, 1);
+add ("Etna":21, 1, 0, 0, 1, 1);
+add ("Edgemont":21, 1, 0, 0, 1, 1);
+add ("Dexter":21, 1, 0, 0, 1, 1);
+add ("Crestwood":21, 1, 0, 0, 1, 1);
+add ("Crescent":21, 1, 0, 0, 1, 1);
+add ("Covington":21, 1, 0, 0, 1, 1);
+add ("Country Club Estates":21, 1, 0, 0, 1, 1);
+add ("Coleman":21, 1, 0, 0, 1, 1);
+add ("Chelsea":21, 1, 0, 0, 1, 1);
+add ("Chapman":21, 1, 0, 0, 1, 1);
+add ("Cedarville":21, 1, 0, 0, 1, 1);
+add ("Burton":21, 1, 0, 0, 1, 1);
+add ("Bryant":21, 1, 0, 0, 1, 1);
+add ("Browntown":21, 1, 0, 0, 1, 1);
+add ("Beverly":21, 1, 0, 0, 1, 1);
+add ("Beaver":21, 1, 0, 0, 1, 1);
+add ("Baxter":21, 1, 0, 0, 1, 1);
+add ("Barton":21, 1, 0, 0, 1, 1);
+add ("Ashton":21, 1, 0, 0, 1, 1);
+add ("Armstrong":21, 1, 0, 0, 1, 1);
+add ("Afton":21, 1, 0, 0, 1, 1);
+add ("Warsaw":20, 1, 0, 0, 1, 1);
+add ("Viola":20, 1, 0, 0, 1, 1);
+add ("Uniontown":20, 1, 0, 0, 1, 1);
+add ("Twin Oaks":20, 1, 0, 0, 1, 1);
+add ("Sweetwater":20, 1, 0, 0, 1, 1);
+add ("Stonewall":20, 1, 0, 0, 1, 1);
+add ("Spring Lake":20, 1, 0, 0, 1, 1);
+add ("Sparta":20, 1, 0, 0, 1, 1);
+add ("Ruby":20, 1, 0, 0, 1, 1);
+add ("Roseland":20, 1, 0, 0, 1, 1);
+add ("Pleasantville":20, 1, 0, 0, 1, 1);
+add ("Pittsburg":20, 1, 0, 0, 1, 1);
+add ("Pioneer":20, 1, 0, 0, 1, 1);
+add ("Pineville":20, 1, 0, 0, 1, 1);
+add ("Oak Forest":20, 1, 0, 0, 1, 1);
+add ("Northfield":20, 1, 0, 0, 1, 1);
+add ("Mount Airy":20, 1, 0, 0, 1, 1);
+add ("Maxwell":20, 1, 0, 0, 1, 1);
+add ("Marietta":20, 1, 0, 0, 1, 1);
+add ("Lamont":20, 1, 0, 0, 1, 1);
+add ("Lake View":20, 1, 0, 0, 1, 1);
+add ("Knoxville":20, 1, 0, 0, 1, 1);
+add ("Idlewild":20, 1, 0, 0, 1, 1);
+add ("Holt":20, 1, 0, 0, 1, 1);
+add ("Hastings":20, 1, 0, 0, 1, 1);
+add ("Hancock":20, 1, 0, 0, 1, 1);
+add ("Gilbert":20, 1, 0, 0, 1, 1);
+add ("Gardner":20, 1, 0, 0, 1, 1);
+add ("Freedom":20, 1, 0, 0, 1, 1);
+add ("Emerson":20, 1, 0, 0, 1, 1);
+add ("Echo":20, 1, 0, 0, 1, 1);
+add ("Dixon":20, 1, 0, 0, 1, 1);
+add ("Denver":20, 1, 0, 0, 1, 1);
+add ("Denton":20, 1, 0, 0, 1, 1);
+add ("Curtis":20, 1, 0, 0, 1, 1);
+add ("Creston":20, 1, 0, 0, 1, 1);
+add ("Clark":20, 1, 0, 0, 1, 1);
+add ("Chesterfield":20, 1, 0, 0, 1, 1);
+add ("Cedar Point":20, 1, 0, 0, 1, 1);
+add ("Cedar Creek":20, 1, 0, 0, 1, 1);
+add ("Cascade":20, 1, 0, 0, 1, 1);
+add ("Brandon":20, 1, 0, 0, 1, 1);
+add ("Blaine":20, 1, 0, 0, 1, 1);
+add ("Bancroft":20, 1, 0, 0, 1, 1);
+add ("Avalon":20, 1, 0, 0, 1, 1);
+add ("Atwood":20, 1, 0, 0, 1, 1);
+add ("Alma":20, 1, 0, 0, 1, 1);
+add ("Wheatland":19, 1, 0, 0, 1, 1);
+add ("Wells":19, 1, 0, 0, 1, 1);
+add ("Sun Valley":19, 1, 0, 0, 1, 1);
+add ("State Line":19, 1, 0, 0, 1, 1);
+add ("Silver City":19, 1, 0, 0, 1, 1);
+add ("Seneca":19, 1, 0, 0, 1, 1);
+add ("Selma":19, 1, 0, 0, 1, 1);
+add ("Saint Joseph":19, 1, 0, 0, 1, 1);
+add ("Saint John":19, 1, 0, 0, 1, 1);
+add ("Ross":19, 1, 0, 0, 1, 1);
+add ("Roberts":19, 1, 0, 0, 1, 1);
+add ("Reynolds":19, 1, 0, 0, 1, 1);
+add ("Red Rock":19, 1, 0, 0, 1, 1);
+add ("Ogden":19, 1, 0, 0, 1, 1);
+add ("Newark":19, 1, 0, 0, 1, 1);
+add ("New London":19, 1, 0, 0, 1, 1);
+add ("Mineral Springs":19, 1, 0, 0, 1, 1);
+add ("Meridian":19, 1, 0, 0, 1, 1);
+add ("Lynn":19, 1, 0, 0, 1, 1);
+add ("Lisbon":19, 1, 0, 0, 1, 1);
+add ("Lamar":19, 1, 0, 0, 1, 1);
+add ("Knollwood":19, 1, 0, 0, 1, 1);
+add ("Kensington":19, 1, 0, 0, 1, 1);
+add ("Horton":19, 1, 0, 0, 1, 1);
+add ("Homewood":19, 1, 0, 0, 1, 1);
+add ("Homestead":19, 1, 0, 0, 1, 1);
+add ("Holiday Hills":19, 1, 0, 0, 1, 1);
+add ("Henry":19, 1, 0, 0, 1, 1);
+add ("Harper":19, 1, 0, 0, 1, 1);
+add ("Greenbriar":19, 1, 0, 0, 1, 1);
+add ("Granville":19, 1, 0, 0, 1, 1);
+add ("Graham":19, 1, 0, 0, 1, 1);
+add ("Grafton":19, 1, 0, 0, 1, 1);
+add ("Genoa":19, 1, 0, 0, 1, 1);
+add ("Fruitland":19, 1, 0, 0, 1, 1);
+add ("Fremont":19, 1, 0, 0, 1, 1);
+add ("Forest Hill":19, 1, 0, 0, 1, 1);
+add ("Forest Grove":19, 1, 0, 0, 1, 1);
+add ("Folsom":19, 1, 0, 0, 1, 1);
+add ("Flint Hill":19, 1, 0, 0, 1, 1);
+add ("Fillmore":19, 1, 0, 0, 1, 1);
+add ("Ferndale":19, 1, 0, 0, 1, 1);
+add ("Fayette":19, 1, 0, 0, 1, 1);
+add ("Fairmont":19, 1, 0, 0, 1, 1);
+add ("Eastwood":19, 1, 0, 0, 1, 1);
+add ("Dudley":19, 1, 0, 0, 1, 1);
+add ("Dublin":19, 1, 0, 0, 1, 1);
+add ("Dogtown":19, 1, 0, 0, 1, 1);
+add ("Dawson":19, 1, 0, 0, 1, 1);
+add ("Cunningham":19, 1, 0, 0, 1, 1);
+add ("Conway":19, 1, 0, 0, 1, 1);
+add ("Collins":19, 1, 0, 0, 1, 1);
+add ("College Park":19, 1, 0, 0, 1, 1);
+add ("Chestnut Grove":19, 1, 0, 0, 1, 1);
+add ("Cherry Grove":19, 1, 0, 0, 1, 1);
+add ("Cherokee":19, 1, 0, 0, 1, 1);
+add ("Chatham":19, 1, 0, 0, 1, 1);
+add ("Camelot":19, 1, 0, 0, 1, 1);
+add ("Brooks":19, 1, 0, 0, 1, 1);
+add ("Big Springs":19, 1, 0, 0, 1, 1);
+add ("Big Creek":19, 1, 0, 0, 1, 1);
+add ("Benson":19, 1, 0, 0, 1, 1);
+add ("Bedford":19, 1, 0, 0, 1, 1);
+add ("Bartlett":19, 1, 0, 0, 1, 1);
+add ("Bailey":19, 1, 0, 0, 1, 1);
+add ("Atlanta":19, 1, 0, 0, 1, 1);
+add ("Alpha":19, 1, 0, 0, 1, 1);
+add ("Woodland Hills":18, 1, 0, 0, 1, 1);
+add ("Winfield":18, 1, 0, 0, 1, 1);
+add ("Willow Springs":18, 1, 0, 0, 1, 1);
+add ("Willow Grove":18, 1, 0, 0, 1, 1);
+add ("Williamstown":18, 1, 0, 0, 1, 1);
+add ("Wheeler":18, 1, 0, 0, 1, 1);
+add ("Westchester":18, 1, 0, 0, 1, 1);
+add ("Walton":18, 1, 0, 0, 1, 1);
+add ("Tyler":18, 1, 0, 0, 1, 1);
+add ("Taylorsville":18, 1, 0, 0, 1, 1);
+add ("Stillwater":18, 1, 0, 0, 1, 1);
+add ("Shawnee":18, 1, 0, 0, 1, 1);
+add ("Shamrock":18, 1, 0, 0, 1, 1);
+add ("Scott":18, 1, 0, 0, 1, 1);
+add ("Sanford":18, 1, 0, 0, 1, 1);
+add ("Saint Charles":18, 1, 0, 0, 1, 1);
+add ("Rocky Hill":18, 1, 0, 0, 1, 1);
+add ("Rockford":18, 1, 0, 0, 1, 1);
+add ("Ripley":18, 1, 0, 0, 1, 1);
+add ("Pulaski":18, 1, 0, 0, 1, 1);
+add ("Phillips":18, 1, 0, 0, 1, 1);
+add ("Pearl":18, 1, 0, 0, 1, 1);
+add ("New Market":18, 1, 0, 0, 1, 1);
+add ("New Boston":18, 1, 0, 0, 1, 1);
+add ("Nebo":18, 1, 0, 0, 1, 1);
+add ("Mount Tabor":18, 1, 0, 0, 1, 1);
+add ("Morton":18, 1, 0, 0, 1, 1);
+add ("Moore":18, 1, 0, 0, 1, 1);
+add ("Long Branch":18, 1, 0, 0, 1, 1);
+add ("London":18, 1, 0, 0, 1, 1);
+add ("Lewisville":18, 1, 0, 0, 1, 1);
+add ("Lewiston":18, 1, 0, 0, 1, 1);
+add ("Jerusalem":18, 1, 0, 0, 1, 1);
+add ("Jasper":18, 1, 0, 0, 1, 1);
+add ("Hadley":18, 1, 0, 0, 1, 1);
+add ("Grove":18, 1, 0, 0, 1, 1);
+add ("Greenbrier":18, 1, 0, 0, 1, 1);
+add ("Gray":18, 1, 0, 0, 1, 1);
+add ("Glasgow":18, 1, 0, 0, 1, 1);
+add ("Fletcher":18, 1, 0, 0, 1, 1);
+add ("Fair Oaks":18, 1, 0, 0, 1, 1);
+add ("Essex":18, 1, 0, 0, 1, 1);
+add ("Elwood":18, 1, 0, 0, 1, 1);
+add ("Eldorado":18, 1, 0, 0, 1, 1);
+add ("Dunlap":18, 1, 0, 0, 1, 1);
+add ("Dunbar":18, 1, 0, 0, 1, 1);
+add ("Decatur":18, 1, 0, 0, 1, 1);
+add ("Darlington":18, 1, 0, 0, 1, 1);
+add ("Damascus":18, 1, 0, 0, 1, 1);
+add ("Crystal Springs":18, 1, 0, 0, 1, 1);
+add ("Crestview":18, 1, 0, 0, 1, 1);
+add ("Coldwater":18, 1, 0, 0, 1, 1);
+add ("Climax":18, 1, 0, 0, 1, 1);
+add ("Center Hill":18, 1, 0, 0, 1, 1);
+add ("Carrollton":18, 1, 0, 0, 1, 1);
+add ("Carlton":18, 1, 0, 0, 1, 1);
+add ("Caldwell":18, 1, 0, 0, 1, 1);
+add ("Byron":18, 1, 0, 0, 1, 1);
+add ("Browns Corner":18, 1, 0, 0, 1, 1);
+add ("Bridgewater":18, 1, 0, 0, 1, 1);
+add ("Bolton":18, 1, 0, 0, 1, 1);
+add ("Blue Springs":18, 1, 0, 1, 0, 30);
+add ("Bloomingdale":18, 1, 0, 1, 0, 30);
+add ("Blair":18, 1, 0, 1, 0, 30);
+add ("Bethesda":18, 1, 0, 1, 0, 30);
+add ("Belleville":18, 1, 0, 1, 0, 30);
+add ("Bear Creek":18, 1, 0, 1, 0, 30);
+add ("Bayview":18, 1, 0, 1, 0, 30);
+add ("Avoca":18, 1, 0, 1, 0, 30);
+add ("Argyle":18, 1, 0, 1, 0, 30);
+add ("Wyoming":17, 1, 0, 1, 0, 30);
+add ("Woodland Park":17, 1, 0, 1, 0, 30);
+add ("Wilton":17, 1, 0, 1, 0, 30);
+add ("White Hall":17, 1, 0, 1, 0, 30);
+add ("Watkins":17, 1, 0, 1, 0, 30);
+add ("Warwick":17, 1, 0, 1, 0, 30);
+add ("Walnut":17, 1, 0, 1, 0, 30);
+add ("Vienna":17, 1, 0, 1, 0, 30);
+add ("Union City":17, 1, 0, 1, 0, 30);
+add ("Texas":17, 1, 0, 1, 0, 30);
+add ("Sumner":17, 1, 0, 1, 0, 30);
+add ("Summerfield":17, 1, 0, 1, 0, 30);
+add ("Sugar Hill":17, 1, 0, 1, 0, 30);
+add ("Stratford":17, 1, 0, 1, 0, 30);
+add ("Springtown":17, 1, 0, 1, 0, 30);
+add ("Saratoga":17, 1, 0, 1, 0, 30);
+add ("San Jose":17, 1, 0, 1, 0, 30);
+add ("Saint Johns":17, 1, 0, 1, 0, 30);
+add ("Royal":17, 1, 0, 1, 0, 30);
+add ("Rosebud":17, 1, 0, 1, 0, 30);
+add ("Rockwood":17, 1, 0, 1, 0, 30);
+add ("Riley":17, 1, 0, 1, 0, 30);
+add ("Red Oak":17, 1, 0, 1, 0, 30);
+add ("Quincy":17, 1, 0, 1, 0, 30);
+add ("Pomona":17, 1, 0, 1, 0, 30);
+add ("Point Pleasant":17, 1, 0, 1, 0, 30);
+add ("Philadelphia":17, 1, 0, 1, 0, 30);
+add ("Peoria":17, 1, 0, 1, 0, 30);
+add ("Murray":17, 1, 0, 1, 0, 30);
+add ("Millbrook":17, 1, 0, 1, 0, 30);
+add ("Maywood":17, 1, 0, 1, 0, 30);
+add ("Macon":17, 1, 0, 1, 0, 30);
+add ("Lone Oak":17, 1, 0, 1, 0, 30);
+add ("Lewis":17, 1, 0, 1, 0, 30);
+add ("Leon":17, 1, 0, 1, 0, 30);
+add ("Lee":17, 1, 0, 1, 0, 30);
+add ("Jones":17, 1, 0, 1, 0, 30);
+add ("Hubbard":17, 1, 0, 1, 0, 30);
+add ("Gum Springs":17, 1, 0, 1, 0, 30);
+add ("Guilford":17, 1, 0, 1, 0, 30);
+add ("Galena":17, 1, 0, 1, 0, 30);
+add ("Frenchtown":17, 1, 0, 1, 0, 30);
+add ("Freeport":17, 1, 0, 1, 0, 30);
+add ("Frankfort":17, 1, 0, 1, 0, 30);
+add ("Fowler":17, 1, 0, 1, 0, 30);
+add ("Floyd":17, 1, 0, 1, 0, 30);
+add ("Fisher":17, 1, 0, 1, 0, 30);
+add ("Fairbanks":17, 1, 0, 1, 0, 30);
+add ("Evans":17, 1, 0, 1, 0, 30);
+add ("Empire":17, 1, 0, 1, 0, 30);
+add ("Elm Grove":17, 1, 0, 1, 0, 30);
+add ("Ellsworth":17, 1, 0, 1, 0, 30);
+add ("Edgewater":17, 1, 0, 1, 0, 30);
+add ("Dewey":17, 1, 0, 1, 0, 30);
+add ("Derby":17, 1, 0, 1, 0, 30);
+add ("Denmark":17, 1, 0, 1, 0, 30);
+add ("Cordova":17, 1, 0, 1, 0, 30);
+add ("Colonial Heights":17, 1, 0, 1, 0, 30);
+add ("Colfax":17, 1, 0, 1, 0, 30);
+add ("Clearview":17, 1, 0, 1, 0, 30);
+add ("Chestnut Ridge":17, 1, 0, 1, 0, 30);
+add ("Carthage":17, 1, 0, 1, 0, 30);
+add ("Carpenter":17, 1, 0, 1, 0, 30);
+add ("Calhoun":17, 1, 0, 1, 0, 30);
+add ("Brookwood":17, 1, 0, 1, 0, 30);
+add ("Brookville":17, 1, 0, 1, 0, 30);
+add ("Brentwood":17, 1, 0, 1, 0, 30);
+add ("Birmingham":17, 1, 0, 1, 0, 30);
+add ("Arcola":17, 1, 0, 1, 0, 30);
+add ("Andover":17, 1, 0, 1, 0, 30);
+add ("Aberdeen":17, 1, 0, 1, 0, 30);
+add ("Yorktown":16, 1, 0, 1, 0, 30);
+add ("Wright":16, 1, 0, 1, 0, 30);
+add ("Woodrow":16, 1, 0, 1, 0, 30);
+add ("Woodbury":16, 1, 0, 1, 0, 30);
+add ("Winslow":16, 1, 0, 1, 0, 30);
+add ("Whitney":16, 1, 0, 1, 0, 30);
+add ("Whispering Pines":16, 1, 0, 1, 0, 30);
+add ("Welcome":16, 1, 0, 1, 0, 30);
+add ("Webb":16, 1, 0, 1, 0, 30);
+add ("Washington Heights":16, 1, 0, 1, 0, 30);
+add ("Summerville":16, 1, 0, 1, 0, 30);
+add ("Sullivan":16, 1, 0, 1, 0, 30);
+add ("Stewart":16, 1, 0, 1, 0, 30);
+add ("Spring Grove":16, 1, 0, 1, 0, 30);
+add ("Silver Springs":16, 1, 0, 1, 0, 30);
+add ("Sheffield":16, 1, 0, 1, 0, 30);
+add ("Shannon":16, 1, 0, 1, 0, 30);
+add ("Scottsville":16, 1, 0, 1, 0, 30);
+add ("Saint George":16, 1, 0, 1, 0, 30);
+add ("Ryan":16, 1, 0, 1, 0, 30);
+add ("Ruth":16, 1, 0, 1, 0, 30);
+add ("Roy":16, 1, 0, 1, 0, 30);
+add ("Roxbury":16, 1, 0, 1, 0, 30);
+add ("Rosewood":16, 1, 0, 1, 0, 30);
+add ("Roscoe":16, 1, 0, 1, 0, 30);
+add ("Rocky Point":16, 1, 0, 1, 0, 30);
+add ("Richfield":16, 1, 0, 1, 0, 30);
+add ("Richardson":16, 1, 0, 1, 0, 30);
+add ("Proctor":16, 1, 0, 1, 0, 30);
+add ("Pinecrest":16, 1, 0, 1, 0, 30);
+add ("Pine Valley":16, 1, 0, 1, 0, 30);
+add ("Pierce":16, 1, 0, 1, 0, 30);
+add ("Perkins":16, 1, 0, 1, 0, 30);
+add ("Paxton":16, 1, 0, 1, 0, 30);
+add ("Omega":16, 1, 0, 1, 0, 30);
+add ("Nottingham":16, 1, 0, 1, 0, 30);
+add ("Montezuma":16, 1, 0, 1, 0, 30);
+add ("Montague":16, 1, 0, 1, 0, 30);
+add ("Milo":16, 1, 0, 1, 0, 30);
+add ("Milan":16, 1, 0, 1, 0, 30);
+add ("Martinsville":16, 1, 0, 1, 0, 30);
+add ("Maple Hill":16, 1, 0, 1, 0, 30);
+add ("Ludlow":16, 1, 0, 1, 0, 30);
+add ("Louisville":16, 1, 0, 1, 0, 30);
+add ("Longwood":16, 1, 0, 1, 0, 30);
+add ("Lewisburg":16, 1, 0, 1, 0, 30);
+add ("Lenox":16, 1, 0, 1, 0, 30);
+add ("Leesville":16, 1, 0, 1, 0, 30);
+add ("Leesburg":16, 1, 0, 1, 0, 30);
+add ("Lawrenceville":16, 1, 0, 1, 0, 30);
+add ("Kirkland":16, 1, 0, 1, 0, 30);
+add ("Kelly":16, 1, 0, 1, 0, 30);
+add ("Jerome":16, 1, 0, 1, 0, 30);
+add ("Jenkins":16, 1, 0, 1, 0, 30);
+add ("Indian Village":16, 1, 0, 1, 0, 30);
+add ("Hurricane":16, 1, 0, 1, 0, 30);
+add ("Howell":16, 1, 0, 1, 0, 30);
+add ("Hillcrest":16, 1, 0, 1, 0, 30);
+add ("Hidden Valley":16, 1, 0, 1, 0, 30);
+add ("Harvey":16, 1, 0, 1, 0, 30);
+add ("Harmon":16, 1, 0, 1, 0, 30);
+add ("Greendale":16, 1, 0, 1, 0, 30);
+add ("Granite":16, 1, 0, 1, 0, 30);
+add ("Glenville":16, 1, 0, 1, 0, 30);
+add ("Gladstone":16, 1, 0, 1, 0, 30);
+add ("Gilmore":16, 1, 0, 1, 0, 30);
+add ("Garrison":16, 1, 0, 1, 0, 30);
+add ("Freeman":16, 1, 0, 1, 0, 30);
+add ("Fox":16, 1, 0, 1, 0, 30);
+add ("Forestville":16, 1, 0, 1, 0, 30);
+add ("Flatwoods":16, 1, 0, 1, 0, 30);
+add ("Elkton":16, 1, 0, 1, 0, 30);
+add ("Elizabeth":16, 1, 0, 1, 0, 30);
+add ("Elba":16, 1, 0, 1, 0, 30);
+add ("Cumberland":16, 1, 0, 1, 0, 30);
+add ("Clearwater":16, 1, 0, 1, 0, 30);
+add ("Carter":16, 1, 0, 1, 0, 30);
+add ("California":16, 1, 0, 1, 0, 30);
+add ("Caledonia":16, 1, 0, 1, 0, 30);
+add ("Burns":16, 1, 0, 1, 0, 30);
+add ("Buckingham":16, 1, 0, 1, 0, 30);
+add ("Brunswick":16, 1, 0, 1, 0, 30);
+add ("Bennett":16, 1, 0, 1, 0, 30);
+add ("Bay View":16, 1, 0, 1, 0, 30);
+add ("Barnes":16, 1, 0, 1, 0, 30);
+add ("Arthur":16, 1, 0, 1, 0, 30);
+add ("Appleton":16, 1, 0, 1, 0, 30);
+add ("Amherst":16, 1, 0, 1, 0, 30);
+add ("Allison":16, 1, 0, 1, 0, 30);
+add ("Allentown":16, 1, 0, 1, 0, 30);
+add ("Acme":16, 1, 0, 1, 0, 30);
+add ("Woodbine":15, 1, 0, 1, 0, 30);
+add ("Wolf Creek":15, 1, 0, 1, 0, 30);
+add ("Williamsville":15, 1, 0, 1, 0, 30);
+add ("White Plains":15, 1, 0, 1, 0, 30);
+add ("Wesley":15, 1, 0, 1, 0, 30);
+add ("Weldon":15, 1, 0, 1, 0, 30);
+add ("Wayland":15, 1, 0, 1, 0, 30);
+add ("Tyrone":15, 1, 0, 1, 0, 30);
+add ("Tremont":15, 1, 0, 1, 0, 30);
+add ("Tracy":15, 1, 0, 1, 0, 30);
+add ("Tipton":15, 1, 0, 1, 0, 30);
+add ("Thompsonville":15, 1, 0, 1, 0, 30);
+add ("Tanglewood":15, 1, 0, 1, 0, 30);
+add ("Tabor":15, 1, 0, 1, 0, 30);
+add ("Sutton":15, 1, 0, 1, 0, 30);
+add ("Superior":15, 1, 0, 1, 0, 30);
+add ("Star":15, 1, 0, 1, 0, 30);
+add ("Stafford":15, 1, 0, 1, 0, 30);
+add ("Sleepy Hollow":15, 1, 0, 1, 0, 30);
+add ("Siloam":15, 1, 0, 1, 0, 30);
+add ("Shelby":15, 1, 0, 1, 0, 30);
+add ("Shaw":15, 1, 0, 1, 0, 30);
+add ("Sawyer":15, 1, 0, 1, 0, 30);
+add ("Saint James":15, 1, 0, 1, 0, 30);
+add ("Saint Clair":15, 1, 0, 1, 0, 30);
+add ("Red Bank":15, 1, 0, 1, 0, 30);
+add ("Rankin":15, 1, 0, 1, 0, 30);
+add ("Price":15, 1, 0, 1, 0, 30);
+add ("Peru":15, 1, 0, 1, 0, 30);
+add ("Page":15, 1, 0, 1, 0, 30);
+add ("Owens":15, 1, 0, 1, 0, 30);
+add ("Oneida":15, 1, 0, 1, 0, 30);
+add ("Northwood":15, 1, 0, 1, 0, 30);
+add ("Nichols":15, 1, 0, 1, 0, 30);
+add ("New Town":15, 1, 0, 1, 0, 30);
+add ("Murphy":15, 1, 0, 1, 0, 30);
+add ("Morris":15, 1, 0, 1, 0, 30);
+add ("Morgantown":15, 1, 0, 1, 0, 30);
+add ("Montpelier":15, 1, 0, 1, 0, 30);
+add ("Mechanicsburg":15, 1, 0, 1, 0, 30);
+add ("Lucas":15, 1, 0, 1, 0, 30);
+add ("Lone Pine":15, 1, 0, 1, 0, 30);
+add ("Littleton":15, 1, 0, 1, 0, 30);
+add ("Little River":15, 1, 0, 1, 0, 30);
+add ("Leland":15, 1, 0, 1, 0, 30);
+add ("Langdon":15, 1, 0, 1, 0, 30);
+add ("Lakeville":15, 1, 0, 1, 0, 30);
+add ("Lake Forest":15, 1, 0, 1, 0, 30);
+add ("La Grange":15, 1, 0, 1, 0, 30);
+add ("King":15, 1, 0, 1, 0, 30);
+add ("Kimball":15, 1, 0, 1, 0, 30);
+add ("Johnsonville":15, 1, 0, 1, 0, 30);
+add ("Highland Park":15, 1, 0, 1, 0, 30);
+add ("Hazelwood":15, 1, 0, 1, 0, 30);
+add ("Hartland":15, 1, 0, 1, 0, 30);
+add ("Hardy":15, 1, 0, 1, 0, 30);
+add ("Guthrie":15, 1, 0, 1, 0, 30);
+add ("Griffin":15, 1, 0, 1, 0, 30);
+add ("Gravel Hill":15, 1, 0, 1, 0, 30);
+add ("Golden":15, 1, 0, 1, 0, 30);
+add ("Globe":15, 1, 0, 1, 0, 30);
+add ("Gary":15, 1, 0, 1, 0, 30);
+add ("Frogtown":15, 1, 0, 1, 0, 30);
+add ("Four Points":15, 1, 0, 1, 0, 30);
+add ("Forest":15, 1, 0, 1, 0, 30);
+add ("Flint":15, 1, 0, 1, 0, 30);
+add ("Ferguson":15, 1, 0, 1, 0, 30);
+add ("Fayetteville":15, 1, 0, 1, 0, 30);
+add ("Farmersville":15, 1, 0, 1, 0, 30);
+add ("Ellisville":15, 1, 0, 1, 0, 30);
+add ("Edwards":15, 1, 0, 1, 0, 30);
+add ("Edgewood":15, 1, 0, 1, 0, 30);
+add ("Doyle":15, 1, 0, 1, 0, 30);
+add ("Delmar":15, 1, 0, 1, 0, 30);
+add ("Dallas":15, 1, 0, 1, 0, 30);
+add ("Crystal":15, 1, 0, 1, 0, 30);
+add ("Collinsville":15, 1, 0, 1, 0, 30);
+add ("Clifford":15, 1, 0, 1, 0, 30);
+add ("Church Hill":15, 1, 0, 1, 0, 30);
+add ("Cherry Valley":15, 1, 0, 1, 0, 30);
+add ("Cedar":15, 1, 0, 1, 0, 30);
+add ("Brookwood":15, 1, 0, 1, 0, 30);
+add ("Blanchard":15, 1, 0, 1, 0, 30);
+add ("Berea":15, 1, 0, 1, 0, 30);
+add ("Belleview":15, 1, 0, 1, 0, 30);
+add ("Belfast":15, 1, 0, 1, 0, 30);
+add ("Bayside":15, 1, 0, 1, 0, 30);
+add ("Bath":15, 1, 0, 1, 0, 30);
+add ("Avery":15, 1, 0, 1, 0, 30);
+add ("Ashley":15, 1, 0, 1, 0, 30);
+add ("Amity":15, 1, 0, 1, 0, 30);
+add ("Altamont":15, 1, 0, 1, 0, 30);
+add ("Adrian":15, 1, 0, 1, 0, 30);
+add ("Youngstown":14, 1, 0, 1, 0, 30);
+add ("Woodruff":14, 1, 0, 1, 0, 30);
+add ("Woodcrest":14, 1, 0, 1, 0, 30);
+add ("Willow":14, 1, 0, 1, 0, 30);
+add ("Willis":14, 1, 0, 1, 0, 30);
+add ("Wildwood":14, 1, 0, 1, 0, 30);
+add ("Whitesville":14, 1, 0, 1, 0, 30);
+add ("Westminster":14, 1, 0, 1, 0, 30);
+add ("Westgate":14, 1, 0, 1, 0, 30);
+add ("West Liberty":14, 1, 0, 1, 0, 30);
+add ("Vista":14, 1, 0, 1, 0, 30);
+add ("Vance":14, 1, 0, 1, 0, 30);
+add ("The Meadows":14, 1, 0, 1, 0, 30);
+add ("Taft":14, 1, 0, 1, 0, 30);
+add ("Springhill":14, 1, 0, 1, 0, 30);
+add ("Somerville":14, 1, 0, 1, 0, 30);
+add ("Snug Harbor":14, 1, 0, 1, 0, 30);
+add ("Smith":14, 1, 0, 1, 0, 30);
+add ("Silver Creek":14, 1, 0, 1, 0, 30);
+add ("Shore Acres":14, 1, 0, 1, 0, 30);
+add ("Rutland":14, 1, 0, 1, 0, 30);
+add ("Rossville":14, 1, 0, 1, 0, 30);
+add ("Rolling Hills":14, 1, 0, 1, 0, 30);
+add ("River Oaks":14, 1, 0, 1, 0, 30);
+add ("Ridgeville":14, 1, 0, 1, 0, 30);
+add ("Richville":14, 1, 0, 1, 0, 30);
+add ("Riceville":14, 1, 0, 1, 0, 30);
+add ("Reno":14, 1, 0, 1, 0, 30);
+add ("Redland":14, 1, 0, 1, 0, 30);
+add ("Prosperity":14, 1, 0, 1, 0, 30);
+add ("Post Oak":14, 1, 0, 1, 0, 30);
+add ("Plainville":14, 1, 0, 1, 0, 30);
+add ("Pinhook":14, 1, 0, 1, 0, 30);
+add ("Phoenix":14, 1, 0, 1, 0, 30);
+add ("Payne":14, 1, 0, 1, 0, 30);
+add ("Parkwood":14, 1, 0, 1, 0, 30);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/column_list.txt b/ydb/library/benchmarks/gen/tpcds-dbgen/column_list.txt
new file mode 100644
index 000000000000..70e2436a1afd
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/column_list.txt
@@ -0,0 +1,1024 @@
+#
+# Legal Notice
+#
+# This document and associated source code (the "Work") is a part of a
+# benchmark specification maintained by the TPC.
+#
+# The TPC reserves all right, title, and interest to the Work as provided
+# under U.S. and international laws, including without limitation all patent
+# and trademark rights therein.
+#
+# No Warranty
+#
+# 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+# CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+# AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+# WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+# INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+# DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+# PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+# WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+# ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+# QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+# WITH REGARD TO THE WORK.
+# 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+# ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+# COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+# OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+# INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+# OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+# RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+# ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+#
+# Contributors:
+# Gradient Systems
+#
+
+CC_CALL_CENTER_SK CALL_CENTER 0
+CC_CALL_CENTER_ID CALL_CENTER 15
+CC_REC_START_DATE_ID CALL_CENTER 10
+CC_REC_END_DATE_ID CALL_CENTER
+CC_CLOSED_DATE_ID CALL_CENTER 4
+CC_OPEN_DATE_ID CALL_CENTER 10
+CC_NAME CALL_CENTER 0
+CC_CLASS CALL_CENTER 2
+CC_EMPLOYEES CALL_CENTER
+CC_SQ_FT CALL_CENTER
+CC_HOURS CALL_CENTER
+CC_MANAGER CALL_CENTER 2
+CC_MARKET_ID CALL_CENTER
+CC_MARKET_CLASS CALL_CENTER 50
+CC_MARKET_DESC CALL_CENTER 50
+CC_MARKET_MANAGER CALL_CENTER 2
+CC_DIVISION CALL_CENTER 2
+CC_DIVISION_NAME CALL_CENTER 2
+CC_COMPANY CALL_CENTER 2
+CC_COMPANY_NAME CALL_CENTER 2
+CC_STREET_NUMBER CALL_CENTER 0
+CC_STREET_NAME CALL_CENTER 0
+CC_STREET_TYPE CALL_CENTER 0
+CC_SUITE_NUMBER CALL_CENTER 0
+CC_CITY CALL_CENTER 0
+CC_COUNTY CALL_CENTER 0
+CC_STATE CALL_CENTER 0
+CC_ZIP CALL_CENTER 0
+CC_COUNTRY CALL_CENTER 0
+CC_GMT_OFFSET CALL_CENTER 0
+CC_ADDRESS CALL_CENTER 15
+CC_TAX_PERCENTAGE CALL_CENTER
+CC_SCD CALL_CENTER
+CC_NULLS CALL_CENTER 2
+#
+# CATALOG_PAGE table structure
+#
+CP_CATALOG_PAGE_SK CATALOG_PAGE
+CP_CATALOG_PAGE_ID CATALOG_PAGE
+CP_START_DATE_ID CATALOG_PAGE
+CP_END_DATE_ID CATALOG_PAGE
+CP_PROMO_ID CATALOG_PAGE
+CP_DEPARTMENT CATALOG_PAGE
+CP_CATALOG_NUMBER CATALOG_PAGE
+CP_CATALOG_PAGE_NUMBER CATALOG_PAGE
+CP_DESCRIPTION CATALOG_PAGE 100 S_CP_DESCRIPTION
+CP_TYPE CATALOG_PAGE
+CP_NULLS CATALOG_PAGE 2
+#
+# CATALOG_RETURNS table structure
+#
+CR_RETURNED_DATE_SK CATALOG_RETURNS 28
+CR_RETURNED_TIME_SK CATALOG_RETURNS 28
+CR_ITEM_SK CATALOG_RETURNS 14
+CR_REFUNDED_CUSTOMER_SK CATALOG_RETURNS 14
+CR_REFUNDED_CDEMO_SK CATALOG_RETURNS 14
+CR_REFUNDED_HDEMO_SK CATALOG_RETURNS 14
+CR_REFUNDED_ADDR_SK CATALOG_RETURNS 14
+CR_RETURNING_CUSTOMER_SK CATALOG_RETURNS 28
+CR_RETURNING_CDEMO_SK CATALOG_RETURNS 14
+CR_RETURNING_HDEMO_SK CATALOG_RETURNS 14
+CR_RETURNING_ADDR_SK CATALOG_RETURNS 14
+CR_CALL_CENTER_SK CATALOG_RETURNS 0
+CR_CATALOG_PAGE_SK CATALOG_RETURNS 14
+CR_SHIP_MODE_SK CATALOG_RETURNS 14
+CR_WAREHOUSE_SK CATALOG_RETURNS 14
+CR_REASON_SK CATALOG_RETURNS 14
+CR_ORDER_NUMBER CATALOG_RETURNS 0
+CR_PRICING_QUANTITY CATALOG_RETURNS 0
+CR_PRICING_NET_PAID CATALOG_RETURNS 0
+CR_PRICING_EXT_TAX CATALOG_RETURNS 0
+CR_PRICING_NET_PAID_INC_TAX CATALOG_RETURNS 0
+CR_PRICING_FEE CATALOG_RETURNS 0
+CR_PRICING_EXT_SHIP_COST CATALOG_RETURNS 0
+CR_PRICING_REFUNDED_CASH CATALOG_RETURNS 0
+CR_PRICING_REVERSED_CHARGE CATALOG_RETURNS 0
+CR_PRICING_STORE_CREDIT CATALOG_RETURNS 0
+CR_PRICING_NET_LOSS CATALOG_RETURNS 0
+CR_NULLS CATALOG_RETURNS 28
+CR_PRICING CATALOG_RETURNS 70
+#
+# CATALOG_SALES table structure
+#
+CS_SOLD_DATE_SK CATALOG_SALES
+CS_SOLD_TIME_SK CATALOG_SALES 2
+CS_SHIP_DATE_SK CATALOG_SALES 14
+CS_BILL_CUSTOMER_SK CATALOG_SALES
+CS_BILL_CDEMO_SK CATALOG_SALES
+CS_BILL_HDEMO_SK CATALOG_SALES
+CS_BILL_ADDR_SK CATALOG_SALES
+CS_SHIP_CUSTOMER_SK CATALOG_SALES 2
+CS_SHIP_CDEMO_SK CATALOG_SALES
+CS_SHIP_HDEMO_SK CATALOG_SALES
+CS_SHIP_ADDR_SK CATALOG_SALES
+CS_CALL_CENTER_SK CATALOG_SALES
+CS_CATALOG_PAGE_SK CATALOG_SALES 42
+CS_SHIP_MODE_SK CATALOG_SALES 14
+CS_WAREHOUSE_SK CATALOG_SALES 14
+CS_SOLD_ITEM_SK CATALOG_SALES 1
+CS_PROMO_SK CATALOG_SALES 14
+CS_ORDER_NUMBER CATALOG_SALES
+CS_PRICING_QUANTITY CATALOG_SALES 0
+CS_PRICING_WHOLESALE_COST CATALOG_SALES 0
+CS_PRICING_LIST_PRICE CATALOG_SALES 0
+CS_PRICING_SALES_PRICE CATALOG_SALES 0
+CS_PRICING_COUPON_AMT CATALOG_SALES 0
+CS_PRICING_EXT_SALES_PRICE CATALOG_SALES 0
+CS_PRICING_EXT_DISCOUNT_AMOUNT CATALOG_SALES 0
+CS_PRICING_EXT_WHOLESALE_COST CATALOG_SALES 0
+CS_PRICING_EXT_LIST_PRICE CATALOG_SALES 0
+CS_PRICING_EXT_TAX CATALOG_SALES 0
+CS_PRICING_EXT_SHIP_COST CATALOG_SALES 0
+CS_PRICING_NET_PAID CATALOG_SALES 0
+CS_PRICING_NET_PAID_INC_TAX CATALOG_SALES 0
+CS_PRICING_NET_PAID_INC_SHIP CATALOG_SALES 0
+CS_PRICING_NET_PAID_INC_SHIP_TAX CATALOG_SALES 0
+CS_PRICING_NET_PROFIT CATALOG_SALES 0
+CS_PRICING CATALOG_SALES 112
+CS_PERMUTE CATALOG_SALES 0
+CS_NULLS CATALOG_SALES 28
+CR_IS_RETURNED CATALOG_SALES 14
+CS_PERMUTATION CATALOG_SALES 0
+#
+# CUSTOMER table structure
+#
+C_CUSTOMER_SK CUSTOMER
+C_CUSTOMER_ID CUSTOMER
+C_CURRENT_CDEMO_SK CUSTOMER
+C_CURRENT_HDEMO_SK CUSTOMER
+C_CURRENT_ADDR_SK CUSTOMER
+C_FIRST_SHIPTO_DATE_ID CUSTOMER 0
+C_FIRST_SALES_DATE_ID CUSTOMER
+C_SALUTATION CUSTOMER
+C_FIRST_NAME CUSTOMER
+C_LAST_NAME CUSTOMER
+C_PREFERRED_CUST_FLAG CUSTOMER 2
+C_BIRTH_DAY CUSTOMER
+C_BIRTH_MONTH CUSTOMER 0
+C_BIRTH_YEAR CUSTOMER 0
+C_BIRTH_COUNTRY CUSTOMER
+C_LOGIN CUSTOMER
+C_EMAIL_ADDRESS CUSTOMER 23
+C_LAST_REVIEW_DATE CUSTOMER
+C_NULLS CUSTOMER 2
+#
+# CUSTOMER_ADDRESS table structure
+#
+CA_ADDRESS_SK CUSTOMER_ADDRESS
+CA_ADDRESS_ID CUSTOMER_ADDRESS
+CA_ADDRESS_STREET_NUM CUSTOMER_ADDRESS
+CA_ADDRESS_STREET_NAME1 CUSTOMER_ADDRESS
+CA_ADDRESS_STREET_TYPE CUSTOMER_ADDRESS
+CA_ADDRESS_SUITE_NUM CUSTOMER_ADDRESS
+CA_ADDRESS_CITY CUSTOMER_ADDRESS
+CA_ADDRESS_COUNTY CUSTOMER_ADDRESS
+CA_ADDRESS_STATE CUSTOMER_ADDRESS
+CA_ADDRESS_ZIP CUSTOMER_ADDRESS
+CA_ADDRESS_COUNTRY CUSTOMER_ADDRESS
+CA_ADDRESS_GMT_OFFSET CUSTOMER_ADDRESS
+CA_LOCATION_TYPE CUSTOMER_ADDRESS
+CA_NULLS CUSTOMER_ADDRESS 2
+CA_ADDRESS CUSTOMER_ADDRESS 7
+CA_ADDRESS_STREET_NAME2 CUSTOMER_ADDRESS
+#
+# CUSTOMER_DEMOGRAPHICS table structure
+#
+CD_DEMO_SK CUSTOMER_DEMOGRAPHICS
+CD_GENDER CUSTOMER_DEMOGRAPHICS
+CD_MARITAL_STATUS CUSTOMER_DEMOGRAPHICS
+CD_EDUCATION_STATUS CUSTOMER_DEMOGRAPHICS
+CD_PURCHASE_ESTIMATE CUSTOMER_DEMOGRAPHICS
+CD_CREDIT_RATING CUSTOMER_DEMOGRAPHICS
+CD_DEP_COUNT CUSTOMER_DEMOGRAPHICS
+CD_DEP_EMPLOYED_COUNT CUSTOMER_DEMOGRAPHICS
+CD_DEP_COLLEGE_COUNT CUSTOMER_DEMOGRAPHICS
+CD_NULLS CUSTOMER_DEMOGRAPHICS 2
+
+#
+# DATE table structure
+#
+
+D_DATE_SK DATE 0
+D_DATE_ID DATE 0
+D_DATE DATE 0
+D_MONTH_SEQ DATE 0
+D_WEEK_SEQ DATE 0
+D_QUARTER_SEQ DATE 0
+D_YEAR DATE 0
+D_DOW DATE 0
+D_MOY DATE 0
+D_DOM DATE 0
+D_QOY DATE 0
+D_FY_YEAR DATE 0
+D_FY_QUARTER_SEQ DATE 0
+D_FY_WEEK_SEQ DATE 0
+D_DAY_NAME DATE 0
+D_QUARTER_NAME DATE 0
+D_HOLIDAY DATE 0
+D_WEEKEND DATE 0
+D_FOLLOWING_HOLIDAY DATE 0
+D_FIRST_DOM DATE 0
+D_LAST_DOM DATE 0
+D_SAME_DAY_LY DATE 0
+D_SAME_DAY_LQ DATE 0
+D_CURRENT_DAY DATE 0
+D_CURRENT_WEEK DATE 0
+D_CURRENT_MONTH DATE 0
+D_CURRENT_QUARTER DATE 0
+D_CURRENT_YEAR DATE 0
+D_NULLS DATE 2
+#
+# HOUSEHOLD_DEMOGRAPHICS table structure
+#
+HD_DEMO_SK HOUSEHOLD_DEMOGRAPHICS
+HD_INCOME_BAND_ID HOUSEHOLD_DEMOGRAPHICS
+HD_BUY_POTENTIAL HOUSEHOLD_DEMOGRAPHICS
+HD_DEP_COUNT HOUSEHOLD_DEMOGRAPHICS
+HD_VEHICLE_COUNT HOUSEHOLD_DEMOGRAPHICS
+HD_NULLS HOUSEHOLD_DEMOGRAPHICS 2
+#
+# INCOME_BAND table structure
+#
+IB_INCOME_BAND_ID INCOME_BAND
+IB_LOWER_BOUND INCOME_BAND
+IB_UPPER_BOUND INCOME_BAND
+IB_NULLS INCOME_BAND 2
+#
+# INVENTORY table structure
+#
+INV_DATE_SK INVENTORY
+INV_ITEM_SK INVENTORY
+INV_WAREHOUSE_SK INVENTORY
+INV_QUANTITY_ON_HAND INVENTORY
+INV_NULLS INVENTORY 2
+#
+# ITEM table structure
+#
+I_ITEM_SK ITEM
+I_ITEM_ID ITEM
+I_REC_START_DATE_ID ITEM
+I_REC_END_DATE_ID ITEM 2
+I_ITEM_DESC ITEM 200 S_ITEM_DESC
+I_CURRENT_PRICE ITEM 2
+I_WHOLESALE_COST ITEM
+I_BRAND_ID ITEM
+I_BRAND ITEM
+I_CLASS_ID ITEM
+I_CLASS ITEM
+I_CATEGORY_ID ITEM
+I_CATEGORY ITEM
+I_MANUFACT_ID ITEM 2
+I_MANUFACT ITEM
+I_SIZE ITEM
+I_FORMULATION ITEM 50
+I_COLOR ITEM
+I_UNITS ITEM
+I_CONTAINER ITEM
+I_MANAGER_ID ITEM 2
+I_PRODUCT_NAME ITEM
+I_NULLS ITEM 2
+I_SCD ITEM
+I_PROMO_SK ITEM 2
+#
+# PROMOTION table structure
+#
+P_PROMO_SK PROMOTION
+P_PROMO_ID PROMOTION
+P_START_DATE_ID PROMOTION
+P_END_DATE_ID PROMOTION
+P_ITEM_SK PROMOTION
+P_COST PROMOTION
+P_RESPONSE_TARGET PROMOTION
+P_PROMO_NAME PROMOTION
+P_CHANNEL_DMAIL PROMOTION
+P_CHANNEL_EMAIL PROMOTION
+P_CHANNEL_CATALOG PROMOTION
+P_CHANNEL_TV PROMOTION
+P_CHANNEL_RADIO PROMOTION
+P_CHANNEL_PRESS PROMOTION
+P_CHANNEL_EVENT PROMOTION
+P_CHANNEL_DEMO PROMOTION
+P_CHANNEL_DETAILS PROMOTION 100
+P_PURPOSE PROMOTION
+P_DISCOUNT_ACTIVE PROMOTION
+P_NULLS PROMOTION 2
+#
+# REASON table structure
+#
+R_REASON_SK REASON
+R_REASON_ID REASON
+R_REASON_DESCRIPTION REASON
+R_NULLS REASON 2
+#
+# SHIP_MODE table structure
+#
+SM_SHIP_MODE_SK SHIP_MODE
+SM_SHIP_MODE_ID SHIP_MODE
+SM_TYPE SHIP_MODE
+SM_CODE SHIP_MODE
+SM_CONTRACT SHIP_MODE 21
+SM_CARRIER SHIP_MODE
+SM_NULLS SHIP_MODE 2
+#
+# STORE table structure
+#
+W_STORE_SK STORE
+W_STORE_ID STORE
+W_STORE_REC_START_DATE_ID STORE
+W_STORE_REC_END_DATE_ID STORE 2
+W_STORE_CLOSED_DATE_ID STORE 2
+W_STORE_NAME STORE 0
+W_STORE_EMPLOYEES STORE
+W_STORE_FLOOR_SPACE STORE
+W_STORE_HOURS STORE
+W_STORE_MANAGER STORE 2
+W_STORE_MARKET_ID STORE
+W_STORE_TAX_PERCENTAGE STORE
+W_STORE_GEOGRAPHY_CLASS STORE
+W_STORE_MARKET_DESC STORE 100
+W_STORE_MARKET_MANAGER STORE 2
+W_STORE_DIVISION_ID STORE
+W_STORE_DIVISION_NAME STORE
+W_STORE_COMPANY_ID STORE
+W_STORE_COMPANY_NAME STORE
+W_STORE_ADDRESS_STREET_NUM STORE
+W_STORE_ADDRESS_STREET_NAME1 STORE
+W_STORE_ADDRESS_STREET_TYPE STORE
+W_STORE_ADDRESS_SUITE_NUM STORE
+W_STORE_ADDRESS_CITY STORE
+W_STORE_ADDRESS_COUNTY STORE
+W_STORE_ADDRESS_STATE STORE
+W_STORE_ADDRESS_ZIP STORE
+W_STORE_ADDRESS_COUNTRY STORE
+W_STORE_ADDRESS_GMT_OFFSET STORE
+W_STORE_NULLS STORE 2
+W_STORE_TYPE STORE
+W_STORE_SCD STORE
+W_STORE_ADDRESS STORE 7
+#
+# STORE_RETURNS table structure
+#
+SR_RETURNED_DATE_SK STORE_RETURNS 32
+SR_RETURNED_TIME_SK STORE_RETURNS 32
+SR_ITEM_SK STORE_RETURNS 16
+SR_CUSTOMER_SK STORE_RETURNS 16
+SR_CDEMO_SK STORE_RETURNS 16
+SR_HDEMO_SK STORE_RETURNS 16
+SR_ADDR_SK STORE_RETURNS 16
+SR_STORE_SK STORE_RETURNS 16
+SR_REASON_SK STORE_RETURNS 16
+SR_TICKET_NUMBER STORE_RETURNS 16
+SR_PRICING_QUANTITY STORE_RETURNS 0
+SR_PRICING_NET_PAID STORE_RETURNS 0
+SR_PRICING_EXT_TAX STORE_RETURNS 0
+SR_PRICING_NET_PAID_INC_TAX STORE_RETURNS 0
+SR_PRICING_FEE STORE_RETURNS 0
+SR_PRICING_EXT_SHIP_COST STORE_RETURNS 0
+SR_PRICING_REFUNDED_CASH STORE_RETURNS 0
+SR_PRICING_REVERSED_CHARGE STORE_RETURNS 0
+SR_PRICING_STORE_CREDIT STORE_RETURNS 0
+SR_PRICING_NET_LOSS STORE_RETURNS 0
+SR_PRICING STORE_RETURNS 80
+SR_NULLS STORE_RETURNS 32
+#
+# STORE_SALES table structure
+#
+SS_SOLD_DATE_SK STORE_SALES 2
+SS_SOLD_TIME_SK STORE_SALES 2
+SS_SOLD_ITEM_SK STORE_SALES
+SS_SOLD_CUSTOMER_SK STORE_SALES
+SS_SOLD_CDEMO_SK STORE_SALES
+SS_SOLD_HDEMO_SK STORE_SALES
+SS_SOLD_ADDR_SK STORE_SALES
+SS_SOLD_STORE_SK STORE_SALES
+SS_SOLD_PROMO_SK STORE_SALES 16
+SS_TICKET_NUMBER STORE_SALES
+SS_PRICING_QUANTITY STORE_SALES
+SS_PRICING_WHOLESALE_COST STORE_SALES 0
+SS_PRICING_LIST_PRICE STORE_SALES 0
+SS_PRICING_SALES_PRICE STORE_SALES 0
+SS_PRICING_COUPON_AMT STORE_SALES 0
+SS_PRICING_EXT_SALES_PRICE STORE_SALES 0
+SS_PRICING_EXT_WHOLESALE_COST STORE_SALES 0
+SS_PRICING_EXT_LIST_PRICE STORE_SALES 0
+SS_PRICING_EXT_TAX STORE_SALES 0
+SS_PRICING_NET_PAID STORE_SALES 0
+SS_PRICING_NET_PAID_INC_TAX STORE_SALES 0
+SS_PRICING_NET_PROFIT STORE_SALES 0
+SR_IS_RETURNED STORE_SALES 16
+SS_PRICING STORE_SALES 128
+SS_NULLS STORE_SALES 32
+SS_PERMUTATION STORE_SALES 0
+#
+# TIME table structure
+#
+T_TIME_SK TIME
+T_TIME_ID TIME
+T_TIME TIME
+T_HOUR TIME
+T_MINUTE TIME
+T_SECOND TIME
+T_AM_PM TIME
+T_SHIFT TIME
+T_SUB_SHIFT TIME
+T_MEAL_TIME TIME
+T_NULLS TIME 2
+#
+# WAREHOUSE table structure
+#
+W_WAREHOUSE_SK WAREHOUSE
+W_WAREHOUSE_ID WAREHOUSE
+W_WAREHOUSE_NAME WAREHOUSE 80
+W_WAREHOUSE_SQ_FT WAREHOUSE
+W_ADDRESS_STREET_NUM WAREHOUSE
+W_ADDRESS_STREET_NAME1 WAREHOUSE
+W_ADDRESS_STREET_TYPE WAREHOUSE
+W_ADDRESS_SUITE_NUM WAREHOUSE
+W_ADDRESS_CITY WAREHOUSE
+W_ADDRESS_COUNTY WAREHOUSE
+W_ADDRESS_STATE WAREHOUSE
+W_ADDRESS_ZIP WAREHOUSE
+W_ADDRESS_COUNTRY WAREHOUSE
+W_ADDRESS_GMT_OFFSET WAREHOUSE
+W_NULLS WAREHOUSE 2
+W_WAREHOUSE_ADDRESS WAREHOUSE 7
+#
+# WEB_PAGE table structure
+#
+WP_PAGE_SK WEB_PAGE
+WP_PAGE_ID WEB_PAGE
+WP_REC_START_DATE_ID WEB_PAGE
+WP_REC_END_DATE_ID WEB_PAGE
+WP_CREATION_DATE_SK WEB_PAGE 2
+WP_ACCESS_DATE_SK WEB_PAGE
+WP_AUTOGEN_FLAG WEB_PAGE
+WP_CUSTOMER_SK WEB_PAGE
+WP_URL WEB_PAGE
+WP_TYPE WEB_PAGE
+WP_CHAR_COUNT WEB_PAGE
+WP_LINK_COUNT WEB_PAGE
+WP_IMAGE_COUNT WEB_PAGE
+WP_MAX_AD_COUNT WEB_PAGE
+WP_NULLS WEB_PAGE 2
+WP_SCD WEB_PAGE
+#
+# WEB_RETURNS table structure
+#
+WR_RETURNED_DATE_SK WEB_RETURNS 32
+WR_RETURNED_TIME_SK WEB_RETURNS 32
+WR_ITEM_SK WEB_RETURNS 16
+WR_REFUNDED_CUSTOMER_SK WEB_RETURNS 16
+WR_REFUNDED_CDEMO_SK WEB_RETURNS 16
+WR_REFUNDED_HDEMO_SK WEB_RETURNS 16
+WR_REFUNDED_ADDR_SK WEB_RETURNS 16
+WR_RETURNING_CUSTOMER_SK WEB_RETURNS 16
+WR_RETURNING_CDEMO_SK WEB_RETURNS 16
+WR_RETURNING_HDEMO_SK WEB_RETURNS 16
+WR_RETURNING_ADDR_SK WEB_RETURNS 16
+WR_WEB_PAGE_SK WEB_RETURNS 16
+WR_REASON_SK WEB_RETURNS 16
+WR_ORDER_NUMBER WEB_RETURNS 0
+WR_PRICING_QUANTITY WEB_RETURNS 0
+WR_PRICING_NET_PAID WEB_RETURNS 0
+WR_PRICING_EXT_TAX WEB_RETURNS 0
+WR_PRICING_NET_PAID_INC_TAX WEB_RETURNS 0
+WR_PRICING_FEE WEB_RETURNS 0
+WR_PRICING_EXT_SHIP_COST WEB_RETURNS 0
+WR_PRICING_REFUNDED_CASH WEB_RETURNS 0
+WR_PRICING_REVERSED_CHARGE WEB_RETURNS 0
+WR_PRICING_STORE_CREDIT WEB_RETURNS 0
+WR_PRICING_NET_LOSS WEB_RETURNS 0
+WR_PRICING WEB_RETURNS 80
+WR_NULLS WEB_RETURNS 32
+#
+# WEB_SALES table structure
+#
+WS_SOLD_DATE_SK WEB_SALES 2
+WS_SOLD_TIME_SK WEB_SALES 2
+WS_SHIP_DATE_SK WEB_SALES 16
+WS_ITEM_SK WEB_SALES
+WS_BILL_CUSTOMER_SK WEB_SALES
+WS_BILL_CDEMO_SK WEB_SALES
+WS_BILL_HDEMO_SK WEB_SALES
+WS_BILL_ADDR_SK WEB_SALES
+WS_SHIP_CUSTOMER_SK WEB_SALES 2
+WS_SHIP_CDEMO_SK WEB_SALES 2
+WS_SHIP_HDEMO_SK WEB_SALES
+WS_SHIP_ADDR_SK WEB_SALES
+WS_WEB_PAGE_SK WEB_SALES 16
+WS_WEB_SITE_SK WEB_SALES 16
+WS_SHIP_MODE_SK WEB_SALES 16
+WS_WAREHOUSE_SK WEB_SALES 16
+WS_PROMO_SK WEB_SALES 16
+WS_ORDER_NUMBER WEB_SALES
+WS_PRICING_QUANTITY WEB_SALES
+WS_PRICING_WHOLESALE_COST WEB_SALES
+WS_PRICING_LIST_PRICE WEB_SALES 0
+WS_PRICING_SALES_PRICE WEB_SALES 0
+WS_PRICING_EXT_DISCOUNT_AMT WEB_SALES 0
+WS_PRICING_EXT_SALES_PRICE WEB_SALES 0
+WS_PRICING_EXT_WHOLESALE_COST WEB_SALES 0
+WS_PRICING_EXT_LIST_PRICE WEB_SALES 0
+WS_PRICING_EXT_TAX WEB_SALES 0
+WS_PRICING_COUPON_AMT WEB_SALES 0
+WS_PRICING_EXT_SHIP_COST WEB_SALES 0
+WS_PRICING_NET_PAID WEB_SALES 0
+WS_PRICING_NET_PAID_INC_TAX WEB_SALES 0
+WS_PRICING_NET_PAID_INC_SHIP WEB_SALES 0
+WS_PRICING_NET_PAID_INC_SHIP_TAX WEB_SALES 0
+WS_PRICING_NET_PROFIT WEB_SALES 0
+WS_PRICING WEB_SALES 128
+WS_NULLS WEB_SALES 32
+WR_IS_RETURNED WEB_SALES 16
+WS_PERMUTATION WEB_SALES 0
+#
+# WEB_SITE table structure
+#
+WEB_SITE_SK WEB_SITE
+WEB_SITE_ID WEB_SITE
+WEB_REC_START_DATE_ID WEB_SITE
+WEB_REC_END_DATE_ID WEB_SITE
+WEB_NAME WEB_SITE
+WEB_OPEN_DATE WEB_SITE
+WEB_CLOSE_DATE WEB_SITE
+WEB_CLASS WEB_SITE
+WEB_MANAGER WEB_SITE 2
+WEB_MARKET_ID WEB_SITE
+WEB_MARKET_CLASS WEB_SITE 20
+WEB_MARKET_DESC WEB_SITE 100
+WEB_MARKET_MANAGER WEB_SITE 2
+WEB_COMPANY_ID WEB_SITE
+WEB_COMPANY_NAME WEB_SITE
+WEB_ADDRESS_STREET_NUM WEB_SITE
+WEB_ADDRESS_STREET_NAME1 WEB_SITE
+WEB_ADDRESS_STREET_TYPE WEB_SITE
+WEB_ADDRESS_SUITE_NUM WEB_SITE
+WEB_ADDRESS_CITY WEB_SITE
+WEB_ADDRESS_COUNTY WEB_SITE
+WEB_ADDRESS_STATE WEB_SITE
+WEB_ADDRESS_ZIP WEB_SITE
+WEB_ADDRESS_COUNTRY WEB_SITE
+WEB_ADDRESS_GMT_OFFSET WEB_SITE
+WEB_TAX_PERCENTAGE WEB_SITE
+WEB_NULLS WEB_SITE 2
+WEB_ADDRESS WEB_SITE 7
+WEB_SCD WEB_SITE 70
+#
+# DBGEN_VERSION
+#
+DV_VERSION DBGEN_VERSION 0
+DV_CREATE_DATE DBGEN_VERSION 0
+DV_CREATE_TIME DBGEN_VERSION 0
+DV_CMDLINE_ARGS DBGEN_VERSION 0
+#
+# VALIDATION
+#
+VALIDATE_STREAM DBGEN_VERSION 0
+#
+# S_BRAND
+#
+S_BRAND_ID S_BRAND 0
+S_BRAND_SUBCLASS_ID S_BRAND 0
+S_BRAND_MANAGER_ID S_BRAND
+S_BRAND_MANUFACTURER_ID S_BRAND
+S_BRAND_NAME S_BRAND 6
+#
+# S_CUSTOMER_ADDRESS
+#
+S_CADR_ID S_CUSTOMER_ADDRESS 0
+S_CADR_ADDRESS_STREET_NUMBER S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_STREET_NAME1 S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_STREET_NAME2 S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_STREET_TYPE S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_SUITE_NUM S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_CITY S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_COUNTY S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_STATE S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_ZIP S_CUSTOMER_ADDRESS
+S_CADR_ADDRESS_COUNTRY S_CUSTOMER_ADDRESS
+S_BADDR_ADDRESS S_CUSTOMER_ADDRESS 7 CA_ADDRESS
+#
+# S_CALL_CENTER
+#
+S_CALL_CENTER_ID S_CALL_CENTER
+S_CALL_CENTER_DIVISION_ID S_CALL_CENTER
+S_CALL_CENTER_OPEN_DATE S_CALL_CENTER
+S_CALL_CENTER_CLOSED_DATE S_CALL_CENTER 0
+S_CALL_CENTER_NAME S_CALL_CENTER 0
+S_CALL_CENTER_CLASS S_CALL_CENTER 0
+S_CALL_CENTER_EMPLOYEES S_CALL_CENTER
+S_CALL_CENTER_SQFT S_CALL_CENTER
+S_CALL_CENTER_HOURS S_CALL_CENTER
+S_CALL_CENTER_MANAGER_ID S_CALL_CENTER
+S_CALL_CENTER_MARKET_ID S_CALL_CENTER
+S_CALL_CENTER_ADDRESS_ID S_CALL_CENTER
+S_CALL_CENTER_TAX_PERCENTAGE S_CALL_CENTER
+S_CALL_CENTER_SCD S_CALL_CENTER
+#
+# S_CATALOG
+#
+S_CATALOG_NUMBER S_CATALOG 0
+S_CATALOG_START_DATE S_CATALOG
+S_CATALOG_END_DATE S_CATALOG
+S_CATALOG_DESC S_CATALOG 10
+S_CATALOG_TYPE S_CATALOG
+#
+# S_CATALOG_ORDER
+#
+S_CORD_ID S_CATALOG_ORDER 0
+S_CORD_BILL_CUSTOMER_ID S_CATALOG_ORDER
+S_CORD_SHIP_CUSTOMER_ID S_CATALOG_ORDER 2
+S_CORD_ORDER_DATE S_CATALOG_ORDER
+S_CORD_ORDER_TIME S_CATALOG_ORDER
+S_CORD_SHIP_MODE_ID S_CATALOG_ORDER
+S_CORD_CALL_CENTER_ID S_CATALOG_ORDER
+S_CLIN_ITEM_ID S_CATALOG_ORDER
+S_CORD_COMMENT S_CATALOG_ORDER 100
+#
+# S_CATALOG_LINEITEM
+#
+S_CLIN_ORDER_ID S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_LINE_NUMBER S_CATALOG_ORDER_LINEITEM 0
+S_CLIN_PROMOTION_ID S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_QUANTITY S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_COUPON_AMT S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_WAREHOUSE_ID S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_SHIP_DATE S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_CATALOG_ID S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_CATALOG_PAGE_ID S_CATALOG_ORDER_LINEITEM 2
+S_CLIN_PRICING S_CATALOG_ORDER_LINEITEM 8
+S_CLIN_SHIP_COST S_CATALOG_ORDER_LINEITEM 0
+S_CLIN_IS_RETURNED S_CATALOG_ORDER_LINEITEM 1
+S_CLIN_PERMUTE S_CATALOG_ORDER_LINEITEM 0
+#
+# S_CATALOG_PAGE
+#
+S_CATALOG_PAGE_CATALOG_NUMBER S_CATALOG_PAGE 0
+S_CATALOG_PAGE_NUMBER S_CATALOG_PAGE 0
+S_CATALOG_PAGE_DEPARTMENT S_CATALOG_PAGE
+S_CP_ID S_CATALOG_PAGE
+S_CP_START_DATE S_CATALOG_PAGE
+S_CP_END_DATE S_CATALOG_PAGE
+S_CP_DESCRIPTION S_CATALOG_PAGE 100 CP_DESCRIPTION
+S_CP_TYPE S_CATALOG_PAGE
+#
+# S_CATALOG_PROMOTIONAL_ITEM
+#
+S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER S_CATALOG_PROMOTIONAL_ITEM
+S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER S_CATALOG_PROMOTIONAL_ITEM
+S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID S_CATALOG_PROMOTIONAL_ITEM
+S_CATALOG_PROMOTIONAL_ITEM_PROMOTION_ID S_CATALOG_PROMOTIONAL_ITEM 0
+#
+# S_CATALOG_RETURNS
+#
+S_CRET_CALL_CENTER_ID S_CATALOG_RETURNS 9
+S_CRET_ORDER_ID S_CATALOG_RETURNS 0
+S_CRET_LINE_NUMBER S_CATALOG_RETURNS 0
+S_CRET_ITEM_ID S_CATALOG_RETURNS 0
+S_CRET_RETURN_CUSTOMER_ID S_CATALOG_RETURNS 0
+S_CRET_REFUND_CUSTOMER_ID S_CATALOG_RETURNS 0
+S_CRET_DATE S_CATALOG_RETURNS 9
+S_CRET_TIME S_CATALOG_RETURNS 18
+S_CRET_QUANTITY S_CATALOG_RETURNS 0
+S_CRET_AMOUNT S_CATALOG_RETURNS 0
+S_CRET_TAX S_CATALOG_RETURNS 0
+S_CRET_FEE S_CATALOG_RETURNS 0
+S_CRET_SHIP_COST S_CATALOG_RETURNS 0
+S_CRET_REFUNDED_CASH S_CATALOG_RETURNS 0
+S_CRET_REVERSED_CHARGE S_CATALOG_RETURNS 0
+S_CRET_MERCHANT_CREDIT S_CATALOG_RETURNS 0
+S_CRET_REASON_ID S_CATALOG_RETURNS 9
+S_CRET_PRICING S_CATALOG_RETURNS 72
+S_CRET_SHIPMODE_ID S_CATALOG_RETURNS 9
+S_CRET_WAREHOUSE_ID S_CATALOG_RETURNS 9
+S_CRET_CATALOG_PAGE_ID S_CATALOG_RETURNS 0
+#
+# S_CATEGORY
+#
+S_CATEGORY_ID S_CATEGORY 0
+S_CATEGORY_NAME S_CATEGORY 0
+S_CATEGORY_DESC S_CATEGORY 10
+#
+# S_CLASS
+#
+S_CLASS_ID S_CLASS 0
+S_CLASS_SUBCAT_ID S_CLASS
+S_CLASS_DESC S_CLASS 10
+#
+# S_COMPANY
+#
+S_COMPANY_ID S_COMPANY 0
+S_COMPANY_NAME S_COMPANY 0
+#
+# S_CUSTOMER
+#
+S_CUST_ID S_CUSTOMER 0
+S_CUST_SALUTATION S_CUSTOMER
+S_CUST_LAST_NAME S_CUSTOMER
+S_CUST_FIRST_NAME S_CUSTOMER
+S_CUST_PREFERRED_FLAG S_CUSTOMER
+S_CUST_BIRTH_DATE S_CUSTOMER
+S_CUST_FIRST_PURCHASE_DATE S_CUSTOMER
+S_CUST_FIRST_SHIPTO_DATE S_CUSTOMER
+S_CUST_BIRTH_COUNTRY S_CUSTOMER
+S_CUST_LOGIN S_CUSTOMER 25
+S_CUST_EMAIL S_CUSTOMER 23
+S_CUST_LAST_LOGIN S_CUSTOMER
+S_CUST_LAST_REVIEW S_CUSTOMER
+S_CUST_PRIMARY_MACHINE S_CUSTOMER 4
+S_CUST_SECONDARY_MACHINE S_CUSTOMER 4
+S_CUST_ADDRESS S_CUSTOMER 7
+S_CUST_ADDRESS_STREET_NUM S_CUSTOMER
+S_CUST_ADDRESS_STREET_NAME1 S_CUSTOMER
+S_CUST_ADDRESS_STREET_NAME2 S_CUSTOMER
+S_CUST_ADDRESS_STREET_TYPE S_CUSTOMER
+S_CUST_ADDRESS_SUITE_NUM S_CUSTOMER
+S_CUST_ADDRESS_CITY S_CUSTOMER
+S_CUST_ADDRESS_ZIP S_CUSTOMER
+S_CUST_ADDRESS_COUNTY S_CUSTOMER
+S_CUST_ADDRESS_STATE S_CUSTOMER
+S_CUST_ADDRESS_COUNTRY S_CUSTOMER
+S_CUST_LOCATION_TYPE S_CUSTOMER
+S_CUST_GENDER S_CUSTOMER
+S_CUST_MARITAL_STATUS S_CUSTOMER
+S_CUST_EDUCATION S_CUSTOMER
+S_CUST_CREDIT_RATING S_CUSTOMER
+S_CUST_PURCHASE_ESTIMATE S_CUSTOMER
+S_CUST_BUY_POTENTIAL S_CUSTOMER
+S_CUST_DEPENDENT_CNT S_CUSTOMER
+S_CUST_EMPLOYED_CNT S_CUSTOMER
+S_CUST_COLLEGE_CNT S_CUSTOMER
+S_CUST_VEHICLE_CNT S_CUSTOMER
+S_CUST_INCOME S_CUSTOMER
+#
+# S_DIVISION
+#
+S_DIVISION_ID S_DIVISION 0
+S_DIVISION_COMPANY S_DIVISION 0
+S_DIVISION_NAME S_DIVISION 0
+#
+# S_INVENTORY
+#
+S_INVN_WAREHOUSE S_INVENTORY
+S_INVN_ITEM S_INVENTORY
+S_INVN_DATE S_INVENTORY 2
+S_INVN_QUANTITY S_INVENTORY
+#
+# S_ITEM
+#
+S_ITEM_ID S_ITEM 1
+S_ITEM_PERMUTE S_ITEM 0
+S_ITEM_PRODUCT_ID S_ITEM 1
+S_ITEM_DESC S_ITEM 200 I_ITEM_DESC
+S_ITEM_LIST_PRICE S_ITEM 2 I_CURRENT_PRICE
+S_ITEM_WHOLESALE_COST S_ITEM 1 I_WHOLESALE_COST
+S_ITEM_MANAGER_ID S_ITEM 1 I_MANAGER_ID
+S_ITEM_SIZE S_ITEM 1 I_SIZE
+S_ITEM_FORMULATION S_ITEM 50 I_FORMULATION
+S_ITEM_FLAVOR S_ITEM 1 I_COLOR
+S_ITEM_UNITS S_ITEM 1 I_UNITS
+S_ITEM_CONTAINER S_ITEM 1 I_CONTAINER
+S_ITEM_SCD S_ITEM 1 I_SCD
+#
+# S_MANAGER
+#
+S_MANAGER_ID S_MANAGER 0
+S_MANAGER_NAME S_MANAGER 2
+#
+# S_MANUFACTURER
+#
+S_MANUFACTURER_ID S_MANUFACTURER 0
+S_MANUFACTURER_NAME S_MANUFACTURER 0
+#
+# S_MARKET
+#
+S_MARKET_ID S_MARKET 0
+S_MARKET_CLASS_NAME S_MARKET 0
+S_MARKET_DESC S_MARKET 10
+S_MARKET_MANAGER_ID S_MARKET
+#
+# S_PRODUCT
+#
+S_PRODUCT_ID S_PRODUCT 0
+S_PRODUCT_BRAND_ID S_PRODUCT
+S_PRODUCT_NAME S_PRODUCT 0
+S_PRODUCT_TYPE S_PRODUCT
+#
+# S_PROMOTION
+#
+S_PROMOTION_ID S_PROMOTION
+S_PROMOTION_ITEM_ID S_PROMOTION
+S_PROMOTION_START_DATE S_PROMOTION
+S_PROMOTION_END_DATE S_PROMOTION
+S_PROMOTION_COST S_PROMOTION
+S_PROMOTION_RESPONSE_TARGET S_PROMOTION
+S_PROMOTION_DMAIL S_PROMOTION 0
+S_PROMOTION_EMAIL S_PROMOTION 0
+S_PROMOTION_CATALOG S_PROMOTION 0
+S_PROMOTION_TV S_PROMOTION 0
+S_PROMOTION_RADIO S_PROMOTION 0
+S_PROMOTION_PRESS S_PROMOTION 0
+S_PROMOTION_EVENT S_PROMOTION 0
+S_PROMOTION_DEMO S_PROMOTION 0
+S_PROMOTION_DETAILS S_PROMOTION 100 P_CHANNEL_DETAILS
+S_PROMOTION_PURPOSE S_PROMOTION
+S_PROMOTION_DISCOUNT_ACTIVE S_PROMOTION
+S_PROMOTION_DISCOUNT_PCT S_PROMOTION
+S_PROMOTION_NAME S_PROMOTION 0
+S_PROMOTION_BITFIELD S_PROMOTION
+#
+# S_PURCHASE
+#
+S_PURCHASE_ID S_PURCHASE 0
+S_PURCHASE_STORE_ID S_PURCHASE
+S_PURCHASE_CUSTOMER_ID S_PURCHASE
+S_PURCHASE_DATE S_PURCHASE
+S_PURCHASE_TIME S_PURCHASE
+S_PURCHASE_REGISTER S_PURCHASE
+S_PURCHASE_CLERK S_PURCHASE
+S_PURCHASE_COMMENT S_PURCHASE 100
+S_PURCHASE_PRICING S_PURCHASE 7
+S_PLINE_ITEM_ID S_PURCHASE
+#
+# S_PLINE
+#
+S_PLINE_PURCHASE_ID S_PURCHASE_LINEITEM 12
+S_PLINE_NUMBER S_PURCHASE_LINEITEM 12
+S_PLINE_PROMOTION_ID S_PURCHASE_LINEITEM 12
+S_PLINE_SALE_PRICE S_PURCHASE_LINEITEM 12
+S_PLINE_QUANTITY S_PURCHASE_LINEITEM 12
+S_PLINE_COUPON_AMT S_PURCHASE_LINEITEM 12
+S_PLINE_COMMENT S_PURCHASE_LINEITEM 1200
+S_PLINE_PRICING S_PURCHASE_LINEITEM 96
+S_PLINE_IS_RETURNED S_PURCHASE_LINEITEM 12
+S_PLINE_PERMUTE S_PURCHASE_LINEITEM 0
+#
+# S_REASON
+#
+S_REASON_ID S_REASON 0
+S_REASON_DESC S_REASON 10
+#
+# S_STORE
+#
+S_STORE_ID S_STORE
+S_STORE_ADDRESS_ID S_STORE
+S_STORE_DIVISION_ID S_STORE
+S_STORE_OPEN_DATE S_STORE
+S_STORE_CLOSE_DATE S_STORE
+S_STORE_NAME S_STORE 0
+S_STORE_CLASS S_STORE 0
+S_STORE_EMPLOYEES S_STORE
+S_STORE_FLOOR_SPACE S_STORE
+S_STORE_HOURS S_STORE
+S_STORE_MARKET_MANAGER_ID S_STORE 0
+S_STORE_MANAGER_ID S_STORE
+S_STORE_MARKET_ID S_STORE
+S_STORE_GEOGRAPHY_CLASS S_STORE
+S_STORE_TAX_PERCENTAGE S_STORE
+#
+# S_STORE_PROMOTIONAL_ITEM
+#
+S_SITM_PROMOTION_ID S_STORE_PROMOTIONAL_ITEM
+S_SITM_ITEM_ID S_STORE_PROMOTIONAL_ITEM
+S_SITM_STORE_ID S_STORE_PROMOTIONAL_ITEM
+#
+# S_STORE_RETURNS
+#
+S_SRET_STORE_ID S_STORE_RETURNS 0
+S_SRET_PURCHASE_ID S_STORE_RETURNS 0
+S_SRET_LINENUMBER S_STORE_RETURNS 0
+S_SRET_ITEM_ID S_STORE_RETURNS 0
+S_SRET_CUSTOMER_ID S_STORE_RETURNS 0
+S_SRET_RETURN_DATE S_STORE_RETURNS 24
+S_SRET_RETURN_TIME S_STORE_RETURNS 12
+S_SRET_TICKET_NUMBER S_STORE_RETURNS 0
+S_SRET_RETURN_QUANTITY S_STORE_RETURNS 0
+S_SRET_RETURN_AMT S_STORE_RETURNS 0
+S_SRET_RETURN_TAX S_STORE_RETURNS 0
+S_SRET_RETURN_FEE S_STORE_RETURNS 0
+S_SRET_RETURN_SHIP_COST S_STORE_RETURNS 0
+S_SRET_REFUNDED_CASH S_STORE_RETURNS 0
+S_SRET_REVERSED_CHARGE S_STORE_RETURNS 0
+S_SRET_MERCHANT_CREDIT S_STORE_RETURNS 0
+S_SRET_REASON_ID S_STORE_RETURNS 12
+S_SRET_PRICING S_STORE_RETURNS 84
+#
+# S_SUBCATEGORY
+#
+S_SBCT_ID S_SUBCATEGORY 0
+S_SBCT_CATEGORY_ID S_SUBCATEGORY
+S_SBCT_NAME S_SUBCATEGORY 0
+S_SBCT_DESC S_SUBCATEGORY 10
+#
+# S_SUBCLASS
+#
+S_SUBC_ID S_SUBCLASS 0
+S_SUBC_CLASS_ID S_SUBCLASS
+S_SUBC_NAME S_SUBCLASS 0
+S_SUBC_DESC S_SUBCLASS 10
+#
+# S_WAREHOUSE
+#
+S_WRHS_ID S_WAREHOUSE
+S_WRHS_DESC S_WAREHOUSE 10
+S_WRHS_SQFT S_WAREHOUSE
+S_WRHS_ADDRESS_ID S_WAREHOUSE
+#
+# S_WEB_ORDER
+#
+S_WORD_ID S_WEB_ORDER
+S_WORD_BILL_CUSTOMER_ID S_WEB_ORDER
+S_WORD_SHIP_CUSTOMER_ID S_WEB_ORDER 2
+S_WORD_ORDER_DATE S_WEB_ORDER
+S_WORD_ORDER_TIME S_WEB_ORDER
+S_WORD_SHIP_MODE_ID S_WEB_ORDER
+S_WORD_WEB_SITE_ID S_WEB_ORDER
+S_WORD_COMMENT S_WEB_ORDER 100
+S_WLIN_ITEM_ID S_WEB_ORDER
+#
+# S_WEB_ORDER_LINEITEM
+#
+S_WLIN_ID S_WEB_ORDER_LINEITEM 12
+S_WLIN_LINE_NUMBER S_WEB_ORDER_LINEITEM 0
+S_WLIN_PROMOTION_ID S_WEB_ORDER_LINEITEM 12
+S_WLIN_QUANTITY S_WEB_ORDER_LINEITEM 12
+S_WLIN_COUPON_AMT S_WEB_ORDER_LINEITEM 12
+S_WLIN_WAREHOUSE_ID S_WEB_ORDER_LINEITEM 12
+S_WLIN_SHIP_DATE S_WEB_ORDER_LINEITEM 12
+S_WLIN_WEB_PAGE_ID S_WEB_ORDER_LINEITEM 12
+S_WLIN_PRICING S_WEB_ORDER_LINEITEM 96
+S_WLIN_SHIP_COST S_WEB_ORDER_LINEITEM 0
+S_WLIN_IS_RETURNED S_WEB_ORDER_LINEITEM 12
+S_WLIN_PERMUTE S_WEB_ORDER_LINEITEM 0
+#
+# S_WEB_PAGE
+#
+S_WPAG_SITE_ID S_WEB_PAGE
+S_WPAG_ID S_WEB_PAGE
+S_WPAG_CREATE_DATE S_WEB_PAGE
+S_WPAG_ACCESS_DATE S_WEB_PAGE
+S_WPAG_AUTOGEN_FLAG S_WEB_PAGE
+S_WPAG_DEPARTMENT S_WEB_PAGE
+S_WPAG_URL S_WEB_PAGE
+S_WPAG_TYPE S_WEB_PAGE
+S_WPAG_CHAR_CNT S_WEB_PAGE
+S_WPAG_LINK_CNT S_WEB_PAGE
+S_WPAG_IMAGE_CNT S_WEB_PAGE
+S_WPAG_MAX_AD_CNT S_WEB_PAGE
+S_WPAG_PERMUTE S_WEB_PAGE 0
+#
+# S_WEB_PROMOTIONAL_ITEM
+#
+S_WITM_SITE_ID S_WEB_PROMOTIONAL_ITEM
+S_WITM_PAGE_ID S_WEB_PROMOTIONAL_ITEM
+S_WITM_ITEM_ID S_WEB_PROMOTIONAL_ITEM
+S_WITM_PROMOTION_ID S_WEB_PROMOTIONAL_ITEM
+#
+# S_WEB_RETURNS
+#
+S_WRET_SITE_ID S_WEB_RETURNS 0
+S_WRET_ORDER_ID S_WEB_RETURNS 0
+S_WRET_LINE_NUMBER S_WEB_RETURNS 0
+S_WRET_ITEM_ID S_WEB_RETURNS 0
+S_WRET_RETURN_CUST_ID S_WEB_RETURNS 0
+S_WRET_REFUND_CUST_ID S_WEB_RETURNS 0
+S_WRET_RETURN_DATE S_WEB_RETURNS 24
+S_WRET_RETURN_TIME S_WEB_RETURNS 12
+S_WRET_REASON_ID S_WEB_RETURNS 12
+S_WRET_PRICING S_WEB_RETURNS 84
+#
+# S_WEB_SITE
+#
+S_WSIT_ID S_WEB_SITE
+S_WSIT_OPEN_DATE S_WEB_SITE
+S_WSIT_CLOSE_DATE S_WEB_SITE
+S_WSIT_NAME S_WEB_SITE 0
+S_WSIT_ADDRESS_ID S_WEB_SITE
+S_WSIT_DIVISION_ID S_WEB_SITE
+S_WSIT_CLASS S_WEB_SITE
+S_WSIT_MANAGER_ID S_WEB_SITE
+S_WSIT_MARKET_ID S_WEB_SITE
+S_WSIT_TAX_PERCENTAGE S_WEB_SITE
+#
+# S_ZIP_TO_GMT
+#
+S_ZIPG_ZIP S_ZIPG 0
+S_ZIPG_GMT S_ZIPG 0
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/columns.h b/ydb/library/benchmarks/gen/tpcds-dbgen/columns.h
new file mode 100644
index 000000000000..f862e3f086ef
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/columns.h
@@ -0,0 +1,931 @@
+/*
+ * THIS IS A GENERATED FILE
+ * SEE COLUMNS.LIST
+*/
+#ifndef COLUMNS_H
+#define COLUMNS_H
+#define CALL_CENTER_START 1
+#define CC_CALL_CENTER_SK 1
+#define CC_CALL_CENTER_ID 2
+#define CC_REC_START_DATE_ID 3
+#define CC_REC_END_DATE_ID 4
+#define CC_CLOSED_DATE_ID 5
+#define CC_OPEN_DATE_ID 6
+#define CC_NAME 7
+#define CC_CLASS 8
+#define CC_EMPLOYEES 9
+#define CC_SQ_FT 10
+#define CC_HOURS 11
+#define CC_MANAGER 12
+#define CC_MARKET_ID 13
+#define CC_MARKET_CLASS 14
+#define CC_MARKET_DESC 15
+#define CC_MARKET_MANAGER 16
+#define CC_DIVISION 17
+#define CC_DIVISION_NAME 18
+#define CC_COMPANY 19
+#define CC_COMPANY_NAME 20
+#define CC_STREET_NUMBER 21
+#define CC_STREET_NAME 22
+#define CC_STREET_TYPE 23
+#define CC_SUITE_NUMBER 24
+#define CC_CITY 25
+#define CC_COUNTY 26
+#define CC_STATE 27
+#define CC_ZIP 28
+#define CC_COUNTRY 29
+#define CC_GMT_OFFSET 30
+#define CC_ADDRESS 31
+#define CC_TAX_PERCENTAGE 32
+#define CC_SCD 33
+#define CC_NULLS 34
+#define CALL_CENTER_END 34
+#define CATALOG_PAGE_START 35
+#define CP_CATALOG_PAGE_SK 35
+#define CP_CATALOG_PAGE_ID 36
+#define CP_START_DATE_ID 37
+#define CP_END_DATE_ID 38
+#define CP_PROMO_ID 39
+#define CP_DEPARTMENT 40
+#define CP_CATALOG_NUMBER 41
+#define CP_CATALOG_PAGE_NUMBER 42
+#define CP_DESCRIPTION 43
+#define CP_TYPE 44
+#define CP_NULLS 45
+#define CATALOG_PAGE_END 45
+#define CATALOG_RETURNS_START 46
+#define CR_RETURNED_DATE_SK 46
+#define CR_RETURNED_TIME_SK 47
+#define CR_ITEM_SK 48
+#define CR_REFUNDED_CUSTOMER_SK 49
+#define CR_REFUNDED_CDEMO_SK 50
+#define CR_REFUNDED_HDEMO_SK 51
+#define CR_REFUNDED_ADDR_SK 52
+#define CR_RETURNING_CUSTOMER_SK 53
+#define CR_RETURNING_CDEMO_SK 54
+#define CR_RETURNING_HDEMO_SK 55
+#define CR_RETURNING_ADDR_SK 56
+#define CR_CALL_CENTER_SK 57
+#define CR_CATALOG_PAGE_SK 58
+#define CR_SHIP_MODE_SK 59
+#define CR_WAREHOUSE_SK 60
+#define CR_REASON_SK 61
+#define CR_ORDER_NUMBER 62
+#define CR_PRICING_QUANTITY 63
+#define CR_PRICING_NET_PAID 64
+#define CR_PRICING_EXT_TAX 65
+#define CR_PRICING_NET_PAID_INC_TAX 66
+#define CR_PRICING_FEE 67
+#define CR_PRICING_EXT_SHIP_COST 68
+#define CR_PRICING_REFUNDED_CASH 69
+#define CR_PRICING_REVERSED_CHARGE 70
+#define CR_PRICING_STORE_CREDIT 71
+#define CR_PRICING_NET_LOSS 72
+#define CR_NULLS 73
+#define CR_PRICING 74
+#define CATALOG_RETURNS_END 74
+#define CATALOG_SALES_START 75
+#define CS_SOLD_DATE_SK 75
+#define CS_SOLD_TIME_SK 76
+#define CS_SHIP_DATE_SK 77
+#define CS_BILL_CUSTOMER_SK 78
+#define CS_BILL_CDEMO_SK 79
+#define CS_BILL_HDEMO_SK 80
+#define CS_BILL_ADDR_SK 81
+#define CS_SHIP_CUSTOMER_SK 82
+#define CS_SHIP_CDEMO_SK 83
+#define CS_SHIP_HDEMO_SK 84
+#define CS_SHIP_ADDR_SK 85
+#define CS_CALL_CENTER_SK 86
+#define CS_CATALOG_PAGE_SK 87
+#define CS_SHIP_MODE_SK 88
+#define CS_WAREHOUSE_SK 89
+#define CS_SOLD_ITEM_SK 90
+#define CS_PROMO_SK 91
+#define CS_ORDER_NUMBER 92
+#define CS_PRICING_QUANTITY 93
+#define CS_PRICING_WHOLESALE_COST 94
+#define CS_PRICING_LIST_PRICE 95
+#define CS_PRICING_SALES_PRICE 96
+#define CS_PRICING_COUPON_AMT 97
+#define CS_PRICING_EXT_SALES_PRICE 98
+#define CS_PRICING_EXT_DISCOUNT_AMOUNT 99
+#define CS_PRICING_EXT_WHOLESALE_COST 100
+#define CS_PRICING_EXT_LIST_PRICE 101
+#define CS_PRICING_EXT_TAX 102
+#define CS_PRICING_EXT_SHIP_COST 103
+#define CS_PRICING_NET_PAID 104
+#define CS_PRICING_NET_PAID_INC_TAX 105
+#define CS_PRICING_NET_PAID_INC_SHIP 106
+#define CS_PRICING_NET_PAID_INC_SHIP_TAX 107
+#define CS_PRICING_NET_PROFIT 108
+#define CS_PRICING 109
+#define CS_PERMUTE 110
+#define CS_NULLS 111
+#define CR_IS_RETURNED 112
+#define CS_PERMUTATION 113
+#define CATALOG_SALES_END 113
+#define CUSTOMER_START 114
+#define C_CUSTOMER_SK 114
+#define C_CUSTOMER_ID 115
+#define C_CURRENT_CDEMO_SK 116
+#define C_CURRENT_HDEMO_SK 117
+#define C_CURRENT_ADDR_SK 118
+#define C_FIRST_SHIPTO_DATE_ID 119
+#define C_FIRST_SALES_DATE_ID 120
+#define C_SALUTATION 121
+#define C_FIRST_NAME 122
+#define C_LAST_NAME 123
+#define C_PREFERRED_CUST_FLAG 124
+#define C_BIRTH_DAY 125
+#define C_BIRTH_MONTH 126
+#define C_BIRTH_YEAR 127
+#define C_BIRTH_COUNTRY 128
+#define C_LOGIN 129
+#define C_EMAIL_ADDRESS 130
+#define C_LAST_REVIEW_DATE 131
+#define C_NULLS 132
+#define CUSTOMER_END 132
+#define CUSTOMER_ADDRESS_START 133
+#define CA_ADDRESS_SK 133
+#define CA_ADDRESS_ID 134
+#define CA_ADDRESS_STREET_NUM 135
+#define CA_ADDRESS_STREET_NAME1 136
+#define CA_ADDRESS_STREET_TYPE 137
+#define CA_ADDRESS_SUITE_NUM 138
+#define CA_ADDRESS_CITY 139
+#define CA_ADDRESS_COUNTY 140
+#define CA_ADDRESS_STATE 141
+#define CA_ADDRESS_ZIP 142
+#define CA_ADDRESS_COUNTRY 143
+#define CA_ADDRESS_GMT_OFFSET 144
+#define CA_LOCATION_TYPE 145
+#define CA_NULLS 146
+#define CA_ADDRESS 147
+#define CA_ADDRESS_STREET_NAME2 148
+#define CUSTOMER_ADDRESS_END 148
+#define CUSTOMER_DEMOGRAPHICS_START 149
+#define CD_DEMO_SK 149
+#define CD_GENDER 150
+#define CD_MARITAL_STATUS 151
+#define CD_EDUCATION_STATUS 152
+#define CD_PURCHASE_ESTIMATE 153
+#define CD_CREDIT_RATING 154
+#define CD_DEP_COUNT 155
+#define CD_DEP_EMPLOYED_COUNT 156
+#define CD_DEP_COLLEGE_COUNT 157
+#define CD_NULLS 158
+#define CUSTOMER_DEMOGRAPHICS_END 158
+#define DATE_START 159
+#define D_DATE_SK 159
+#define D_DATE_ID 160
+#define D_DATE 161
+#define D_MONTH_SEQ 162
+#define D_WEEK_SEQ 163
+#define D_QUARTER_SEQ 164
+#define D_YEAR 165
+#define D_DOW 166
+#define D_MOY 167
+#define D_DOM 168
+#define D_QOY 169
+#define D_FY_YEAR 170
+#define D_FY_QUARTER_SEQ 171
+#define D_FY_WEEK_SEQ 172
+#define D_DAY_NAME 173
+#define D_QUARTER_NAME 174
+#define D_HOLIDAY 175
+#define D_WEEKEND 176
+#define D_FOLLOWING_HOLIDAY 177
+#define D_FIRST_DOM 178
+#define D_LAST_DOM 179
+#define D_SAME_DAY_LY 180
+#define D_SAME_DAY_LQ 181
+#define D_CURRENT_DAY 182
+#define D_CURRENT_WEEK 183
+#define D_CURRENT_MONTH 184
+#define D_CURRENT_QUARTER 185
+#define D_CURRENT_YEAR 186
+#define D_NULLS 187
+#define DATE_END 187
+#define HOUSEHOLD_DEMOGRAPHICS_START 188
+#define HD_DEMO_SK 188
+#define HD_INCOME_BAND_ID 189
+#define HD_BUY_POTENTIAL 190
+#define HD_DEP_COUNT 191
+#define HD_VEHICLE_COUNT 192
+#define HD_NULLS 193
+#define HOUSEHOLD_DEMOGRAPHICS_END 193
+#define INCOME_BAND_START 194
+#define IB_INCOME_BAND_ID 194
+#define IB_LOWER_BOUND 195
+#define IB_UPPER_BOUND 196
+#define IB_NULLS 197
+#define INCOME_BAND_END 197
+#define INVENTORY_START 198
+#define INV_DATE_SK 198
+#define INV_ITEM_SK 199
+#define INV_WAREHOUSE_SK 200
+#define INV_QUANTITY_ON_HAND 201
+#define INV_NULLS 202
+#define INVENTORY_END 202
+#define ITEM_START 203
+#define I_ITEM_SK 203
+#define I_ITEM_ID 204
+#define I_REC_START_DATE_ID 205
+#define I_REC_END_DATE_ID 206
+#define I_ITEM_DESC 207
+#define I_CURRENT_PRICE 208
+#define I_WHOLESALE_COST 209
+#define I_BRAND_ID 210
+#define I_BRAND 211
+#define I_CLASS_ID 212
+#define I_CLASS 213
+#define I_CATEGORY_ID 214
+#define I_CATEGORY 215
+#define I_MANUFACT_ID 216
+#define I_MANUFACT 217
+#define I_SIZE 218
+#define I_FORMULATION 219
+#define I_COLOR 220
+#define I_UNITS 221
+#define I_CONTAINER 222
+#define I_MANAGER_ID 223
+#define I_PRODUCT_NAME 224
+#define I_NULLS 225
+#define I_SCD 226
+#define I_PROMO_SK 227
+#define ITEM_END 227
+#define PROMOTION_START 228
+#define P_PROMO_SK 228
+#define P_PROMO_ID 229
+#define P_START_DATE_ID 230
+#define P_END_DATE_ID 231
+#define P_ITEM_SK 232
+#define P_COST 233
+#define P_RESPONSE_TARGET 234
+#define P_PROMO_NAME 235
+#define P_CHANNEL_DMAIL 236
+#define P_CHANNEL_EMAIL 237
+#define P_CHANNEL_CATALOG 238
+#define P_CHANNEL_TV 239
+#define P_CHANNEL_RADIO 240
+#define P_CHANNEL_PRESS 241
+#define P_CHANNEL_EVENT 242
+#define P_CHANNEL_DEMO 243
+#define P_CHANNEL_DETAILS 244
+#define P_PURPOSE 245
+#define P_DISCOUNT_ACTIVE 246
+#define P_NULLS 247
+#define PROMOTION_END 247
+#define REASON_START 248
+#define R_REASON_SK 248
+#define R_REASON_ID 249
+#define R_REASON_DESCRIPTION 250
+#define R_NULLS 251
+#define REASON_END 251
+#define SHIP_MODE_START 252
+#define SM_SHIP_MODE_SK 252
+#define SM_SHIP_MODE_ID 253
+#define SM_TYPE 254
+#define SM_CODE 255
+#define SM_CONTRACT 256
+#define SM_CARRIER 257
+#define SM_NULLS 258
+#define SHIP_MODE_END 258
+#define STORE_START 259
+#define W_STORE_SK 259
+#define W_STORE_ID 260
+#define W_STORE_REC_START_DATE_ID 261
+#define W_STORE_REC_END_DATE_ID 262
+#define W_STORE_CLOSED_DATE_ID 263
+#define W_STORE_NAME 264
+#define W_STORE_EMPLOYEES 265
+#define W_STORE_FLOOR_SPACE 266
+#define W_STORE_HOURS 267
+#define W_STORE_MANAGER 268
+#define W_STORE_MARKET_ID 269
+#define W_STORE_TAX_PERCENTAGE 270
+#define W_STORE_GEOGRAPHY_CLASS 271
+#define W_STORE_MARKET_DESC 272
+#define W_STORE_MARKET_MANAGER 273
+#define W_STORE_DIVISION_ID 274
+#define W_STORE_DIVISION_NAME 275
+#define W_STORE_COMPANY_ID 276
+#define W_STORE_COMPANY_NAME 277
+#define W_STORE_ADDRESS_STREET_NUM 278
+#define W_STORE_ADDRESS_STREET_NAME1 279
+#define W_STORE_ADDRESS_STREET_TYPE 280
+#define W_STORE_ADDRESS_SUITE_NUM 281
+#define W_STORE_ADDRESS_CITY 282
+#define W_STORE_ADDRESS_COUNTY 283
+#define W_STORE_ADDRESS_STATE 284
+#define W_STORE_ADDRESS_ZIP 285
+#define W_STORE_ADDRESS_COUNTRY 286
+#define W_STORE_ADDRESS_GMT_OFFSET 287
+#define W_STORE_NULLS 288
+#define W_STORE_TYPE 289
+#define W_STORE_SCD 290
+#define W_STORE_ADDRESS 291
+#define STORE_END 291
+#define STORE_RETURNS_START 292
+#define SR_RETURNED_DATE_SK 292
+#define SR_RETURNED_TIME_SK 293
+#define SR_ITEM_SK 294
+#define SR_CUSTOMER_SK 295
+#define SR_CDEMO_SK 296
+#define SR_HDEMO_SK 297
+#define SR_ADDR_SK 298
+#define SR_STORE_SK 299
+#define SR_REASON_SK 300
+#define SR_TICKET_NUMBER 301
+#define SR_PRICING_QUANTITY 302
+#define SR_PRICING_NET_PAID 303
+#define SR_PRICING_EXT_TAX 304
+#define SR_PRICING_NET_PAID_INC_TAX 305
+#define SR_PRICING_FEE 306
+#define SR_PRICING_EXT_SHIP_COST 307
+#define SR_PRICING_REFUNDED_CASH 308
+#define SR_PRICING_REVERSED_CHARGE 309
+#define SR_PRICING_STORE_CREDIT 310
+#define SR_PRICING_NET_LOSS 311
+#define SR_PRICING 312
+#define SR_NULLS 313
+#define STORE_RETURNS_END 313
+#define STORE_SALES_START 314
+#define SS_SOLD_DATE_SK 314
+#define SS_SOLD_TIME_SK 315
+#define SS_SOLD_ITEM_SK 316
+#define SS_SOLD_CUSTOMER_SK 317
+#define SS_SOLD_CDEMO_SK 318
+#define SS_SOLD_HDEMO_SK 319
+#define SS_SOLD_ADDR_SK 320
+#define SS_SOLD_STORE_SK 321
+#define SS_SOLD_PROMO_SK 322
+#define SS_TICKET_NUMBER 323
+#define SS_PRICING_QUANTITY 324
+#define SS_PRICING_WHOLESALE_COST 325
+#define SS_PRICING_LIST_PRICE 326
+#define SS_PRICING_SALES_PRICE 327
+#define SS_PRICING_COUPON_AMT 328
+#define SS_PRICING_EXT_SALES_PRICE 329
+#define SS_PRICING_EXT_WHOLESALE_COST 330
+#define SS_PRICING_EXT_LIST_PRICE 331
+#define SS_PRICING_EXT_TAX 332
+#define SS_PRICING_NET_PAID 333
+#define SS_PRICING_NET_PAID_INC_TAX 334
+#define SS_PRICING_NET_PROFIT 335
+#define SR_IS_RETURNED 336
+#define SS_PRICING 337
+#define SS_NULLS 338
+#define SS_PERMUTATION 339
+#define STORE_SALES_END 339
+#define TIME_START 340
+#define T_TIME_SK 340
+#define T_TIME_ID 341
+#define T_TIME 342
+#define T_HOUR 343
+#define T_MINUTE 344
+#define T_SECOND 345
+#define T_AM_PM 346
+#define T_SHIFT 347
+#define T_SUB_SHIFT 348
+#define T_MEAL_TIME 349
+#define T_NULLS 350
+#define TIME_END 350
+#define WAREHOUSE_START 351
+#define W_WAREHOUSE_SK 351
+#define W_WAREHOUSE_ID 352
+#define W_WAREHOUSE_NAME 353
+#define W_WAREHOUSE_SQ_FT 354
+#define W_ADDRESS_STREET_NUM 355
+#define W_ADDRESS_STREET_NAME1 356
+#define W_ADDRESS_STREET_TYPE 357
+#define W_ADDRESS_SUITE_NUM 358
+#define W_ADDRESS_CITY 359
+#define W_ADDRESS_COUNTY 360
+#define W_ADDRESS_STATE 361
+#define W_ADDRESS_ZIP 362
+#define W_ADDRESS_COUNTRY 363
+#define W_ADDRESS_GMT_OFFSET 364
+#define W_NULLS 365
+#define W_WAREHOUSE_ADDRESS 366
+#define WAREHOUSE_END 366
+#define WEB_PAGE_START 367
+#define WP_PAGE_SK 367
+#define WP_PAGE_ID 368
+#define WP_REC_START_DATE_ID 369
+#define WP_REC_END_DATE_ID 370
+#define WP_CREATION_DATE_SK 371
+#define WP_ACCESS_DATE_SK 372
+#define WP_AUTOGEN_FLAG 373
+#define WP_CUSTOMER_SK 374
+#define WP_URL 375
+#define WP_TYPE 376
+#define WP_CHAR_COUNT 377
+#define WP_LINK_COUNT 378
+#define WP_IMAGE_COUNT 379
+#define WP_MAX_AD_COUNT 380
+#define WP_NULLS 381
+#define WP_SCD 382
+#define WEB_PAGE_END 382
+#define WEB_RETURNS_START 383
+#define WR_RETURNED_DATE_SK 383
+#define WR_RETURNED_TIME_SK 384
+#define WR_ITEM_SK 385
+#define WR_REFUNDED_CUSTOMER_SK 386
+#define WR_REFUNDED_CDEMO_SK 387
+#define WR_REFUNDED_HDEMO_SK 388
+#define WR_REFUNDED_ADDR_SK 389
+#define WR_RETURNING_CUSTOMER_SK 390
+#define WR_RETURNING_CDEMO_SK 391
+#define WR_RETURNING_HDEMO_SK 392
+#define WR_RETURNING_ADDR_SK 393
+#define WR_WEB_PAGE_SK 394
+#define WR_REASON_SK 395
+#define WR_ORDER_NUMBER 396
+#define WR_PRICING_QUANTITY 397
+#define WR_PRICING_NET_PAID 398
+#define WR_PRICING_EXT_TAX 399
+#define WR_PRICING_NET_PAID_INC_TAX 400
+#define WR_PRICING_FEE 401
+#define WR_PRICING_EXT_SHIP_COST 402
+#define WR_PRICING_REFUNDED_CASH 403
+#define WR_PRICING_REVERSED_CHARGE 404
+#define WR_PRICING_STORE_CREDIT 405
+#define WR_PRICING_NET_LOSS 406
+#define WR_PRICING 407
+#define WR_NULLS 408
+#define WEB_RETURNS_END 408
+#define WEB_SALES_START 409
+#define WS_SOLD_DATE_SK 409
+#define WS_SOLD_TIME_SK 410
+#define WS_SHIP_DATE_SK 411
+#define WS_ITEM_SK 412
+#define WS_BILL_CUSTOMER_SK 413
+#define WS_BILL_CDEMO_SK 414
+#define WS_BILL_HDEMO_SK 415
+#define WS_BILL_ADDR_SK 416
+#define WS_SHIP_CUSTOMER_SK 417
+#define WS_SHIP_CDEMO_SK 418
+#define WS_SHIP_HDEMO_SK 419
+#define WS_SHIP_ADDR_SK 420
+#define WS_WEB_PAGE_SK 421
+#define WS_WEB_SITE_SK 422
+#define WS_SHIP_MODE_SK 423
+#define WS_WAREHOUSE_SK 424
+#define WS_PROMO_SK 425
+#define WS_ORDER_NUMBER 426
+#define WS_PRICING_QUANTITY 427
+#define WS_PRICING_WHOLESALE_COST 428
+#define WS_PRICING_LIST_PRICE 429
+#define WS_PRICING_SALES_PRICE 430
+#define WS_PRICING_EXT_DISCOUNT_AMT 431
+#define WS_PRICING_EXT_SALES_PRICE 432
+#define WS_PRICING_EXT_WHOLESALE_COST 433
+#define WS_PRICING_EXT_LIST_PRICE 434
+#define WS_PRICING_EXT_TAX 435
+#define WS_PRICING_COUPON_AMT 436
+#define WS_PRICING_EXT_SHIP_COST 437
+#define WS_PRICING_NET_PAID 438
+#define WS_PRICING_NET_PAID_INC_TAX 439
+#define WS_PRICING_NET_PAID_INC_SHIP 440
+#define WS_PRICING_NET_PAID_INC_SHIP_TAX 441
+#define WS_PRICING_NET_PROFIT 442
+#define WS_PRICING 443
+#define WS_NULLS 444
+#define WR_IS_RETURNED 445
+#define WS_PERMUTATION 446
+#define WEB_SALES_END 446
+#define WEB_SITE_START 447
+#define WEB_SITE_SK 447
+#define WEB_SITE_ID 448
+#define WEB_REC_START_DATE_ID 449
+#define WEB_REC_END_DATE_ID 450
+#define WEB_NAME 451
+#define WEB_OPEN_DATE 452
+#define WEB_CLOSE_DATE 453
+#define WEB_CLASS 454
+#define WEB_MANAGER 455
+#define WEB_MARKET_ID 456
+#define WEB_MARKET_CLASS 457
+#define WEB_MARKET_DESC 458
+#define WEB_MARKET_MANAGER 459
+#define WEB_COMPANY_ID 460
+#define WEB_COMPANY_NAME 461
+#define WEB_ADDRESS_STREET_NUM 462
+#define WEB_ADDRESS_STREET_NAME1 463
+#define WEB_ADDRESS_STREET_TYPE 464
+#define WEB_ADDRESS_SUITE_NUM 465
+#define WEB_ADDRESS_CITY 466
+#define WEB_ADDRESS_COUNTY 467
+#define WEB_ADDRESS_STATE 468
+#define WEB_ADDRESS_ZIP 469
+#define WEB_ADDRESS_COUNTRY 470
+#define WEB_ADDRESS_GMT_OFFSET 471
+#define WEB_TAX_PERCENTAGE 472
+#define WEB_NULLS 473
+#define WEB_ADDRESS 474
+#define WEB_SCD 475
+#define WEB_SITE_END 475
+#define DBGEN_VERSION_START 476
+#define DV_VERSION 476
+#define DV_CREATE_DATE 477
+#define DV_CREATE_TIME 478
+#define DV_CMDLINE_ARGS 479
+#define VALIDATE_STREAM 480
+#define DBGEN_VERSION_END 480
+#define S_BRAND_START 481
+#define S_BRAND_ID 481
+#define S_BRAND_SUBCLASS_ID 482
+#define S_BRAND_MANAGER_ID 483
+#define S_BRAND_MANUFACTURER_ID 484
+#define S_BRAND_NAME 485
+#define S_BRAND_END 485
+#define S_CUSTOMER_ADDRESS_START 486
+#define S_CADR_ID 486
+#define S_CADR_ADDRESS_STREET_NUMBER 487
+#define S_CADR_ADDRESS_STREET_NAME1 488
+#define S_CADR_ADDRESS_STREET_NAME2 489
+#define S_CADR_ADDRESS_STREET_TYPE 490
+#define S_CADR_ADDRESS_SUITE_NUM 491
+#define S_CADR_ADDRESS_CITY 492
+#define S_CADR_ADDRESS_COUNTY 493
+#define S_CADR_ADDRESS_STATE 494
+#define S_CADR_ADDRESS_ZIP 495
+#define S_CADR_ADDRESS_COUNTRY 496
+#define S_BADDR_ADDRESS 497
+#define S_CUSTOMER_ADDRESS_END 497
+#define S_CALL_CENTER_START 498
+#define S_CALL_CENTER_ID 498
+#define S_CALL_CENTER_DIVISION_ID 499
+#define S_CALL_CENTER_OPEN_DATE 500
+#define S_CALL_CENTER_CLOSED_DATE 501
+#define S_CALL_CENTER_NAME 502
+#define S_CALL_CENTER_CLASS 503
+#define S_CALL_CENTER_EMPLOYEES 504
+#define S_CALL_CENTER_SQFT 505
+#define S_CALL_CENTER_HOURS 506
+#define S_CALL_CENTER_MANAGER_ID 507
+#define S_CALL_CENTER_MARKET_ID 508
+#define S_CALL_CENTER_ADDRESS_ID 509
+#define S_CALL_CENTER_TAX_PERCENTAGE 510
+#define S_CALL_CENTER_SCD 511
+#define S_CALL_CENTER_END 511
+#define S_CATALOG_START 512
+#define S_CATALOG_NUMBER 512
+#define S_CATALOG_START_DATE 513
+#define S_CATALOG_END_DATE 514
+#define S_CATALOG_DESC 515
+#define S_CATALOG_TYPE 516
+#define S_CATALOG_END 516
+#define S_CATALOG_ORDER_START 517
+#define S_CORD_ID 517
+#define S_CORD_BILL_CUSTOMER_ID 518
+#define S_CORD_SHIP_CUSTOMER_ID 519
+#define S_CORD_ORDER_DATE 520
+#define S_CORD_ORDER_TIME 521
+#define S_CORD_SHIP_MODE_ID 522
+#define S_CORD_CALL_CENTER_ID 523
+#define S_CLIN_ITEM_ID 524
+#define S_CORD_COMMENT 525
+#define S_CATALOG_ORDER_END 525
+#define S_CATALOG_ORDER_LINEITEM_START 526
+#define S_CLIN_ORDER_ID 526
+#define S_CLIN_LINE_NUMBER 527
+#define S_CLIN_PROMOTION_ID 528
+#define S_CLIN_QUANTITY 529
+#define S_CLIN_COUPON_AMT 530
+#define S_CLIN_WAREHOUSE_ID 531
+#define S_CLIN_SHIP_DATE 532
+#define S_CLIN_CATALOG_ID 533
+#define S_CLIN_CATALOG_PAGE_ID 534
+#define S_CLIN_PRICING 535
+#define S_CLIN_SHIP_COST 536
+#define S_CLIN_IS_RETURNED 537
+#define S_CLIN_PERMUTE 538
+#define S_CATALOG_ORDER_LINEITEM_END 538
+#define S_CATALOG_PAGE_START 539
+#define S_CATALOG_PAGE_CATALOG_NUMBER 539
+#define S_CATALOG_PAGE_NUMBER 540
+#define S_CATALOG_PAGE_DEPARTMENT 541
+#define S_CP_ID 542
+#define S_CP_START_DATE 543
+#define S_CP_END_DATE 544
+#define S_CP_DESCRIPTION 545
+#define S_CP_TYPE 546
+#define S_CATALOG_PAGE_END 546
+#define S_CATALOG_PROMOTIONAL_ITEM_START 547
+#define S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER 547
+#define S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER 548
+#define S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID 549
+#define S_CATALOG_PROMOTIONAL_ITEM_PROMOTION_ID 550
+#define S_CATALOG_PROMOTIONAL_ITEM_END 550
+#define S_CATALOG_RETURNS_START 551
+#define S_CRET_CALL_CENTER_ID 551
+#define S_CRET_ORDER_ID 552
+#define S_CRET_LINE_NUMBER 553
+#define S_CRET_ITEM_ID 554
+#define S_CRET_RETURN_CUSTOMER_ID 555
+#define S_CRET_REFUND_CUSTOMER_ID 556
+#define S_CRET_DATE 557
+#define S_CRET_TIME 558
+#define S_CRET_QUANTITY 559
+#define S_CRET_AMOUNT 560
+#define S_CRET_TAX 561
+#define S_CRET_FEE 562
+#define S_CRET_SHIP_COST 563
+#define S_CRET_REFUNDED_CASH 564
+#define S_CRET_REVERSED_CHARGE 565
+#define S_CRET_MERCHANT_CREDIT 566
+#define S_CRET_REASON_ID 567
+#define S_CRET_PRICING 568
+#define S_CRET_SHIPMODE_ID 569
+#define S_CRET_WAREHOUSE_ID 570
+#define S_CRET_CATALOG_PAGE_ID 571
+#define S_CATALOG_RETURNS_END 571
+#define S_CATEGORY_START 572
+#define S_CATEGORY_ID 572
+#define S_CATEGORY_NAME 573
+#define S_CATEGORY_DESC 574
+#define S_CATEGORY_END 574
+#define S_CLASS_START 575
+#define S_CLASS_ID 575
+#define S_CLASS_SUBCAT_ID 576
+#define S_CLASS_DESC 577
+#define S_CLASS_END 577
+#define S_COMPANY_START 578
+#define S_COMPANY_ID 578
+#define S_COMPANY_NAME 579
+#define S_COMPANY_END 579
+#define S_CUSTOMER_START 580
+#define S_CUST_ID 580
+#define S_CUST_SALUTATION 581
+#define S_CUST_LAST_NAME 582
+#define S_CUST_FIRST_NAME 583
+#define S_CUST_PREFERRED_FLAG 584
+#define S_CUST_BIRTH_DATE 585
+#define S_CUST_FIRST_PURCHASE_DATE 586
+#define S_CUST_FIRST_SHIPTO_DATE 587
+#define S_CUST_BIRTH_COUNTRY 588
+#define S_CUST_LOGIN 589
+#define S_CUST_EMAIL 590
+#define S_CUST_LAST_LOGIN 591
+#define S_CUST_LAST_REVIEW 592
+#define S_CUST_PRIMARY_MACHINE 593
+#define S_CUST_SECONDARY_MACHINE 594
+#define S_CUST_ADDRESS 595
+#define S_CUST_ADDRESS_STREET_NUM 596
+#define S_CUST_ADDRESS_STREET_NAME1 597
+#define S_CUST_ADDRESS_STREET_NAME2 598
+#define S_CUST_ADDRESS_STREET_TYPE 599
+#define S_CUST_ADDRESS_SUITE_NUM 600
+#define S_CUST_ADDRESS_CITY 601
+#define S_CUST_ADDRESS_ZIP 602
+#define S_CUST_ADDRESS_COUNTY 603
+#define S_CUST_ADDRESS_STATE 604
+#define S_CUST_ADDRESS_COUNTRY 605
+#define S_CUST_LOCATION_TYPE 606
+#define S_CUST_GENDER 607
+#define S_CUST_MARITAL_STATUS 608
+#define S_CUST_EDUCATION 609
+#define S_CUST_CREDIT_RATING 610
+#define S_CUST_PURCHASE_ESTIMATE 611
+#define S_CUST_BUY_POTENTIAL 612
+#define S_CUST_DEPENDENT_CNT 613
+#define S_CUST_EMPLOYED_CNT 614
+#define S_CUST_COLLEGE_CNT 615
+#define S_CUST_VEHICLE_CNT 616
+#define S_CUST_INCOME 617
+#define S_CUSTOMER_END 617
+#define S_DIVISION_START 618
+#define S_DIVISION_ID 618
+#define S_DIVISION_COMPANY 619
+#define S_DIVISION_NAME 620
+#define S_DIVISION_END 620
+#define S_INVENTORY_START 621
+#define S_INVN_WAREHOUSE 621
+#define S_INVN_ITEM 622
+#define S_INVN_DATE 623
+#define S_INVN_QUANTITY 624
+#define S_INVENTORY_END 624
+#define S_ITEM_START 625
+#define S_ITEM_ID 625
+#define S_ITEM_PERMUTE 626
+#define S_ITEM_PRODUCT_ID 627
+#define S_ITEM_DESC 628
+#define S_ITEM_LIST_PRICE 629
+#define S_ITEM_WHOLESALE_COST 630
+#define S_ITEM_MANAGER_ID 631
+#define S_ITEM_SIZE 632
+#define S_ITEM_FORMULATION 633
+#define S_ITEM_FLAVOR 634
+#define S_ITEM_UNITS 635
+#define S_ITEM_CONTAINER 636
+#define S_ITEM_SCD 637
+#define S_ITEM_END 637
+#define S_MANAGER_START 638
+#define S_MANAGER_ID 638
+#define S_MANAGER_NAME 639
+#define S_MANAGER_END 639
+#define S_MANUFACTURER_START 640
+#define S_MANUFACTURER_ID 640
+#define S_MANUFACTURER_NAME 641
+#define S_MANUFACTURER_END 641
+#define S_MARKET_START 642
+#define S_MARKET_ID 642
+#define S_MARKET_CLASS_NAME 643
+#define S_MARKET_DESC 644
+#define S_MARKET_MANAGER_ID 645
+#define S_MARKET_END 645
+#define S_PRODUCT_START 646
+#define S_PRODUCT_ID 646
+#define S_PRODUCT_BRAND_ID 647
+#define S_PRODUCT_NAME 648
+#define S_PRODUCT_TYPE 649
+#define S_PRODUCT_END 649
+#define S_PROMOTION_START 650
+#define S_PROMOTION_ID 650
+#define S_PROMOTION_ITEM_ID 651
+#define S_PROMOTION_START_DATE 652
+#define S_PROMOTION_END_DATE 653
+#define S_PROMOTION_COST 654
+#define S_PROMOTION_RESPONSE_TARGET 655
+#define S_PROMOTION_DMAIL 656
+#define S_PROMOTION_EMAIL 657
+#define S_PROMOTION_CATALOG 658
+#define S_PROMOTION_TV 659
+#define S_PROMOTION_RADIO 660
+#define S_PROMOTION_PRESS 661
+#define S_PROMOTION_EVENT 662
+#define S_PROMOTION_DEMO 663
+#define S_PROMOTION_DETAILS 664
+#define S_PROMOTION_PURPOSE 665
+#define S_PROMOTION_DISCOUNT_ACTIVE 666
+#define S_PROMOTION_DISCOUNT_PCT 667
+#define S_PROMOTION_NAME 668
+#define S_PROMOTION_BITFIELD 669
+#define S_PROMOTION_END 669
+#define S_PURCHASE_START 670
+#define S_PURCHASE_ID 670
+#define S_PURCHASE_STORE_ID 671
+#define S_PURCHASE_CUSTOMER_ID 672
+#define S_PURCHASE_DATE 673
+#define S_PURCHASE_TIME 674
+#define S_PURCHASE_REGISTER 675
+#define S_PURCHASE_CLERK 676
+#define S_PURCHASE_COMMENT 677
+#define S_PURCHASE_PRICING 678
+#define S_PLINE_ITEM_ID 679
+#define S_PURCHASE_END 679
+#define S_PURCHASE_LINEITEM_START 680
+#define S_PLINE_PURCHASE_ID 680
+#define S_PLINE_NUMBER 681
+#define S_PLINE_PROMOTION_ID 682
+#define S_PLINE_SALE_PRICE 683
+#define S_PLINE_QUANTITY 684
+#define S_PLINE_COUPON_AMT 685
+#define S_PLINE_COMMENT 686
+#define S_PLINE_PRICING 687
+#define S_PLINE_IS_RETURNED 688
+#define S_PLINE_PERMUTE 689
+#define S_PURCHASE_LINEITEM_END 689
+#define S_REASON_START 690
+#define S_REASON_ID 690
+#define S_REASON_DESC 691
+#define S_REASON_END 691
+#define S_STORE_START 692
+#define S_STORE_ID 692
+#define S_STORE_ADDRESS_ID 693
+#define S_STORE_DIVISION_ID 694
+#define S_STORE_OPEN_DATE 695
+#define S_STORE_CLOSE_DATE 696
+#define S_STORE_NAME 697
+#define S_STORE_CLASS 698
+#define S_STORE_EMPLOYEES 699
+#define S_STORE_FLOOR_SPACE 700
+#define S_STORE_HOURS 701
+#define S_STORE_MARKET_MANAGER_ID 702
+#define S_STORE_MANAGER_ID 703
+#define S_STORE_MARKET_ID 704
+#define S_STORE_GEOGRAPHY_CLASS 705
+#define S_STORE_TAX_PERCENTAGE 706
+#define S_STORE_END 706
+#define S_STORE_PROMOTIONAL_ITEM_START 707
+#define S_SITM_PROMOTION_ID 707
+#define S_SITM_ITEM_ID 708
+#define S_SITM_STORE_ID 709
+#define S_STORE_PROMOTIONAL_ITEM_END 709
+#define S_STORE_RETURNS_START 710
+#define S_SRET_STORE_ID 710
+#define S_SRET_PURCHASE_ID 711
+#define S_SRET_LINENUMBER 712
+#define S_SRET_ITEM_ID 713
+#define S_SRET_CUSTOMER_ID 714
+#define S_SRET_RETURN_DATE 715
+#define S_SRET_RETURN_TIME 716
+#define S_SRET_TICKET_NUMBER 717
+#define S_SRET_RETURN_QUANTITY 718
+#define S_SRET_RETURN_AMT 719
+#define S_SRET_RETURN_TAX 720
+#define S_SRET_RETURN_FEE 721
+#define S_SRET_RETURN_SHIP_COST 722
+#define S_SRET_REFUNDED_CASH 723
+#define S_SRET_REVERSED_CHARGE 724
+#define S_SRET_MERCHANT_CREDIT 725
+#define S_SRET_REASON_ID 726
+#define S_SRET_PRICING 727
+#define S_STORE_RETURNS_END 727
+#define S_SUBCATEGORY_START 728
+#define S_SBCT_ID 728
+#define S_SBCT_CATEGORY_ID 729
+#define S_SBCT_NAME 730
+#define S_SBCT_DESC 731
+#define S_SUBCATEGORY_END 731
+#define S_SUBCLASS_START 732
+#define S_SUBC_ID 732
+#define S_SUBC_CLASS_ID 733
+#define S_SUBC_NAME 734
+#define S_SUBC_DESC 735
+#define S_SUBCLASS_END 735
+#define S_WAREHOUSE_START 736
+#define S_WRHS_ID 736
+#define S_WRHS_DESC 737
+#define S_WRHS_SQFT 738
+#define S_WRHS_ADDRESS_ID 739
+#define S_WAREHOUSE_END 739
+#define S_WEB_ORDER_START 740
+#define S_WORD_ID 740
+#define S_WORD_BILL_CUSTOMER_ID 741
+#define S_WORD_SHIP_CUSTOMER_ID 742
+#define S_WORD_ORDER_DATE 743
+#define S_WORD_ORDER_TIME 744
+#define S_WORD_SHIP_MODE_ID 745
+#define S_WORD_WEB_SITE_ID 746
+#define S_WORD_COMMENT 747
+#define S_WLIN_ITEM_ID 748
+#define S_WEB_ORDER_END 748
+#define S_WEB_ORDER_LINEITEM_START 749
+#define S_WLIN_ID 749
+#define S_WLIN_LINE_NUMBER 750
+#define S_WLIN_PROMOTION_ID 751
+#define S_WLIN_QUANTITY 752
+#define S_WLIN_COUPON_AMT 753
+#define S_WLIN_WAREHOUSE_ID 754
+#define S_WLIN_SHIP_DATE 755
+#define S_WLIN_WEB_PAGE_ID 756
+#define S_WLIN_PRICING 757
+#define S_WLIN_SHIP_COST 758
+#define S_WLIN_IS_RETURNED 759
+#define S_WLIN_PERMUTE 760
+#define S_WEB_ORDER_LINEITEM_END 760
+#define S_WEB_PAGE_START 761
+#define S_WPAG_SITE_ID 761
+#define S_WPAG_ID 762
+#define S_WPAG_CREATE_DATE 763
+#define S_WPAG_ACCESS_DATE 764
+#define S_WPAG_AUTOGEN_FLAG 765
+#define S_WPAG_DEPARTMENT 766
+#define S_WPAG_URL 767
+#define S_WPAG_TYPE 768
+#define S_WPAG_CHAR_CNT 769
+#define S_WPAG_LINK_CNT 770
+#define S_WPAG_IMAGE_CNT 771
+#define S_WPAG_MAX_AD_CNT 772
+#define S_WPAG_PERMUTE 773
+#define S_WEB_PAGE_END 773
+#define S_WEB_PROMOTIONAL_ITEM_START 774
+#define S_WITM_SITE_ID 774
+#define S_WITM_PAGE_ID 775
+#define S_WITM_ITEM_ID 776
+#define S_WITM_PROMOTION_ID 777
+#define S_WEB_PROMOTIONAL_ITEM_END 777
+#define S_WEB_RETURNS_START 778
+#define S_WRET_SITE_ID 778
+#define S_WRET_ORDER_ID 779
+#define S_WRET_LINE_NUMBER 780
+#define S_WRET_ITEM_ID 781
+#define S_WRET_RETURN_CUST_ID 782
+#define S_WRET_REFUND_CUST_ID 783
+#define S_WRET_RETURN_DATE 784
+#define S_WRET_RETURN_TIME 785
+#define S_WRET_REASON_ID 786
+#define S_WRET_PRICING 787
+#define S_WEB_RETURNS_END 787
+#define S_WEB_SITE_START 788
+#define S_WSIT_ID 788
+#define S_WSIT_OPEN_DATE 789
+#define S_WSIT_CLOSE_DATE 790
+#define S_WSIT_NAME 791
+#define S_WSIT_ADDRESS_ID 792
+#define S_WSIT_DIVISION_ID 793
+#define S_WSIT_CLASS 794
+#define S_WSIT_MANAGER_ID 795
+#define S_WSIT_MARKET_ID 796
+#define S_WSIT_TAX_PERCENTAGE 797
+#define S_WEB_SITE_END 797
+#define S_ZIPG_START 798
+#define S_ZIPG_ZIP 798
+#define S_ZIPG_GMT 799
+#define S_ZIPG_END 799
+#define MAX_COLUMN 799
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/config.h b/ydb/library/benchmarks/gen/tpcds-dbgen/config.h
new file mode 100644
index 000000000000..d13f6fefc1dd
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/config.h
@@ -0,0 +1,167 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#ifdef NCR
+#define STDLIB_HAS_GETOPT
+#define USE_STRING_H
+#define USE_VALUES_H
+#ifdef SQLSERVER
+#define WIN32
+#else
+/* the 64 bit defines are for the Metaware compiler */
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long
+#define HUGE_COUNT 1
+#define HUGE_FORMAT "%LLd"
+#define int32_t int
+#endif /* SQLSERVER or MP/RAS */
+#endif /* NCR */
+
+#ifdef AIX
+#define _ALL_SOURCE
+#define USE_STRING_H
+#define USE_LIMITS_H
+/*
+ * if the C compiler is 3.1 or later, then uncomment the
+ * lines for 64 bit seed generation
+ */
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long
+#define HUGE_COUNT 1
+#define HUGE_FORMAT "%lld"
+#define STDLIB_HAS_GETOPT
+#define USE_STDLIB_H
+#define FLEX
+#endif /* AIX */
+
+#ifdef CYGWIN
+#define USE_STRING_H
+#define PATH_SEP '\\'
+#define SUPPORT_64BITS
+#define HUGE_TYPE __int64
+#define HUGE_COUNT 1
+#define HUGE_FORMAT "%I64d"
+#endif /* WIN32 */
+
+#ifdef HPUX
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long int
+#define HUGE_FORMAT "%lld"
+#define HUGE_COUNT 1
+#define USE_STRING_H
+#define USE_VALUES_H
+#define USE_STDLIB_H
+#define FLEX
+#endif /* HPUX */
+
+#ifdef INTERIX
+#define USE_LIMITS_H
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long int
+#define HUGE_FORMAT "%lld"
+#define HUGE_COUNT 1
+#endif /* INTERIX */
+
+#ifdef LINUX
+#define SUPPORT_64BITS
+#define HUGE_TYPE int64_t
+#define HUGE_FORMAT "%lld"
+#define HUGE_COUNT 1
+#define USE_STRING_H
+#define USE_VALUES_H
+#define USE_STDLIB_H
+#define FLEX
+#endif /* LINUX */
+
+#ifdef SOLARIS
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long
+#define HUGE_FORMAT "%lld"
+#define HUGE_COUNT 1
+#define USE_STRING_H
+#define USE_VALUES_H
+#define USE_STDLIB_H
+#endif /* SOLARIS */
+
+#ifdef SOL86
+#define SUPPORT_64BITS
+#define HUGE_TYPE long long
+#define HUGE_FORMAT "%lld"
+#define HUGE_COUNT 1
+#define USE_STRING_H
+#define USE_VALUES_H
+#define USE_STDLIB_H
+#endif /* SOLARIS */
+
+#ifdef WIN32
+#define USE_STRING_H
+#define USE_LIMITS_H
+#define PATH_SEP '\\'
+#define SUPPORT_64BITS
+#define HUGE_TYPE __int64
+#define HUGE_COUNT 1
+#define HUGE_FORMAT "%I64d"
+#endif /* WIN32 */
+
+/* preliminary defines for 64-bit windows compile */
+#ifdef WIN64
+#define USE_STRING_H
+#define PATH_SEP '\\'
+#define SUPPORT_64BITS
+#define HUGE_TYPE __int64
+#define HUGE_COUNT 1
+#define HUGE_FORMAT "%I64d"
+#endif /* WIN32 */
+
+#ifndef PATH_SEP
+#define PATH_SEP '/'
+#endif /* PATH_SEP */
+
+#ifndef HUGE_TYPE
+#error The code now requires 64b support
+#endif
+
+/***
+ ** DATABASE DEFINES
+ ***/
+#ifdef _MYSQL
+#define STR_QUOTES
+#endif
+#endif /* CONFIG_H */
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/constants.h b/ydb/library/benchmarks/gen/tpcds-dbgen/constants.h
new file mode 100644
index 000000000000..763763bde99d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/constants.h
@@ -0,0 +1,325 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+ /***
+ *** Multi-table/Global Defines
+ ***/
+#define DATA_START_DATE "1998-01-01" /* earliest date in the data set */
+#define DATA_END_DATE "2003-12-31" /* latest date in the data set */
+#define LINES_PER_ORDER 16 /* max number of lineitems per order for all channels */
+
+ /***
+ *** C_xxx Cutomer Defines
+ ***/
+#define C_PREFERRED_PCT 50
+
+/***
+ *** CC_xxx Call Center Defines
+ ***/
+#define CC_EMPLOYEE_MAX 7 /* rises ~ scale ^ 2 */
+
+
+/***
+ *** CP_xxx Catalog Page Defines
+ ***/
+#define CP_CATALOGS_PER_YEAR 18
+#define CP_SK(c, s, p) (c * s + p)
+
+ /***
+ *** CR_xxx Catalog Returns Defines
+ ***/
+#define CR_RETURN_PCT 10 /* percentage of catalog sales that are returned */
+
+ /***
+ *** CS_xxx Customer Sales Defines
+ ***/
+#define CS_QUANTITY_MAX "100"
+#define CS_MARKUP_MAX "2.00"
+#define CS_DISCOUNT_MAX "1.00"
+#define CS_WHOLESALE_MAX "100.00"
+#define CS_COUPON_MAX "0.50"
+#define CS_MIN_SHIP_DELAY 2 /* minimum days from order to ship */
+#define CS_MAX_SHIP_DELAY 90 /* maximum days from order to ship */
+#define CS_ITEMS_PER_ORDER 10 /* number of items in each order */
+#define CS_GIFT_PCT 10 /* ship-to != bill-to */
+
+ /*
+ * DATE SETTINGS
+ *
+ * The benchmarks sense of "today". Should this be a sliding scale/parameter?
+ */
+#define CURRENT_YEAR 2003
+#define CURRENT_MONTH 1
+#define CURRENT_DAY 8
+#define CURRENT_QUARTER 1
+#define CURRENT_WEEK 2
+#define DATE_MINIMUM "1998-01-01"
+#define DATE_MAXIMUM "2002-12-31"
+#define YEAR_MINIMUM 1998
+#define YEAR_MAXIMUM 2002
+#define WAREHOUSE_LOAD_DATE "2001-07-18"
+#define UPDATE_INTERVAL 30 /* refresh interval in days */
+#define TODAYS_DATE "2003-01-08"
+
+/***
+ *** INV_xxx Inventory Defines
+ ***/
+#define INV_QUANTITY_MIN 0
+#define INV_QUANTITY_MAX 1000
+
+/***
+ *** ITEM_xxx Item Defines
+ ***/
+#define ITEM_DESC_LEN 5
+#define ITEM_NAME_LEN 10
+#define ITEM_MANFACTURER_COUNT 1000 /* number of brands handled by a particular manufacturer */
+
+/***
+ *** PROMO_xxx Promotions Defines
+ ***/
+#define PROMO_NAME_LEN 5
+#define PROMO_START_MIN -720
+#define PROMO_START_MAX 100
+#define PROMO_START_MEAN 0
+#define PROMO_LEN_MIN 1
+#define PROMO_LEN_MAX 60
+#define PROMO_LEN_MEAN 0
+#define PROMO_DETAIL_LEN_MIN 20
+#define PROMO_DETAIL_LEN_MAX 60
+
+ /***
+ *** SR_xxx Store Returns Defines
+ ***/
+#define SR_RETURN_PCT 10 /* percentage of store sales that are returned */
+
+ /***
+ *** SS_xxx Store Sales Defines
+ ***/
+#define SS_MIN_SHIP_DELAY 2 /* minimum days from order to ship */
+#define SS_MAX_SHIP_DELAY 90 /* maximum days from order to ship */
+#define SS_QUANTITY_MAX "100"
+#define SS_MARKUP_MAX "1.00"
+#define SS_DISCOUNT_MAX "1.00"
+#define SS_WHOLESALE_MAX "100.00"
+#define SS_COUPON_MAX "0.50"
+
+ /***
+ *** WP_xxx Web Page Defines
+ ***/
+#define WP_AUTOGEN_PCT 30
+#define WP_LINK_MIN 2
+#define WP_LINK_MAX 25
+#define WP_IMAGE_MIN 1
+#define WP_IMAGE_MAX 7
+#define WP_AD_MIN 0
+#define WP_AD_MAX 4
+#define WP_MAX_REC_DURATION 1000 /* maximum time from start to end of record */
+#define WP_IDLE_TIME_MAX 100 /* maximum time since last page access */
+
+ /***
+ *** W_xxx Warehouse Defines
+ ***/
+#define W_DESC_MIN 5
+#define W_SQFT_MIN 50000
+#define W_SQFT_MAX 1000000
+#define W_NAME_MIN 10
+
+ /***
+ *** WR_xxx Web Returns Defines
+ ***/
+#define WR_RETURN_PCT 10 /* percentage of web sales that are returned */
+#define WR_SHIP_LAG_MIN 2 /* lag time between receiving and returning */
+#define WR_SHIP_LAG_MAX 12
+
+ /***
+ *** WEB_xxx Web Site Defines
+ ***/
+#define WEB_START_DATE DATE_MINIMUM /* range of open/close dates; actual dates can exceed these values */
+#define WEB_END_DATE DATE_MAXIMUM /* due to staggered start of each site */
+#define WEB_DATE_STAGGER 17 /* time between site creation on leading/trailing edge */
+#define WEB_PAGES_PER_SITE 123 /* number of pages on a web site */
+/* some of the web sites are completely replaced in the date range. */
+#define WEB_MORTALITY 50 /* percentage of sites that "die" between start and end */
+#define WEB_IS_REPLACED(j) ((j % (100 / WEB_MORTALITY)) == 0) /* does this site get replaced? */
+#define WEB_IS_REPLACEMENT(j) ((j / (100 / WEB_MORTALITY)) % 2) /* is this the replacement? */
+
+/***
+ *** SOURCE SCHEMA CONSTANTS
+ ***/
+#define DAYS_PER_UPDATE 3
+
+ /***
+ *** RS_xxx: Row and column sizes
+ ***/
+/* sizes used in various tables */
+#define RS_BKEY 16
+/* table-specific sizes */
+
+#define RS_BRND_NAME 50
+#define RS_C_SALUTATION 5
+#define RS_C_FIRST_NAME 20
+#define RS_C_LAST_NAME 30
+#define RS_C_BIRTH_COUNTRY 20
+#define RS_C_LOGIN 13
+#define RS_C_PASSWORD 13
+#define RS_C_EMAIL 50
+#define RS_C_PRIMARY_MACHINE_ID 15
+#define RS_C_SECONDARY_MACHINE_ID 15
+#define RS_CA_SUITE_NUMBER 10
+#define RS_CA_STREET_NAME 60
+#define RS_CA_STREET_TYPE 15
+#define RS_CA_CITY 60
+#define RS_CA_COUNTY 30
+#define RS_CA_STATE 2
+#define RS_CA_COUNTRY 20
+#define RS_CA_ZIP 10
+#define RS_CA_LOCATION_TYPE 20
+#define RS_CATG_DESC 20
+#define RS_CC_NAME 50
+#define RS_CC_CLASS 50
+#define RS_CC_HOURS 20
+#define RS_CC_MANAGER 40
+#define RS_CC_MARKET_MANAGER 40
+#define RS_CC_MARKET_CLASS 50
+#define RS_CC_MARKET_DESC 100
+#define RS_CC_DIVISION_NAME 50
+#define RS_CC_COMPANY_NAME 60
+#define RS_CC_SUITE_NUM 10
+#define RS_CC_STREET_NAME 60
+#define RS_CC_STREET_TYPE 15
+#define RS_CC_CITY 60
+#define RS_CC_COUNTY 30
+#define RS_CC_STATE 2
+#define RS_CC_COUNTRY 20
+#define RS_CC_ZIP 10
+#define RS_CD_GENDER 1
+#define RS_CD_MARITAL_STATUS 1
+#define RS_CD_EDUCATION_STATUS 20
+#define RS_CD_CREDIT_RATING 10
+#define RS_CP_DEPARTMENT 20
+#define RS_CLAS_DESC 100
+#define RS_CMPY_NAME 50
+#define RS_CP_DESCRIPTION 100
+#define RS_CP_TYPE 100
+#define RS_CTGR_NAME 25
+#define RS_CTGR_DESC 100
+#define RS_CUST_CREDIT 100
+#define RS_D_DAY_NAME 4
+#define RS_D_QUARTER_NAME 4
+#define RS_DVSN_NAME 50
+#define RS_HD_BUY_POTENTIAL 7
+#define RS_I_ITEM_DESC 200
+#define RS_I_BRAND 50
+#define RS_I_SUBCLASS 50
+#define RS_I_CLASS 50
+#define RS_I_SUBCATEGORY 50
+#define RS_I_CATEGORY 50
+#define RS_I_MANUFACT 50
+#define RS_I_SIZE 20
+#define RS_I_FORMULATION 20
+#define RS_I_FLAVOR 20
+#define RS_I_UNITS 10
+#define RS_I_CONTAINER 10
+#define RS_I_PRODUCT_NAME 50
+#define RS_MANF_NAME 50
+#define RS_MNGR_NAME 50
+#define RS_P_PROMO_NAME 50
+#define RS_P_CHANNEL_DETAILS 100
+#define RS_P_PURPOSE 15
+#define RS_PB_DESCRIPTION 100
+#define RS_PLIN_COMMENT 100
+#define RS_PROD_NAME 100
+#define RS_PROD_TYPE 100
+#define RS_R_REASON_DESCRIPTION 100
+#define RS_STORE_NAME 50
+#define RS_STORE_HOURS 20
+#define RS_S_STORE_MANAGER 40
+#define RS_S_GEOGRAPHY_CLASS 100
+#define RS_S_MARKET_DESC 100
+#define RS_S_MARKET_MANAGER 40
+#define RS_S_DIVISION_NAME 50
+#define RS_S_COMPANY_NAME 50
+#define RS_S_SUITE_NUM 10
+#define RS_S_STREET_NAME 60
+#define RS_S_STREET_TYPE 15
+#define RS_S_CITY 60
+#define RS_S_STATE 2
+#define RS_S_COUNTY 30
+#define RS_S_COUNTRY 30
+#define RS_S_ZIP 10
+#define RS_SM_TYPE 30
+#define RS_SM_CODE 10
+#define RS_SM_CONTRACT 20
+#define RS_SM_CARRIER 20
+#define RS_SBCT_NAME 100
+#define RS_SBCT_DESC 100
+#define RS_SUBC_NAME 100
+#define RS_SUBC_DESC 100
+#define RS_T_AM_PM 2
+#define RS_T_SHIFT 20
+#define RS_T_SUB_SHIFT 20
+#define RS_T_MEAL_TIME 20
+#define RS_W_WAREHOUSE_NAME 20
+#define RS_W_STREET_NAME 60
+#define RS_W_SUITE_NUM 10
+#define RS_W_STREET_TYPE 15
+#define RS_W_CITY 60
+#define RS_W_COUNTY 30
+#define RS_W_STATE 2
+#define RS_W_COUNTRY 20
+#define RS_W_ZIP 10
+#define RS_WEB_MANAGER 50
+#define RS_WEB_NAME 50
+#define RS_WEB_CLASS 50
+#define RS_WEB_MARKET_CLASS 50
+#define RS_WEB_MARKET_DESC 100
+#define RS_WEB_MARKET_MANAGER 40
+#define RS_WEB_COMPANY_NAME 100
+#define RS_WEB_SUITE_NUMBER 10
+#define RS_WEB_STREET_NAME 60
+#define RS_WEB_STREET_TYPE 15
+#define RS_WEB_CITY 60
+#define RS_WEB_COUNTY 30
+#define RS_WEB_STATE 2
+#define RS_WEB_COUNTRY 20
+#define RS_WEB_ZIP 10
+#define RS_WP_URL 100
+#define RS_WEB_TYPE 50
+#define RS_WRHS_DESC 100
+#define RS_WORD_COMMENT 100
+#define RS_ZIPG_ZIP 5
+#endif /* CONSTANTS_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/date.c b/ydb/library/benchmarks/gen/tpcds-dbgen/date.c
new file mode 100644
index 000000000000..7b312bfc27b2
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/date.c
@@ -0,0 +1,647 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+/*** includes ***/
+#include
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include
+#include
+#include "config.h"
+#include "porting.h"
+#include "date.h"
+#include "mathops.h"
+#include "dist.h"
+
+#define D_CHARS "ymdYMD24" /* valid characters in a DBGDATE setting */
+#define MIN_DATE_INT 18000101
+
+static int m_days[2][13] =
+ {
+ {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
+ {0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}
+ };
+static char *qtr_start[5] = {NULL, "01-01", "04-01", "07-01", "10-01"};
+char *weekday_names[8] = {NULL, "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
+/*
+ * Routine: mk_date(void)
+ * Purpose: initialize a date_t
+ * Algorithm:
+ * Data Structures:
+ * Params:
+ * Returns: date_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+date_t *
+mk_date(void)
+{
+ date_t *res;
+
+ res = (date_t *)malloc(sizeof(struct DATE_T));
+ MALLOC_CHECK(res);
+
+ res->flags = 0;
+ res->year = 0;
+ res->month = 0;
+ res->day = 0;
+ res->julian = 0;
+
+ return(res);
+}
+/*
+ * Routine: strtotime(char *str)
+ * Purpose: convert a string from the time to the number of seconds since midnight
+ * Algorithm:
+ * Data Structures:
+ * Params:
+ * Returns: int
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+strtotime(char *str)
+{
+ int hour, min, sec, res;
+
+ if (sscanf(str, "%d:%d:%d", &hour, &min, &sec) != 3)
+ {
+ if (sscanf(str, "%d:%d", &hour, &min) != 2)
+ {
+ INTERNAL("Invalid time format");
+ }
+ sec = 0;
+ }
+
+ if (hour > 23 || hour < 0)
+ INTERNAL("Invalid time format");
+ if (min > 59 || min < 0)
+ INTERNAL("Invalid time format");
+ if (sec > 59 || sec < 0)
+ INTERNAL("Invalid time format");
+
+ res = hour * 3600 + min * 60 + sec;
+
+ return(res);
+}
+
+/*
+ * Routine: strtodate(char *str)
+ * Purpose: initialize a date_t
+ * Algorithm:
+ * Data Structures:
+ * Params:
+ * Returns: date_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+date_t *
+strtodate(char *str)
+{
+ date_t *res;
+
+ res = (date_t *)malloc(sizeof(struct DATE_T));
+ MALLOC_CHECK(res);
+
+ if (sscanf(str, "%d-%d-%d", &res->year, &res->month, &res->day) != 3)
+ INTERNAL("Badly formed string in call to strtodate()");
+ res->flags = 0;
+ res->julian = dttoj(res);
+
+ return(res);
+}
+/*
+ * Routine: jtodt(int src, date_t *dest)
+ * Purpose: convert a number of julian days to a date_t
+ * Algorithm: Fleigel and Van Flandern (CACM, vol 11, #10, Oct. 1968, p. 657)
+ * Data Structures:
+ *
+ * Params: source integer: days since big bang
+ * Returns: date_t *; NULL on failure
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ */
+int
+jtodt(date_t *dest, int src)
+{
+ long i,
+ j,
+ l,
+ n;
+
+ if (src < 0)
+ return(-1);
+
+ dest->julian = src;
+ l = src + 68569 ;
+ n = (int)floor((4*l)/146097) ;
+ l = l - (int)floor((146097 * n + 3)/4) ;
+ i = (int)floor((4000 *(l + 1)/1461001)) ;
+ l = l - (int)floor((1461*i)/4) + 31 ;
+ j = (int)floor((80*l)/2447) ;
+ dest->day = l - (int)floor((2447*j)/80) ;
+ l=(int)floor(j/11) ;
+ dest->month = j + 2 - 12*l ;
+ dest->year = 100*(n-49) + i + l ;
+
+ return(0);
+}
+
+/*
+ * Routine: dttoj(date_t *)
+ * Purpose: convert a date_t to a number of julian days
+ * Algorithm: http://quasar.as.utexas.edu/BillInfo/JulianDatesG.html
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+dttoj(date_t *dt)
+{
+ int y, m, res;
+
+ y = dt->year;
+ m = dt->month;
+ if (m <= 2)
+ {
+ m += 12;
+ y -= 1;
+ }
+
+/*
+ * added 1 to get dttoj and jtodt to match
+ */
+ res = dt->day + (153 * m - 457) / 5 + 365 * y + (int)floor(y / 4) - (int)floor(y / 100) + (int)floor(y / 400) + 1721118 + 1;
+
+ return(res);
+}
+
+/*
+ * Routine: strtodt()
+ * Purpose: Convert an ascii string to a date_t structure
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: char *s, date_t *dest
+ * Returns: int; 0 on success
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: Need to allow for date formats other than Y4MD-
+ */
+int
+strtodt(date_t *dest, char *s)
+{
+ int nRetCode = 0;
+
+ if (s == NULL)
+ {
+ dest = NULL;
+ return(-1);
+ }
+
+ if (sscanf(s, "%4d-%d-%d", &dest->year, &dest->month, &dest->day) != 3)
+ {
+ fprintf(stderr, "ERROR: Invalid string to date conversion in strtodt\n");
+ nRetCode = -1;
+ }
+
+ dest->julian = dttoj(dest);
+
+ return(nRetCode);
+}
+
+/*
+ * Routine: dttostr(date_t *d)
+ * Purpose: convert a date_t structure to a string
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: char *; NULL on failure
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: 20000110 Need to handle more than Y4MD-
+ */
+char *
+dttostr(date_t *d)
+{
+ static char *res;
+ static int init = 0;
+
+ if (!init)
+ {
+ res = (char *)malloc(sizeof(char) * 11);
+ MALLOC_CHECK(res);
+ init = 1;
+ }
+
+ if (d == NULL)
+ return(NULL);
+
+ sprintf(res, "%4d-%02d-%02d", d->year, d->month, d->day);
+
+ return(res);
+}
+
+/*
+ * Routine: date_init
+ * Purpose: set the date handling parameters
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: None
+ * Returns: int; 0 on success
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+date_init(void)
+{
+ printf("date_init is not yet complete\n");
+ exit(1);
+ return(0);
+}
+
+/*
+ * Routine: date_t_op(int op, date_t *operand1, date_t *operand2)
+ * Purpose: execute arbitrary binary operations on date_t's
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 20010806 jms Return code is meaningless
+ */
+int
+date_t_op(date_t *dest, int op, date_t *d1, date_t *d2)
+{
+ int tJulian;
+ char tString[11];
+ date_t tDate;
+
+ switch(op)
+ {
+ case OP_FIRST_DOM: /* set to first day of month */
+ tJulian = d1->julian - d1->day + 1;
+ jtodt(dest, tJulian);
+ break;
+ case OP_LAST_DOM: /* set to last day of month */
+ tJulian = d1->julian - d1->day + m_days[is_leap(d1->year)][d1->month];
+ jtodt(dest, tJulian);
+ break;
+ case OP_SAME_LY:
+ if (is_leap(d1->year) && (d1->month == 2) && (d1->day == 29))
+ sprintf(tString, "%d-02-28", d1->year - 1);
+ else
+ sprintf(tString, "%4d-%02d-%02d", d1->year - 1, d1->month, d1->day);
+ strtodt(dest, tString);
+ break;
+ case OP_SAME_LQ:
+ switch(d1->month) {
+ case 1:
+ case 2:
+ case 3:
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[1]);
+ strtodt(&tDate, tString);
+ tJulian = d1->julian - tDate.julian;
+ sprintf(tString, "%4d-%s", d1->year - 1, qtr_start[4]);
+ strtodt(&tDate, tString);
+ tJulian += tDate.julian;
+ jtodt(dest, tJulian);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[2]);
+ strtodt(&tDate, tString);
+ tJulian = d1->julian - tDate.julian;
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[1]);
+ strtodt(&tDate, tString);
+ tJulian += tDate.julian;
+ jtodt(dest, tJulian);
+ break;
+ case 7:
+ case 8:
+ case 9:
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[3]);
+ strtodt(&tDate, tString);
+ tJulian = d1->julian - tDate.julian;
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[2]);
+ strtodt(&tDate, tString);
+ tJulian += tDate.julian;
+ jtodt(dest, tJulian);
+ break;
+ case 10:
+ case 11:
+ case 12:
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[4]);
+ strtodt(&tDate, tString);
+ tJulian = d1->julian - tDate.julian;
+ sprintf(tString, "%4d-%s", d1->year, qtr_start[3]);
+ strtodt(&tDate, tString);
+ tJulian += tDate.julian;
+ jtodt(dest, tJulian);
+ break;
+ }
+ break;
+ }
+
+ return(0);
+}
+
+/*
+ * Routine: itodt(date_t *d, int src)
+ * Purpose: convert a number of days to a date_t
+ * Algorithm: NOTE: sets only julian field
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+itodt(date_t *dest, int src)
+{
+
+ dest->julian = src;
+
+ return(0);
+}
+
+/*
+ * Routine: set_dow(date *d)
+ * Purpose: perpetual calendar stuff
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ */
+static int doomsday[4] = {3, 2, 0, 5};
+static int known[13] = { 0, 3, 0, 0, 4, 9, 6, 11, 8, 5, 10, 7, 12 };
+int
+set_dow(date_t *d)
+{
+
+ static int last_year = -1,
+ dday;
+ int res,
+ q, r, s;
+
+
+ if (d->year != last_year)
+ {
+ if (is_leap(d->year))
+ {
+ /* adjust the known dates for january and february */
+ known[1] = 4;
+ known[2] = 1;
+ }
+ else
+ {
+ known[1] = 3;
+ known[2] = 0;
+ }
+
+ /* calculate the doomsday for the century */
+ dday = d->year / 100;
+ dday -= 15;
+ dday %= 4;
+ dday = doomsday[dday];
+
+ /* and then calculate the doomsday for the year */
+ q = d->year % 100;
+ r = q % 12;
+ q /= 12;
+ s = r / 4;
+ dday += q + r + s;
+ dday %= 7;
+ last_year = d->year;
+ }
+
+ res = d->day;
+ res -= known[d->month];
+ while (res < 0)
+ res += 7;
+ while (res > 6)
+ res -= 7;
+
+ res += dday;
+ res %= 7;
+
+
+ return(res);
+}
+
+/*
+ * Routine: is_leap(year)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+is_leap(int year)
+{
+
+ return (((year % 100) == 0)?((((year % 400) % 2) == 0)?1:0):((year % 4) == 0)?1:0);
+}
+
+/*
+ * Routine: day_number(date_t *)
+ * Purpose:
+ * Algorithm: NOTE: this is NOT the ordinal day in the year, but the ordinal reference into the
+ * calendar distribution for the day; in particular, this needs to skip over the leap day
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+day_number(date_t *d)
+{
+ return(m_days[is_leap(d->year)][d->month] + d->day);
+}
+
+/*
+ * Routine: getDateWeightFromJulian(jDay, nDistribution)
+ * Purpose: return the weight associated with a particular julian date and distribution
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+getDateWeightFromJulian(int jDay, int nDistribution)
+{
+ date_t dTemp;
+ int nDay;
+
+ jtodt(&dTemp, jDay);
+ nDay = day_number(&dTemp);
+
+ return(dist_weight(NULL, "calendar", nDay, nDistribution + is_leap(dTemp.year)));
+}
+
+
+/*
+ * Routine: date_part(date_t *, int part)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+date_part(date_t *d, int part)
+{
+ switch(part)
+ {
+ case 1: return(d->year);
+ case 2: return(d->month);
+ case 3: return(d->day);
+ default:
+ INTERNAL("Invalid call to date_part()");
+ return(-1);
+ }
+}
+
+#ifdef TEST
+main()
+{
+ date_t *d;
+ int ret;
+
+ d = mk_date();
+ strtodt(d, "1776-07-04");
+ ret = set_dow(d);
+ printf("set_dow(\"1776-07-04\"): wanted 4 got %d\n", ret);
+ if (ret != 4)
+ {
+ exit(1);
+ }
+ strtodt(d, "2000-01-01");
+ ret = set_dow(d);
+ printf("set_dow(\"2000-01-01\"): wanted 6 got %d\n", ret);
+ if (ret != 6)
+ {
+ exit(1);
+ }
+
+ strtodt(d, "1970-01-01");
+ if ((ret = dttoj(d)) != 2440588)
+ {
+ printf("dttoj returned %d\n", ret);
+ exit(1);
+ }
+
+ d->year = 1;
+ d->month = 11;
+ d->date = 11;
+ jtodt(d, 2440588);
+ if ((d->year != 1970) || (d->month != 1) || (d->date != 1))
+ {
+ printf("jtodt failed got: ");
+ printf("%4d-%02d-%02d", d->year, d->month, d->date);
+ exit(1);
+ }
+ return(0);
+}
+#endif /* TEST */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/date.h b/ydb/library/benchmarks/gen/tpcds-dbgen/date.h
new file mode 100644
index 000000000000..4b134e6019bb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/date.h
@@ -0,0 +1,76 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef R_DATE_H
+#define R_DATE_H
+#include "mathops.h"
+
+typedef struct DATE_T {
+ int flags;
+ int year;
+ int month;
+ int day;
+ int julian;
+ } date_t;
+
+date_t *mk_date(void);
+
+int jtodt(date_t *dest, int i);
+int strtodt(date_t *dest, char *s);
+date_t *strtodate(char *str);
+int strtotime(char *str);
+
+char *dttostr(date_t *d);
+int dttoj(date_t *d);
+
+int date_t_op(date_t *dest, int o, date_t *d1, date_t *d2);
+int set_dow(date_t *d);
+int is_leap(int year);
+int day_number(date_t *d);
+int date_part(date_t *d, int p);
+int set_outfile(int i);
+int getDateWeightFromJulian(int jDay, int nDistribution);
+#define CENTURY_SHIFT 20 /* years before this are assumed to be 2000's */
+/*
+ * DATE OPERATORS
+ */
+#define OP_FIRST_DOM 0x01 /* get date of first day of current month */
+#define OP_LAST_DOM 0x02 /* get date of last day of current month; LY == 2/28) */
+#define OP_SAME_LY 0x03 /* get date for same day/month, last year */
+#define OP_SAME_LQ 0x04 /* get date for same offset in the prior quarter */
+
+extern char *weekday_names[];
+
+#endif /* R_DATE_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.sln b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.sln
new file mode 100644
index 000000000000..71e8b783d549
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.sln
@@ -0,0 +1,70 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsdgen", "dbgen2.vcproj", "{416FD040-5593-4097-B638-3098823CA428}"
+ ProjectSection(ProjectDependencies) = postProject
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB} = {59EBAD48-6C40-439D-B7A9-11BF183776DB}
+ {851994E6-2458-4263-B651-E50BD4641E18} = {851994E6-2458-4263-B651-E50BD4641E18}
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55} = {3C7945FF-3FE0-4270-B47C-75CA32411B55}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "distcomp", "distcomp.vcproj", "{851994E6-2458-4263-B651-E50BD4641E18}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55} = {3C7945FF-3FE0-4270-B47C-75CA32411B55}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grammar", "grammar.vcproj", "{6540812A-1849-4F4C-A58E-585E4BB49DB1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mkheader", "mkheader.vcproj", "{3C7945FF-3FE0-4270-B47C-75CA32411B55}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsqgen", "qgen2.vcproj", "{59EBAD48-6C40-439D-B7A9-11BF183776DB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checksum", "checksum.vcproj", "{3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Jack|Win32 = Jack|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {416FD040-5593-4097-B638-3098823CA428}.Debug|Win32.ActiveCfg = Debug|Win32
+ {416FD040-5593-4097-B638-3098823CA428}.Debug|Win32.Build.0 = Debug|Win32
+ {416FD040-5593-4097-B638-3098823CA428}.Jack|Win32.ActiveCfg = Release|Win32
+ {416FD040-5593-4097-B638-3098823CA428}.Jack|Win32.Build.0 = Release|Win32
+ {416FD040-5593-4097-B638-3098823CA428}.Release|Win32.ActiveCfg = Debug|Win32
+ {416FD040-5593-4097-B638-3098823CA428}.Release|Win32.Build.0 = Debug|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Debug|Win32.ActiveCfg = Release|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Debug|Win32.Build.0 = Release|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Jack|Win32.ActiveCfg = Release|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Jack|Win32.Build.0 = Release|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Release|Win32.ActiveCfg = Release|Win32
+ {851994E6-2458-4263-B651-E50BD4641E18}.Release|Win32.Build.0 = Release|Win32
+ {6540812A-1849-4F4C-A58E-585E4BB49DB1}.Debug|Win32.ActiveCfg = Release|Win32
+ {6540812A-1849-4F4C-A58E-585E4BB49DB1}.Jack|Win32.ActiveCfg = Release|Win32
+ {6540812A-1849-4F4C-A58E-585E4BB49DB1}.Jack|Win32.Build.0 = Release|Win32
+ {6540812A-1849-4F4C-A58E-585E4BB49DB1}.Release|Win32.ActiveCfg = Release|Win32
+ {6540812A-1849-4F4C-A58E-585E4BB49DB1}.Release|Win32.Build.0 = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Debug|Win32.ActiveCfg = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Debug|Win32.Build.0 = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Jack|Win32.ActiveCfg = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Jack|Win32.Build.0 = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Release|Win32.ActiveCfg = Release|Win32
+ {3C7945FF-3FE0-4270-B47C-75CA32411B55}.Release|Win32.Build.0 = Release|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Debug|Win32.ActiveCfg = Release|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Debug|Win32.Build.0 = Release|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Jack|Win32.ActiveCfg = Release|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Jack|Win32.Build.0 = Release|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Release|Win32.ActiveCfg = Debug|Win32
+ {59EBAD48-6C40-439D-B7A9-11BF183776DB}.Release|Win32.Build.0 = Debug|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Debug|Win32.Build.0 = Debug|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Jack|Win32.ActiveCfg = Release|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Jack|Win32.Build.0 = Release|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Release|Win32.ActiveCfg = Release|Win32
+ {3EA62CB9-D5A0-4775-9FB5-0C13C8ACA18F}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.vcproj b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.vcproj
new file mode 100644
index 000000000000..5b3d5a1d1f0b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen2.vcproj
@@ -0,0 +1,3358 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.c b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.c
new file mode 100644
index 000000000000..506336841b8c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.c
@@ -0,0 +1,156 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include "dbgen_version.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "release.h"
+
+struct DBGEN_VERSION_TBL g_dbgen_version;
+extern char g_szCommandLine[];
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_dbgen_version(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct DBGEN_VERSION_TBL *r;
+ time_t ltime;
+ struct tm *pTimeStamp;
+
+ if (pDest == NULL)
+ r = &g_dbgen_version;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_dbgen_version, 0, sizeof(struct DBGEN_VERSION_TBL));
+ bInit = 1;
+ }
+
+
+ time( <ime ); /* Get time in seconds */
+ pTimeStamp = localtime( <ime ); /* Convert time to struct */
+
+ sprintf(r->szDate, "%4d-%02d-%02d", pTimeStamp->tm_year + 1900, pTimeStamp->tm_mon + 1, pTimeStamp->tm_mday);
+ sprintf(r->szTime, "%02d:%02d:%02d", pTimeStamp->tm_hour, pTimeStamp->tm_min, pTimeStamp->tm_sec);
+ sprintf (r->szVersion,"%d.%d.%d%s", VERSION, RELEASE, MODIFICATION, PATCH);
+ strcpy(r->szCmdLineArgs, g_szCommandLine);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_dbgen_version(void *pSrc)
+{
+ struct DBGEN_VERSION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_dbgen_version;
+ else
+ r = pSrc;
+
+ print_start(DBGEN_VERSION);
+ print_varchar(DV_VERSION, r->szVersion, 1);
+ print_varchar(DV_CREATE_DATE, r->szDate, 1);
+ print_varchar(DV_CREATE_TIME, r->szTime, 1);
+ print_varchar(DV_CMDLINE_ARGS, r->szCmdLineArgs, 0);
+ print_end(DBGEN_VERSION);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_dbgen_version(void *pSrc)
+{
+ struct DBGEN_VERSION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_dbgen_version;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.h b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.h
new file mode 100644
index 000000000000..9628df98bd0b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dbgen_version.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef DBGEN_VERSION_H
+#define DBGEN_VERSION_H
+
+#define RS_VERSION_LENGTH 100
+#define RS_CMDLINARGS_LENGTH 200
+
+struct DBGEN_VERSION_TBL {
+ char szVersion[RS_VERSION_LENGTH + 1];
+ char szDate[26];
+ char szTime[26];
+ char szCmdLineArgs[RS_CMDLINARGS_LENGTH + 1];
+};
+
+int mk_dbgen_version(void *pDest, ds_key_t kIndex);
+int pr_dbgen_version(void *pSrc);
+int ld_dbgen_version(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.c b/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.c
new file mode 100644
index 000000000000..4c2ff81ef484
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.c
@@ -0,0 +1,657 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include "error_msg.h"
+#include "grammar.h"
+#include "dist.h"
+#include "dcomp.h"
+#include "r_params.h"
+#include "dcgram.h"
+
+#ifdef MEM_CHECK
+int nMemTotal = 0;
+#define MALLOC(size) malloc(size);fprintf(stderr, "Malloc %d at %d for a total of %d\n", size, __LINE__, nMemTotal += size)
+#define REALLOC(locale, size) realloc(locale, size);fprintf(stderr, "Realloc %d at %d\n", size, __LINE__)
+#else
+#define MALLOC(size) malloc(size)
+#define REALLOC(locale, size) realloc(locale, size)
+#endif
+
+/*
+ * Miscelaneous scratch pad space, used while a distribution is being parsed
+ */
+extern distindex_t *pDistIndex;
+extern int nLineNumber;
+extern char *CurrentFileName;
+d_idx_t *pCurrentIndexEntry;
+int nMaxValueWidth = 0;
+char **arValues = NULL;
+int *arValueLengths = NULL;
+int nMaxWeightWidth = 0;
+int *arWeights = NULL;
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 20021206 jms This routine should allow builtin integer functions like ROWCOUNT(), but they are domain specific
+ */
+int
+ProcessInt (char *stmt, token_t * tokens)
+{
+ int nRetCode = 0;
+ char *cp;
+
+ cp = SafeStrtok(NULL, " \t,");
+ if (cp == NULL)
+ return(QERR_SYNTAX);
+
+ nRetCode = atoi(cp);
+ return (nRetCode);
+}
+
+/*
+ * Routine: AddDistribution()
+ * Purpose: Add a new distribution to a DistIndex, and assure uniqueness
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: pointer to new, empty distribution, or NULL
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+d_idx_t *
+AddDistribution (distindex_t * pDistIndex, char *szName)
+{
+ d_idx_t *pNewDist;
+ int i;
+
+ /*
+ * check that arguments are reasonable
+ */
+ if (strlen (szName) == 0)
+ return (NULL);
+ if (pDistIndex == NULL)
+ return (NULL);
+
+ /***
+ * check for name uniqeness, and expand dist set if required
+ */
+ for (i = 0; i < pDistIndex->nDistCount; i++)
+ if (strcasecmp (szName, pDistIndex->pEntries[i].name) == 0)
+ ReportError (QERR_NON_UNIQUE, szName, 1);
+
+ if (pDistIndex->nDistCount == pDistIndex->nAllocatedCount)
+ {
+ pDistIndex->nAllocatedCount += 100;
+ pDistIndex->pEntries =
+ (d_idx_t *) realloc (pDistIndex->pEntries,
+ pDistIndex->nAllocatedCount *
+ sizeof (struct D_IDX_T));
+ if (pDistIndex->pEntries == NULL)
+ ReportError (QERR_NO_MEMORY, "main", 1);
+ }
+ pNewDist = pDistIndex->pEntries + pDistIndex->nDistCount;
+ pDistIndex->nDistCount += 1;
+ memset(pNewDist, 0, sizeof(d_idx_t));
+
+ /*
+ * initialize the distribution
+ */
+ if (strlen (szName) > D_NAME_LEN)
+ {
+ szName[D_NAME_LEN] = '\0';
+ ReportError (QERR_STR_TRUNCATED, szName, 0);
+ }
+ strcpy (pNewDist->name, szName);
+ pNewDist->index = pDistIndex->nDistCount;
+ pNewDist->dist = (dist_t *) MALLOC (sizeof (struct DIST_T));
+ if (pNewDist->dist == NULL)
+ ReportError (QERR_NO_MEMORY, "MALLOC(dist_t)", 1);
+ memset (pNewDist->dist, 0, sizeof (dist_t));
+
+ if (is_set ("VERBOSE"))
+ fprintf (stderr, "Created distribution '%s'\n", szName);
+
+ return (pNewDist);
+}
+
+
+
+/*
+ * Routine: ProcessSet
+ * Purpose: Read distribution settings
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ *
+ * NOTE: if QERR_SYNTAX can be a valid return value, we have a problem.
+ */
+int
+ProcessSet (char *stmt, token_t * tokens)
+{
+ int nRetCode = 0,
+ i;
+ char *cp = NULL;
+
+ cp = SafeStrtok (NULL, " \t=");
+ switch (i = FindToken (cp))
+ {
+ case TKN_WEIGHTS:
+ cp = SafeStrtok (NULL, " \t"); /* discard = */
+ pCurrentIndexEntry->w_width = ProcessInt (stmt, tokens);
+ if (pCurrentIndexEntry->w_width == QERR_SYNTAX)
+ nRetCode = QERR_RANGE_ERROR;
+ else
+ {
+ if (pCurrentIndexEntry->w_width > nMaxWeightWidth)
+ {
+ arWeights = (int *) REALLOC (arWeights,
+ pCurrentIndexEntry->w_width *
+ sizeof (int));
+ if (arWeights == NULL)
+ nRetCode = QERR_NO_MEMORY;
+ }
+ else
+ nMaxWeightWidth = pCurrentIndexEntry->w_width;
+ }
+ pCurrentIndexEntry->dist->weight_sets =
+ (int **) MALLOC (pCurrentIndexEntry->w_width * sizeof (int *));
+ if (pCurrentIndexEntry->dist->weight_sets == NULL)
+ nRetCode = QERR_NO_MEMORY;
+ memset(pCurrentIndexEntry->dist->weight_sets, 0, pCurrentIndexEntry->w_width * sizeof(int *));
+ break;
+ case TKN_TYPES:
+ pCurrentIndexEntry->v_width = ProcessTypes (stmt, tokens);
+ if (pCurrentIndexEntry->v_width == QERR_SYNTAX)
+ nRetCode = QERR_RANGE_ERROR;
+ else
+ {
+ if (pCurrentIndexEntry->v_width > nMaxValueWidth)
+ {
+ arValues =
+ (char **) REALLOC (arValues,
+ pCurrentIndexEntry->v_width *
+ sizeof (char *));
+ arValueLengths =
+ (int *) REALLOC (arValueLengths,
+ pCurrentIndexEntry->v_width *
+ sizeof (int));
+ }
+ if (arValues == NULL || arValueLengths == NULL)
+ nRetCode = QERR_NO_MEMORY;
+ else
+ {
+ for (i=nMaxValueWidth; i < pCurrentIndexEntry->v_width; i++)
+ {
+ arValueLengths[i] = 0;
+ arValues[i] = NULL;
+ }
+ nMaxValueWidth = pCurrentIndexEntry->v_width;
+ }
+ }
+ pCurrentIndexEntry->dist->value_sets =
+ (int **) MALLOC (pCurrentIndexEntry->v_width * sizeof (int *));
+ if (pCurrentIndexEntry->dist->value_sets == NULL)
+ nRetCode = QERR_NO_MEMORY;
+ memset(pCurrentIndexEntry->dist->value_sets, 0, pCurrentIndexEntry->v_width * sizeof(int *));
+ break;
+ case TKN_NAMES:
+ if ((pCurrentIndexEntry->v_width <= 0) || (pCurrentIndexEntry->w_width <= 0))
+ return(QERR_NAMES_EARLY);
+ pCurrentIndexEntry->name_space = ProcessNames(stmt, tokens);
+ break;
+ default:
+ nRetCode = QERR_SYNTAX;
+ }
+
+ return (nRetCode);
+}
+
+/*
+ * Routine: ProcessDistribution
+ * Purpose: Handle creation of new dist index entry
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessDistribution (char *stmt, token_t * tokens)
+{
+ int nRetCode = 0;
+ char *cp;
+
+ /* Validate the new substitution name and add it to the template */
+ cp = SafeStrtok (NULL, " \t=\r;");
+ if (cp == NULL)
+ return (QERR_SYNTAX);
+
+ pCurrentIndexEntry = AddDistribution (pDistIndex, cp);
+ if (pCurrentIndexEntry == NULL)
+ return (QERR_DEFINE_OVERFLOW);
+
+ return (nRetCode);
+}
+
+
+/*
+ * Routine: ProcessTypes
+ * Purpose: Parse the type vector
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessTypes (char *stmt, token_t * tokens)
+{
+ char *cp,
+ *cp1;
+ int nTypeCount = 1,
+ nToken,
+ i;
+
+ /* get a type count */
+ for (cp1 = stmt; (cp1 = strchr (cp1, ',')) != NULL; cp1++)
+ nTypeCount += 1;
+ pCurrentIndexEntry->dist->type_vector =
+ (int *) MALLOC (sizeof (int) * nTypeCount);
+ if (pCurrentIndexEntry->dist->type_vector == NULL)
+ return (QERR_NO_MEMORY);
+ memset(pCurrentIndexEntry->dist->type_vector, 0, sizeof(int) * nTypeCount);
+
+ /* get the type names */
+ i = 0;
+ while ((cp = strtok (NULL, "=( ,);")) != NULL)
+ {
+ switch (nToken = FindToken (cp))
+ {
+/*
+ * NOTE NOTE NOTE NOTE NOTE
+ * this is manually sync'd with expr.h values
+ * NOTE NOTE NOTE NOTE NOTE
+ */
+ case TKN_INT:
+ case TKN_VARCHAR:
+ pCurrentIndexEntry->dist->type_vector[i++] = nToken;
+ break;
+ default:
+ return (QERR_SYNTAX);
+ }
+ }
+
+ return (nTypeCount);
+}
+
+/*
+ * Routine: ProcessNames
+ * Purpose: Parse the name vector
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessNames (char *stmt, token_t * tokens)
+{
+ char *szResult = NULL;
+ char *cp;
+ int nCount = 0,
+ nWordLength = 0;
+
+ /* get the names */
+ while ((cp = strtok (NULL, "=( ,);:")) != NULL)
+ {
+ if (nCount == 0)
+ {
+ nWordLength = strlen(cp);
+ szResult = malloc(nWordLength + 1);
+ MALLOC_CHECK(szResult);
+ nCount = nWordLength + 1;
+ strcpy(szResult, cp);
+ }
+ else
+ {
+ nWordLength = strlen(cp);
+ szResult = realloc(szResult, nCount + nWordLength + 1);
+ strcpy(szResult + nCount, cp);
+ nCount += nWordLength + 1;
+
+ }
+ }
+
+ pCurrentIndexEntry->dist->names = szResult;
+ return (nCount);
+}
+
+/*
+ * Routine: ProcessInclude
+ * Purpose: Allow nested files
+ * Algorithm:
+ * Data Structures:
+ *
+ * Parindent: Standard input:235: Error:Unexpected end of file
+ams:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 20020515: should allow for escaped quotation marks
+ */
+int
+ProcessInclude (char *stmt, token_t * tokens)
+{
+ char *cp;
+ int nRetCode;
+ char *szHoldName;
+ int nHoldLine;
+
+ cp = ProcessStr (stmt, tokens);
+ szHoldName = strdup(CurrentFileName);
+ nHoldLine = nLineNumber;
+ nRetCode = ParseFile (cp);
+ free(CurrentFileName);
+ CurrentFileName = szHoldName;
+ nLineNumber = nHoldLine;
+
+ return (nRetCode);
+
+}
+
+/*
+ * Routine: ProcessAdd
+ * Purpose: Handle the entries themselves
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessAdd (char *stmt, token_t * tokens)
+{
+ int i,
+ nStrSpace = 0,
+ nTokenLength,
+ nExtendedLength;
+ char *cp,
+ *cp2,
+ *cp3;
+ dist_t *pCurrentDist = pCurrentIndexEntry->dist;
+
+
+ /* confirm distribution dimensions */
+ if (pCurrentIndexEntry->v_width == 0)
+ return (QERR_NO_TYPE);
+ if (pCurrentIndexEntry->w_width == 0)
+ return (QERR_NO_WEIGHT);
+
+ /* get the values */
+ nStrSpace = 0;
+ cp2 = stmt;
+ for (i = 0; i < pCurrentIndexEntry->v_width; i++)
+ {
+ /* check/strip quotes from a varchar entry */
+ if (pCurrentDist->type_vector[i] == TKN_VARCHAR)
+ {
+ while (*cp2)
+ if (*cp2 == '"')
+ break;
+ else
+ cp2 += 1;
+ if (*cp2 == '\0')
+ ReportError (QERR_SYNTAX, "string without quotation marks", 1);
+ cp = cp2 + 1;
+ cp2 = cp;
+ while (*cp2)
+ if (*cp2 == '"')
+ break;
+ else
+ cp2 += 1;
+ if (*cp2 == '\0')
+ ReportError (QERR_SYNTAX, "non-terminated string", 1);
+ *cp2 = '\0';
+ cp2 += 1;
+ }
+ else
+ {
+ while (*cp2)
+ if (isdigit (*cp2) || (*cp2 == '-'))
+ break;
+ else
+ cp2 += 1;
+ if (*cp2 == '\0')
+ ReportError (QERR_SYNTAX, "invalid integer value", 1);
+ cp = cp2;
+ while (*cp2)
+ if (!(isdigit (*cp2) || (*cp2 == '-')))
+ break;
+ else
+ cp2 += 1;
+ if (*cp2 == '\0')
+ ReportError (QERR_SYNTAX, "badly formed integer value", 1);
+ *cp2 = '\0';
+ cp2 += 1;
+ }
+ /* remove any escaped characters from the varchar */
+ while ((cp3 = strchr(cp, '\\')) != NULL)
+ memmove(cp3, cp3+1, strlen(cp3));
+
+ nTokenLength = strlen (cp);
+ if (arValues[i] == NULL)
+ {
+ arValues[i] = (char *) MALLOC (sizeof (char) * (nTokenLength + 1));
+ if (arValues[i] == NULL)
+ ReportError(QERR_NO_MEMORY, "arValues[]", 1);
+ arValueLengths[i] = nTokenLength;
+ }
+ else if (arValueLengths[i] < nTokenLength)
+ {
+ arValues[i] =
+ (char *) REALLOC (arValues[i],
+ sizeof (char) * (nTokenLength + 1));
+ arValueLengths[i] = nTokenLength;
+ }
+ strcpy (arValues[i], cp);
+ nStrSpace += nTokenLength + 1;
+ }
+
+ /* get the weights */
+ for (i = 0; i < pCurrentIndexEntry->w_width; i++)
+ {
+ cp = SafeStrtok (cp2, ":) \t,");
+ if (cp == NULL)
+ ReportError (QERR_SYNTAX, "invalid weight count", 1);
+ nTokenLength = strlen (cp);
+ if (nTokenLength == 0)
+ ReportError (QERR_SYNTAX, "zero length weight", 1);
+ arWeights[i] = atoi (cp);
+ cp2 = NULL;
+ }
+
+
+ /* if necessary, extend the distributions storage */
+ /* for the weights and offset values */
+ if (pCurrentIndexEntry->nAllocatedLength == pCurrentIndexEntry->length)
+ {
+ nExtendedLength = pCurrentIndexEntry->length + 100;
+ for (i = 0; i < pCurrentIndexEntry->w_width; i++)
+ {
+ if (pCurrentIndexEntry->length == 0)
+ {
+ pCurrentDist->weight_sets[i] =
+ (int *) MALLOC (sizeof (int) * nExtendedLength);
+ }
+ else
+ {
+ pCurrentDist->weight_sets[i] =
+ (int *) REALLOC (pCurrentDist->weight_sets[i],
+ sizeof (int) * nExtendedLength);
+ }
+ if (pCurrentDist->weight_sets[i] == NULL)
+ return (QERR_NO_MEMORY);
+ }
+ for (i = 0; i < pCurrentIndexEntry->v_width; i++)
+ {
+ if (pCurrentIndexEntry->length == 0)
+ {
+ pCurrentDist->value_sets[i] =
+ (int *) MALLOC (sizeof (int) * nExtendedLength);
+ }
+ else
+ {
+ pCurrentDist->value_sets[i] =
+ (int *) REALLOC (pCurrentDist->value_sets[i],
+ sizeof (int) * nExtendedLength);
+ }
+ if (pCurrentDist->value_sets[i] == NULL)
+ return (QERR_NO_MEMORY);
+ }
+ pCurrentIndexEntry->nAllocatedLength = nExtendedLength;
+ }
+
+ /* if necessary, extend the distributions storage */
+ /* for the string values themselves */
+
+ if (pCurrentIndexEntry->nRemainingStrSpace <= nStrSpace)
+ {
+ if (pCurrentDist->strings == NULL)
+ {
+ pCurrentDist->strings = MALLOC (sizeof (char) * 1000);
+ }
+ else
+ {
+ pCurrentDist->strings =
+ REALLOC (pCurrentDist->strings,
+ pCurrentIndexEntry->str_space + sizeof (char) * 1000);
+ }
+ if (pCurrentDist->strings == NULL)
+ return (QERR_NO_MEMORY);
+ pCurrentIndexEntry->nRemainingStrSpace = 1000;
+
+ }
+
+ /* and now add in the new info */
+ for (i = 0; i < pCurrentIndexEntry->w_width; i++)
+ *(pCurrentDist->weight_sets[i] + pCurrentIndexEntry->length) =
+ arWeights[i];
+ for (i = 0; i < pCurrentIndexEntry->v_width; i++)
+ {
+ *(pCurrentDist->value_sets[i] + pCurrentIndexEntry->length) =
+ pCurrentIndexEntry->str_space;
+ cp = pCurrentDist->strings + pCurrentIndexEntry->str_space;
+ strcpy (cp, arValues[i]);
+ pCurrentIndexEntry->str_space += strlen (arValues[i]) + 1;
+ }
+ pCurrentIndexEntry->length += 1;
+ pCurrentIndexEntry->nRemainingStrSpace -= nStrSpace;
+
+ return (0);
+}
+
+/*
+ * Routine: ProcessOther
+ * Purpose: Handle any other statements
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessOther (char *stmt, token_t * tokens)
+{
+ return (QERR_SYNTAX);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.h b/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.h
new file mode 100644
index 000000000000..8cdcabdebeac
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dcgram.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+d_idx_t *AddDistribution(distindex_t *pDistIndex, char *szName);
+int ProcessSet (char *stmt, token_t * tokens);
+int ProcessDistribution (char *stmt, token_t * tokens);
+int ProcessTypes (char *stmt, token_t * tokens);
+int ProcessInclude (char *stmt, token_t * tokens);
+int ProcessOther (char *stmt, token_t * tokens);
+int ProcessNames (char *stmt, token_t * tokens);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.c b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.c
new file mode 100644
index 000000000000..0a6e0e9cf998
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.c
@@ -0,0 +1,327 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#define DECLARER
+#include "config.h"
+#include "porting.h"
+#include
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include
+#include
+#ifdef AIX
+#include
+#endif
+#ifndef WIN32
+#include
+#endif
+#include "r_params.h"
+#include "dcomp_params.h"
+#include "error_msg.h"
+#include "grammar.h"
+#include "dist.h"
+#include "dcgram.h"
+#include "dcomp.h"
+#include "substitution.h"
+#include "grammar_support.h" /* to get definition of file_ref_t */
+
+char *CurrentFileName = NULL;
+distindex_t *pDistIndex;
+file_ref_t CurrentFile;
+file_ref_t *pCurrentFile;
+
+/*
+ * Routine: WriteIndex()
+ * Purpose: traverse the distributions list and create the binary
+ * version of distribution output
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: (list_t)
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 19990311 add data file format to header
+ * 20000112 need to allow for changes to an existing index file
+ * 20000112 need to allow for multiple index files
+ */
+int
+WriteIndex(distindex_t *t)
+{
+ d_idx_t *idx = NULL;
+ dist_t *d;
+ int32_t i, j,
+ nDist,
+ *pSet,
+ err_cnt = 0,
+ offset=0,
+ data_type,
+ temp;
+ FILE *fpHeader = NULL;
+ FILE *ofp = NULL;
+ char *cp;
+
+ if ((ofp = fopen(get_str("OUTPUT"), "wb")) == NULL)
+ {
+ printf("ERROR: Cannot open output file '%s'\n",
+ get_str("OUTPUT"));
+ usage(NULL, NULL);
+ }
+
+ /* open the header file */
+ if ((fpHeader = fopen(get_str("HEADER"), "w")) == NULL)
+ return(99);
+ fprintf(fpHeader, "/*\nTHIS IS AN AUTOMATICALLY GENERATED FILE\nDO NOT EDIT\n\nSee distcomp.c for details\n*/\n");
+
+ /* output the number of distributions in the file */
+ temp = htonl(pDistIndex->nDistCount);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ return(12);
+ offset += sizeof(int32_t);
+
+ /* then walk the distributions and write each one in turn */
+
+ for (nDist=0; nDist < pDistIndex->nDistCount; nDist++)
+ {
+ idx = pDistIndex->pEntries + nDist;
+ d = idx->dist;
+ idx->offset = offset;
+
+ /* and then output the distribution to the file */
+ /* format is:
+ * a v_width data types stored as integers
+ * a sequence of weigth sets, each integers
+ * a sequence of string offsets, each integers
+ * a sequence of aliases for values and weights, with each value NULL terminated
+ * the string values for each value vector, with each value NULL
+ * terminated
+ */
+ /* output type data type vector */
+ for (i=0; i < idx->v_width; i++)
+ {
+ data_type = d->type_vector[i];
+ temp = htonl(data_type);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ err_cnt = 12;
+ else
+ offset += sizeof(int32_t);
+ }
+
+ /* output the weight sets */
+ for (i=0; i < idx->w_width; i++)
+ {
+ pSet = d->weight_sets[i];
+ for (j=0; j < idx->length; j++)
+ {
+ temp = htonl(pSet[j]);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ err_cnt = 6;
+ else
+ offset += sizeof(int32_t);
+ }
+ }
+
+ /* output the string offsets */
+ for (i=0; i < idx->v_width; i++)
+ {
+ pSet = d->value_sets[i];
+ for (j=0; j < idx->length; j++)
+ {
+ temp = htonl(pSet[j]);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ err_cnt = 8;
+ else
+ offset += sizeof(int32_t);
+ }
+ }
+
+ /* output the column aliases and generated the associated header file entries */
+ fprintf(fpHeader, "\n/* aliases for values/weights in the %s distribution */\n", idx->name);
+ if (d->names)
+ {
+ if (fwrite(d->names, 1, idx->name_space, ofp) < (size_t)idx->name_space)
+ err_cnt = 8;
+ else
+ offset += idx->name_space;
+
+ cp = d->names;
+ for (i=0; i < idx->v_width + idx->w_width; i++)
+ {
+ fprintf(fpHeader, "#define %s_%s\t%d\n",
+ idx->name,
+ cp,
+ (i >= idx->v_width)?i - idx->v_width + 1:i + 1);
+ cp += strlen(cp) + 1;
+ }
+ }
+ else
+ fprintf(fpHeader, "/* NONE DEFINED */\n");
+
+ /* output the strings themselves */
+ if (fwrite(d->strings, 1, idx->str_space, ofp) < (size_t)idx->str_space)
+ err_cnt = 8;
+ else
+ offset += idx->str_space;
+
+ }
+
+ /* finally, re-write the index */
+ for (i=0; i < pDistIndex->nDistCount; i++)
+ {
+ idx = pDistIndex->pEntries + i;
+ if (fwrite(idx->name, 1, D_NAME_LEN, ofp) < 0)
+ {err_cnt = 9; break;}
+ temp = htonl(idx->index);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 10; break;}
+ temp = htonl(idx->offset);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 12; break;}
+ temp = htonl(idx->str_space);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 13; break;}
+ temp = htonl(idx->length);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 15; break;}
+ temp = htonl(idx->w_width);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 16; break;}
+ temp = htonl(idx->v_width);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 17; break;}
+ temp = htonl(idx->name_space);
+ if (fwrite(&temp, 1, sizeof(int32_t), ofp) < 0)
+ {err_cnt = 18; break;}
+ }
+
+ fclose(ofp);
+ fclose(fpHeader);
+
+ return(err_cnt);
+}
+
+ /*
+ * Routine: main()
+ * Purpose: provide command line interface to distcomp routines
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: jms 20041013: rework as version/option of qgen
+ */
+
+int main(int argc, char* argv[])
+{
+ int nArgs,
+ i;
+ char szPath[128]; /* need file path length define */
+ char szHeader[128];
+ d_idx_t *pIndexEntry;
+
+ nArgs = process_options(argc, argv);
+ if (!is_set("INPUT") || !is_set("OUTPUT"))
+ usage(NULL, "Must specify input and output file names");
+ if (!is_set("HEADER"))
+ {
+ strcpy(szHeader, get_str("OUTPUT"));
+ strcat(szHeader, ".h");
+ set_str("HEADER", szHeader);
+ }
+
+
+
+ /* setup the dist index */
+ pDistIndex = (distindex_t *)malloc(sizeof(struct DISTINDEX_T));
+ MALLOC_CHECK(pDistIndex);
+ if (pDistIndex == NULL)
+ ReportError(QERR_NO_MEMORY, "main", 1);
+ memset((void *)pDistIndex, 0, sizeof(struct DISTINDEX_T));
+ /*
+ pDistIndex->pEntries = (d_idx_t *)malloc(100 * sizeof(struct D_IDX_T));
+ MALLOC_CHECK(pDistIndex->pEntries);
+ if (pDistIndex->pEntries == NULL)
+ ReportError(QERR_NO_MEMORY, "main", 1);
+ pDistIndex->nAllocatedCount = 100;
+ for (i=0; i < 100; i++)
+ memset(pDistIndex->pEntries + i, 0, sizeof(struct D_IDX_T));
+ */
+
+
+ SetTokens(dcomp_tokens);
+
+ if ((i = ParseFile(get_str("INPUT"))) != 0)
+ {
+ printf("ERROR: Parse failed for %s\n",
+ get_str("INPUT"));
+ ReportError(i, NULL, 1);
+ exit(1);
+ }
+
+ if (is_set("VERBOSE"))
+ {
+ printf("Defined %d distributions:\n", pDistIndex->nDistCount);
+ for (i=0; i < pDistIndex->nDistCount; i++)
+ {
+ pIndexEntry = pDistIndex->pEntries + i;
+ printf("\t%s[%d] --> (%d,%d)",
+ pIndexEntry->name,
+ pIndexEntry->length,
+ pIndexEntry->v_width,
+ pIndexEntry->w_width);
+ if (pIndexEntry->name_space)
+ printf(" with names");
+ printf("\n");
+ }
+ }
+
+ if ((i = WriteIndex(pDistIndex)) > 0)
+ {
+ sprintf(szPath, "WriteDist returned %d writing to %s",
+ i, get_str("OUTPUT"));
+ ReportError(QERR_WRITE_FAILED, szPath, 1);
+ }
+
+ return 0;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.h b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.h
new file mode 100644
index 000000000000..00ff519ac868
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp.h
@@ -0,0 +1,87 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef DCOMP_H
+#define DCOMP_H
+
+#include "config.h"
+#include "porting.h"
+#include "grammar.h"
+#include "dist.h"
+
+/*
+ * query template grammar definition
+ */
+#define TKN_UNKNOWN 0
+#define TKN_CREATE 1
+#define TKN_WEIGHTS 2
+#define TKN_TYPES 3
+#define TKN_INCLUDE 4
+#define TKN_SET 5
+#define TKN_VARCHAR 6
+#define TKN_INT 7
+#define TKN_ADD 8
+#define TKN_DATE 9
+#define TKN_DECIMAL 10
+#define TKN_NAMES 11
+#define MAX_TOKEN 11
+
+int ProcessDistribution(char *s, token_t *t);
+int ProcessTypes(char *s, token_t *t);
+int ProcessInclude(char *s, token_t *t);
+int ProcessSet(char *s, token_t *t);
+int ProcessAdd(char *s, token_t *t);
+
+#ifdef DECLARER
+token_t dcomp_tokens[MAX_TOKEN + 2] = {
+ { TKN_UNKNOWN, "", NULL},
+ { TKN_CREATE, "create", ProcessDistribution},
+ { TKN_WEIGHTS, "weights", NULL},
+ { TKN_TYPES, "types", NULL},
+ { TKN_INCLUDE, "#include", ProcessInclude},
+ { TKN_SET, "set", ProcessSet},
+ { TKN_VARCHAR, "varchar", NULL},
+ { TKN_INT, "int", NULL},
+ { TKN_ADD, "add", ProcessAdd},
+ { TKN_DATE, "date", NULL},
+ { TKN_DECIMAL, "decimal", NULL},
+ { TKN_NAMES, "names", NULL},
+ { -1, "", NULL}
+};
+#else
+extern token_t tokens[];
+#endif
+
+#endif /* DCOMP_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp_params.h b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp_params.h
new file mode 100644
index 000000000000..ad605ea588aa
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dcomp_params.h
@@ -0,0 +1,61 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef DCOMP_PARAMS_H
+#define DCOMP_PARAMS_H
+
+#include "r_params.h"
+#define MAX_PARAM 4
+#ifdef DECLARER
+
+option_t options[] =
+{
+/* General Parmeters */
+{"PROG",OPT_STR|OPT_HIDE|OPT_SET,0, "DO NOT MODIFY" , NULL, "distcomp"},
+{"INPUT",OPT_STR,1, "read distributions from file ", NULL, ""},
+{"VERBOSE",OPT_FLG,2, "enable verbose output", NULL, "N"},
+{"HELP",OPT_FLG,3, "display this message", usage, "N"},
+{"OUTPUT",OPT_STR,4, "output the compiled distributions to ", NULL, "."},
+{"HEADER",OPT_STR,5, "output distribution index names to header file ", NULL, ""},
+{NULL}
+};
+
+char *params[MAX_PARAM + 2];
+#else
+extern option_t options[];
+extern char *params[];
+extern char *szTableNames[];
+#endif
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.c b/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.c
new file mode 100644
index 000000000000..5ce9d2694cd3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.c
@@ -0,0 +1,398 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+/*** includes ***/
+#include "config.h"
+#include "porting.h"
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include
+#include "decimal.h"
+#include "mathops.h"
+
+
+/*
+ * Routine: set_precision(decimal_t *dest, int size, int precision)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: None
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+set_precision(decimal_t *dest, int scale, int precision)
+{
+ dest->scale = scale;
+ dest->precision = precision;
+ dest->number = 0;
+ dest->flags = 0;
+
+ return;
+}
+
+/*
+ * Routine: mk_decimal(int size, int precision)
+ * Purpose: initialize a decimal_t
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: int size: total number of places in the decimal
+ * int precision: number of places in the fraction
+ * Returns: decimal_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+decimal_t *
+mk_decimal(int s, int p)
+{
+ decimal_t *res;
+
+ if ((s < 0) || (p < 0))
+ return(NULL);
+
+ res = (decimal_t *)malloc(sizeof(struct DECIMAL_T));
+ MALLOC_CHECK(res);
+
+ res->flags = 0;
+ res->scale = s;
+ res->precision = p;
+ res->flags |= FL_INIT;
+
+ return(res);
+}
+
+/*
+ * Routine: itodec(int src, decimal_t *dest)
+ * Purpose: convert an integer to a decimal_t
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: source integer
+ * Returns: decimal_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 20000104 need to set errno on error
+ */
+int
+itodec(decimal_t *dest, int src)
+{
+ int scale = 1,
+ bound = 1;
+
+ while ((bound * 10) <= src)
+ {
+ scale += 1;
+ bound *= 10;
+ }
+
+ dest->precision = 0;
+ dest->scale = scale;
+ dest->number = src;
+
+ return(0);
+}
+
+/*
+ * Routine: ftodec(double f, decimal_t *dec)
+ * Purpose: Convert a double to a decimal_t
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: double f
+ * Returns: decimal_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ftodec(decimal_t *dest, double f)
+{
+ static char valbuf[20];
+
+ sprintf(valbuf, "%f", f);
+
+ return(strtodec(dest, valbuf));
+}
+
+/*
+ * Routine: strtodec()
+ * Purpose: Convert an ascii string to a decimal_t structure
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: char *s
+ * Returns: decimal_t *
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+strtodec(decimal_t *dest, char *s)
+{
+ int i;
+ char *d_pt;
+ char valbuf[20];
+
+ strcpy(valbuf, s);
+ dest->flags = 0;
+ if ((d_pt = strchr(valbuf, '.')) == NULL)
+ {
+ dest->scale = strlen(valbuf);
+ dest->number = atoi(valbuf);
+ dest->precision = 0;
+ }
+ else
+ {
+ *d_pt = '\0';
+ d_pt += 1;
+ dest->scale = strlen(valbuf);
+ dest->number = atoi(valbuf);
+ dest->precision = strlen(d_pt);
+ for (i=0; i < dest->precision; i++)
+ dest->number *=10;
+ dest->number += atoi(d_pt);
+ }
+
+ if (*s == '-' && dest->number > 0)
+ dest->number *= -1;
+
+ return(0);
+}
+
+/*
+ * Routine: dectostr(decimal_t *d, char *buf)
+ * Purpose: convert a decimal structure to a string
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: char *; NULL on success
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+dectostr(char *dest, decimal_t *d)
+{
+ ds_key_t number;
+ int i;
+ static int bInit = 0;
+ static char szFormat[20];
+
+ if (!bInit)
+ {
+ sprintf(szFormat, "%s.%s", HUGE_FORMAT, HUGE_FORMAT);
+ bInit = 1;
+ }
+
+ if (d == NULL || dest == NULL)
+ return(-1);
+ for (number=d->number, i=0; i < d->precision; i++)
+ number /= 10;
+
+ sprintf(dest, szFormat, number, d->number - number);
+
+ return(0);
+}
+
+/*
+ * Routine: dectof(float *dest, decimal_t *d)
+ * Purpose: convert a decimal structure to a double
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: char *; NULL on success
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+dectoflt(double *dest, decimal_t *d)
+ {
+ if ((dest == NULL) || (d == NULL))
+ return(-1);
+#ifdef WIN32
+#pragma warning(disable: 4244)
+#endif
+ *dest = d->number;
+#ifdef WIN32
+#pragma warning(default: 4244)
+#endif
+ while (--d->precision > 0)
+ *dest /= 10.0;
+
+ return(0);
+}
+
+/*
+ * Routine: decimal_t_op(int op, decimal_t *operand1, decimal_t *operand2)
+ * Purpose: execute arbitrary binary operations on decimal_t's
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+decimal_t_op(decimal_t *dest, int op, decimal_t *d1, decimal_t *d2)
+{
+ int res,
+ np;
+ float f1,
+ f2;
+
+ if ((d1 == NULL) || (d2 == NULL))
+ return(-1);
+
+ dest->scale = (d1->scale > d2->scale)?d1->scale:d2->scale;
+ if (d1->precision > d2->precision)
+ {
+ dest->precision = d1->precision;
+ }
+ else
+ {
+ dest->precision = d2->precision;
+ }
+
+ switch(op)
+ {
+ case OP_PLUS:
+ dest->number = d1->number + d2->number;
+ break;
+ case OP_MINUS:
+ dest->number = d1->number - d2->number;
+ break;
+ case OP_MULT:
+ res = d1->precision + d2->precision;
+ dest->number = d1->number * d2->number;
+ while (res-- > dest->precision)
+ dest->number /= 10;
+ break;
+ case OP_DIV:
+ f1 = (float)d1->number;
+ np = d1->precision;
+ while (np < dest->precision)
+ {
+ f1 *= 10.0;
+ np += 1;
+ }
+ np = 0;
+ while (np < dest->precision)
+ {
+ f1 *= 10.0;
+ np += 1;
+ }
+ f2 = (float)d2->number;
+ np = d2->precision;
+ while (np < dest->precision)
+ {
+ f2 *= 10.0;
+ np += 1;
+ }
+
+ dest->number = (int)(f1/f2);
+ break;
+ default:
+ printf("decimal_t_op does not support op %d\n", op);
+ exit(1);
+ break;
+ }
+
+ return(0);
+}
+
+#ifdef TEST
+main()
+{
+ decimal_t *res;
+ int code;
+
+ /* mk_decimal */
+ res = mk_decimal(5,2);
+ if (res == NULL)
+ {
+ printf("mk_decimal returned NULL\n");
+ exit(-1);
+ }
+
+ /* itodec */
+ itodec(res, 0);
+ code = dectoi(res);
+ if (code)
+ {
+ printf("r_decimal:itodec(0, res) != 0 (%d)\n", code);
+ exit(-1);
+ }
+
+ itodec(res, 999);
+ code = dectoi(res);
+ if (code != 999)
+ {
+ printf("r_decimal:itodec(999, res) != 0 (%d)\n", code);
+ exit(-1);
+ }
+
+ exit(0);
+}
+#endif /* TEST */
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.h b/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.h
new file mode 100644
index 000000000000..6dbbe2a61492
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/decimal.h
@@ -0,0 +1,70 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef R_DECIMAL_H
+#define R_DECIMAL_H
+#include "config.h"
+#include "porting.h"
+#include "mathops.h"
+#include
+
+/*
+ * a precise decimal data type, using scaled integer
+ * arithmetic.
+ */
+typedef struct DECIMAL_T {
+ int flags;
+ int precision;
+ int scale;
+ ds_key_t number;
+} decimal_t;
+
+#define FL_INIT 0x0004
+
+decimal_t *mk_decimal(int s, int p);
+
+int itodec(decimal_t *dest, int i);
+int ftodec(decimal_t *d, double f);
+int strtodec(decimal_t *d, char *src);
+
+int dectostr(char *dest, decimal_t *d);
+int dectof(double *dest, decimal_t *);
+#define dectoi(d) atoi(d->number)
+
+int decimal_t_op(decimal_t *dest, int o, decimal_t *d1, decimal_t *d2);
+void print_decimal(int nColumn, decimal_t *d, int s);
+void set_precision(decimal_t *d, int sie, int precision);
+#define NegateDecimal(d) (d)->number *= -1
+#endif /* R_DECIMAL_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dist.c b/ydb/library/benchmarks/gen/tpcds-dbgen/dist.c
new file mode 100644
index 000000000000..c980d24b9979
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dist.c
@@ -0,0 +1,974 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include
+#ifdef WIN32
+#include
+#include
+#include
+#else
+#include
+#include
+#include
+#endif
+#ifdef NCR
+#include
+#endif
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include "config.h"
+#include "decimal.h"
+#include "date.h"
+#include "dist.h"
+#include "genrand.h"
+#include "error_msg.h"
+#include "r_params.h"
+#include "dcomp.h"
+#ifdef TEST
+option_t options[] =
+{
+ {"DISTRIBUTIONS", OPT_STR, 2,
+ "read distributions from file ", NULL, "tester_dist.idx"},
+ NULL
+};
+
+char params[2];
+struct {char *name;} tdefs[] = {NULL};
+#endif
+
+/* NOTE: these need to be in sync with a_dist.h */
+#define D_NAME_LEN 20
+#define FL_LOADED 0x01
+static int load_dist(d_idx_t *d);
+
+
+/*
+* Routine: di_compare()
+* Purpose: comparison routine for two d_idx_t entries; used by qsort
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+di_compare(const void *op1, const void *op2)
+{
+ d_idx_t *ie1 = (d_idx_t *)op1,
+ *ie2 = (d_idx_t *)op2;
+
+ return(strcasecmp(ie1->name, ie2->name));
+}
+
+/*
+* Routine: find_dist(char *name)
+* Purpose: translate from dist_t name to d_idx_t *
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+d_idx_t *
+find_dist(char *name)
+{
+ static int index_loaded = 0,
+ entry_count;
+ static d_idx_t *idx = NULL;
+ d_idx_t key,
+ *id = NULL;
+ int i;
+ FILE *ifp;
+ int32_t temp;
+
+
+ /* load the index if this is the first time through */
+ if (!index_loaded)
+ {
+ /* make sure that this is read one thread at a time */
+ if (!index_loaded) /* make sure no one beat us to it */
+ {
+
+ /* open the dist file */
+ if ((ifp = fopen(get_str("DISTRIBUTIONS"), "rb")) == NULL)
+ {
+ fprintf(stderr, "Error: open of distributions failed: ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(1);
+ }
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read of index count failed: ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ entry_count = ntohl(temp);
+ if ((temp = fseek(ifp, -entry_count * IDX_SIZE, SEEK_END)) < 0)
+ {
+ fprintf(stderr, "Error: lseek to index failed: ");
+ fprintf(stderr, "attempting to reach %d\nSystem error: ",
+ (int)(-entry_count * IDX_SIZE));
+ perror(get_str("DISTRIBUTIONS"));
+ exit(3);
+ }
+ idx = (d_idx_t *)malloc(entry_count * sizeof(d_idx_t));
+ MALLOC_CHECK(idx);
+ for (i=0; i < entry_count; i++)
+ {
+ memset(idx + i, 0, sizeof(d_idx_t));
+ if (fread( idx[i].name, 1, D_NAME_LEN, ifp) < D_NAME_LEN)
+ {
+ fprintf(stderr, "Error: read index failed (1): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].name[D_NAME_LEN] = '\0';
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (2): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].index = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (4): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].offset = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (5): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].str_space = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (6): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].length = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (7): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].w_width = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (8): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].v_width = ntohl(temp);
+ if (fread( &temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read index failed (9): ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(2);
+ }
+ idx[i].name_space = ntohl(temp);
+ idx[i].dist = NULL;
+ }
+ qsort((void *)idx, entry_count, sizeof(d_idx_t), di_compare);
+ index_loaded = 1;
+
+ /* make sure that this is read one thread at a time */
+ fclose(ifp);
+ }
+ }
+
+ /* find the distribution, if it exists and move to it */
+ strcpy(key.name, name);
+ id = (d_idx_t *)bsearch((void *)&key, (void *)idx, entry_count,
+ sizeof(d_idx_t), di_compare);
+ if (id != NULL) /* found a valid distribution */
+ if (id->flags != FL_LOADED) /* but it needs to be loaded */
+ load_dist(id);
+
+
+
+ return(id);
+}
+
+/*
+* Routine: load_dist(int fd, dist_t *d)
+* Purpose: load a particular distribution
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+static int
+load_dist(d_idx_t *di)
+{
+ int res = 0,
+ i,
+ j;
+ dist_t *d;
+ int32_t temp;
+ FILE *ifp;
+
+ if (di->flags != FL_LOADED) /* make sure no one beat us to it */
+ {
+ if ((ifp = fopen(get_str("DISTRIBUTIONS"), "rb")) == NULL)
+ {
+ fprintf(stderr, "Error: open of distributions failed: ");
+ perror(get_str("DISTRIBUTIONS"));
+ exit(1);
+ }
+
+ if ((temp = fseek(ifp, di->offset, SEEK_SET)) < 0)
+ {
+ fprintf(stderr, "Error: lseek to distribution failed: ");
+ perror("load_dist()");
+ exit(2);
+ }
+
+ di->dist = (dist_t *)malloc(sizeof(struct DIST_T));
+ MALLOC_CHECK(di->dist);
+ d = di->dist;
+
+ /* load the type information */
+ d->type_vector = (int *)malloc(sizeof(int32_t) * di->v_width);
+ MALLOC_CHECK(d->type_vector);
+ for (i=0; i < di->v_width; i++)
+ {
+ if (fread(&temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read of type vector failed for '%s': ", di->name);
+ perror("load_dist()");
+ exit(3);
+ }
+ d->type_vector[i] = ntohl(temp);
+ }
+
+ /* load the weights */
+ d->weight_sets = (int **)malloc(sizeof(int *) * di->w_width);
+ d->maximums = (int *)malloc(sizeof(int32_t) * di->w_width);
+ MALLOC_CHECK(d->weight_sets);
+ MALLOC_CHECK(d->maximums);
+ for (i=0; i < di->w_width; i++)
+ {
+ *(d->weight_sets + i) = (int *)malloc(di->length * sizeof(int32_t));
+ MALLOC_CHECK(*(d->weight_sets + i));
+ d->maximums[i] = 0;
+ for (j=0; j < di->length; j++)
+ {
+ if (fread(&temp, 1, sizeof(int32_t), ifp) < 0)
+ {
+ fprintf(stderr, "Error: read of weights failed: ");
+ perror("load_dist()");
+ exit(3);
+ }
+ *(*(d->weight_sets + i) + j) = ntohl(temp);
+ /* calculate the maximum weight and convert sets to cummulative */
+ d->maximums[i] += d->weight_sets[i][j];
+ d->weight_sets[i][j] = d->maximums[i];
+ }
+ }
+
+ /* load the value offsets */
+ d->value_sets = (int **)malloc(sizeof(int *) * di->v_width);
+ MALLOC_CHECK(d->value_sets);
+ for (i=0; i < di->v_width; i++)
+ {
+ *(d->value_sets + i) = (int *)malloc(di->length * sizeof(int32_t));
+ MALLOC_CHECK(*(d->value_sets + i));
+ for (j=0; j < di->length; j++)
+ {
+ if (fread(&temp, 1, sizeof(int32_t), ifp) != sizeof(int32_t))
+ {
+ fprintf(stderr, "Error: read of values failed: ");
+ perror("load_dist()");
+ exit(4);
+ }
+ *(*(d->value_sets + i) + j) = ntohl(temp);
+ }
+ }
+
+ /* load the column aliases, if they were defined */
+ if (di->name_space)
+ {
+ d->names = (char *)malloc(di->name_space);
+ MALLOC_CHECK(d->names);
+ if (fread(d->names, 1, di->name_space * sizeof(char), ifp) < 0)
+ {
+ fprintf(stderr, "Error: read of names failed: ");
+ perror("load_dist()");
+ exit(599);
+ }
+
+ }
+
+ /* and finally the values themselves */
+ d->strings = (char *)malloc(sizeof(char) * di->str_space);
+ MALLOC_CHECK(d->strings);
+ if (fread(d->strings, 1, di->str_space * sizeof(char), ifp) < 0)
+ {
+ fprintf(stderr, "Error: read of strings failed: ");
+ perror("load_dist()");
+ exit(5);
+ }
+
+ fclose(ifp);
+ di->flags = FL_LOADED;
+ }
+
+
+
+ return(res);
+}
+
+/*
+* Routine: void *dist_op()
+* Purpose: select a value/weight from a distribution
+* Algorithm:
+* Data Structures:
+*
+* Params: char *d_name
+* int vset: which set of values
+* int wset: which set of weights
+* Returns: appropriate data type cast as a void *
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20000317 Need to be sure this is portable to NT and others
+*/
+int
+dist_op(void *dest, int op, char *d_name, int vset, int wset, int stream)
+{
+ d_idx_t *d;
+ dist_t *dist;
+ int level,
+ index = 0,
+ dt;
+ char *char_val;
+ int i_res = 1;
+
+ if ((d = find_dist(d_name)) == NULL)
+ {
+ char msg[80];
+ sprintf(msg, "Invalid distribution name '%s'", d_name);
+ INTERNAL(msg);
+ assert(d != NULL);
+ }
+
+ dist = d->dist;
+
+ if (op == 0)
+ {
+ genrand_integer(&level, DIST_UNIFORM, 1,
+ dist->maximums[wset - 1], 0, stream);
+ while (level > dist->weight_sets[wset - 1][index] &&
+ index < d->length)
+ index += 1;
+ dt = vset - 1;
+ if ((index >= d->length) || (dt > d->v_width))
+ INTERNAL("Distribution overrun");
+ char_val = dist->strings + dist->value_sets[dt][index];
+ }
+ else
+ {
+ index = vset - 1;
+ dt = wset - 1;
+ if (index >= d->length || index < 0)
+ {
+ fprintf(stderr, "Runtime ERROR: Distribution over-run/under-run\n");
+ fprintf(stderr, "Check distribution definitions and usage for %s.\n",
+ d->name);
+ fprintf(stderr, "index = %d, length=%d.\n",
+ index, d->length);
+ exit(1);
+ }
+ char_val = dist->strings + dist->value_sets[dt][index];
+ }
+
+
+ switch(dist->type_vector[dt])
+ {
+ case TKN_VARCHAR:
+ if (dest)
+ *(char **)dest = (char *)char_val;
+ break;
+ case TKN_INT:
+ i_res = atoi(char_val);
+ if (dest)
+ *(int *)dest = i_res;
+ break;
+ case TKN_DATE:
+ if (dest == NULL)
+ {
+ dest = (date_t *)malloc(sizeof(date_t));
+ MALLOC_CHECK(dest);
+ }
+ strtodt(*(date_t **)dest, char_val);
+ break;
+ case TKN_DECIMAL:
+ if (dest == NULL)
+ {
+ dest = (decimal_t *)malloc(sizeof(decimal_t));
+ MALLOC_CHECK(dest);
+ }
+ strtodec(*(decimal_t **)dest,char_val);
+ break;
+ }
+
+ return((dest == NULL)?i_res:index + 1); /* shift back to the 1-based indexing scheme */
+}
+
+/*
+* Routine: int dist_weight
+* Purpose: return the weight of a particular member of a distribution
+* Algorithm:
+* Data Structures:
+*
+* Params: distribution *d
+* int index: which "row"
+* int wset: which set of weights
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20000405 need to add error checking
+*/
+int
+dist_weight(int *dest, char *d, int index, int wset)
+{
+ d_idx_t *d_idx;
+ dist_t *dist;
+ int res;
+
+ if ((d_idx = find_dist(d)) == NULL)
+ {
+ char msg[80];
+ sprintf(msg, "Invalid distribution name '%s'", d);
+ INTERNAL(msg);
+ }
+
+ dist = d_idx->dist;
+
+ res = dist->weight_sets[wset - 1][index - 1];
+ /* reverse the accumulation of weights */
+ if (index > 1)
+ res -= dist->weight_sets[wset - 1][index - 2];
+
+ if (dest == NULL)
+ return(res);
+
+ *dest = res;
+
+ return(0);
+}
+
+/*
+* Routine: int DistNameIndex()
+* Purpose: return the index of a column alias
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+DistNameIndex(char *szDist, int nNameType, char *szName)
+{
+ d_idx_t *d_idx;
+ dist_t *dist;
+ int res;
+ char *cp = NULL;
+
+ if ((d_idx = find_dist(szDist)) == NULL)
+ return(-1);
+ dist = d_idx->dist;
+
+ if (dist->names == NULL)
+ return(-1);
+
+ res = 0;
+ cp = dist->names;
+ do {
+ if (strcasecmp(szName, cp) == 0)
+ break;
+ cp += strlen(cp) + 1;
+ res += 1;
+ } while (res < (d_idx->v_width + d_idx->w_width));
+
+ if (res >= 0)
+ {
+ if ((nNameType == VALUE_NAME) && (res < d_idx->v_width))
+ return(res + 1);
+ if ((nNameType == WEIGHT_NAME) && (res > d_idx->v_width))
+ return(res - d_idx->v_width + 1);
+ }
+
+ return(-1);
+}
+
+
+/*
+* Routine: int distsize(char *name)
+* Purpose: return the size of a distribution
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20000405 need to add error checking
+*/
+int
+distsize(char *name)
+{
+ d_idx_t *dist;
+
+ dist = find_dist(name);
+
+ if (dist == NULL)
+ return(-1);
+
+ return(dist->length);
+}
+
+/*
+* Routine: int IntegrateDist(char *szDistName, int nPct, int nStartIndex, int nWeightSet)
+* Purpose: return the index of the entry which, starting from nStartIndex, would
+* create a range comprising nPct of the total contained in nWeightSet
+* NOTE: the value can "wrap" -- that is, the returned value can be less than nStartIndex
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+
+int IntegrateDist(char *szDistName, int nPct, int nStartIndex, int nWeightSet)
+{
+ d_idx_t *pDistIndex;
+ int nGoal,
+ nSize;
+
+ if ((nPct <= 0) || (nPct >= 100))
+ return(QERR_RANGE_ERROR);
+
+ pDistIndex=find_dist(szDistName);
+ if (pDistIndex == NULL)
+ return(QERR_BAD_NAME);
+
+ if (nStartIndex > pDistIndex->length)
+ return(QERR_RANGE_ERROR);
+
+ nGoal = pDistIndex->dist->maximums[nWeightSet];
+ nGoal = nGoal * nPct / 100;
+ nSize = distsize(szDistName);
+
+ while (nGoal >= 0)
+ {
+ nStartIndex++;
+ nGoal -= dist_weight(NULL, szDistName, nStartIndex % nSize, nWeightSet);
+ }
+
+ return(nStartIndex);
+}
+
+
+/*
+* Routine: int dist_type(char *name, int nValueSet)
+* Purpose: return the type of the n-th value set in a distribution
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+dist_type(char *name, int nValueSet)
+{
+ d_idx_t *dist;
+
+ dist = find_dist(name);
+
+ if (dist == NULL)
+ return(-1);
+
+ if (nValueSet < 1 || nValueSet > dist->v_width)
+ return(-1);
+
+ return(dist->dist->type_vector[nValueSet - 1]);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+dump_dist(char *name)
+{
+ d_idx_t *pIndex;
+ int i, j;
+ char *pCharVal = NULL;
+ int nVal;
+
+ pIndex = find_dist(name);
+ if (pIndex == NULL)
+ ReportErrorNoLine(QERR_BAD_NAME, name, 1);
+ printf("create %s;\n", pIndex->name);
+ printf("set types = (");
+ for (i=0; i < pIndex->v_width; i++)
+ {
+ if (i > 0)
+ printf(", ");
+ printf("%s", dist_type(name, i + 1) == 7?"int":"varchar");
+ }
+ printf(");\n");
+ printf("set weights = %d;\n", pIndex->w_width);
+ for (i=0; i < pIndex->length; i++)
+ {
+ printf("add(");
+ for (j=0; j < pIndex->v_width; j++)
+ {
+ if (j)
+ printf(", ");
+ if (dist_type(name, j + 1) != 7)
+ {
+ dist_member(&pCharVal, name, i + 1, j + 1);
+ printf("\"%s\"", pCharVal);
+ }
+ else
+ {
+ dist_member(&nVal, name, i + 1, j + 1);
+ printf("%d", nVal);
+ }
+ }
+ printf("; ");
+ for (j=0; j < pIndex->w_width; j++)
+ {
+ if (j)
+ printf(", ");
+ printf("%d", dist_weight(NULL, name, i + 1, j + 1));
+ }
+ printf(");\n");
+ }
+
+ return;
+}
+
+/*
+* Routine: dist_active(char *szName, int nWeightSet)
+* Purpose: return number of entries with non-zero weght values
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+dist_active(char *szName, int nWeightSet)
+{
+ int nSize,
+ nResult = 0,
+ i;
+
+ nSize = distsize(szName);
+ for (i=1; i <= nSize; i++)
+ {
+ if (dist_weight(NULL, szName, i, nWeightSet) != 0)
+ nResult += 1;
+ }
+
+ return(nResult);
+}
+
+/*
+* Routine: DistSizeToShiftWidth(char *szDist)
+* Purpose: Determine the number of bits required to select a member of the distribution
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int DistSizeToShiftWidth(char *szDist, int nWeightSet)
+{
+ int nBits = 1,
+ nTotal = 2,
+ nMax;
+ d_idx_t *d;
+
+ d = find_dist(szDist);
+ nMax = dist_max(d->dist, nWeightSet);
+
+ while (nTotal < nMax)
+ {
+ nBits += 1;
+ nTotal <<= 1;
+ }
+
+ return(nBits);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int MatchDistWeight(void *dest, char *szDist, int nWeight, int nWeightSet, int ValueSet)
+{
+ d_idx_t *d;
+ dist_t *dist;
+ int index = 0,
+ dt,
+ i_res,
+ nRetcode;
+ char *char_val;
+
+ if ((d = find_dist(szDist)) == NULL)
+ {
+ char msg[80];
+ sprintf(msg, "Invalid distribution name '%s'", szDist);
+ INTERNAL(msg);
+ }
+
+ dist = d->dist;
+ nWeight %= dist->maximums[nWeightSet - 1];
+
+ while (nWeight > dist->weight_sets[nWeightSet - 1][index] &&
+ index < d->length)
+ index += 1;
+ dt = ValueSet - 1;
+ if (index >= d->length)
+ index = d->length - 1;
+ char_val = dist->strings + dist->value_sets[dt][index];
+
+ switch(dist->type_vector[dt])
+ {
+ case TKN_VARCHAR:
+ if (dest)
+ *(char **)dest = (char *)char_val;
+ break;
+ case TKN_INT:
+ i_res = atoi(char_val);
+ if (dest)
+ *(int *)dest = i_res;
+ break;
+ case TKN_DATE:
+ if (dest == NULL)
+ {
+ dest = (date_t *)malloc(sizeof(date_t));
+ MALLOC_CHECK(dest);
+ }
+ strtodt(*(date_t **)dest, char_val);
+ break;
+ case TKN_DECIMAL:
+ if (dest == NULL)
+ {
+ dest = (decimal_t *)malloc(sizeof(decimal_t));
+ MALLOC_CHECK(dest);
+ }
+ strtodec(*(decimal_t **)dest,char_val);
+ break;
+ }
+
+ nRetcode = 1;
+ index = 1;
+ while (index < dist->maximums[nWeightSet - 1])
+ {
+ nRetcode += 1;
+ index *= 2;
+ }
+
+ return(nRetcode);
+}
+
+/*
+* Routine: findDistValue(char *szValue, char *szDistName, int nValueSet)
+* Purpose: Return the row number where the entry is found
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20031024 jms this routine needs to handle all data types, not just varchar
+*/
+int
+findDistValue(char *szValue, char *szDistName, int ValueSet)
+{
+ int nRetValue = 1,
+ nDistMax;
+ char szDistValue[128];
+
+ nDistMax = distsize(szDistName);
+
+ for (nRetValue = 1; nRetValue < nDistMax; nRetValue++)
+ {
+ dist_member(&szDistValue, szDistName, nRetValue, ValueSet);
+ if (strcmp(szValue, szDistValue) == 0)
+ break;
+ }
+
+ if (nRetValue <= nDistMax)
+ return(nRetValue);
+ return(-1);
+}
+
+
+
+
+
+#ifdef TEST
+main()
+{
+ int i_res;
+ char *c_res;
+ decimal_t dec_res;
+
+ init_params();
+
+ dist_member(&i_res, "test_dist", 1, 1);
+ if (i_res != 10)
+ {
+ printf("dist_member(\"test_dist\", 1, 1): %d != 10\n", i_res);
+ exit(1);
+ }
+ dist_member(&i_res, "test_dist", 1, 2);
+ if (i_res != 60)
+ {
+ printf("dist_member(\"test_dist\", 1, 2): %d != 60\n", i_res);
+ exit(1);
+ }
+ dist_member((void *)&c_res, "test_dist", 1, 3);
+ if (strcmp(c_res, "El Camino"))
+ {
+ printf("dist_member(\"test_dist\", 1, 3): %s != El Camino\n",
+ c_res);
+ exit(1);
+ }
+ dist_member((void *)&dec_res, "test_dist", 1, 4);
+ if (strcmp(dec_res.number, "1") || strcmp(dec_res.fraction, "23"))
+ {
+ printf("dist_member(\"test_dist\", 1, 4): %s.%s != 1.23\n",
+ dec_res.number, dec_res.fraction);
+ exit(1);
+ }
+ dist_weight(&i_res, "test_dist", 2, 2);
+ if (3 != i_res)
+ {
+ printf("dist_weight(\"test_dist\", 2, 2): %d != 3\n", i_res);
+ exit(1);
+ }
+}
+#endif /* TEST */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/dist.h b/ydb/library/benchmarks/gen/tpcds-dbgen/dist.h
new file mode 100644
index 000000000000..2a0edd20ba27
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/dist.h
@@ -0,0 +1,105 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef R_DIST_H
+#define R_DIST_H
+
+#define D_NAME_LEN 20
+
+typedef struct DIST_T {
+ int *type_vector;
+ int **weight_sets;
+ int *maximums;
+ int **value_sets;
+ char *strings;
+ char *names;
+ int size;
+ } dist_t;
+
+typedef struct D_IDX_T {
+ char name[D_NAME_LEN + 1];
+ int index;
+ int nAllocatedLength;
+ int nRemainingStrSpace;
+ int offset;
+ int str_space;
+ int name_space;
+ int length;
+ int w_width;
+ int v_width;
+ int flags;
+ dist_t *dist;
+} d_idx_t;
+
+typedef struct DISTINDEX_T {
+ int nDistCount;
+ int nAllocatedCount;
+ d_idx_t *pEntries;
+ } distindex_t;
+
+/* must match WriteDist() in dcomp.c */
+#define IDX_SIZE (D_NAME_LEN + 7 * sizeof(int))
+
+int dist_op(void *dest, int op, char *d_name, int vset, int wset, int stream);
+#define pick_distribution(dest, dist, v, w, s) dist_op(dest, 0, dist, v, w, s)
+#define dist_member(dest, dist, v, w) dist_op(dest, 1, dist, v, w, 0)
+#define dist_max(dist, w) dist->maximums[w - 1]
+int dist_weight(int *dest, char *d, int index, int wset);
+int distsize(char *szDistname);
+int dist_type(char *szDistName, int vset);
+d_idx_t *find_dist(char *name);
+int IntegrateDist(char *szDistName, int nPct, int nStartIndex, int nWeightSet);
+void dump_dist(char *szName);
+int dist_active(char *szName, int nWeightSet);
+int DistNameIndex(char *szDist, int nNameType, char *szName);
+int DistSizeToShiftWidth(char *szDist, int nWeightSet);
+int MatchDistWeight(void *dest, char *szDist, int nWeight, int nWeightSet, int ValueSet);
+int findDistValue(char *szValue, char *szDistName, int ValueSet);
+int di_compare(const void *op1, const void *op2);
+
+
+#define DIST_UNIFORM 0x0001
+#define DIST_EXPONENTIAL 0x0002
+/* sales and returns are special; they must match calendar.dst */
+#define DIST_SALES 3
+#define DIST_RETURNS 5
+#define DIST_CHAR 0x0004
+#define DIST_INT 0x0008
+#define DIST_NAMES_SET 0xff00
+
+/* DistNameIndex needs to know what sort of name we are trying to match */
+#define VALUE_NAME 0x0000
+#define WEIGHT_NAME 0x0001
+#endif /* R_DIST_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/distcomp.vcproj b/ydb/library/benchmarks/gen/tpcds-dbgen/distcomp.vcproj
new file mode 100644
index 000000000000..00e95e3e5363
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/distcomp.vcproj
@@ -0,0 +1,573 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/driver.c b/ydb/library/benchmarks/gen/tpcds-dbgen/driver.c
new file mode 100644
index 000000000000..a8263c78d843
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/driver.c
@@ -0,0 +1,574 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#define DECLARER
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#ifdef WIN32
+#include
+#include
+#endif
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+#include "config.h"
+#include "date.h"
+#include "decimal.h"
+#include "genrand.h"
+#include "tdefs.h"
+#include "tdef_functions.h"
+#include "build_support.h"
+#include "params.h"
+#include "parallel.h"
+#include "tables.h"
+#include "release.h"
+#include "scaling.h"
+#include "load.h"
+#include "error_msg.h"
+#include "print.h"
+#include "release.h"
+#include "tpcds.idx.h"
+#include "grammar_support.h" /* to get definition of file_ref_t */
+#include "address.h" /* for access to resetCountyCount() */
+#include "scd.h"
+
+
+extern int optind, opterr;
+extern char *optarg;
+/* extern tdef w_tdefs[], s_tdefs[]; */
+char g_szCommandLine[201];
+file_ref_t CurrentFile;
+file_ref_t *pCurrentFile;
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+skipDays(int nTable, ds_key_t *pRemainder)
+{
+ static int bInit = 0;
+ static date_t BaseDate;
+ ds_key_t jDate;
+ ds_key_t kRowCount,
+ kFirstRow,
+ kDayCount,
+ index = 1;
+
+ if (!bInit)
+ {
+ strtodt(&BaseDate, DATA_START_DATE);
+ bInit = 1;
+ *pRemainder = 0;
+ }
+
+ // set initial conditions
+ jDate = BaseDate.julian;
+ *pRemainder = dateScaling(nTable, jDate) + index;
+
+ // now check to see if we need to move to the
+ // the next peice of a parallel build
+ // move forward one day at a time
+ split_work(nTable, &kFirstRow, &kRowCount);
+ while (index < kFirstRow)
+ {
+ kDayCount = dateScaling(nTable, jDate);
+ index += kDayCount;
+ jDate += 1;
+ *pRemainder = index;
+ }
+ if (index > kFirstRow)
+ {
+ jDate -= 1;
+ }
+
+ return(jDate);
+}
+
+
+/*
+* Routine: find_table(char *, char *)
+* Purpose: partial match routine for arguments to -T
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+find_table(char *szParamName, char *tname)
+{
+ int i,
+ res = -1,
+ nNotSure = -1;
+ tdef *pT;
+ tdef *pN;
+
+ if (!strcmp(tname, "ALL"))
+ return(0);
+
+ for (i=0; i <= MAX_TABLE; i++)
+ {
+ pT = getSimpleTdefsByNumber(i);
+ if (strcasecmp(szParamName, "ABREVIATION"))
+ {
+ /* if we match the name exactly, then return the result */
+ if (!strcasecmp(tname, pT->name))
+ return(i);
+
+ /* otherwise, look for sub-string matches */
+ if (!strncasecmp(tname, pT->name, strlen(tname)) )
+ {
+ if (res == -1)
+ res = i;
+ else
+ nNotSure = i;
+ }
+ }
+ else
+ {
+ if (!strcasecmp(tname, pT->abreviation))
+ return(i);
+ }
+ }
+
+ if (res == -1)
+ {
+ fprintf(stdout,
+ "ERROR: No match found for table name '%s'\n", tname);
+ exit(1);
+ }
+
+ pT = getSimpleTdefsByNumber(res);
+ if ((nNotSure != -1) && !(pT->flags & FL_DUP_NAME))
+ {
+ pN = getSimpleTdefsByNumber(nNotSure);
+ fprintf(stdout,
+ "WARNING: Table name '%s' not unique. Could be '%s' or '%s'. Assuming '%s'\n",
+ tname, pT->name, pN->name, pT->name);
+ pT->flags |= FL_DUP_NAME;
+ }
+
+ return(res);
+
+}
+/*
+* re-set default output file names
+*/
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+set_files (int i)
+{
+ char line[80], *new_name;
+ tdef *pT = getSimpleTdefsByNumber(i);
+
+ printf ("Enter new destination for %s data: ",
+ pT->name);
+ if (fgets (line, sizeof (line), stdin) == NULL)
+ return (-1);
+ if ((new_name = strchr (line, '\n')) != NULL)
+ *new_name = '\0';
+ if (strlen (line) == 0)
+ return (0);
+ new_name = (char *) malloc (strlen (line) + 1);
+ MALLOC_CHECK (new_name);
+ strcpy (new_name, line);
+ pT->name = new_name;
+
+ return (0);
+}
+
+/*
+* generate a particular table
+*/
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20011217 JMS need to build date-correlated (i.e. fact) tables in proper order
+*/
+void
+gen_tbl (int tabid, ds_key_t kFirstRow, ds_key_t kRowCount)
+{
+ int direct,
+ bIsVerbose,
+ nLifeFreq,
+ nMultiplier,
+ nChild;
+ ds_key_t i,
+ kTotalRows;
+ tdef *pT = getSimpleTdefsByNumber(tabid);
+ tdef *pC;
+ table_func_t *pF = getTdefFunctionsByNumber(tabid);
+
+ kTotalRows = kRowCount;
+ direct = is_set("DBLOAD");
+ bIsVerbose = is_set("VERBOSE") && !is_set("QUIET");
+ /**
+ set the frequency of progress updates for verbose output
+ to greater of 1000 and the scale base
+ */
+ nLifeFreq = 1;
+ nMultiplier = dist_member(NULL, "rowcounts", tabid + 1, 2);
+ for (i=0; nLifeFreq < nMultiplier; i++)
+ nLifeFreq *= 10;
+ if (nLifeFreq < 1000)
+ nLifeFreq = 1000;
+
+ if (bIsVerbose)
+ {
+ if (pT->flags & FL_PARENT)
+ {
+ nChild = pT->nParam;
+ pC = getSimpleTdefsByNumber(nChild);
+ fprintf(stderr, "%s %s and %s ... ",
+ (direct)?"Loading":"Writing",
+ pT->name, pC->name);
+ }
+ else
+ fprintf(stderr, "%s %s ... ",
+ (direct)?"Loading":"Writing",
+ pT->name);
+ }
+
+ /*
+ * small tables use a constrained set of geography information
+ */
+ if (pT->flags & FL_SMALL)
+ resetCountCount();
+
+ for (i=kFirstRow; kRowCount; i++,kRowCount--)
+ {
+ if (bIsVerbose && i && (i % nLifeFreq) == 0)
+ fprintf(stderr, "%3d%%\b\b\b\b",(int)(((kTotalRows - kRowCount)*100)/kTotalRows));
+
+ /* not all rows that are built should be printed. Use return code to deterine output */
+ if (!pF->builder(NULL, i))
+ if (pF->loader[direct](NULL))
+ {
+ fprintf(stderr, "ERROR: Load failed on %s!\n", getTableNameByID(tabid));
+ exit(-1);
+ }
+ tpcds_row_stop(tabid);
+ }
+ if (bIsVerbose)
+ fprintf(stderr, "Done \n");
+ print_close(tabid);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+validate_options(void)
+{
+ char msg[1024];
+
+ msg[0] = '\0';
+ if (is_set("PARALLEL"))
+ {
+ if (get_int("PARALLEL") < 2) strcat(msg, "PARALLEL must be >= 2\n");
+ if (get_int("CHILD") < 1) strcat(msg, "CHILD must be >= 1\n");
+ }
+
+ if (strlen(msg)) usage(NULL, msg);
+
+ return;
+}
+
+/*
+* MAIN
+*
+* assumes the existance of getopt() to clean up the command
+* line handling
+*/
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+main (int ac, char **av)
+{
+ int i,
+ tabid = -1,
+ nCommandLineLength = 0,
+ nArgLength;
+ char *tname;
+ ds_key_t kRowCount,
+ kFirstRow,
+ kRandomRow,
+ kValidateCount;
+ struct timeb t;
+ tdef *pT;
+ table_func_t *pF;
+
+ process_options (ac, av);
+ validate_options();
+ init_rand();
+
+ /* build command line argument string */
+ g_szCommandLine[0] = '\0';
+ for (i=1; i < ac; i++)
+ {
+ nArgLength = strlen(av[i]) + 1;
+ if ((nCommandLineLength + nArgLength) >= 200)
+ {
+ ReportError(QERR_CMDLINE_TOO_LONG, NULL, 0);
+ break;
+ }
+ strcat(g_szCommandLine, av[i]);
+ strcat(g_szCommandLine, " ");
+ nCommandLineLength += nArgLength;
+ }
+
+ if (is_set("UPDATE"))
+ {
+ setUpdateDates();
+ setUpdateScaling(S_PURCHASE);
+ setUpdateScaling(S_WEB_ORDER);
+ setUpdateScaling(S_CATALOG_ORDER);
+ setUpdateScaling(S_INVENTORY);
+ }
+
+ /* if we are using shared memory to pass parameters to/from peers, then read additional
+ * parameters here.
+ */
+ if (is_set("SHMKEY"))
+ load_params();
+
+ if (!is_set("QUIET"))
+ {
+ fprintf (stderr,
+ "%s Population Generator (Version %d.%d.%d%s)\n",
+ get_str("PROG"), VERSION, RELEASE, MODIFICATION, PATCH);
+ fprintf (stderr, "Copyright %s %s\n", COPYRIGHT, C_DATES);
+ }
+
+ /**
+ ** actual data generation section starts here
+ **/
+
+ /*
+ * do any global (non-worker thread) initialization
+ */
+#ifndef NOLOAD
+ if (is_set("DBLOAD"))
+ load_init();
+#endif /* NOLOAD */
+
+
+
+ /***
+ * traverse the tables, invoking the appropriate data generation routine
+ * for any to be built; skip any non-op tables or any child tables (their
+ * generation routines are called when the parent is built
+ */
+ tname = get_str("TABLE");
+ if (strcmp(tname, "ALL"))
+ {
+ tabid = find_table("TABLE", tname);
+ }
+ else if (is_set("ABREVIATION"))
+ {
+ tabid = find_table("ABREVIATION", get_str("ABREVIATION"));
+ }
+
+ for (i=(is_set("UPDATE"))?S_BRAND:CALL_CENTER; (pT = getSimpleTdefsByNumber(i)); i++)
+ {
+
+ if (!pT->name)
+ break;
+ if (!is_set("UPDATE") && (i == S_BRAND))
+ break;
+
+ pF = getTdefFunctionsByNumber(i);
+
+ if (pT->flags & FL_NOP)
+ {
+ if (tabid == i)
+ ReportErrorNoLine(QERR_TABLE_NOP, pT->name, 1);
+ continue; /* skip any tables that are not implemented */
+ }
+ if (pT->flags & FL_CHILD)
+ {
+ if (tabid == i)
+ ReportErrorNoLine(QERR_TABLE_CHILD, pT->name, 1);
+ continue; /* children are generated by the parent call */
+ }
+ if ((tabid != -1) && (i != tabid))
+ continue; /* only generate a table that is explicitly named */
+
+ /*
+ * all source tables require the -update option to be set
+ */
+ if ((pT->flags & FL_SOURCE_DDL) && (is_set("UPDATE") == 0))
+ {
+ ReportErrorNoLine(QERR_TABLE_UPDATE, pT->name, 1);
+ continue; /* update tables require update option */
+ }
+
+
+ /*
+ * data validation is a special case
+ */
+ if (is_set("VALIDATE"))
+ {
+ if (pF->validate == NULL)
+ continue;
+
+ kRowCount = get_rowcount(i);
+
+ kValidateCount = get_int("VCOUNT");
+ if ((kRowCount > 0) && (kValidateCount > kRowCount))
+ {
+ kValidateCount = kRowCount;
+ }
+
+ if (!is_set("RNGSEED"))
+ {
+ ftime(&t);
+ setSeed(VALIDATE_STREAM, t.millitm);
+ } else {
+ setSeed(VALIDATE_STREAM, get_int("RNGSEED"));
+ }
+ print_start(i);
+
+ for (; kValidateCount; kValidateCount--)
+ {
+ genrand_key(&kRandomRow, DIST_UNIFORM, 1, kRowCount, 0, VALIDATE_STREAM);
+ pF->validate(i, kRandomRow, NULL);
+ if (!(pT->flags & FL_VPRINT))
+ printValidation(i, kRandomRow);
+ }
+
+ print_close(i);
+ }
+ else
+ {
+ /**
+ * GENERAL CASE
+ * if there are no rows to build, then loop
+ */
+ split_work(i, &kFirstRow, &kRowCount);
+ /*
+ * if there are rows to skip then skip them
+ */
+ if (kFirstRow != 1)
+ {
+ row_skip(i, (int)(kFirstRow - 1));
+ if (pT->flags & FL_PARENT)
+ row_skip(pT->nParam, (int)(kFirstRow - 1));
+ }
+
+ /*
+ * now build the actual rows
+ */
+ gen_tbl(i, kFirstRow, kRowCount);
+ }
+ }
+
+#ifndef NOLOAD
+ if (is_set("DBLOAD"))
+ load_close();
+#endif
+
+ return (0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/driver.h b/ydb/library/benchmarks/gen/tpcds-dbgen/driver.h
new file mode 100644
index 000000000000..c2e9977f265e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/driver.h
@@ -0,0 +1,70 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef R_DRIVER_H
+#define R_DRIVER_H
+
+/*
+ * defines used in the generic portion of r_driver.c
+ * table specific defines are built in the output directory
+ */
+#define NONE -1
+/* note: needs to be kept in sync with a_decimal.h/p_symbol.h */
+#define FL_INIT 0x0004
+#define FL_FACT 0x8000
+
+#ifdef DECLARER
+#define EXTERN
+#else
+#define EXTERN extern
+#endif /* DECLARER */
+
+
+#include
+#include
+
+
+
+
+/******* output macros ********/
+#ifndef SEPARATOR
+#define SEPARATOR '|' /* field spearator for generated flat files */
+#endif
+
+
+
+int tbl_init(int tbl, int *s, int *c);
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/english.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/english.dst
new file mode 100644
index 000000000000..388093cc27ea
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/english.dst
@@ -0,0 +1,4790 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+--
+--
+-- adjectives.dst based on the common word list
+create adjectives;
+set types = (varchar);
+set weights = 1;
+add ("other":116);
+add ("new":108);
+add ("good":59);
+add ("old":49);
+add ("different":43);
+add ("local":41);
+add ("social":40);
+add ("small":40);
+add ("great":39);
+add ("important":36);
+add ("national":35);
+add ("british":33);
+add ("possible":32);
+add ("large":32);
+add ("political":29);
+add ("young":28);
+add ("public":28);
+add ("high":27);
+add ("available":26);
+add ("able":26);
+add ("full":24);
+add ("only":22);
+add ("major":22);
+add ("main":22);
+add ("economic":22);
+add ("real":21);
+add ("long":21);
+add ("likely":21);
+add ("international":21);
+add ("special":20);
+add ("particular":19);
+add ("difficult":19);
+add ("certain":19);
+add ("black":19);
+add ("big":19);
+add ("little":18);
+add ("general":18);
+add ("free":18);
+add ("clear":18);
+add ("white":17);
+add ("similar":17);
+add ("necessary":17);
+add ("english":17);
+add ("early":17);
+add ("central":17);
+add ("personal":16);
+add ("common":16);
+add ("true":15);
+add ("strong":15);
+add ("single":15);
+add ("recent":15);
+add ("private":15);
+add ("foreign":15);
+add ("financial":15);
+add ("american":15);
+add ("various":14);
+add ("royal":14);
+add ("poor":14);
+add ("open":14);
+add ("european":14);
+add ("whole":13);
+add ("simple":13);
+add ("right":13);
+add ("natural":13);
+add ("sure":12);
+add ("short":12);
+add ("modern":12);
+add ("legal":12);
+add ("human":12);
+add ("following":12);
+add ("final":12);
+add ("significant":11);
+add ("serious":11);
+add ("prime":11);
+add ("previous":11);
+add ("normal":11);
+add ("industrial":11);
+add ("current":11);
+add ("bad":11);
+add ("wrong":10);
+add ("successful":10);
+add ("specific":10);
+add ("red":10);
+add ("popular":10);
+add ("military":10);
+add ("low":10);
+add ("labour":10);
+add ("dead":10);
+add ("concerned":10);
+add ("basic":10);
+add ("appropriate":10);
+add ("alone":10);
+add ("useful":9);
+add ("traditional":9);
+add ("scottish":9);
+add ("professional":9);
+add ("present":9);
+add ("physical":9);
+add ("original":9);
+add ("individual":9);
+add ("happy":9);
+add ("fine":9);
+add ("effective":9);
+add ("easy":9);
+add ("considerable":9);
+add ("complete":9);
+add ("aware":9);
+add ("wide":8);
+add ("total":8);
+add ("responsible":8);
+add ("ready":8);
+add ("obvious":8);
+add ("medical":8);
+add ("left":8);
+add ("interesting":8);
+add ("independent":8);
+add ("heavy":8);
+add ("hard":8);
+add ("existing":8);
+add ("essential":8);
+add ("direct":8);
+add ("civil":8);
+add ("blue":8);
+add ("western":7);
+add ("top":7);
+add ("separate":7);
+add ("relevant":7);
+add ("regular":7);
+add ("practical":7);
+add ("powerful":7);
+add ("positive":7);
+add ("nuclear":7);
+add ("light":7);
+add ("late":7);
+add ("huge":7);
+add ("hot":7);
+add ("future":7);
+add ("french":7);
+add ("extra":7);
+add ("environmental":7);
+add ("complex":7);
+add ("commercial":7);
+add ("close":7);
+add ("chief":7);
+add ("beautiful":7);
+add ("annual":7);
+add ("active":7);
+add ("working":6);
+add ("very":6);
+add ("usual":6);
+add ("unable":6);
+add ("technical":6);
+add ("soviet":6);
+add ("sorry":6);
+add ("sexual":6);
+add ("rich":6);
+add ("religious":6);
+add ("regional":6);
+add ("primary":6);
+add ("ordinary":6);
+add ("nice":6);
+add ("male":6);
+add ("internal":6);
+add ("inc":6);
+add ("impossible":6);
+add ("fresh":6);
+add ("formal":6);
+add ("famous":6);
+add ("excellent":6);
+add ("domestic":6);
+add ("dark":6);
+add ("cultural":6);
+add ("average":6);
+add ("additional":6);
+add ("warm":5);
+add ("urban":5);
+add ("upper":5);
+add ("unlikely":5);
+add ("tiny":5);
+add ("suitable":5);
+add ("sufficient":5);
+add ("substantial":5);
+add ("strange":5);
+add ("soft":5);
+add ("senior":5);
+add ("scientific":5);
+add ("safe":5);
+add ("rural":5);
+add ("reasonable":5);
+add ("proper":5);
+add ("perfect":5);
+add ("past":5);
+add ("mental":5);
+add ("key":5);
+add ("joint":5);
+add ("interested":5);
+add ("immediate":5);
+add ("historical":5);
+add ("german":5);
+add ("familiar":5);
+add ("expensive":5);
+add ("equal":5);
+add ("empty":5);
+add ("educational":5);
+add ("due":5);
+add ("detailed":5);
+add ("democratic":5);
+add ("deep":5);
+add ("dangerous":5);
+add ("critical":5);
+add ("correct":5);
+add ("cold":5);
+add ("christian":5);
+add ("bright":5);
+add ("apparent":5);
+add ("alternative":5);
+add ("afraid":5);
+add ("actual":5);
+add ("wonderful":4);
+add ("wild":4);
+add ("vital":4);
+add ("vast":4);
+add ("unknown":4);
+add ("united":4);
+add ("unique":4);
+add ("typical":4);
+add ("thin":4);
+add ("tall":4);
+add ("subsequent":4);
+add ("standard":4);
+add ("southern":4);
+add ("severe":4);
+add ("secondary":4);
+add ("russian":4);
+add ("rare":4);
+add ("quiet":4);
+add ("potential":4);
+add ("permanent":4);
+add ("parliamentary":4);
+add ("official":4);
+add ("northern":4);
+add ("narrow":4);
+add ("minor":4);
+add ("massive":4);
+add ("long-term":4);
+add ("limited":4);
+add ("liberal":4);
+add ("level":4);
+add ("leading":4);
+add ("italian":4);
+add ("irish":4);
+add ("inner":4);
+add ("initial":4);
+add ("increased":4);
+add ("growing":4);
+add ("grey":4);
+add ("green":4);
+add ("fundamental":4);
+add ("front":4);
+add ("female":4);
+add ("far":4);
+add ("fair":4);
+add ("external":4);
+add ("extensive":4);
+add ("entire":4);
+add ("elderly":4);
+add ("eastern":4);
+add ("dry":4);
+add ("crucial":4);
+add ("criminal":4);
+add ("corporate":4);
+add ("contemporary":4);
+add ("constant":4);
+add ("careful":4);
+add ("capable":4);
+add ("busy":4);
+add ("broad":4);
+add ("brief":4);
+add ("attractive":4);
+add ("angry":4);
+add ("ancient":4);
+add ("academic":4);
+add ("yellow":3);
+add ("wooden":3);
+add ("willing":3);
+add ("widespread":3);
+add ("welsh":3);
+add ("weak":3);
+add ("voluntary":3);
+add ("visual":3);
+add ("video-taped":3);
+add ("valuable":3);
+add ("used":3);
+add ("unusual":3);
+add ("tired":3);
+add ("terrible":3);
+add ("temporary":3);
+add ("surprising":3);
+add ("supreme":3);
+add ("sudden":3);
+add ("subject":3);
+add ("statutory":3);
+add ("spanish":3);
+add ("solid":3);
+add ("slow":3);
+add ("silent":3);
+add ("sharp":3);
+add ("sensitive":3);
+add ("sad":3);
+add ("running":3);
+add ("rough":3);
+add ("remarkable":3);
+add ("remaining":3);
+add ("relative":3);
+add ("rapid":3);
+add ("quick":3);
+add ("pure":3);
+add ("proposed":3);
+add ("pale":3);
+add ("overall":3);
+add ("odd":3);
+add ("numerous":3);
+add ("negative":3);
+add ("married":3);
+add ("lucky":3);
+add ("lovely":3);
+add ("living":3);
+add ("literary":3);
+add ("keen":3);
+add ("just":3);
+add ("japanese":3);
+add ("indian":3);
+add ("healthy":3);
+add ("guilty":3);
+add ("golden":3);
+add ("global":3);
+add ("glad":3);
+add ("genuine":3);
+add ("friendly":3);
+add ("firm":3);
+add ("federal":3);
+add ("expected":3);
+add ("exciting":3);
+add ("enormous":3);
+add ("emotional":3);
+add ("electronic":3);
+add ("efficient":3);
+add ("dramatic":3);
+add ("double":3);
+add ("distinct":3);
+add ("dependent":3);
+add ("daily":3);
+add ("conventional":3);
+add ("conservative":3);
+add ("confident":3);
+add ("comprehensive":3);
+add ("competitive":3);
+add ("coming":3);
+add ("comfortable":3);
+add ("clean":3);
+add ("classical":3);
+add ("capital":3);
+add ("brown":3);
+add ("back":3);
+add ("alive":3);
+add ("agricultural":3);
+add ("african":3);
+add ("administrative":3);
+add ("adequate":3);
+add ("acceptable":3);
+add ("absolute":3);
+add ("written":2);
+add ("wet":2);
+add ("vulnerable":2);
+add ("visible":2);
+add ("violent":2);
+add ("victorian":2);
+add ("valid":2);
+add ("urgent":2);
+add ("universal":2);
+add ("unexpected":2);
+add ("unemployed":2);
+add ("underlying":2);
+add ("ultimate":2);
+add ("trying":2);
+add ("tough":2);
+add ("tory":2);
+add ("thick":2);
+add ("theoretical":2);
+add ("sweet":2);
+add ("surprised":2);
+add ("stupid":2);
+add ("strategic":2);
+add ("statistical":2);
+add ("spiritual":2);
+add ("specialist":2);
+add ("sound":2);
+add ("sophisticated":2);
+add ("sole":2);
+add ("so-called":2);
+add ("smooth":2);
+add ("slight":2);
+add ("silver":2);
+add ("silly":2);
+add ("sensible":2);
+add ("secret":2);
+add ("satisfactory":2);
+add ("round":2);
+add ("roman":2);
+add ("revolutionary":2);
+add ("residential":2);
+add ("remote":2);
+add ("reliable":2);
+add ("related":2);
+add ("raw":2);
+add ("rational":2);
+add ("radical":2);
+add ("psychological":2);
+add ("proud":2);
+add ("principal":2);
+add ("pretty":2);
+add ("presidential":2);
+add ("pregnant":2);
+add ("precise":2);
+add ("pleasant":2);
+add ("pink":2);
+add ("patient":2);
+add ("overseas":2);
+add ("outstanding":2);
+add ("outside":2);
+add ("outer":2);
+add ("organic":2);
+add ("opposite":2);
+add ("occasional":2);
+add ("net":2);
+add ("nervous":2);
+add ("mutual":2);
+add ("musical":2);
+add ("multiple":2);
+add ("moving":2);
+add ("moral":2);
+add ("monetary":2);
+add ("modest":2);
+add ("minute":2);
+add ("middle":2);
+add ("mere":2);
+add ("mean":2);
+add ("maximum":2);
+add ("material":2);
+add ("mass":2);
+add ("marginal":2);
+add ("mad":2);
+add ("logical":2);
+add ("live":2);
+add ("linguistic":2);
+add ("like":2);
+add ("liable":2);
+add ("known":2);
+add ("junior":2);
+add ("judicial":2);
+add ("jewish":2);
+add ("isolated":2);
+add ("involved":2);
+add ("intense":2);
+add ("informal":2);
+add ("inevitable":2);
+add ("increasing":2);
+add ("inadequate":2);
+add ("impressive":2);
+add ("ill":2);
+add ("illegal":2);
+add ("identical":2);
+add ("ideal":2);
+add ("honest":2);
+add ("holy":2);
+add ("historic":2);
+add ("helpful":2);
+add ("head":2);
+add ("grateful":2);
+add ("grand":2);
+add ("gold":2);
+add ("given":2);
+add ("gentle":2);
+add ("generous":2);
+add ("gastric":2);
+add ("fun":2);
+add ("funny":2);
+add ("frequent":2);
+add ("forward":2);
+add ("flexible":2);
+add ("flat":2);
+add ("fixed":2);
+add ("favorite":2);
+add ("fat":2);
+add ("fast":2);
+add ("false":2);
+add ("extreme":2);
+add ("extraordinary":2);
+add ("experimental":2);
+add ("exact":2);
+add ("evident":2);
+add ("everyday":2);
+add ("ethnic":2);
+add ("electric":2);
+add ("electrical":2);
+add ("electoral":2);
+add ("dominant":2);
+add ("distinctive":2);
+add ("distant":2);
+add ("disabled":2);
+add ("dirty":2);
+add ("determined":2);
+add ("desperate":2);
+add ("desirable":2);
+add ("dear":2);
+add ("deaf":2);
+add ("curious":2);
+add ("creative":2);
+add ("controversial":2);
+add ("continuous":2);
+add ("constitutional":2);
+add ("consistent":2);
+add ("conscious":2);
+add ("clinical":2);
+add ("chinese":2);
+add ("chemical":2);
+add ("cheap":2);
+add ("catholic":2);
+add ("broken":2);
+add ("brilliant":2);
+add ("bloody":2);
+add ("blind":2);
+add ("bitter":2);
+add ("bare":2);
+add ("awful":2);
+add ("automatic":2);
+add ("australian":2);
+add ("assistant":2);
+add ("asleep":2);
+add ("armed":2);
+add ("anxious":2);
+add ("advanced":2);
+add ("adult":2);
+add ("acute":2);
+add ("accurate":2);
+add ("worthy":1);
+add ("worthwhile":1);
+add ("worried":1);
+add ("working-class":1);
+add ("wise":1);
+add ("well-known":1);
+add ("welcome":1);
+add ("weekly":1);
+add ("wealthy":1);
+add ("waste":1);
+add ("waiting":1);
+add ("vocational":1);
+add ("vertical":1);
+add ("variable":1);
+add ("vague":1);
+add ("useless":1);
+add ("unpleasant":1);
+add ("unnecessary":1);
+add ("unlike":1);
+add ("unhappy":1);
+add ("unfair":1);
+add ("uncomfortable":1);
+add ("unchanged":1);
+add ("uncertain":1);
+add ("unaware":1);
+add ("unacceptable":1);
+add ("ugly":1);
+add ("twin":1);
+add ("turkish":1);
+add ("tropical":1);
+add ("tremendous":1);
+add ("tragic":1);
+add ("toxic":1);
+add ("tight":1);
+add ("thorough":1);
+add ("thinking":1);
+add ("territorial":1);
+add ("tender":1);
+add ("teenage":1);
+add ("technological":1);
+add ("systematic":1);
+add ("sympathetic":1);
+add ("symbolic":1);
+add ("swiss":1);
+add ("suspicious":1);
+add ("supposed":1);
+add ("super":1);
+add ("superior":1);
+add ("superb":1);
+add ("successive":1);
+add ("subtle":1);
+add ("subjective":1);
+add ("structural":1);
+add ("strict":1);
+add ("straight":1);
+add ("straightforward":1);
+add ("still":1);
+add ("steep":1);
+add ("steady":1);
+add ("static":1);
+add ("star":1);
+add ("stable":1);
+add ("square":1);
+add ("splendid":1);
+add ("spectacular":1);
+add ("specified":1);
+add ("spatial":1);
+add ("spare":1);
+add ("solar":1);
+add ("socialist":1);
+add ("smart":1);
+add ("slim":1);
+add ("skilled":1);
+add ("sick":1);
+add ("shy":1);
+add ("short-term":1);
+add ("sheer":1);
+add ("shared":1);
+add ("shallow":1);
+add ("semantic":1);
+add ("select":1);
+add ("selective":1);
+add ("secure":1);
+add ("satisfied":1);
+add ("sacred":1);
+add ("ruling":1);
+add ("routine":1);
+add ("romantic":1);
+add ("rigid":1);
+add ("ridiculous":1);
+add ("retail":1);
+add ("resulting":1);
+add ("respective":1);
+add ("respectable":1);
+add ("required":1);
+add ("representative":1);
+add ("reluctant":1);
+add ("regulatory":1);
+add ("redundant":1);
+add ("reduced":1);
+add ("realistic":1);
+add ("random":1);
+add ("racial":1);
+add ("psychiatric":1);
+add ("provincial":1);
+add ("protective":1);
+add ("prospective":1);
+add ("prominent":1);
+add ("progressive":1);
+add ("profound":1);
+add ("profitable":1);
+add ("productive":1);
+add ("probable":1);
+add ("primitive":1);
+add ("prepared":1);
+add ("premier":1);
+add ("preliminary":1);
+add ("precious":1);
+add ("post-war":1);
+add ("polite":1);
+add ("polish":1);
+add ("pleased":1);
+add ("planned":1);
+add ("plain":1);
+add ("philosophical":1);
+add ("persistent":1);
+add ("peculiar":1);
+add ("peaceful":1);
+add ("payable":1);
+add ("passive":1);
+add ("partial":1);
+add ("part-time":1);
+add ("parental":1);
+add ("palestinian":1);
+add ("painful":1);
+add ("outdoor":1);
+add ("orthodox":1);
+add ("organisational":1);
+add ("orange":1);
+add ("oral":1);
+add ("optimistic":1);
+add ("operational":1);
+add ("opening":1);
+add ("olympic":1);
+add ("old-fashioned":1);
+add ("occupational":1);
+add ("objective":1);
+add ("novel":1);
+add ("notable":1);
+add ("noble":1);
+add ("neutral":1);
+add ("neighbouring":1);
+add ("neat":1);
+add ("nearby":1);
+add ("naval":1);
+add ("native":1);
+add ("nasty":1);
+add ("naked":1);
+add ("mysterious":1);
+add ("monthly":1);
+add ("molecular":1);
+add ("model":1);
+add ("mixed":1);
+add ("misleading":1);
+add ("miserable":1);
+add ("minimum":1);
+add ("minimal":1);
+add ("mild":1);
+add ("middle-class":1);
+add ("metropolitan":1);
+add ("medium":1);
+add ("mediterranean":1);
+add ("medieval":1);
+add ("mechanical":1);
+add ("mature":1);
+add ("mathematical":1);
+add ("marvellous":1);
+add ("marked":1);
+add ("marine":1);
+add ("manufacturing":1);
+add ("managerial":1);
+add ("magnificent":1);
+add ("magnetic":1);
+add ("magic":1);
+add ("ltd.":1);
+add ("loyal":1);
+add ("lost":1);
+add ("loose":1);
+add ("lonely":1);
+add ("lively":1);
+add ("linear":1);
+add ("lexical":1);
+add ("lesser":1);
+add ("lengthy":1);
+add ("legitimate":1);
+add ("legislative":1);
+add ("large-scale":1);
+add ("lacking":1);
+add ("kind":1);
+add ("islamic":1);
+add ("irrelevant":1);
+add ("invisible":1);
+add ("intimate":1);
+add ("intermediate":1);
+add ("interior":1);
+add ("intensive":1);
+add ("intelligent":1);
+add ("intellectual":1);
+add ("integrated":1);
+add ("intact":1);
+add ("insufficient":1);
+add ("institutional":1);
+add ("innocent":1);
+add ("inland":1);
+add ("inherent":1);
+add ("influential":1);
+add ("indirect":1);
+add ("incredible":1);
+add ("inappropriate":1);
+add ("improved":1);
+add ("implicit":1);
+add ("imperial":1);
+add ("immense":1);
+add ("imaginative":1);
+add ("ideological":1);
+add ("hungry":1);
+add ("hostile":1);
+add ("horrible":1);
+add ("horizontal":1);
+add ("hidden":1);
+add ("harsh":1);
+add ("handsome":1);
+add ("gross":1);
+add ("grim":1);
+add ("greek":1);
+add ("gradual":1);
+add ("gothic":1);
+add ("glorious":1);
+add ("giant":1);
+add ("geographical":1);
+add ("genetic":1);
+add ("gay":1);
+add ("furious":1);
+add ("functional":1);
+add ("full-time":1);
+add ("fortunate":1);
+add ("forthcoming":1);
+add ("formidable":1);
+add ("fond":1);
+add ("fit":1);
+add ("fiscal":1);
+add ("fierce":1);
+add ("fellow":1);
+add ("favorable":1);
+add ("fatal":1);
+add ("fashionable":1);
+add ("fascinating":1);
+add ("faint":1);
+add ("extended":1);
+add ("explicit":1);
+add ("expert":1);
+add ("experienced":1);
+add ("exotic":1);
+add ("executive":1);
+add ("exclusive":1);
+add ("excessive":1);
+add ("exceptional":1);
+add ("evolutionary":1);
+add ("evil":1);
+add ("eventual":1);
+add ("ethical":1);
+add ("estimated":1);
+add ("established":1);
+add ("equivalent":1);
+add ("enthusiastic":1);
+add ("endless":1);
+add ("encouraging":1);
+add ("empirical":1);
+add ("eligible":1);
+add ("elegant":1);
+add ("elected":1);
+add ("elaborate":1);
+add ("eager":1);
+add ("dynamic":1);
+add ("dutch":1);
+add ("dull":1);
+add ("dual":1);
+add ("dreadful":1);
+add ("doubtful":1);
+add ("divine":1);
+add ("diverse":1);
+add ("distinguished":1);
+add ("disciplinary":1);
+add ("disastrous":1);
+add ("diplomatic":1);
+add ("digital":1);
+add ("developing":1);
+add ("demanding":1);
+add ("delightful":1);
+add ("delighted":1);
+add ("delicious":1);
+add ("delicate":1);
+add ("deliberate":1);
+add ("definite":1);
+add ("defensive":1);
+add ("decisive":1);
+add ("decent":1);
+add ("darling":1);
+add ("damp":1);
+add ("cruel":1);
+add ("crude":1);
+add ("crazy":1);
+add ("costly":1);
+add ("corresponding":1);
+add ("cool":1);
+add ("convincing":1);
+add ("convenient":1);
+add ("contrary":1);
+add ("continuing":1);
+add ("continued":1);
+add ("continental":1);
+add ("content":1);
+add ("confidential":1);
+add ("concrete":1);
+add ("compulsory":1);
+add ("complicated":1);
+add ("competent":1);
+add ("compatible":1);
+add ("comparative":1);
+add ("comparable":1);
+add ("communist":1);
+add ("combined":1);
+add ("colourful":1);
+add ("coloured":1);
+add ("colonial":1);
+add ("collective":1);
+add ("coherent":1);
+add ("cognitive":1);
+add ("coastal":1);
+add ("closed":1);
+add ("clever":1);
+add ("classic":1);
+add ("chronic":1);
+add ("chosen":1);
+add ("cheerful":1);
+add ("charming":1);
+add ("changing":1);
+add ("cautious":1);
+add ("causal":1);
+add ("casual":1);
+add ("capitalist":1);
+add ("canadian":1);
+add ("burning":1);
+add ("brave":1);
+add ("bottom":1);
+add ("boring":1);
+add ("bold":1);
+add ("blank":1);
+add ("bizarre":1);
+add ("biological":1);
+add ("beneficial":1);
+add ("base":1);
+add ("awkward":1);
+add ("autonomous":1);
+add ("atomic":1);
+add ("atlantic":1);
+add ("associated":1);
+add ("asian":1);
+add ("ashamed":1);
+add ("artistic":1);
+add ("artificial":1);
+add ("arbitrary":1);
+add ("arab":1);
+add ("appointed":1);
+add ("applicable":1);
+add ("anonymous":1);
+add ("ambitious":1);
+add ("amazing":1);
+add ("alleged":1);
+add ("aggressive":1);
+add ("advisory":1);
+add ("adverse":1);
+add ("adjacent":1);
+add ("added":1);
+add ("accused":1);
+add ("accessible":1);
+add ("abstract":1);
+add ("absent":1);
+add ("above":1);
+
+--
+-- adverbs
+-- from the common word list
+create adverbs;
+set types = (varchar);
+set weights = 1;
+add ("then":619);
+add ("more":615);
+add ("also":592);
+add ("so":540);
+add ("now":538);
+add ("only":524);
+add ("as":436);
+add ("very":431);
+add ("just":426);
+add ("even":329);
+add ("still":318);
+add ("too":316);
+add ("however":280);
+add ("there":269);
+add ("most":263);
+add ("here":263);
+add ("much":257);
+add ("never":241);
+add ("again":236);
+add ("well":216);
+add ("always":199);
+add ("often":178);
+add ("about":171);
+add ("already":156);
+add ("yet":151);
+add ("perhaps":151);
+add ("almost":151);
+add ("quite":150);
+add ("really":149);
+add ("later":141);
+add ("all":133);
+add ("both":129);
+add ("of course":126);
+add ("at least":119);
+add ("less":117);
+add ("ever":114);
+add ("enough":114);
+add ("for example":113);
+add ("together":111);
+add ("therefore":107);
+add ("over":106);
+add ("probably":105);
+add ("today":102);
+add ("thus":101);
+add ("particularly":101);
+add ("far":100);
+add ("rather":95);
+add ("further":94);
+add ("sometimes":91);
+add ("yesterday":87);
+add ("usually":87);
+add ("indeed":85);
+add ("ago":85);
+add ("simply":83);
+add ("especially":83);
+add ("else":79);
+add ("home":78);
+add ("certainly":77);
+add ("once":75);
+add ("soon":74);
+add ("clearly":70);
+add ("either":68);
+add ("long":66);
+add ("away":66);
+add ("better":65);
+add ("actually":65);
+add ("finally":62);
+add ("at all":62);
+add ("in order":61);
+add ("recently":57);
+add ("quickly":57);
+add ("suddenly":56);
+add ("generally":54);
+add ("nearly":50);
+add ("above":50);
+add ("more than":49);
+add ("forward":49);
+add ("right":47);
+add ("please":46);
+add ("easily":46);
+add ("immediately":45);
+add ("highly":44);
+add ("earlier":44);
+add ("early":43);
+add ("no longer":42);
+add ("fully":42);
+add ("exactly":42);
+add ("eventually":42);
+add ("directly":42);
+add ("hardly":41);
+add ("best":41);
+add ("below":41);
+add ("around":41);
+add ("slightly":40);
+add ("alone":40);
+add ("otherwise":39);
+add ("obviously":39);
+add ("a little":39);
+add ("slowly":38);
+add ("completely":38);
+add ("relatively":37);
+add ("merely":36);
+add ("maybe":36);
+add ("high":36);
+add ("normally":35);
+add ("late":35);
+add ("largely":35);
+add ("instead":35);
+add ("sure":34);
+add ("nevertheless":34);
+add ("little":34);
+add ("carefully":34);
+add ("apparently":34);
+add ("anyway":34);
+add ("tomorrow":33);
+add ("previously":33);
+add ("mainly":33);
+add ("for instance":33);
+add ("currently":33);
+add ("increasingly":32);
+add ("in particular":32);
+add ("entirely":32);
+add ("as well":32);
+add ("possibly":31);
+add ("extremely":31);
+add ("equally":31);
+add ("hard":29);
+add ("surely":28);
+add ("frequently":28);
+add ("ahead":28);
+add ("widely":27);
+add ("twice":27);
+add ("partly":27);
+add ("fairly":27);
+add ("somewhere":26);
+add ("seriously":26);
+add ("elsewhere":26);
+add ("closely":26);
+add ("straight":25);
+add ("no doubt":25);
+add ("neither":25);
+add ("necessarily":25);
+add ("before":25);
+add ("all right":25);
+add ("totally":24);
+add ("tonight":24);
+add ("properly":24);
+add ("etc":24);
+add ("meanwhile":23);
+add ("hence":23);
+add ("effectively":23);
+add ("somewhat":22);
+add ("similarly":22);
+add ("rapidly":22);
+add ("at first":22);
+add ("under":21);
+add ("strongly":21);
+add ("moreover":21);
+add ("in addition":21);
+add ("at last":21);
+add ("virtually":20);
+add ("unfortunately":20);
+add ("that is":20);
+add ("somehow":20);
+add ("significantly":20);
+add ("rarely":20);
+add ("perfectly":20);
+add ("originally":20);
+add ("low":20);
+add ("inside":20);
+add ("badly":20);
+add ("afterwards":20);
+add ("quietly":19);
+add ("naturally":19);
+add ("in general":19);
+add ("heavily":19);
+add ("gently":19);
+add ("firmly":19);
+add ("at once":19);
+add ("and so on":19);
+add ("absolutely":19);
+add ("shortly":18);
+add ("regularly":18);
+add ("occasionally":18);
+add ("mostly":18);
+add ("initially":18);
+add ("deeply":18);
+add ("close":18);
+add ("abroad":18);
+add ("subsequently":17);
+add ("specifically":17);
+add ("short":17);
+add ("gradually":17);
+add ("aside":17);
+add ("successfully":16);
+add ("precisely":16);
+add ("outside":16);
+add ("once again":16);
+add ("greatly":16);
+add ("essentially":16);
+add ("easy":16);
+add ("apart":16);
+add ("anywhere":16);
+add ("respectively":15);
+add ("pretty":15);
+add ("open":15);
+add ("truly":14);
+add ("that":14);
+add ("primarily":14);
+add ("inevitably":14);
+add ("furthermore":14);
+add ("fast":14);
+add ("constantly":14);
+add ("briefly":14);
+add ("at present":14);
+add ("altogether":14);
+add ("across":14);
+add ("a bit":14);
+add ("ultimately":13);
+add ("reasonably":13);
+add ("readily":13);
+add ("presumably":13);
+add ("newly":13);
+add ("less than":13);
+add ("everywhere":13);
+add ("deliberately":13);
+add ("considerably":13);
+add ("automatically":13);
+add ("approximately":13);
+add ("thereby":12);
+add ("surprisingly":12);
+add ("sufficiently":12);
+add ("softly":12);
+add ("sharply":12);
+add ("secondly":12);
+add ("deep":12);
+add ("commonly":12);
+add ("behind":12);
+add ("undoubtedly":11);
+add ("purely":11);
+add ("potentially":11);
+add ("personally":11);
+add ("once more":11);
+add ("notably":11);
+add ("near":11);
+add ("ill":11);
+add ("consequently":11);
+add ("closer":11);
+add ("barely":11);
+add ("accordingly":11);
+add ("wide":10);
+add ("wholly":10);
+add ("up to":10);
+add ("typically":10);
+add ("since":10);
+add ("roughly":10);
+add ("nowhere":10);
+add ("namely":10);
+add ("longer":10);
+add ("good":10);
+add ("easier":10);
+add ("definitely":10);
+add ("by now":10);
+add ("traditionally":9);
+add ("though":9);
+add ("thoroughly":9);
+add ("strictly":9);
+add ("specially":9);
+add ("sadly":9);
+add ("physically":9);
+add ("mentally":9);
+add ("lightly":9);
+add ("formally":9);
+add ("desperately":9);
+add ("substantially":8);
+add ("steadily":8);
+add ("sooner":8);
+add ("solely":8);
+add ("so as":8);
+add ("simultaneously":8);
+add ("severely":8);
+add ("separately":8);
+add ("scarcely":8);
+add ("safely":8);
+add ("politically":8);
+add ("officially":8);
+add ("locally":8);
+add ("literally":8);
+add ("in part":8);
+add ("happily":8);
+add ("from time to time":8);
+add ("formerly":8);
+add ("forever":8);
+add ("fair":8);
+add ("exclusively":8);
+add ("direct":8);
+add ("correctly":8);
+add ("besides":8);
+add ("basically":8);
+add ("alternatively":8);
+add ("upwards":7);
+add ("upstairs":7);
+add ("thereafter":7);
+add ("socially":7);
+add ("seldom":7);
+add ("reportedly":7);
+add ("remarkably":7);
+add ("regardless":7);
+add ("publicly":7);
+add ("past":7);
+add ("invariably":7);
+add ("instantly":7);
+add ("in short":7);
+add ("hitherto":7);
+add ("freely":7);
+add ("fortunately":7);
+add ("firstly":7);
+add ("evidently":7);
+add ("dramatically":7);
+add ("downstairs":7);
+add ("consistently":7);
+add ("by no means":7);
+add ("broadly":7);
+add ("backwards":7);
+add ("all but":7);
+add ("actively":7);
+add ("utterly":6);
+add ("tight":6);
+add ("tightly":6);
+add ("thick":6);
+add ("temporarily":6);
+add ("swiftly":6);
+add ("seemingly":6);
+add ("repeatedly":6);
+add ("predominantly":6);
+add ("practically":6);
+add ("positively":6);
+add ("partially":6);
+add ("openly":6);
+add ("onwards":6);
+add ("no":6);
+add ("nowadays":6);
+add ("nonetheless":6);
+add ("independently":6);
+add ("importantly":6);
+add ("hopefully":6);
+add ("genuinely":6);
+add ("forwards":6);
+add ("forth":6);
+add ("for long":6);
+add ("for ever":6);
+add ("far from":6);
+add ("explicitly":6);
+add ("even so":6);
+add ("differently":6);
+add ("continually":6);
+add ("as yet":6);
+add ("as usual":6);
+add ("accurately":6);
+add ("worldwide":5);
+add ("within":5);
+add ("terribly":5);
+add ("sincerely":5);
+add ("silently":5);
+add ("rightly":5);
+add ("privately":5);
+add ("permanently":5);
+add ("overall":5);
+add ("neatly":5);
+add ("nearby":5);
+add ("loudly":5);
+add ("likewise":5);
+add ("legally":5);
+add ("just about":5);
+add ("individually":5);
+add ("indirectly":5);
+add ("in full":5);
+add ("in common":5);
+add ("ideally":5);
+add ("half":5);
+add ("faster":5);
+add ("efficiently":5);
+add ("daily":5);
+add ("comparatively":5);
+add ("clear":5);
+add ("bitterly":5);
+add ("beyond":5);
+add ("beautifully":5);
+add ("annually":5);
+add ("angrily":5);
+add ("allegedly":5);
+add ("alike":5);
+add ("adequately":5);
+add ("abruptly":5);
+add ("wrong":4);
+add ("worse":4);
+add ("wild":4);
+add ("vaguely":4);
+add ("urgently":4);
+add ("unusually":4);
+add ("unexpectedly":4);
+add ("under way":4);
+add ("technically":4);
+add ("supposedly":4);
+add ("strangely":4);
+add ("smoothly":4);
+add ("slow":4);
+add ("sideways":4);
+add ("sharp":4);
+add ("sexually":4);
+add ("reluctantly":4);
+add ("quick":4);
+add ("public":4);
+add ("promptly":4);
+add ("principally":4);
+add ("presently":4);
+add ("poorly":4);
+add ("plain":4);
+add ("per annum":4);
+add ("overseas":4);
+add ("overnight":4);
+add ("on board":4);
+add ("jointly":4);
+add ("ironically":4);
+add ("incidentally":4);
+add ("in public":4);
+add ("honestly":4);
+add ("hastily":4);
+add ("harder":4);
+add ("fundamentally":4);
+add ("fiercely":4);
+add ("false":4);
+add ("extra":4);
+add ("extensively":4);
+add ("exceptionally":4);
+add ("economically":4);
+add ("duly":4);
+add ("doubtless":4);
+add ("distinctly":4);
+add ("curiously":4);
+add ("cool":4);
+add ("continuously":4);
+add ("comfortably":4);
+add ("cheap":4);
+add ("by far":4);
+add ("but":4);
+add ("as good as":4);
+add ("as a whole":4);
+add ("appropriately":4);
+add ("aloud":4);
+add ("all the same":4);
+add ("wrongly":3);
+add ("wildly":3);
+add ("violently":3);
+add ("vigorously":3);
+add ("vice versa":3);
+add ("upright":3);
+add ("underneath":3);
+add ("true":3);
+add ("thoughtfully":3);
+add ("this":3);
+add ("thirdly":3);
+add ("that is to say":3);
+add ("systematically":3);
+add ("suitably":3);
+add ("sort of":3);
+add ("secretly":3);
+add ("radically":3);
+add ("proudly":3);
+add ("progressively":3);
+add ("profoundly":3);
+add ("preferably":3);
+add ("politely":3);
+add ("plainly":3);
+add ("painfully":3);
+add ("over there":3);
+add ("oddly":3);
+add ("none the less":3);
+add ("nicely":3);
+add ("nervously":3);
+add ("nearer":3);
+add ("nationally":3);
+add ("narrowly":3);
+add ("mutually":3);
+add ("mildly":3);
+add ("markedly":3);
+add ("loud":3);
+add ("loose":3);
+add ("loosely":3);
+add ("like":3);
+add ("least":3);
+add ("lately":3);
+add ("kindly":3);
+add ("internationally":3);
+add ("interestingly":3);
+add ("instinctively":3);
+add ("indoors":3);
+add ("incredibly":3);
+add ("immensely":3);
+add ("historically":3);
+add ("highest":3);
+add ("halfway":3);
+add ("gmt":3);
+add ("furiously":3);
+add ("freshly":3);
+add ("frankly":3);
+add ("for the time being":3);
+add ("for the most part":3);
+add ("for once":3);
+add ("for good":3);
+add ("for certain":3);
+add ("flat":3);
+add ("finely":3);
+add ("financially":3);
+add ("faintly":3);
+add ("evenly":3);
+add ("enormously":3);
+add ("emotionally":3);
+add ("eagerly":3);
+add ("due":3);
+add ("downwards":3);
+add ("deeper":3);
+add ("dead":3);
+add ("conversely":3);
+add ("conveniently":3);
+add ("consciously":3);
+add ("commercially":3);
+add ("clean":3);
+add ("chiefly":3);
+add ("centrally":3);
+add ("cautiously":3);
+add ("casually":3);
+add ("calmly":3);
+add ("bloody":3);
+add ("big":3);
+add ("bad":3);
+add ("at large":3);
+add ("at best":3);
+add ("ashore":3);
+add ("arguably":3);
+add ("any longer":3);
+add ("anxiously":3);
+add ("admittedly":3);
+add ("wonderfully":2);
+add ("willingly":2);
+add ("wearily":2);
+add ("weakly":2);
+add ("warmly":2);
+add ("voluntarily":2);
+add ("vividly":2);
+add ("visually":2);
+add ("vastly":2);
+add ("usefully":2);
+add ("unnecessarily":2);
+add ("universally":2);
+add ("uniquely":2);
+add ("unduly":2);
+add ("underway":2);
+add ("understandably":2);
+add ("underground":2);
+add ("uncomfortably":2);
+add ("unanimously":2);
+add ("throughout":2);
+add ("thinly":2);
+add ("thereof":2);
+add ("theoretically":2);
+add ("thankfully":2);
+add ("stiff":2);
+add ("stiffly":2);
+add ("steady":2);
+add ("statistically":2);
+add ("spontaneously":2);
+add ("sometime":2);
+add ("so much as":2);
+add ("small":2);
+add ("sensibly":2);
+add ("satisfactorily":2);
+add ("richly":2);
+add ("professionally":2);
+add ("powerfully":2);
+add ("pleasantly":2);
+add ("patiently":2);
+add ("parallel":2);
+add ("paradoxically":2);
+add ("overwhelmingly":2);
+add ("overhead":2);
+add ("over here":2);
+add ("outwards":2);
+add ("ostensibly":2);
+add ("notoriously":2);
+add ("morally":2);
+add ("momentarily":2);
+add ("moderately":2);
+add ("marginally":2);
+add ("luckily":2);
+add ("logically":2);
+add ("live":2);
+add ("likely":2);
+add ("internally":2);
+add ("intently":2);
+add ("intensely":2);
+add ("inherently":2);
+add ("infinitely":2);
+add ("indefinitely":2);
+add ("in vain":2);
+add ("in private":2);
+add ("in between":2);
+add ("implicitly":2);
+add ("impatiently":2);
+add ("illegally":2);
+add ("hurriedly":2);
+add ("hopelessly":2);
+add ("higher":2);
+add ("helplessly":2);
+add ("grimly":2);
+add ("great":2);
+add ("generously":2);
+add ("from now on":2);
+add ("frantically":2);
+add ("favourably":2);
+add ("faithfully":2);
+add ("extraordinarily":2);
+add ("expressly":2);
+add ("environmentally":2);
+add ("enthusiastically":2);
+add ("en route":2);
+add ("drily":2);
+add ("decidedly":2);
+add ("dangerously":2);
+add ("critically":2);
+add ("confidently":2);
+add ("collectively":2);
+add ("coldly":2);
+add ("cheerfully":2);
+add ("cheaply":2);
+add ("characteristically":2);
+add ("briskly":2);
+add ("brilliantly":2);
+add ("brightly":2);
+add ("beforehand":2);
+add ("bc":2);
+add ("at random":2);
+add ("at length":2);
+add ("as it were":2);
+add ("anything but":2);
+add ("alongside":2);
+add ("additionally":2);
+add ("acutely":2);
+add ("accidentally":2);
+add ("wryly":1);
+add ("worst":1);
+add ("without":1);
+add ("wistfully":1);
+add ("wisely":1);
+add ("weekly":1);
+add ("warily":1);
+add ("vitally":1);
+add ("visibly":1);
+add ("vertically":1);
+add ("vehemently":1);
+add ("variously":1);
+add ("upward":1);
+add ("upstream":1);
+add ("upside down":1);
+add ("up front":1);
+add ("unwittingly":1);
+add ("unsuccessfully":1);
+add ("unreasonably":1);
+add ("unquestionably":1);
+add ("uniformly":1);
+add ("unhappily":1);
+add ("unfairly":1);
+add ("unequivocally":1);
+add ("uneasily":1);
+add ("unconsciously":1);
+add ("uncertainly":1);
+add ("triumphantly":1);
+add ("tremendously":1);
+add ("tragically":1);
+add ("to and fro":1);
+add ("time and again":1);
+add ("thickly":1);
+add ("therein":1);
+add ("thence":1);
+add ("tentatively":1);
+add ("tenderly":1);
+add ("sympathetically":1);
+add ("sweetly":1);
+add ("suspiciously":1);
+add ("superficially":1);
+add ("superbly":1);
+add ("subtly":1);
+add ("stubbornly":1);
+add ("strikingly":1);
+add ("strategically":1);
+add ("sternly":1);
+add ("steeply":1);
+add ("squarely":1);
+add ("speedily":1);
+add ("solidly":1);
+add ("solemnly":1);
+add ("smartly":1);
+add ("slower":1);
+add ("skilfully":1);
+add ("selectively":1);
+add ("securely":1);
+add ("scientifically":1);
+add ("scarce":1);
+add ("savagely":1);
+add ("safer":1);
+add ("ruthlessly":1);
+add ("ruefully":1);
+add ("routinely":1);
+add ("rigorously":1);
+add ("rigidly":1);
+add ("resolutely":1);
+add ("remotely":1);
+add ("reliably":1);
+add ("relentlessly":1);
+add ("regrettably":1);
+add ("real":1);
+add ("realistically":1);
+add ("ready":1);
+add ("rationally":1);
+add ("randomly":1);
+add ("quicker":1);
+add ("psychologically":1);
+add ("prominently":1);
+add ("prior":1);
+add ("prematurely":1);
+add ("predictably":1);
+add ("popularly":1);
+add ("pointedly":1);
+add ("persistently":1);
+add ("periodically":1);
+add ("per se":1);
+add ("per capita":1);
+add ("peculiarly":1);
+add ("peacefully":1);
+add ("patently":1);
+add ("passionately":1);
+add ("part-time":1);
+add ("overtly":1);
+add ("outright":1);
+add ("ordinarily":1);
+add ("once and for all":1);
+add ("ok":1);
+add ("okay":1);
+add ("offshore":1);
+add ("objectively":1);
+add ("not":1);
+add ("noticeably":1);
+add ("northwards":1);
+add ("nominally":1);
+add ("noisily":1);
+add ("negatively":1);
+add ("nationwide":1);
+add ("mysteriously":1);
+add ("monthly":1);
+add ("modestly":1);
+add ("mistakenly":1);
+add ("miserably":1);
+add ("miraculously":1);
+add ("mercifully":1);
+add ("mechanically":1);
+add ("materially":1);
+add ("massively":1);
+add ("manually":1);
+add ("lower":1);
+add ("lovingly":1);
+add ("legitimately":1);
+add ("left":1);
+add ("lazily":1);
+add ("latterly":1);
+add ("lastly":1);
+add ("knowingly":1);
+add ("kind of":1);
+add ("keenly":1);
+add ("justly":1);
+add ("justifiably":1);
+add ("jolly":1);
+add ("irritably":1);
+add ("inwards":1);
+add ("inwardly":1);
+add ("involuntarily":1);
+add ("intrinsically":1);
+add ("intimately":1);
+add ("intermittently":1);
+add ("inter alia":1);
+add ("intentionally":1);
+add ("intellectually":1);
+add ("innocently":1);
+add ("inland":1);
+add ("infrequently":1);
+add ("informally":1);
+add ("inextricably":1);
+add ("inexorably":1);
+add ("indignantly":1);
+add ("incorrectly":1);
+add ("inadvertently":1);
+add ("in vitro":1);
+add ("in the main":1);
+add ("in situ":1);
+add ("in brief":1);
+add ("idly":1);
+add ("ibid":1);
+add ("ibid.":1);
+add ("huskily":1);
+add ("hugely":1);
+add ("hotly":1);
+add ("horribly":1);
+add ("horizontally":1);
+add ("hesitantly":1);
+add ("hereby":1);
+add ("henceforth":1);
+add ("harshly":1);
+add ("half-way":1);
+add ("half way":1);
+add ("habitually":1);
+add ("grudgingly":1);
+add ("grossly":1);
+add ("gravely":1);
+add ("gratefully":1);
+add ("graphically":1);
+add ("gracefully":1);
+add ("gloomily":1);
+add ("gladly":1);
+add ("gingerly":1);
+add ("geographically":1);
+add ("genetically":1);
+add ("full":1);
+add ("full-time":1);
+add ("forthwith":1);
+add ("forcibly":1);
+add ("forcefully":1);
+add ("for sure":1);
+add ("flatly":1);
+add ("fine":1);
+add ("farther":1);
+add ("falsely":1);
+add ("externally":1);
+add ("expertly":1);
+add ("experimentally":1);
+add ("excitedly":1);
+add ("excessively":1);
+add ("exceedingly":1);
+add ("ever so":1);
+add ("endlessly":1);
+add ("emphatically":1);
+add ("eminently":1);
+add ("elegantly":1);
+add ("electronically":1);
+add ("effortlessly":1);
+add ("eastwards":1);
+add ("earnestly":1);
+add ("drastically":1);
+add ("downstream":1);
+add ("downhill":1);
+add ("doubtfully":1);
+add ("doubly":1);
+add ("double":1);
+add ("disproportionately":1);
+add ("discreetly":1);
+add ("dimly":1);
+add ("densely":1);
+add ("delicately":1);
+add ("defiantly":1);
+add ("defensively":1);
+add ("decisively":1);
+add ("dearly":1);
+add ("darkly":1);
+add ("culturally":1);
+add ("cruelly":1);
+add ("crudely":1);
+add ("crucially":1);
+add ("crossly":1);
+add ("correspondingly":1);
+add ("coolly":1);
+add ("convincingly":1);
+add ("conventionally":1);
+add ("conspicuously":1);
+add ("conceivably":1);
+add ("closest":1);
+add ("clinically":1);
+add ("cleverly":1);
+add ("circa":1);
+add ("chemically":1);
+add ("carelessly":1);
+add ("by and large":1);
+add ("busily":1);
+add ("brutally":1);
+add ("bravely":1);
+add ("boldly":1);
+add ("bluntly":1);
+add ("blindly":1);
+add ("blankly":1);
+add ("beneath":1);
+add ("belatedly":1);
+add ("awkwardly":1);
+add ("awfully":1);
+add ("at worst":1);
+add ("at most":1);
+add ("astonishingly":1);
+add ("as a matter of fact":1);
+add ("artificially":1);
+add ("arbitrarily":1);
+add ("approx":1);
+add ("apologetically":1);
+add ("anymore":1);
+add ("anyhow":1);
+add ("and so forth":1);
+add ("amazingly":1);
+add ("alternately":1);
+add ("aloft":1);
+add ("all of a sudden":1);
+add ("alarmingly":1);
+add ("aggressively":1);
+add ("afield":1);
+add ("affectionately":1);
+add ("adversely":1);
+add ("admirably":1);
+add ("absently":1);
+add ("aboard":1);
+add ("aback":1);
+add ("a.d.":1);
+add ("a lot":1);
+
+--
+-- articles
+-- from the common word list
+create articles;
+set types = (varchar);
+set weights = 1;
+add ("the":163);
+add ("a":504);
+add ("an":9);
+add ("no":3);
+add ("every":1);
+
+--
+-- nouns
+-- from the common word list
+create nouns;
+set types = (varchar);
+set weights = 1;
+add ("years":91);
+add ("children":47);
+add ("women":41);
+add ("men":39);
+add ("things":34);
+add ("eyes":32);
+add ("days":32);
+add ("members":30);
+add ("others":29);
+add ("police":28);
+add ("problems":27);
+add ("times":25);
+add ("services":25);
+add ("months":25);
+add ("words":24);
+add ("areas":24);
+add ("groups":20);
+add ("hands":19);
+add ("cases":19);
+add ("systems":18);
+add ("patients":18);
+add ("hours":18);
+add ("companies":18);
+add ("terms":17);
+add ("minutes":17);
+add ("countries":17);
+add ("changes":17);
+add ("parents":16);
+add ("conditions":16);
+add ("workers":15);
+add ("ways":15);
+add ("students":15);
+add ("schools":15);
+add ("friends":15);
+add ("weeks":14);
+add ("studies":14);
+add ("feet":14);
+add ("rights":13);
+add ("questions":13);
+add ("parties":13);
+add ("books":13);
+add ("authorities":13);
+add ("results":12);
+add ("relations":12);
+add ("rates":12);
+add ("parts":12);
+add ("levels":12);
+add ("details":12);
+add ("activities":12);
+add ("teachers":11);
+add ("reasons":11);
+add ("products":11);
+add ("points":11);
+add ("numbers":11);
+add ("issues":11);
+add ("ideas":11);
+add ("forces":11);
+add ("events":11);
+add ("effects":11);
+add ("arms":11);
+add ("standards":10);
+add ("sales":10);
+add ("rules":10);
+add ("resources":10);
+add ("prices":10);
+add ("lines":10);
+add ("interests":10);
+add ("goods":10);
+add ("figures":10);
+add ("costs":10);
+add ("circumstances":10);
+add ("windows":9);
+add ("types":9);
+add ("policies":9);
+add ("plans":9);
+add ("needs":9);
+add ("miles":9);
+add ("methods":9);
+add ("jobs":9);
+add ("girls":9);
+add ("forms":9);
+add ("factors":9);
+add ("animals":9);
+add ("trees":8);
+add ("subjects":8);
+add ("shares":8);
+add ("pupils":8);
+add ("players":8);
+add ("places":8);
+add ("officers":8);
+add ("matters":8);
+add ("letters":8);
+add ("individuals":8);
+add ("houses":8);
+add ("firms":8);
+add ("features":8);
+add ("families":8);
+add ("differences":8);
+add ("courses":8);
+add ("cells":8);
+add ("boys":8);
+add ("views":7);
+add ("values":7);
+add ("users":7);
+add ("units":7);
+add ("sources":7);
+add ("skills":7);
+add ("proposals":7);
+add ("plants":7);
+add ("names":7);
+add ("ministers":7);
+add ("materials":7);
+add ("lives":7);
+add ("leaders":7);
+add ("items":7);
+add ("institutions":7);
+add ("facilities":7);
+add ("examples":7);
+add ("difficulties":7);
+add ("decisions":7);
+add ("customers":7);
+add ("clothes":7);
+add ("cars":7);
+add ("bodies":7);
+add ("benefits":7);
+add ("banks":7);
+add ("aspects":7);
+add ("affairs":7);
+add ("walls":6);
+add ("techniques":6);
+add ("steps":6);
+add ("states":6);
+add ("sides":6);
+add ("requirements":6);
+add ("reports":6);
+add ("relationships":6);
+add ("records":6);
+add ("purposes":6);
+add ("programmes":6);
+add ("principles":6);
+add ("pp.":6);
+add ("powers":6);
+add ("pounds":6);
+add ("patterns":6);
+add ("papers":6);
+add ("opportunities":6);
+add ("operations":6);
+add ("officials":6);
+add ("measures":6);
+add ("managers":6);
+add ("legs":6);
+add ("homes":6);
+add ("grounds":6);
+add ("games":6);
+add ("funds":6);
+add ("fingers":6);
+add ("employees":6);
+add ("elements":6);
+add ("elections":6);
+add ("efforts":6);
+add ("courts":6);
+add ("classes":6);
+add ("buildings":6);
+add ("arrangements":6);
+add ("applications":6);
+add ("visitors":5);
+add ("troops":5);
+add ("thousands":5);
+add ("streets":5);
+add ("sites":5);
+add ("rooms":5);
+add ("readers":5);
+add ("projects":5);
+add ("profits":5);
+add ("processes":5);
+add ("procedures":5);
+add ("pieces":5);
+add ("pictures":5);
+add ("organisations":5);
+add ("orders":5);
+add ("notes":5);
+add ("models":5);
+add ("meetings":5);
+add ("lips":5);
+add ("laws":5);
+add ("heads":5);
+add ("governments":5);
+add ("functions":5);
+add ("flowers":5);
+add ("fields":5);
+add ("feelings":5);
+add ("facts":5);
+add ("developments":5);
+add ("demands":5);
+add ("colleagues":5);
+add ("clients":5);
+add ("charges":5);
+add ("centres":5);
+add ("birds":5);
+add ("attitudes":5);
+add ("arts":5);
+add ("actions":5);
+add ("accounts":5);
+add ("weapons":4);
+add ("unions":4);
+add ("towns":4);
+add ("thoughts":4);
+add ("theories":4);
+add ("thanks":4);
+add ("tests":4);
+add ("teeth":4);
+add ("tears":4);
+add ("teams":4);
+add ("talks":4);
+add ("structures":4);
+add ("stories":4);
+add ("statements":4);
+add ("stars":4);
+add ("stages":4);
+add ("sports":4);
+add ("societies":4);
+add ("situations":4);
+add ("signs":4);
+add ("shoulders":4);
+add ("shops":4);
+add ("sections":4);
+add ("seconds":4);
+add ("seats":4);
+add ("schemes":4);
+add ("regulations":4);
+add ("regions":4);
+add ("provisions":4);
+add ("properties":4);
+add ("proceedings":4);
+add ("practices":4);
+add ("positions":4);
+add ("persons":4);
+add ("periods":4);
+add ("payments":4);
+add ("pages":4);
+add ("owners":4);
+add ("offices":4);
+add ("objects":4);
+add ("objectives":4);
+add ("nations":4);
+add ("movements":4);
+add ("markets":4);
+add ("machines":4);
+add ("losses":4);
+add ("lights":4);
+add ("kinds":4);
+add ("industries":4);
+add ("implications":4);
+add ("hundreds":4);
+add ("horses":4);
+add ("goals":4);
+add ("farmers":4);
+add ("employers":4);
+add ("duties":4);
+add ("drugs":4);
+add ("doors":4);
+add ("dogs":4);
+add ("documents":4);
+add ("doctors":4);
+add ("directors":4);
+add ("departments":4);
+add ("contracts":4);
+add ("consequences":4);
+add ("communities":4);
+add ("colours":4);
+add ("claims":4);
+add ("cities":4);
+add ("characters":4);
+add ("characteristics":4);
+add ("artists":4);
+add ("arguments":4);
+add ("yards":3);
+add ("writers":3);
+add ("wages":3);
+add ("vehicles":3);
+add ("tools":3);
+add ("tasks":3);
+add ("symptoms":3);
+add ("supporters":3);
+add ("stones":3);
+add ("stations":3);
+add ("stairs":3);
+add ("sons":3);
+add ("soldiers":3);
+add ("shows":3);
+add ("shoes":3);
+add ("shareholders":3);
+add ("servants":3);
+add ("sentences":3);
+add ("scientists":3);
+add ("roads":3);
+add ("residents":3);
+add ("representatives":3);
+add ("prisoners":3);
+add ("premises":3);
+add ("politicians":3);
+add ("photographs":3);
+add ("personnel":3);
+add ("partners":3);
+add ("paintings":3);
+add ("organizations":3);
+add ("options":3);
+add ("occasions":3);
+add ("newspapers":3);
+add ("neighbours":3);
+add ("negotiations":3);
+add ("mothers":3);
+add ("moments":3);
+add ("metres":3);
+add ("leaves":3);
+add ("languages":3);
+add ("kids":3);
+add ("instructions":3);
+add ("images":3);
+add ("guests":3);
+add ("findings":3);
+add ("films":3);
+add ("faces":3);
+add ("experts":3);
+add ("experiments":3);
+add ("experiences":3);
+add ("expectations":3);
+add ("eggs":3);
+add ("ears":3);
+add ("earnings":3);
+add ("discussions":3);
+add ("degrees":3);
+add ("criteria":3);
+add ("councils":3);
+add ("copies":3);
+add ("contents":3);
+add ("computers":3);
+add ("components":3);
+add ("communications":3);
+add ("comments":3);
+add ("clubs":3);
+add ("citizens":3);
+add ("churches":3);
+add ("centuries":3);
+add ("categories":3);
+add ("cards":3);
+add ("candidates":3);
+add ("businesses":3);
+add ("brothers":3);
+add ("branches":3);
+add ("attempts":3);
+add ("assets":3);
+add ("articles":3);
+add ("ages":3);
+add ("agents":3);
+add ("agencies":3);
+add ("advantages":3);
+add ("adults":3);
+add ("wives":2);
+add ("winners":2);
+add ("wings":2);
+add ("waves":2);
+add ("waters":2);
+add ("votes":2);
+add ("voters":2);
+add ("voices":2);
+add ("villages":2);
+add ("victims":2);
+add ("versions":2);
+add ("variations":2);
+add ("variables":2);
+add ("universities":2);
+add ("trousers":2);
+add ("trials":2);
+add ("trends":2);
+add ("transactions":2);
+add ("topics":2);
+add ("tonnes":2);
+add ("titles":2);
+add ("tickets":2);
+add ("texts":2);
+add ("taxes":2);
+add ("tables":2);
+add ("suggestions":2);
+add ("styles":2);
+add ("strategies":2);
+add ("stores":2);
+add ("spirits":2);
+add ("speakers":2);
+add ("sounds":2);
+add ("sorts":2);
+add ("songs":2);
+add ("solutions":2);
+add ("solicitors":2);
+add ("ships":2);
+add ("sheets":2);
+add ("sets":2);
+add ("sessions":2);
+add ("securities":2);
+add ("sectors":2);
+add ("sciences":2);
+add ("scenes":2);
+add ("savings":2);
+add ("samples":2);
+add ("roots":2);
+add ("roles":2);
+add ("rocks":2);
+add ("rivers":2);
+add ("risks":2);
+add ("restrictions":2);
+add ("responsibilities":2);
+add ("responses":2);
+add ("researchers":2);
+add ("relatives":2);
+add ("refugees":2);
+add ("reforms":2);
+add ("references":2);
+add ("recommendations":2);
+add ("reactions":2);
+add ("quantities":2);
+add ("qualities":2);
+add ("qualifications":2);
+add ("publications":2);
+add ("professionals":2);
+add ("priorities":2);
+add ("pressures":2);
+add ("practitioners":2);
+add ("posts":2);
+add ("possibilities":2);
+add ("passengers":2);
+add ("participants":2);
+add ("pairs":2);
+add ("origins":2);
+add ("offences":2);
+add ("observations":2);
+add ("obligations":2);
+add ("nurses":2);
+add ("nights":2);
+add ("muscles":2);
+add ("mountains":2);
+add ("modules":2);
+add ("minds":2);
+add ("millions":2);
+add ("messages":2);
+add ("memories":2);
+add ("mechanisms":2);
+add ("meals":2);
+add ("marks":2);
+add ("manufacturers":2);
+add ("males":2);
+add ("magistrates":2);
+add ("loans":2);
+add ("lists":2);
+add ("links":2);
+add ("limits":2);
+add ("libraries":2);
+add ("lessons":2);
+add ("lawyers":2);
+add ("ladies":2);
+add ("knees":2);
+add ("keys":2);
+add ("judges":2);
+add ("islands":2);
+add ("investors":2);
+add ("instruments":2);
+add ("injuries":2);
+add ("initiatives":2);
+add ("inches":2);
+add ("improvements":2);
+add ("humans":2);
+add ("hotels":2);
+add ("hospitals":2);
+add ("hopes":2);
+add ("holidays":2);
+add ("holes":2);
+add ("hills":2);
+add ("guns":2);
+add ("guidelines":2);
+add ("glasses":2);
+add ("germans":2);
+add ("genes":2);
+add ("generations":2);
+add ("gardens":2);
+add ("forests":2);
+add ("foods":2);
+add ("files":2);
+add ("females":2);
+add ("fees":2);
+add ("fears":2);
+add ("fans":2);
+add ("expenses":2);
+add ("estates":2);
+add ("errors":2);
+add ("ends":2);
+add ("emotions":2);
+add ("drivers":2);
+add ("dreams":2);
+add ("drawings":2);
+add ("doubts":2);
+add ("divisions":2);
+add ("directions":2);
+add ("devices":2);
+add ("designs":2);
+add ("democrats":2);
+add ("decades":2);
+add ("deaths":2);
+add ("daughters":2);
+add ("dates":2);
+add ("cuts":2);
+add ("customs":2);
+add ("critics":2);
+add ("controls":2);
+add ("contributions":2);
+add ("consumers":2);
+add ("considerations":2);
+add ("conservatives":2);
+add ("connections":2);
+add ("conclusions":2);
+add ("concerns":2);
+add ("concepts":2);
+add ("concentrations":2);
+add ("complaints":2);
+add ("committees":2);
+add ("colleges":2);
+add ("chemicals":2);
+add ("chapters":2);
+add ("causes":2);
+add ("cattle":2);
+add ("calls":2);
+add ("boxes":2);
+add ("boundaries":2);
+add ("boots":2);
+add ("bones":2);
+add ("bonds":2);
+add ("boats":2);
+add ("boards":2);
+add ("blocks":2);
+add ("bits":2);
+add ("bills":2);
+add ("beliefs":2);
+add ("beds":2);
+add ("bars":2);
+add ("bands":2);
+add ("babies":2);
+add ("awards":2);
+add ("authors":2);
+add ("attacks":2);
+add ("assumptions":2);
+add ("associations":2);
+add ("approaches":2);
+add ("answers":2);
+add ("amounts":2);
+add ("americans":2);
+add ("aims":2);
+add ("agreements":2);
+add ("acts":2);
+add ("accidents":2);
+add ("youngsters":1);
+add ("writings":1);
+add ("wounds":1);
+add ("worlds":1);
+add ("workshops":1);
+add ("woods":1);
+add ("witnesses":1);
+add ("wishes":1);
+add ("wines":1);
+add ("winds":1);
+add ("wheels":1);
+add ("weekends":1);
+add ("weaknesses":1);
+add ("wars":1);
+add ("volunteers":1);
+add ("volumes":1);
+add ("visits":1);
+add ("videos":1);
+add ("vessels":1);
+add ("vegetables":1);
+add ("varieties":1);
+add ("uses":1);
+add ("twins":1);
+add ("trusts":1);
+add ("trustees":1);
+add ("troubles":1);
+add ("travellers":1);
+add ("trains":1);
+add ("traditions":1);
+add ("trades":1);
+add ("traders":1);
+add ("tracks":1);
+add ("toys":1);
+add ("tourists":1);
+add ("tories":1);
+add ("tons":1);
+add ("tiles":1);
+add ("ties":1);
+add ("threats":1);
+add ("themes":1);
+add ("territories":1);
+add ("tensions":1);
+add ("tenants":1);
+add ("temperatures":1);
+add ("telecommunications":1);
+add ("technologies":1);
+add ("targets":1);
+add ("tanks":1);
+add ("tales":1);
+add ("tactics":1);
+add ("symbols":1);
+add ("surveys":1);
+add ("surroundings":1);
+add ("surfaces":1);
+add ("supplies":1);
+add ("suppliers":1);
+add ("sums":1);
+add ("successes":1);
+add ("substances":1);
+add ("subsidies":1);
+add ("strings":1);
+add ("strengths":1);
+add ("strangers":1);
+add ("stocks":1);
+add ("stands":1);
+add ("spots":1);
+add ("speeches":1);
+add ("specimens":1);
+add ("specialists":1);
+add ("spaces":1);
+add ("sizes":1);
+add ("sisters":1);
+add ("signals":1);
+add ("shots":1);
+add ("shelves":1);
+add ("shapes":1);
+add ("shadows":1);
+add ("settlements":1);
+add ("settings":1);
+add ("sequences":1);
+add ("senses":1);
+add ("seeds":1);
+add ("secrets":1);
+add ("seasons":1);
+add ("scots":1);
+add ("scores":1);
+add ("scholars":1);
+add ("scales":1);
+add ("sanctions":1);
+add ("russians":1);
+add ("runs":1);
+add ("rumours":1);
+add ("rows":1);
+add ("routes":1);
+add ("rounds":1);
+add ("roses":1);
+add ("rivals":1);
+add ("rises":1);
+add ("rewards":1);
+add ("revenues":1);
+add ("restaurants":1);
+add ("respondents":1);
+add ("respects":1);
+add ("reserves":1);
+add ("reservations":1);
+add ("requests":1);
+add ("republics":1);
+add ("representations":1);
+add ("remarks":1);
+add ("remains":1);
+add ("reductions":1);
+add ("recordings":1);
+add ("rebels":1);
+add ("rats":1);
+add ("ranks":1);
+add ("railways":1);
+add ("races":1);
+add ("quarters":1);
+add ("pubs":1);
+add ("publishers":1);
+add ("provinces":1);
+add ("protests":1);
+add ("proteins":1);
+add ("prospects":1);
+add ("proportions":1);
+add ("programs":1);
+add ("producers":1);
+add ("prizes":1);
+add ("privileges":1);
+add ("prisons":1);
+add ("priests":1);
+add ("presents":1);
+add ("preparations":1);
+add ("preferences":1);
+add ("prayers":1);
+add ("potatoes":1);
+add ("ports":1);
+add ("populations":1);
+add ("pools":1);
+add ("polls":1);
+add ("policemen":1);
+add ("poles":1);
+add ("poets":1);
+add ("poems":1);
+add ("pockets":1);
+add ("plates":1);
+add ("planes":1);
+add ("pilots":1);
+add ("phrases":1);
+add ("phenomena":1);
+add ("phases":1);
+add ("performances":1);
+add ("perceptions":1);
+add ("peoples":1);
+add ("pensions":1);
+add ("pensioners":1);
+add ("penalties":1);
+add ("peasants":1);
+add ("paths":1);
+add ("passages":1);
+add ("particles":1);
+add ("parameters":1);
+add ("panels":1);
+add ("pains":1);
+add ("packages":1);
+add ("outcomes":1);
+add ("organs":1);
+add ("organisms":1);
+add ("organisers":1);
+add ("opponents":1);
+add ("opinions":1);
+add ("operators":1);
+add ("offers":1);
+add ("offenders":1);
+add ("odds":1);
+add ("occupations":1);
+add ("observers":1);
+add ("objections":1);
+add ("novels":1);
+add ("notions":1);
+add ("networks":1);
+add ("nerves":1);
+add ("musicians":1);
+add ("museums":1);
+add ("movies":1);
+add ("moves":1);
+add ("motives":1);
+add ("molecules":1);
+add ("modes":1);
+add ("mistakes":1);
+add ("missiles":1);
+add ("mines":1);
+add ("miners":1);
+add ("minerals":1);
+add ("mice":1);
+add ("metals":1);
+add ("merchants":1);
+add ("measurements":1);
+add ("meanings":1);
+add ("matches":1);
+add ("masters":1);
+add ("masses":1);
+add ("margins":1);
+add ("maps":1);
+add ("mammals":1);
+add ("makers":1);
+add ("magazines":1);
+add ("lovers":1);
+add ("looks":1);
+add ("locations":1);
+add ("limitations":1);
+add ("liabilities":1);
+add ("lengths":1);
+add ("lectures":1);
+add ("leads":1);
+add ("layers":1);
+add ("lands":1);
+add ("lakes":1);
+add ("lads":1);
+add ("laboratories":1);
+add ("kings":1);
+add ("kilometres":1);
+add ("journals":1);
+add ("journalists":1);
+add ("jews":1);
+add ("jeans":1);
+add ("investments":1);
+add ("investigations":1);
+add ("interviews":1);
+add ("intervals":1);
+add ("interpretations":1);
+add ("interactions":1);
+add ("intentions":1);
+add ("instances":1);
+add ("insects":1);
+add ("inhabitants":1);
+add ("ingredients":1);
+add ("influences":1);
+add ("indicators":1);
+add ("indians":1);
+add ("increases":1);
+add ("incomes":1);
+add ("incidents":1);
+add ("incentives":1);
+add ("imports":1);
+add ("illustrations":1);
+add ("husbands":1);
+add ("households":1);
+add ("honours":1);
+add ("holders":1);
+add ("historians":1);
+add ("heroes":1);
+add ("heels":1);
+add ("hearts":1);
+add ("habits":1);
+add ("guards":1);
+add ("grants":1);
+add ("governors":1);
+add ("gods":1);
+add ("gifts":1);
+add ("gentlemen":1);
+add ("gates":1);
+add ("gaps":1);
+add ("galleries":1);
+add ("gains":1);
+add ("futures":1);
+add ("fruits":1);
+add ("frames":1);
+add ("fragments":1);
+add ("foundations":1);
+add ("fortunes":1);
+add ("foreigners":1);
+add ("followers":1);
+add ("folk":1);
+add ("floors":1);
+add ("flights":1);
+add ("flats":1);
+add ("flames":1);
+add ("fires":1);
+add ("fathers":1);
+add ("farms":1);
+add ("falls":1);
+add ("failures":1);
+add ("factories":1);
+add ("eyebrows":1);
+add ("expressions":1);
+add ("exports":1);
+add ("explanations":1);
+add ("exhibitions":1);
+add ("exercises":1);
+add ("executives":1);
+add ("exchanges":1);
+add ("exceptions":1);
+add ("examinations":1);
+add ("evenings":1);
+add ("estimates":1);
+add ("equations":1);
+add ("environments":1);
+add ("entries":1);
+add ("enterprises":1);
+add ("enquiries":1);
+add ("engines":1);
+add ("engineers":1);
+add ("enemies":1);
+add ("emissions":1);
+add ("edges":1);
+add ("economies":1);
+add ("drinks":1);
+add ("dollars":1);
+add ("districts":1);
+add ("disputes":1);
+add ("dishes":1);
+add ("diseases":1);
+add ("disciplines":1);
+add ("dimensions":1);
+add ("developers":1);
+add ("detectives":1);
+add ("designers":1);
+add ("descriptions":1);
+add ("deputies":1);
+add ("depths":1);
+add ("deposits":1);
+add ("demonstrations":1);
+add ("delegates":1);
+add ("definitions":1);
+add ("defendants":1);
+add ("defences":1);
+add ("debts":1);
+add ("deals":1);
+add ("dealers":1);
+add ("databases":1);
+add ("dangers":1);
+add ("damages":1);
+add ("curtains":1);
+add ("cups":1);
+add ("cultures":1);
+add ("crowds":1);
+add ("crops":1);
+add ("criticisms":1);
+add ("crimes":1);
+add ("crews":1);
+add ("creditors":1);
+add ("creatures":1);
+add ("couples":1);
+add ("counties":1);
+add ("councillors":1);
+add ("corporations":1);
+add ("corners":1);
+add ("conventions":1);
+add ("contexts":1);
+add ("contacts":1);
+add ("consultants":1);
+add ("constraints":1);
+add ("conflicts":1);
+add ("conferences":1);
+add ("concessions":1);
+add ("competitors":1);
+add ("comparisons":1);
+add ("communists":1);
+add ("commitments":1);
+add ("commentators":1);
+add ("combinations":1);
+add ("columns":1);
+add ("colonies":1);
+add ("collections":1);
+add ("coins":1);
+add ("clouds":1);
+add ("clergy":1);
+add ("circles":1);
+add ("cigarettes":1);
+add ("christians":1);
+add ("choices":1);
+add ("chips":1);
+add ("chiefs":1);
+add ("cheeks":1);
+add ("charts":1);
+add ("channels":1);
+add ("champions":1);
+add ("championships":1);
+add ("chairs":1);
+add ("chains":1);
+add ("cats":1);
+add ("casualties":1);
+add ("carers":1);
+add ("careers":1);
+add ("camps":1);
+add ("campaigns":1);
+add ("cameras":1);
+add ("calculations":1);
+add ("buyers":1);
+add ("businessmen":1);
+add ("buses":1);
+add ("budgets":1);
+add ("breasts":1);
+add ("bottles":1);
+add ("borders":1);
+add ("bombs":1);
+add ("blues":1);
+add ("blacks":1);
+add ("bishops":1);
+add ("beings":1);
+add ("bedrooms":1);
+add ("beans":1);
+add ("beaches":1);
+add ("bases":1);
+add ("barriers":1);
+add ("balls":1);
+add ("bags":1);
+add ("bacteria":1);
+add ("backs":1);
+add ("auditors":1);
+add ("audiences":1);
+add ("assessments":1);
+add ("aspirations":1);
+add ("armies":1);
+add ("architects":1);
+add ("appointments":1);
+add ("applicants":1);
+add ("appearances":1);
+add ("appeals":1);
+add ("angles":1);
+add ("ambitions":1);
+add ("alternatives":1);
+add ("allowances":1);
+add ("allies":1);
+add ("allegations":1);
+add ("advisers":1);
+add ("advertisements":1);
+add ("advances":1);
+add ("addresses":1);
+add ("actors":1);
+add ("acres":1);
+add ("acids":1);
+add ("achievements":1);
+add ("accountants":1);
+add ("abilities":1);
+
+--
+-- prepositions
+-- from the common word list
+create prepositions;
+set types = (varchar);
+set weights = 1;
+add ("in":169586);
+add ("to":84535);
+add ("for":76889);
+add ("with":60602);
+add ("on":59030);
+add ("by":49067);
+add ("at":43557);
+add ("from":39087);
+add ("into":15239);
+add ("about":11594);
+add ("as":10556);
+add ("like":8786);
+add ("between":8703);
+add ("through":6762);
+add ("after":5897);
+add ("against":5354);
+add ("under":5319);
+add ("over":5024);
+add ("out of":4393);
+add ("without":4351);
+add ("within":4249);
+add ("during":4243);
+add ("before":3662);
+add ("such as":3161);
+add ("towards":2732);
+add ("up":2445);
+add ("including":2265);
+add ("among":2259);
+add ("upon":2257);
+add ("up to":2236);
+add ("across":2023);
+add ("behind":1949);
+add ("off":1819);
+add ("rather than":1684);
+add ("around":1650);
+add ("because of":1635);
+add ("according to":1534);
+add ("despite":1436);
+add ("since":1368);
+add ("down":1305);
+add ("per":1275);
+add ("near":1245);
+add ("above":1244);
+add ("throughout":1132);
+add ("away from":1096);
+add ("outside":1066);
+add ("beyond":1036);
+add ("until":895);
+add ("in terms of":856);
+add ("due to":856);
+add ("worth":817);
+add ("along":787);
+add ("on to":781);
+add ("as to":738);
+add ("inside":661);
+add ("plus":619);
+add ("apart from":592);
+add ("in front of":589);
+add ("together with":569);
+add ("beside":563);
+add ("below":549);
+add ("onto":522);
+add ("subject to":497);
+add ("beneath":488);
+add ("along with":475);
+add ("past":472);
+add ("via":456);
+add ("in relation to":428);
+add ("amongst":423);
+add ("other than":401);
+add ("in addition to":331);
+add ("in favour of":327);
+add ("unlike":309);
+add ("aged":306);
+add ("concerning":305);
+add ("prior to":296);
+add ("but for":294);
+add ("in spite of":275);
+add ("in respect of":273);
+add ("alongside":266);
+add ("next to":265);
+add ("as for":260);
+add ("ahead of":246);
+add ("on behalf of":245);
+add ("on top of":223);
+add ("regarding":219);
+add ("depending on":208);
+add ("in response to":195);
+add ("in accordance with":195);
+add ("except for":190);
+add ("in the light of":170);
+add ("except":170);
+add ("instead of":158);
+add ("in charge of":152);
+add ("with regard to":151);
+add ("in connection with":151);
+add ("by means of":149);
+add ("on the part of":148);
+add ("out":145);
+add ("in view of":145);
+add ("as opposed to":143);
+add ("by way of":133);
+add ("with respect to":128);
+add ("contrary to":128);
+add ("toward":125);
+add ("in conjunction with":122);
+add ("in line with":117);
+add ("till":113);
+add ("following":113);
+add ("in touch with":110);
+add ("amid":109);
+add ("in support of":103);
+add ("in search of":100);
+add ("relative to":96);
+add ("in return for":93);
+add ("versus":92);
+add ("let alone":82);
+add ("irrespective of":82);
+add ("besides":81);
+add ("with a view to":80);
+add ("considering":79);
+add ("owing to":77);
+add ("near to":77);
+add ("in excess of":77);
+add ("in place of":76);
+add ("in need of":76);
+add ("in common with":76);
+add ("as of":69);
+add ("underneath":65);
+add ("outside of":65);
+add ("excluding":64);
+add ("up until":59);
+add ("as regards":59);
+add ("aboard":54);
+add ("pending":53);
+add ("on board":53);
+add ("notwithstanding":53);
+add ("adjacent to":51);
+add ("on account of":49);
+add ("amidst":48);
+add ("in keeping with":44);
+add ("opposite":43);
+add ("in comparison with":43);
+add ("pursuant to":42);
+add ("as against":41);
+add ("minus":40);
+add ("in contact with":40);
+add ("in association with":40);
+add ("thanks to":38);
+add ("unto":37);
+add ("with reference to":36);
+add ("for fear of":36);
+add ("nearer to":34);
+add ("in pursuit of":33);
+add ("in possession of":32);
+add ("in case of":32);
+add ("by reason of":31);
+add ("in between":29);
+add ("aside from":29);
+add ("in answer to":28);
+add ("in aid of":27);
+add ("in regard to":25);
+add ("in proportion to":25);
+add ("as from":25);
+add ("as between":25);
+add ("save":23);
+add ("into line with":23);
+add ("in defence of":21);
+add ("save for":20);
+add ("as well as":20);
+add ("vice":19);
+add ("in receipt of":19);
+add ("pro":18);
+add ("than":16);
+add ("of":15);
+add ("nearest to":15);
+add ("in reply to":15);
+add ("in consultation with":15);
+add ("nearer":14);
+add ("in lieu of":14);
+add ("in accord with":14);
+add ("atop":14);
+add ("in defiance of":13);
+add ("pertaining to":12);
+add ("off of":12);
+add ("given":12);
+add ("astride":12);
+add ("nearest":11);
+add ("in light of":11);
+add ("subsequent to":10);
+add ("out of touch with":10);
+add ("alias":10);
+add ("respecting":9);
+add ("a la":9);
+add ("barring":7);
+add ("vis-a-vis":6);
+add ("times":6);
+add ("in face of":6);
+add ("but":6);
+add ("out of line with":5);
+add ("due":5);
+add ("in cooperation with":4);
+add ("excepting":4);
+add ("thru":3);
+add ("top of":2);
+add ("prp":2);
+add ("in-between":2);
+add ("in favor of":2);
+add ("ere":2);
+add ("afore":2);
+add ("terms of":1);
+add ("saving":1);
+add ("in quest of":1);
+add ("apropos":1);
+add ("addition to":1);
+add ("according":1);
+
+--
+-- verbs
+-- from the common word list
+create verbs;
+set types = (varchar);
+set weights = 1;
+add ("make":523);
+add ("see":487);
+add ("get":464);
+add ("take":436);
+add ("go":409);
+add ("know":359);
+add ("say":281);
+add ("find":273);
+add ("give":265);
+add ("think":238);
+add ("come":235);
+add ("help":209);
+add ("use":177);
+add ("look":177);
+add ("want":168);
+add ("tell":167);
+add ("keep":166);
+add ("like":161);
+add ("work":158);
+add ("provide":157);
+add ("become":129);
+add ("put":123);
+add ("pay":114);
+add ("feel":112);
+add ("need":107);
+add ("leave":103);
+add ("meet":102);
+add ("bring":101);
+add ("ask":100);
+add ("understand":98);
+add ("show":97);
+add ("mean":94);
+add ("play":93);
+add ("try":91);
+add ("believe":89);
+add ("hear":87);
+add ("ensure":87);
+add ("stop":82);
+add ("move":82);
+add ("allow":82);
+add ("seem":81);
+add ("continue":80);
+add ("produce":79);
+add ("talk":77);
+add ("change":77);
+add ("stay":76);
+add ("buy":74);
+add ("live":73);
+add ("let":73);
+add ("run":72);
+add ("start":71);
+add ("consider":71);
+add ("accept":69);
+add ("turn":68);
+add ("remember":66);
+add ("develop":66);
+add ("lead":64);
+add ("include":64);
+add ("hold":64);
+add ("avoid":64);
+add ("carry":63);
+add ("offer":62);
+add ("create":62);
+add ("speak":61);
+add ("expect":61);
+add ("appear":61);
+add ("follow":60);
+add ("explain":60);
+add ("prevent":59);
+add ("happen":59);
+add ("call":59);
+add ("win":57);
+add ("support":57);
+add ("achieve":57);
+add ("reduce":56);
+add ("write":55);
+add ("set":55);
+add ("return":55);
+add ("learn":55);
+add ("increase":54);
+add ("stand":53);
+add ("join":53);
+add ("read":51);
+add ("improve":51);
+add ("apply":51);
+add ("sell":50);
+add ("remain":50);
+add ("reach":50);
+add ("build":50);
+add ("prove":49);
+add ("receive":48);
+add ("deal":47);
+add ("begin":46);
+add ("spend":45);
+add ("raise":45);
+add ("form":45);
+add ("establish":45);
+add ("decide":44);
+add ("wait":43);
+add ("protect":43);
+add ("lose":43);
+add ("fall":43);
+add ("maintain":42);
+add ("act":42);
+add ("send":41);
+add ("discuss":41);
+add ("suggest":40);
+add ("save":40);
+add ("cover":40);
+add ("cause":40);
+add ("break":40);
+add ("sit":39);
+add ("identify":39);
+add ("eat":39);
+add ("obtain":38);
+add ("face":38);
+add ("choose":38);
+add ("add":38);
+add ("encourage":37);
+add ("enable":37);
+add ("agree":37);
+add ("require":36);
+add ("pass":36);
+add ("enjoy":36);
+add ("draw":36);
+add ("afford":36);
+add ("open":35);
+add ("end":35);
+add ("control":35);
+add ("answer":35);
+add ("walk":34);
+add ("visit":34);
+add ("seek":34);
+add ("enter":34);
+add ("cut":34);
+add ("serve":33);
+add ("occur":33);
+add ("kill":33);
+add ("imagine":33);
+add ("grow":33);
+add ("forget":33);
+add ("cope":33);
+add ("die":32);
+add ("bear":32);
+add ("worry":31);
+add ("wish":31);
+add ("watch":31);
+add ("determine":31);
+add ("care":31);
+add ("affect":31);
+add ("share":30);
+add ("pick":30);
+add ("catch":30);
+add ("mind":29);
+add ("love":29);
+add ("gain":29);
+add ("fight":29);
+add ("exist":29);
+add ("examine":29);
+add ("clear":29);
+add ("manage":28);
+add ("fit":28);
+add ("describe":28);
+add ("attend":28);
+add ("sleep":27);
+add ("introduce":27);
+add ("drive":27);
+add ("check":27);
+add ("result":26);
+add ("involve":26);
+add ("survive":25);
+add ("replace":25);
+add ("remove":25);
+add ("promote":25);
+add ("operate":25);
+add ("claim":25);
+add ("argue":25);
+add ("admit":25);
+add ("rise":24);
+add ("respond":24);
+add ("recognise":24);
+add ("realise":24);
+add ("escape":24);
+add ("discover":24);
+add ("wear":23);
+add ("study":23);
+add ("represent":23);
+add ("reflect":23);
+add ("perform":23);
+add ("matter":23);
+add ("listen":23);
+add ("indicate":23);
+add ("extend":23);
+add ("contain":23);
+add ("complete":23);
+add ("assume":23);
+add ("present":22);
+add ("marry":22);
+add ("last":22);
+add ("fill":22);
+add ("depend":22);
+add ("assess":22);
+add ("secure":21);
+add ("pull":21);
+add ("mention":21);
+add ("concentrate":21);
+add ("close":21);
+add ("benefit":21);
+add ("assist":21);
+add ("travel":20);
+add ("prepare":20);
+add ("persuade":20);
+add ("lie":20);
+add ("investigate":20);
+add ("hope":20);
+add ("handle":20);
+add ("express":20);
+add ("cost":20);
+add ("treat":19);
+add ("teach":19);
+add ("suffer":19);
+add ("sound":19);
+add ("miss":19);
+add ("fly":19);
+add ("attract":19);
+add ("supply":18);
+add ("settle":18);
+add ("reveal":18);
+add ("retain":18);
+add ("report":18);
+add ("place":18);
+add ("notice":18);
+add ("match":18);
+add ("explore":18);
+add ("collect":18);
+add ("adopt":18);
+add ("throw":17);
+add ("succeed":17);
+add ("rely":17);
+add ("refer":17);
+add ("recover":17);
+add ("point":17);
+add ("force":17);
+add ("defend":17);
+add ("contribute":17);
+add ("confirm":17);
+add ("beat":17);
+add ("arrive":17);
+add ("arise":17);
+add ("appreciate":17);
+add ("touch":16);
+add ("test":16);
+add ("solve":16);
+add ("sign":16);
+add ("satisfy":16);
+add ("resist":16);
+add ("justify":16);
+add ("influence":16);
+add ("ignore":16);
+add ("hide":16);
+add ("drop":16);
+add ("distinguish":16);
+add ("deny":16);
+add ("demonstrate":16);
+add ("deliver":16);
+add ("define":16);
+add ("contact":16);
+add ("blame":16);
+add ("attempt":16);
+add ("suit":15);
+add ("rest":15);
+add ("pursue":15);
+add ("proceed":15);
+add ("note":15);
+add ("finish":15);
+add ("drink":15);
+add ("destroy":15);
+add ("compete":15);
+add ("arrange":15);
+add ("acquire":15);
+add ("vote":14);
+add ("vary":14);
+add ("trust":14);
+add ("recognize":14);
+add ("press":14);
+add ("prefer":14);
+add ("overcome":14);
+add ("lay":14);
+add ("impose":14);
+add ("hit":14);
+add ("generate":14);
+add ("focus":14);
+add ("fail":14);
+add ("expand":14);
+add ("exercise":14);
+add ("advise":14);
+add ("address":14);
+add ("account":14);
+add ("undertake":13);
+add ("suppose":13);
+add ("restore":13);
+add ("refuse":13);
+add ("record":13);
+add ("recall":13);
+add ("participate":13);
+add ("mark":13);
+add ("feed":13);
+add ("emerge":13);
+add ("date":13);
+add ("alter":13);
+add ("withdraw":12);
+add ("tackle":12);
+add ("ring":12);
+add ("regard":12);
+add ("preserve":12);
+add ("plan":12);
+add ("order":12);
+add ("measure":12);
+add ("laugh":12);
+add ("judge":12);
+add ("implement":12);
+add ("earn":12);
+add ("comply":12);
+add ("compare":12);
+add ("communicate":12);
+add ("bother":12);
+add ("attack":12);
+add ("appeal":12);
+add ("accommodate":12);
+add ("wonder":11);
+add ("strike":11);
+add ("resolve":11);
+add ("release":11);
+add ("relate":11);
+add ("realize":11);
+add ("observe":11);
+add ("limit":11);
+add ("lift":11);
+add ("invest":11);
+add ("inform":11);
+add ("hurt":11);
+add ("hang":11);
+add ("experience":11);
+add ("enhance":11);
+add ("detect":11);
+add ("cry":11);
+add ("cross":11);
+add ("count":11);
+add ("comment":11);
+add ("challenge":11);
+add ("back":11);
+add ("welcome":10);
+add ("view":10);
+add ("transfer":10);
+add ("sustain":10);
+add ("strengthen":10);
+add ("stick":10);
+add ("state":10);
+add ("sort":10);
+add ("sing":10);
+add ("select":10);
+add ("ride":10);
+add ("review":10);
+add ("repeat":10);
+add ("remind":10);
+add ("relax":10);
+add ("question":10);
+add ("purchase":10);
+add ("publish":10);
+add ("predict":10);
+add ("own":10);
+add ("negotiate":10);
+add ("monitor":10);
+add ("launch":10);
+add ("interpret":10);
+add ("guarantee":10);
+add ("exclude":10);
+add ("convince":10);
+add ("climb":10);
+add ("celebrate":10);
+add ("behave":10);
+add ("analyse":10);
+add ("acknowledge":10);
+add ("thank":9);
+add ("tend":9);
+add ("submit":9);
+add ("step":9);
+add ("spread":9);
+add ("specify":9);
+add ("search":9);
+add ("score":9);
+add ("risk":9);
+add ("reply":9);
+add ("reject":9);
+add ("recommend":9);
+add ("qualify":9);
+add ("push":9);
+add ("permit":9);
+add ("organise":9);
+add ("light":9);
+add ("land":9);
+add ("issue":9);
+add ("imply":9);
+add ("illustrate":9);
+add ("fulfil":9);
+add ("finance":9);
+add ("exploit":9);
+add ("employ":9);
+add ("display":9);
+add ("demand":9);
+add ("convey":9);
+add ("construct":9);
+add ("conclude":9);
+add ("commit":9);
+add ("approach":9);
+add ("announce":9);
+add ("abandon":9);
+add ("train":8);
+add ("switch":8);
+add ("stimulate":8);
+add ("slip":8);
+add ("shoot":8);
+add ("shake":8);
+add ("separate":8);
+add ("rule":8);
+add ("resign":8);
+add ("react":8);
+add ("pretend":8);
+add ("please":8);
+add ("name":8);
+add ("market":8);
+add ("link":8);
+add ("lend":8);
+add ("jump":8);
+add ("intervene":8);
+add ("interfere":8);
+add ("insist":8);
+add ("guess":8);
+add ("grant":8);
+add ("free":8);
+add ("facilitate":8);
+add ("evaluate":8);
+add ("engage":8);
+add ("enforce":8);
+add ("eliminate":8);
+add ("ease":8);
+add ("disappear":8);
+add ("direct":8);
+add ("convert":8);
+add ("consult":8);
+add ("conduct":8);
+add ("complain":8);
+add ("combine":8);
+add ("clean":8);
+add ("borrow":8);
+add ("boost":8);
+add ("belong":8);
+add ("wash":7);
+add ("warn":7);
+add ("wake":7);
+add ("trace":7);
+add ("sue":7);
+add ("spare":7);
+add ("smile":7);
+add ("shift":7);
+add ("retire":7);
+add ("restrict":7);
+add ("register":7);
+add ("practise":7);
+add ("possess":7);
+add ("kiss":7);
+add ("incorporate":7);
+add ("head":7);
+add ("gather":7);
+add ("forgive":7);
+add ("fix":7);
+add ("fetch":7);
+add ("exceed":7);
+add ("dry":7);
+add ("differ":7);
+add ("design":7);
+add ("damage":7);
+add ("constitute":7);
+add ("compensate":7);
+add ("charge":7);
+add ("cease":7);
+add ("capture":7);
+add ("burn":7);
+add ("breathe":7);
+add ("approve":7);
+add ("appoint":7);
+add ("adjust":7);
+add ("adapt":7);
+add ("accompany":7);
+add ("yield":6);
+add ("waste":6);
+add ("undermine":6);
+add ("transform":6);
+add ("trade":6);
+add ("swim":6);
+add ("stress":6);
+add ("steal":6);
+add ("smell":6);
+add ("shut":6);
+add ("sense":6);
+add ("resume":6);
+add ("relieve":6);
+add ("reinforce":6);
+add ("propose":6);
+add ("paint":6);
+add ("lower":6);
+add ("locate":6);
+add ("knock":6);
+add ("invite":6);
+add ("intend":6);
+add ("hate":6);
+add ("guide":6);
+add ("function":6);
+add ("fear":6);
+add ("emphasise":6);
+add ("doubt":6);
+add ("dominate":6);
+add ("dismiss":6);
+add ("delay":6);
+add ("declare":6);
+add ("dare":6);
+add ("dance":6);
+add ("correct":6);
+add ("cook":6);
+add ("consist":6);
+add ("conform":6);
+add ("combat":6);
+add ("clarify":6);
+add ("calculate":6);
+add ("blow":6);
+add ("balance":6);
+add ("aid":6);
+add ("upset":5);
+add ("tolerate":5);
+add ("threaten":5);
+add ("stretch":5);
+add ("store":5);
+add ("spot":5);
+add ("speed":5);
+add ("slow":5);
+add ("sink":5);
+add ("shout":5);
+add ("rush":5);
+add ("roll":5);
+add ("reverse":5);
+add ("respect":5);
+add ("rescue":5);
+add ("repay":5);
+add ("repair":5);
+add ("render":5);
+add ("regain":5);
+add ("recruit":5);
+add ("reassure":5);
+add ("protest":5);
+add ("print":5);
+add ("pray":5);
+add ("phone":5);
+add ("organize":5);
+add ("oppose":5);
+add ("occupy":5);
+add ("obey":5);
+add ("modify":5);
+add ("minimise":5);
+add ("list":5);
+add ("kick":5);
+add ("integrate":5);
+add ("install":5);
+add ("induce":5);
+add ("impress":5);
+add ("highlight":5);
+add ("harm":5);
+add ("halt":5);
+add ("grasp":5);
+add ("flow":5);
+add ("fire":5);
+add ("favour":5);
+add ("extract":5);
+add ("estimate":5);
+add ("drag":5);
+add ("divide":5);
+add ("disturb":5);
+add ("disclose":5);
+add ("derive":5);
+add ("counter":5);
+add ("confront":5);
+add ("conceal":5);
+add ("coincide":5);
+add ("co-operate":5);
+add ("cancel":5);
+add ("block":5);
+add ("assure":5);
+add ("assert":5);
+add ("amount":5);
+add ("aim":5);
+add ("advance":5);
+add ("absorb":5);
+add ("wipe":4);
+add ("undergo":4);
+add ("translate":4);
+add ("tie":4);
+add ("tear":4);
+add ("taste":4);
+add ("swallow":4);
+add ("suspect":4);
+add ("surrender":4);
+add ("surprise":4);
+add ("suppress":4);
+add ("supplement":4);
+add ("struggle":4);
+add ("stare":4);
+add ("split":4);
+add ("spell":4);
+add ("smoke":4);
+add ("shed":4);
+add ("shape":4);
+add ("seize":4);
+add ("sail":4);
+add ("safeguard":4);
+add ("revive":4);
+add ("reproduce":4);
+add ("renew":4);
+add ("regulate":4);
+add ("regret":4);
+add ("reform":4);
+add ("reconcile":4);
+add ("quote":4);
+add ("quit":4);
+add ("provoke":4);
+add ("promise":4);
+add ("progress":4);
+add ("pose":4);
+add ("plant":4);
+add ("perceive":4);
+add ("penetrate":4);
+add ("opt":4);
+add ("object":4);
+add ("murder":4);
+add ("mount":4);
+add ("mix":4);
+add ("maximise":4);
+add ("manipulate":4);
+add ("lack":4);
+add ("knit":4);
+add ("inspect":4);
+add ("initiate":4);
+add ("house":4);
+add ("hire":4);
+add ("hesitate":4);
+add ("hand":4);
+add ("greet":4);
+add ("grab":4);
+add ("foster":4);
+add ("formulate":4);
+add ("figure":4);
+add ("feature":4);
+add ("expose":4);
+add ("exert":4);
+add ("exchange":4);
+add ("entertain":4);
+add ("endure":4);
+add ("emphasize":4);
+add ("embrace":4);
+add ("effect":4);
+add ("dress":4);
+add ("dream":4);
+add ("double":4);
+add ("distribute":4);
+add ("dispose":4);
+add ("discourage":4);
+add ("dig":4);
+add ("devote":4);
+add ("devise":4);
+add ("deter":4);
+add ("defeat":4);
+add ("decline":4);
+add ("cure":4);
+add ("curb":4);
+add ("cool":4);
+add ("contemplate":4);
+add ("connect":4);
+add ("concern":4);
+add ("command":4);
+add ("collapse":4);
+add ("co-ordinate":4);
+add ("cast":4);
+add ("calm":4);
+add ("breed":4);
+add ("bind":4);
+add ("ban":4);
+add ("ascertain":4);
+add ("arrest":4);
+add ("anticipate":4);
+add ("admire":4);
+add ("administer":4);
+add ("abolish":4);
+add ("witness":3);
+add ("withstand":3);
+add ("widen":3);
+add ("weigh":3);
+add ("weaken":3);
+add ("warm":3);
+add ("wander":3);
+add ("upgrade":3);
+add ("update":3);
+add ("unite":3);
+add ("transport":3);
+add ("track":3);
+add ("top":3);
+add ("terminate":3);
+add ("telephone":3);
+add ("tax":3);
+add ("swing":3);
+add ("sweep":3);
+add ("suspend":3);
+add ("supervise":3);
+add ("summon":3);
+add ("suffice":3);
+add ("stir":3);
+add ("stem":3);
+add ("steer":3);
+add ("squeeze":3);
+add ("spoil":3);
+add ("speculate":3);
+add ("slide":3);
+add ("signal":3);
+add ("ship":3);
+add ("service":3);
+add ("scream":3);
+add ("ruin":3);
+add ("round":3);
+add ("retrieve":3);
+add ("restrain":3);
+add ("request":3);
+add ("reconsider":3);
+add ("rebuild":3);
+add ("race":3);
+add ("punish":3);
+add ("project":3);
+add ("profit":3);
+add ("prevail":3);
+add ("pour":3);
+add ("postpone":3);
+add ("pack":3);
+add ("offset":3);
+add ("merge":3);
+add ("master":3);
+add ("manufacture":3);
+add ("lock":3);
+add ("isolate":3);
+add ("interview":3);
+add ("inspire":3);
+add ("inhibit":3);
+add ("indulge":3);
+add ("hurry":3);
+add ("hunt":3);
+add ("honour":3);
+add ("heal":3);
+add ("guard":3);
+add ("govern":3);
+add ("frighten":3);
+add ("flourish":3);
+add ("flee":3);
+add ("fish":3);
+add ("fancy":3);
+add ("fade":3);
+add ("experiment":3);
+add ("exhibit":3);
+add ("execute":3);
+add ("excuse":3);
+add ("evolve":3);
+add ("entail":3);
+add ("endorse":3);
+add ("encounter":3);
+add ("elect":3);
+add ("drift":3);
+add ("divert":3);
+add ("disrupt":3);
+add ("disguise":3);
+add ("discriminate":3);
+add ("diminish":3);
+add ("deserve":3);
+add ("decrease":3);
+add ("criticise":3);
+add ("crack":3);
+add ("correspond":3);
+add ("copy":3);
+add ("contract":3);
+add ("contend":3);
+add ("consolidate":3);
+add ("confuse":3);
+add ("confess":3);
+add ("condemn":3);
+add ("conceive":3);
+add ("concede":3);
+add ("compromise":3);
+add ("comprehend":3);
+add ("complement":3);
+add ("commence":3);
+add ("comfort":3);
+add ("cheer":3);
+add ("cater":3);
+add ("bury":3);
+add ("burst":3);
+add ("bite":3);
+add ("bet":3);
+add ("bend":3);
+add ("base":3);
+add ("attain":3);
+add ("attach":3);
+add ("associate":3);
+add ("assemble":3);
+add ("apologise":3);
+add ("allocate":3);
+add ("alleviate":3);
+add ("advertise":3);
+add ("accelerate":3);
+add ("zero":2);
+add ("withhold":2);
+add ("wind":2);
+add ("weep":2);
+add ("wave":2);
+add ("warrant":2);
+add ("verify":2);
+add ("venture":2);
+add ("urge":2);
+add ("uphold":2);
+add ("underline":2);
+add ("underestimate":2);
+add ("trouble":2);
+add ("trigger":2);
+add ("trap":2);
+add ("transmit":2);
+add ("tour":2);
+add ("total":2);
+add ("tighten":2);
+add ("thrive":2);
+add ("tempt":2);
+add ("target":2);
+add ("tap":2);
+add ("swear":2);
+add ("sum":2);
+add ("substitute":2);
+add ("subscribe":2);
+add ("strip":2);
+add ("spring":2);
+add ("soften":2);
+add ("snap":2);
+add ("smooth":2);
+add ("simplify":2);
+add ("silence":2);
+add ("signify":2);
+add ("shrink":2);
+add ("shop":2);
+add ("shine":2);
+add ("seal":2);
+add ("sample":2);
+add ("sacrifice":2);
+add ("rub":2);
+add ("rid":2);
+add ("reward":2);
+add ("revise":2);
+add ("revert":2);
+add ("retreat":2);
+add ("reserve":2);
+add ("resemble":2);
+add ("research":2);
+add ("rent":2);
+add ("remedy":2);
+add ("refrain":2);
+add ("rectify":2);
+add ("reconstruct":2);
+add ("reclaim":2);
+add ("rate":2);
+add ("range":2);
+add ("rally":2);
+add ("rain":2);
+add ("quantify":2);
+add ("prosecute":2);
+add ("prescribe":2);
+add ("preclude":2);
+add ("preach":2);
+add ("practice":2);
+add ("post":2);
+add ("portray":2);
+add ("pop":2);
+add ("plead":2);
+add ("pin":2);
+add ("persist":2);
+add ("pause":2);
+add ("park":2);
+add ("panic":2);
+add ("owe":2);
+add ("overthrow":2);
+add ("override":2);
+add ("overlook":2);
+add ("outline":2);
+add ("offend":2);
+add ("obscure":2);
+add ("oblige":2);
+add ("no":2);
+add ("notify":2);
+add ("neglect":2);
+add ("muster":2);
+add ("minimize":2);
+add ("melt":2);
+add ("march":2);
+add ("lunch":2);
+add ("long":2);
+add ("load":2);
+add ("lessen":2);
+add ("leap":2);
+add ("lean":2);
+add ("invoke":2);
+add ("invent":2);
+add ("invade":2);
+add ("interrupt":2);
+add ("interact":2);
+add ("insure":2);
+add ("instruct":2);
+add ("insert":2);
+add ("inherit":2);
+add ("inflict":2);
+add ("infer":2);
+add ("incur":2);
+add ("import":2);
+add ("imitate":2);
+add ("host":2);
+add ("heat":2);
+add ("glance":2);
+add ("gauge":2);
+add ("freeze":2);
+add ("foresee":2);
+add ("float":2);
+add ("file":2);
+add ("export":2);
+add ("explode":2);
+add ("evoke":2);
+add ("evade":2);
+add ("erect":2);
+add ("eradicate":2);
+add ("equip":2);
+add ("envisage":2);
+add ("enquire":2);
+add ("encompass":2);
+add ("emulate":2);
+add ("embark":2);
+add ("elicit":2);
+add ("educate":2);
+add ("edit":2);
+add ("dwell":2);
+add ("drown":2);
+add ("drain":2);
+add ("draft":2);
+add ("divorce":2);
+add ("distract":2);
+add ("distort":2);
+add ("dissolve":2);
+add ("dispense":2);
+add ("discharge":2);
+add ("discern":2);
+add ("disagree":2);
+add ("differentiate":2);
+add ("dictate":2);
+add ("detail":2);
+add ("descend":2);
+add ("deprive":2);
+add ("depart":2);
+add ("deceive":2);
+add ("debate":2);
+add ("cultivate":2);
+add ("criticize":2);
+add ("creep":2);
+add ("credit":2);
+add ("counteract":2);
+add ("cooperate":2);
+add ("contest":2);
+add ("consume":2);
+add ("conserve":2);
+add ("consent":2);
+add ("conquer":2);
+add ("congratulate":2);
+add ("conflict":2);
+add ("confine":2);
+add ("confer":2);
+add ("comprise":2);
+add ("commemorate":2);
+add ("cling":2);
+add ("classify":2);
+add ("chat":2);
+add ("chase":2);
+add ("campaign":2);
+add ("brush":2);
+add ("broaden":2);
+add ("bolster":2);
+add ("boil":2);
+add ("boast":2);
+add ("bid":2);
+add ("betray":2);
+add ("beg":2);
+add ("award":2);
+add ("await":2);
+add ("avert":2);
+add ("attribute":2);
+add ("assign":2);
+add ("articulate":2);
+add ("arouse":2);
+add ("amend":2);
+add ("alert":2);
+add ("adhere":2);
+add ("activate":2);
+add ("accuse":2);
+add ("accumulate":2);
+add ("accomplish":2);
+add ("access":2);
+add ("abide":2);
+add ("wriggle":1);
+add ("wreck":1);
+add ("wrap":1);
+add ("worship":1);
+add ("worsen":1);
+add ("wield":1);
+add ("whisper":1);
+add ("weave":1);
+add ("waive":1);
+add ("volunteer":1);
+add ("visualize":1);
+add ("visualise":1);
+add ("violate":1);
+add ("veto":1);
+add ("vanish":1);
+add ("validate":1);
+add ("utter":1);
+add ("utilise":1);
+add ("unveil":1);
+add ("unravel":1);
+add ("unlock":1);
+add ("unload":1);
+add ("undo":1);
+add ("underpin":1);
+add ("uncover":1);
+add ("twist":1);
+add ("tune":1);
+add ("tuck":1);
+add ("trip":1);
+add ("trim":1);
+add ("tremble":1);
+add ("tread":1);
+add ("transcend":1);
+add ("topple":1);
+add ("tip":1);
+add ("tidy":1);
+add ("tick":1);
+add ("thwart":1);
+add ("testify":1);
+add ("tender":1);
+add ("tease":1);
+add ("swell":1);
+add ("sweat":1);
+add ("swap":1);
+add ("survey":1);
+add ("summarize":1);
+add ("summarise":1);
+add ("suck":1);
+add ("succumb":1);
+add ("substantiate":1);
+add ("subsidise":1);
+add ("subdue":1);
+add ("stumble":1);
+add ("stuff":1);
+add ("stroke":1);
+add ("strive":1);
+add ("stray":1);
+add ("strain":1);
+add ("straighten":1);
+add ("stifle":1);
+add ("steady":1);
+add ("star":1);
+add ("starve":1);
+add ("stamp":1);
+add ("staff":1);
+add ("stabilize":1);
+add ("stabilise":1);
+add ("square":1);
+add ("sponsor":1);
+add ("spin":1);
+add ("spill":1);
+add ("specialise":1);
+add ("spawn":1);
+add ("soothe":1);
+add ("soar":1);
+add ("soak":1);
+add ("sniff":1);
+add ("sneak":1);
+add ("snatch":1);
+add ("smash":1);
+add ("skip":1);
+add ("simulate":1);
+add ("shrug":1);
+add ("shoulder":1);
+add ("shorten":1);
+add ("shore":1);
+add ("shock":1);
+add ("shield":1);
+add ("shelter":1);
+add ("shave":1);
+add ("sharpen":1);
+add ("seduce":1);
+add ("screw":1);
+add ("screen":1);
+add ("scratch":1);
+add ("scrap":1);
+add ("scrape":1);
+add ("scramble":1);
+add ("scare":1);
+add ("scan":1);
+add ("scale":1);
+add ("savour":1);
+add ("sanction":1);
+add ("salvage":1);
+add ("sack":1);
+add ("rouse":1);
+add ("rot":1);
+add ("rotate":1);
+add ("root":1);
+add ("rock":1);
+add ("rob":1);
+add ("roam":1);
+add ("rival":1);
+add ("rip":1);
+add ("rewrite":1);
+add ("revoke":1);
+add ("rethink":1);
+add ("retaliate":1);
+add ("restructure":1);
+add ("restart":1);
+add ("resort":1);
+add ("reside":1);
+add ("resent":1);
+add ("replicate":1);
+add ("reopen":1);
+add ("renounce":1);
+add ("remark":1);
+add ("relocate":1);
+add ("relish":1);
+add ("relinquish":1);
+add ("rejoin":1);
+add ("reinstate":1);
+add ("rehearse":1);
+add ("refute":1);
+add ("refine":1);
+add ("redress":1);
+add ("redeem":1);
+add ("recycle":1);
+add ("recur":1);
+add ("recreate":1);
+add ("recoup":1);
+add ("reckon":1);
+add ("recite":1);
+add ("recapture":1);
+add ("reassess":1);
+add ("reassert":1);
+add ("rear":1);
+add ("reap":1);
+add ("reappear":1);
+add ("re-open":1);
+add ("re-establish":1);
+add ("ratify":1);
+add ("rape":1);
+add ("rank":1);
+add ("quell":1);
+add ("quarrel":1);
+add ("punch":1);
+add ("pump":1);
+add ("publicise":1);
+add ("prosper":1);
+add ("prop":1);
+add ("pronounce":1);
+add ("prompt":1);
+add ("prolong":1);
+add ("prohibit":1);
+add ("procure":1);
+add ("proclaim":1);
+add ("probe":1);
+add ("privatise":1);
+add ("prise":1);
+add ("presume":1);
+add ("prejudice":1);
+add ("precipitate":1);
+add ("precede":1);
+add ("praise":1);
+add ("position":1);
+add ("poison":1);
+add ("plunge":1);
+add ("plug":1);
+add ("plough":1);
+add ("plot":1);
+add ("placate":1);
+add ("pitch":1);
+add ("pinpoint":1);
+add ("picture":1);
+add ("photograph":1);
+add ("perpetuate":1);
+add ("perfect":1);
+add ("peer":1);
+add ("overwhelm":1);
+add ("overturn":1);
+add ("overtake":1);
+add ("overlap":1);
+add ("outweigh":1);
+add ("oust":1);
+add ("omit":1);
+add ("obstruct":1);
+add ("nominate":1);
+add ("nod":1);
+add ("necessitate":1);
+add ("near":1);
+add ("navigate":1);
+add ("narrow":1);
+add ("multiply":1);
+add ("mould":1);
+add ("motivate":1);
+add ("modernise":1);
+add ("moderate":1);
+add ("model":1);
+add ("mobilize":1);
+add ("mitigate":1);
+add ("mislead":1);
+add ("mimic":1);
+add ("migrate":1);
+add ("mess":1);
+add ("merit":1);
+add ("mend":1);
+add ("mediate":1);
+add ("maximize":1);
+add ("mature":1);
+add ("mate":1);
+add ("materialise":1);
+add ("mask":1);
+add ("map":1);
+add ("manoeuvre":1);
+add ("manifest":1);
+add ("lure":1);
+add ("loose":1);
+add ("loosen":1);
+add ("lodge":1);
+add ("lobby":1);
+add ("linger":1);
+add ("lighten":1);
+add ("lick":1);
+add ("license":1);
+add ("liberate":1);
+add ("liaise":1);
+add ("levy":1);
+add ("level":1);
+add ("legislate":1);
+add ("lecture":1);
+add ("labour":1);
+add ("label":1);
+add ("jeopardise":1);
+add ("jail":1);
+add ("iron":1);
+add ("intrude":1);
+add ("intimidate":1);
+add ("intercept":1);
+add ("intensify":1);
+add ("instil":1);
+add ("inquire":1);
+add ("injure":1);
+add ("inject":1);
+add ("impede":1);
+add ("impart":1);
+add ("impair":1);
+add ("illuminate":1);
+add ("hook":1);
+add ("heed":1);
+add ("haunt":1);
+add ("haul":1);
+add ("hasten":1);
+add ("harness":1);
+add ("harden":1);
+add ("harbour":1);
+add ("hammer":1);
+add ("grip":1);
+add ("grind":1);
+add ("grieve":1);
+add ("glimpse":1);
+add ("generalize":1);
+add ("generalise":1);
+add ("gaze":1);
+add ("furnish":1);
+add ("fuck":1);
+add ("frustrate":1);
+add ("frame":1);
+add ("forgo":1);
+add ("forge":1);
+add ("forestall":1);
+add ("forecast":1);
+add ("fool":1);
+add ("fold":1);
+add ("flush":1);
+add ("flower":1);
+add ("flood":1);
+add ("flash":1);
+add ("filter":1);
+add ("fend":1);
+add ("fathom":1);
+add ("fast":1);
+add ("fashion":1);
+add ("faint":1);
+add ("expire":1);
+add ("expel":1);
+add ("excite":1);
+add ("exaggerate":1);
+add ("evacuate":1);
+add ("escort":1);
+add ("equate":1);
+add ("envy":1);
+add ("entitle":1);
+add ("entice":1);
+add ("ensue":1);
+add ("enrich":1);
+add ("enlist":1);
+add ("enlarge":1);
+add ("endeavour":1);
+add ("endanger":1);
+add ("enclose":1);
+add ("enact":1);
+add ("empty":1);
+add ("emigrate":1);
+add ("embody":1);
+add ("embarrass":1);
+add ("elucidate":1);
+add ("elaborate":1);
+add ("echo":1);
+add ("dust":1);
+add ("dump":1);
+add ("duck":1);
+add ("drill":1);
+add ("donate":1);
+add ("dodge":1);
+add ("document":1);
+add ("dive":1);
+add ("diversify":1);
+add ("dissuade":1);
+add ("disregard":1);
+add ("dispute":1);
+add ("displace":1);
+add ("disperse":1);
+add ("dispel":1);
+add ("dismantle":1);
+add ("dislodge":1);
+add ("dislike":1);
+add ("disentangle":1);
+add ("discredit":1);
+add ("discount":1);
+add ("discipline":1);
+add ("discard":1);
+add ("disarm":1);
+add ("disappoint":1);
+add ("dip":1);
+add ("dine":1);
+add ("digest":1);
+add ("diagnose":1);
+add ("detract":1);
+add ("deteriorate":1);
+add ("detain":1);
+add ("detach":1);
+add ("despise":1);
+add ("despair":1);
+add ("desire":1);
+add ("designate":1);
+add ("desert":1);
+add ("depress":1);
+add ("deposit":1);
+add ("deploy":1);
+add ("depict":1);
+add ("denounce":1);
+add ("denote":1);
+add ("demolish":1);
+add ("delight":1);
+add ("delete":1);
+add ("delegate":1);
+add ("defy":1);
+add ("defuse":1);
+add ("defraud":1);
+add ("deflect":1);
+add ("defer":1);
+add ("deepen":1);
+add ("deduce":1);
+add ("decorate":1);
+add ("decipher":1);
+add ("decay":1);
+add ("dash":1);
+add ("curtail":1);
+add ("curl":1);
+add ("crush":1);
+add ("crumble":1);
+add ("crawl":1);
+add ("crash":1);
+add ("correlate":1);
+add ("coordinate":1);
+add ("convict":1);
+add ("convene":1);
+add ("contrast":1);
+add ("contradict":1);
+add ("constrain":1);
+add ("conjure":1);
+add ("confide":1);
+add ("compose":1);
+add ("complicate":1);
+add ("compile":1);
+add ("compel":1);
+add ("commission":1);
+add ("commend":1);
+add ("colour":1);
+add ("collaborate":1);
+add ("clinch":1);
+add ("cite":1);
+add ("circumvent":1);
+add ("circulate":1);
+add ("choke":1);
+add ("chew":1);
+add ("cheat":1);
+add ("chart":1);
+add ("characterize":1);
+add ("characterise":1);
+add ("channel":1);
+add ("chair":1);
+add ("carve":1);
+add ("capitalise":1);
+add ("camp":1);
+add ("bypass":1);
+add ("bump":1);
+add ("budge":1);
+add ("browse":1);
+add ("broadcast":1);
+add ("brighten":1);
+add ("breach":1);
+add ("boycott":1);
+add ("bow":1);
+add ("bowl":1);
+add ("bounce":1);
+add ("boot":1);
+add ("bomb":1);
+add ("board":1);
+add ("blind":1);
+add ("blend":1);
+add ("beware":1);
+add ("bat":1);
+add ("battle":1);
+add ("bar":1);
+add ("bargain":1);
+add ("banish":1);
+add ("average":1);
+add ("avail":1);
+add ("authorise":1);
+add ("augment":1);
+add ("assimilate":1);
+add ("aspire":1);
+add ("appropriate":1);
+add ("applaud":1);
+add ("appease":1);
+add ("apologize":1);
+add ("annoy":1);
+add ("anger":1);
+add ("amuse":1);
+add ("allay":1);
+add ("alienate":1);
+add ("affirm":1);
+add ("advocate":1);
+add ("accrue":1);
+add ("accord":1);
+add ("abuse":1);
+
+
+--
+-- auxiliary.dst sentence forms
+create auxiliaries;
+set types = (varchar);
+set weights = 1;
+add ("will": 2);
+add ("will not": 1);
+add ("shall": 2);
+add ("shall not": 1);
+add ("may": 2);
+add ("may not": 1);
+add ("might": 2);
+add ("might not": 1);
+add ("can": 2);
+add ("cannot": 1);
+add ("could": 2);
+add ("could not": 1);
+add ("must": 2);
+add ("must not": 1);
+add ("ought to": 2);
+add ("used to": 2);
+add ("should": 2);
+add ("should not": 1);
+add ("would": 2);
+add ("would not": 1);
+
+
+--
+-- terminator.dst
+create terminators;
+set types = (varchar);
+set weights = 1;
+add (".": 10);
+add ("\;": 2);
+add (" --": 1);
+add (":": 1);
+
+
+--
+-- sentences.dst sentence forms
+create sentences;
+set types = (varchar);
+set weights = 1;
+add ("N VT": 1);
+add ("J N VT": 1);
+add ("J, J N VT": 1);
+add ("D J N VT": 1);
+add ("N X VT": 1);
+add ("J N X VT": 1);
+add ("J, J N X VT": 1);
+add ("D J N X VT": 1);
+add ("N V DT": 1);
+add ("J N V DT": 1);
+add ("J, J N V DT": 1);
+add ("D J N V DT": 1);
+add ("N X V DT": 1);
+add ("J N X V DT": 1);
+add ("J, J N X V DT": 1);
+add ("D J N X V DT": 1);
+add ("N V P A NT": 1);
+add ("J N V P A NT": 1);
+add ("J, J N V P A NT": 1);
+add ("D J N V P A NT": 1);
+add ("N X V P A NT": 1);
+add ("J N X V P A NT": 1);
+add ("J, J N X V P A NT": 1);
+add ("D J N X V P A NT": 1);
+add ("N V D P A NT": 1);
+add ("J N V D P A NT": 1);
+add ("J, J N V D P A NT": 1);
+add ("D J N V D P A NT": 1);
+add ("N X V D P A NT": 1);
+add ("J N X V D P A NT": 1);
+add ("J, J N X V D P A NT": 1);
+add ("D J N X V D P A NT": 1);
+add ("N V NT": 1);
+add ("J N V NT": 1);
+add ("J, J N V NT": 1);
+add ("D J N V NT": 1);
+add ("N X V NT": 1);
+add ("J N X V NT": 1);
+add ("J, J N X V NT": 1);
+add ("D J N X V NT": 1);
+add ("N V D NT": 1);
+add ("J N V D NT": 1);
+add ("J, J N V D NT": 1);
+add ("D J N V D NT": 1);
+add ("N X V D NT": 1);
+add ("J N X V D NT": 1);
+add ("J, J N X V D NT": 1);
+add ("D J N X V D NT": 1);
+add ("N V J NT": 1);
+add ("J N V J NT": 1);
+add ("J, J N V J NT": 1);
+add ("D J N V J NT": 1);
+add ("N X V J NT": 1);
+add ("J N X V J NT": 1);
+add ("J, J N X V J NT": 1);
+add ("D J N X V J NT": 1);
+add ("N V D J NT": 1);
+add ("J N V D J NT": 1);
+add ("J, J N V D J NT": 1);
+add ("D J N V D J NT": 1);
+add ("N X V D J NT": 1);
+add ("J N X V D J NT": 1);
+add ("J, J N X V D J NT": 1);
+add ("D J N X V D J J NT": 1);
+add ("N V J, J NT": 1);
+add ("J N V J, J NT": 1);
+add ("J, J N V J, J NT": 1);
+add ("D J N V J, J NT": 1);
+add ("N X V J, J NT": 1);
+add ("J N X V J, J NT": 1);
+add ("J, J N X V J, J NT": 1);
+add ("D J N X V J, J NT": 1);
+add ("N V D J, J NT": 1);
+add ("J N V D J, J NT": 1);
+add ("J, J N V D J, J NT": 1);
+add ("D J N V D J, J NT": 1);
+add ("N X V D J, J NT": 1);
+add ("J N X V D J, J NT": 1);
+add ("J, J N X V D J, J NT": 1);
+add ("D J N X V D J, J NT": 1);
+add ("N V D J NT": 1);
+add ("J N V D J NT": 1);
+add ("J, J N V D J NT": 1);
+add ("D J N V D J NT": 1);
+add ("N X V D J NT": 1);
+add ("J N X V D J NT": 1);
+add ("J, J N X V D J NT": 1);
+add ("D J N X V D J NT": 1);
+add ("N V D D J NT": 1);
+add ("J N V D D J NT": 1);
+add ("J, J N V D D J NT": 1);
+add ("D J N V D D J NT": 1);
+add ("N X V D D J NT": 1);
+add ("J N X V D D J NT": 1);
+add ("J, J N X V D D J NT": 1);
+add ("D J N X V D D J NT": 1);
+
+
+
+--
+-- syllables.dst
+create syllables;
+set types = (varchar);
+set weights = 1;
+add ("bar":1);
+add ("ought":1);
+add ("able":1);
+add ("pri":1);
+add ("ese":1);
+add ("anti":1);
+add ("cally":1);
+add ("ation":1);
+add ("eing":1);
+add ("n st":1);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.c b/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.c
new file mode 100644
index 000000000000..ffd9c5a94b2f
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.c
@@ -0,0 +1,241 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "error_msg.h"
+#include "grammar_support.h"
+static int *LN;
+static char *FN;
+
+err_msg_t Errors[MAX_ERROR + 2] = {
+ {EFLG_NO_ARG, "", },
+ {EFLG_STR_ARG, "File '%s' not found"},
+ {EFLG_NO_ARG, "Line exceeds maximum length"},
+ {EFLG_STR_ARG, "Memory allocation failed %s"},
+ {EFLG_STR_ARG, "Syntax Error: \n'%s'"},
+ {EFLG_NO_ARG, "Invalid/Out-of-range Argument"},
+ {EFLG_STR_ARG, "'%s' is not a unique name"},
+ {EFLG_STR_ARG, "'%s' is not a valid name"},
+ {EFLG_NO_ARG, "Command parse failed"},
+ {EFLG_NO_ARG, "Invalid tag found"},
+ {EFLG_STR_ARG, "Read failed on '%s'"},
+ {EFLG_NO_ARG, "Too Many Templates!"},
+ {EFLG_NO_ARG, "Each workload definition must be in its own file"},
+ {EFLG_NO_ARG, "Query Class name must be unique within a workload definition"},
+ {EFLG_NO_ARG, "Query Template must be unique within a query class"},
+ {EFLG_STR_ARG|EFLG_SYSTEM, "Open failed on '%s'"},
+ {EFLG_STR_ARG, "%s not yet implemented"}, /* QERR_NOT_IMPLEMENTED */
+ {EFLG_STR_ARG, "string trucated to '%s'"},
+ {EFLG_NO_ARG, "Non-terminated string"},
+ {EFLG_STR_ARG, "failed to write to '%s'"},
+ {EFLG_NO_ARG, "No type vector defined for distribution"},
+ {EFLG_NO_ARG, "No weight count defined for distribution"},
+ {EFLG_NO_ARG, "No limits defined for pricing calculations"},
+ {EFLG_STR_ARG, "Percentage is out of bounds in substitution '%s'"},
+ {EFLG_STR_ARG, "Name is not a distribution or table name: '%s'"},
+ {EFLG_NO_ARG, "Cannot evaluate expression"},
+ {EFLG_STR_ARG, "Substitution'%s' is used before being initialized"}, /* QERR_NO_INIT */
+ {EFLG_NO_ARG, "RANGE()/LIST()/ULIST() not supported for NORMAL distributions"},
+ {EFLG_STR_ARG, "Bad Nesting; '%s' not found"},
+ {EFLG_STR_ARG, "Include stack overflow when opening '%s'"},
+ {EFLG_STR_ARG, "Bad function call: '%s'"},
+ {EFLG_STR_ARG, "Bad Hierarchy Call: '%s'"},
+ {EFLG_NO_ARG, "Must set types and weights before defining names"},
+ {EFLG_NO_ARG, "More than 20 arguments in definition"},
+ {EFLG_NO_ARG, "Argument type mismatch"},
+ {EFLG_NO_ARG, "RANGE()/LIST()/ULIST() cannot be used in the same expression"}, /* QERR_RANGE_LIST */
+ {EFLG_NO_ARG, "Selected scale factor is NOT valid for result publication"},
+ {EFLG_STR_ARG, "Parameter setting failed for '%s'"},
+ {EFLG_STR_ARG, "Table %s is being joined without an explicit rule"},
+ {EFLG_STR_ARG, "Table %s is not yet fully defined"},
+ {EFLG_STR_ARG, "Table %s is a child; it is populated during the build of its parent (e.g., catalog_sales builds catalog returns)"},
+ {EFLG_NO_ARG, "Command line arguments for dbgen_version exceed 200 characters; truncated"},
+ {EFLG_NO_ARG, "A query template list must be supplied using the INPUT option"}, /* QERR_NO_QUERYLIST */
+ {EFLG_NO_ARG, "Invalid query number found in permutation!"}, /* QERR_QUERY_RANGE */
+ {EFLG_NO_ARG, "RANGE/LIST/ULIST expressions not valid as function parameters"}, /* QERR_MODIFIED_PARAM */
+ {EFLG_NO_ARG, "RANGE/LIST/ULIST truncated to available values"}, /* QERR_MODIFIED_PARAM */
+ {EFLG_NO_ARG, "This scale factor is valid for QUALIFICATION ONLY"}, /* QERR_QUALIFICATION_SCALE */
+ {EFLG_STR_ARG, "Generating %s requires the '-update' option"}, /* QERR_TABLE_UPDATE */
+ {0, NULL}
+};
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+ProcessErrorCode (int nErrorCode, char *szRoutineName, char *szParam,
+ int nParam)
+{
+ switch (nErrorCode)
+ {
+ case QERR_NO_FILE:
+ ReportError (QERR_NO_FILE, szParam, 1);
+ break;
+ case QERR_SYNTAX:
+ case QERR_RANGE_ERROR:
+ case QERR_NON_UNIQUE:
+ case QERR_BAD_NAME:
+ case QERR_DEFINE_OVERFLOW:
+ case QERR_INVALID_TAG:
+ case QERR_READ_FAILED:
+ case QERR_NO_MEMORY:
+ case QERR_LINE_TOO_LONG:
+ ReportError (nErrorCode, szRoutineName, 1);
+ break;
+ }
+ return;
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ReportError (int nError, char *msg, int bExit)
+{
+ char e_msg[128];
+
+ if (nError < MAX_ERROR)
+ {
+ switch (Errors[-nError].flags & EFLG_ARG_MASK)
+ {
+ case EFLG_NO_ARG:
+ fprintf (stderr, "ERROR: %s at line %d in %s\n",
+ Errors[-nError].prompt, pCurrentFile->line_number, pCurrentFile->name);
+ break;
+ case EFLG_STR_ARG:
+ sprintf (e_msg, Errors[-nError].prompt, msg);
+ fprintf (stderr, "ERROR: %s at line %d in %s\n",
+ e_msg, pCurrentFile->line_number, pCurrentFile->name);
+ break;
+ }
+
+ if (Errors[-nError].flags & EFLG_SYSTEM)
+ perror (msg);
+ }
+
+ if (bExit)
+ exit (nError);
+ else
+ return (nError);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ReportErrorNoLine (int nError, char *msg, int bExit)
+{
+ char e_msg[1024];
+
+ if (nError < MAX_ERROR)
+ {
+ switch (Errors[-nError].flags & EFLG_ARG_MASK)
+ {
+ case EFLG_NO_ARG:
+ fprintf (stderr, "%s: %s\n", (bExit)?"ERROR":"Warning", Errors[-nError].prompt);
+ break;
+ case EFLG_STR_ARG:
+ sprintf (e_msg, Errors[-nError].prompt, msg);
+ fprintf (stderr, "%s: %s\n", (bExit)?"ERROR":"Warning", e_msg);
+ break;
+ }
+
+ if (Errors[-nError].flags & EFLG_SYSTEM)
+ perror (msg);
+ }
+
+ if (bExit)
+ exit (nError);
+ else
+ return (nError);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+SetErrorGlobals (char *szFileName, int *nLineNumber)
+{
+ FN = szFileName;
+ LN = nLineNumber;
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.h b/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.h
new file mode 100644
index 000000000000..bd2e34b4bc4c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/error_msg.h
@@ -0,0 +1,102 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#define QERR_OK 0
+#define QERR_NO_FILE -1
+#define QERR_LINE_TOO_LONG -2
+#define QERR_NO_MEMORY -3
+#define QERR_SYNTAX -4
+#define QERR_RANGE_ERROR -5
+#define QERR_NON_UNIQUE -6
+#define QERR_BAD_NAME -7
+#define QERR_DEFINE_OVERFLOW -8
+#define QERR_INVALID_TAG -9
+#define QERR_READ_FAILED -10
+#define QERR_TEMPLATE_OVERFLOW -11
+#define QERR_ONE_WORKLOAD -12
+#define QERR_CLASS_REDEFINE -13
+#define QERR_DUP_QUERY -14
+#define QERR_OPEN_FAILED -15
+#define QERR_NOT_IMPLEMENTED -16
+#define QERR_STR_TRUNCATED -17
+#define QERR_BAD_STRING -18
+#define QERR_WRITE_FAILED -19
+#define QERR_NO_TYPE -20
+#define QERR_NO_WEIGHT -21
+#define QERR_NO_LIMIT -22
+#define QERR_BAD_PERCENT -23
+#define QERR_ROWCOUNT_NAME -24
+#define QERR_NO_EXPR -25
+#define QERR_NO_INIT -26
+#define QERR_NO_NORMAL_RANGE -27
+#define QERR_UNBALANCED -28
+#define QERR_INCLUDE_OVERFLOW -29
+#define QERR_BAD_PARAMS -30
+#define DBGEN_ERROR_HIERACHY_ORDER -31
+#define QERR_NAMES_EARLY -32
+#define QERR_ARG_OVERFLOW -33
+#define QERR_INVALID_ARG -34
+#define QERR_RANGE_LIST -35
+#define QERR_BAD_SCALE -36
+#define QERR_BAD_PARAM -37
+#define QERR_BAD_JOIN -38
+#define QERR_TABLE_NOP -39
+#define QERR_TABLE_CHILD -40
+#define QERR_CMDLINE_TOO_LONG -41
+#define QERR_NO_QUERYLIST -42
+#define QERR_QUERY_RANGE -43
+#define QERR_MODIFIED_PARAM -44
+#define QERR_RANGE_OVERRUN -45
+#define QERR_QUALIFICATION_SCALE -46
+#define QERR_TABLE_UPDATE -47
+#define MAX_ERROR 47
+
+typedef struct ERR_MSG_T {
+ int flags;
+ char *prompt;
+} err_msg_t;
+
+/* Flag determine formating */
+#define EFLG_NO_ARG 0x0000
+#define EFLG_STR_ARG 0x0001
+#define EFLG_ARG_MASK 0x0001
+
+#define EFLG_SYSTEM 0x0002
+
+
+
+int ReportError(int nError, char *arg, int bExit);
+int ReportErrorNoLine(int nError, char *arg, int bExit);
+void SetErrorGlobals(char *szFileName, int *pnLineNumber);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/eval.c b/ydb/library/benchmarks/gen/tpcds-dbgen/eval.c
new file mode 100644
index 000000000000..6c4aebbc69b7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/eval.c
@@ -0,0 +1,886 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "eval.h"
+#include "expr.h"
+#include "substitution.h"
+#include "error_msg.h"
+#include "tdefs.h"
+#include "tables.h"
+#include "build_support.h"
+#include "scaling.h"
+#include "y.tab.h"
+#include "permute.h"
+#include "keywords.h"
+#include "permute.h"
+#include "dcomp.h"
+#include "StringBuffer.h"
+
+extern int g_nQueryNumber, g_nStreamNumber;
+extern StringBuffer_t *g_sbTemplateName;
+
+/*
+* Routine: void EvalArithmetic()
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+*/
+int
+EvalArithmetic(expr_t *pExpr, Expr_Val_t *pValue, Expr_Val_t *pParams)
+{
+ int nOp;
+ char szInteger[16];
+
+ nOp = (int)pExpr->Value.nValue;
+
+ switch(nOp)
+ {
+ case OP_ADD:
+ if (pParams[0].bUseInt & pParams[1].bUseInt)
+ {
+ pValue->bUseInt = 1;
+ pValue->nValue = pParams[0].nValue + pParams[1].nValue;
+ }
+ else
+ {
+ pValue->bUseInt = 0;
+ if (pParams[0].bUseInt)
+ {
+ sprintf(szInteger, HUGE_FORMAT, pParams[0].nValue);
+ AddBuffer(pValue->pBuf, szInteger);
+ }
+ else
+ AddBuffer(pValue->pBuf, GetBuffer(pParams[0].pBuf));
+ if (pParams[1].bUseInt)
+ {
+ sprintf(szInteger, HUGE_FORMAT, pParams[1].nValue);
+ AddBuffer(pValue->pBuf, szInteger);
+ }
+ else
+ AddBuffer(pValue->pBuf, GetBuffer(pParams[1].pBuf));
+ }
+ break;
+ case OP_SUBTRACT:
+ pValue->bUseInt = 1;
+ pValue->nValue = pParams[0].nValue - pParams[1].nValue;
+ break;
+ case OP_MULTIPLY:
+ pValue->bUseInt = 1;
+ pValue->nValue = pParams[0].nValue * pParams[1].nValue;
+ break;
+ case OP_DIVIDE:
+ pValue->bUseInt = 1;
+ pValue->nValue = pParams[0].nValue / pParams[1].nValue;
+ break;
+ }
+
+ return(pValue->bUseInt?DT_INT:DT_STR);
+}
+
+/*
+* Routine: void EvalTextExpr(expr_t *pExpr)
+* Purpose: set the values to be used to replace a given tag for this query generation
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+*/
+int
+EvalTextExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam)
+{
+ int i,
+ j,
+ nWeightTotal = 0,
+ nModifierArg;
+ expr_t *pReplacement;
+
+ switch (pExpr->nFlags & EXPR_FL_SUFFIX_MASK)
+ {
+ case EXPR_FL_LIST: /* return a set of values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[1].nValue;
+ for (i=0; i < nModifierArg; i++)
+ {
+ genrand_integer(&j, DIST_UNIFORM, 1, length(pExpr->ArgList), 0, 0);
+ pReplacement = getItem(pExpr->ArgList, j);
+ AddBuffer(pBuf[i].pBuf, GetBuffer(pReplacement->Value.pBuf));
+ pBuf[i].bUseInt = 0;
+ }
+ break;
+ case EXPR_FL_ULIST: /* return a unique set of values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[1].nValue;
+ pExpr->pPermute = makePermutation(pExpr->pPermute, length(pExpr->ArgList) - 1, 0);
+ for (i=0; i < nModifierArg; i++)
+ {
+ pReplacement = getItem(pExpr->ArgList, getPermutationEntry(pExpr->pPermute, i + 1));
+ AddBuffer(pBuf[i].pBuf, GetBuffer(pReplacement->Value.pBuf));
+ pBuf[i].bUseInt = 0;
+ }
+ break;
+ case EXPR_FL_RANGE:
+ case EXPR_FL_RANGE|EXPR_FL_LIST: /* only list() is permissible here */
+ case EXPR_FL_RANGE|EXPR_FL_ULIST: /* only list() is permissible here */
+ case EXPR_FL_LIST|EXPR_FL_ULIST: /* only list() is permissible here */
+ ReportError(QERR_RANGE_LIST, NULL, 1);
+ break;
+ default:
+ /* 1. find a substitution from the weighted distribtuion */
+ for (pReplacement = (expr_t *)getHead(pExpr->ArgList);
+ pReplacement;
+ pReplacement = (expr_t *)getNext(pExpr->ArgList))
+ nWeightTotal += (int)pReplacement->Value.nValue;
+ i = genrand_integer(NULL, DIST_UNIFORM, 1, nWeightTotal, 0, 0);
+ for (pReplacement = (expr_t *)getHead(pExpr->ArgList);
+ pReplacement;
+ pReplacement = (expr_t *)getNext(pExpr->ArgList))
+ {
+ if (i <= (int)pReplacement->Value.nValue)
+ break;
+ i -= (int)pReplacement->Value.nValue;
+ }
+
+ /* 2. get the appropraite string */
+ AddBuffer(pBuf->pBuf, GetBuffer(pReplacement->Value.pBuf));
+ break;
+ }
+
+ return(DT_STR);
+}
+
+
+/*
+* Routine: int EvalRandomExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam)
+* Purpose: set the values to be used to replace a given tag for this query generation
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+EvalRandomExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam)
+{
+ ds_key_t nMin,
+ nMax,
+ nTotal,
+ nTemp;
+ int nModifierArg,
+ i,
+ nDirection,
+ nDistribution;
+
+ nMin = pParams->nValue;
+ nMax = pParams[1].nValue;
+ nDistribution = (int)pParams[2].nValue;
+
+ switch (pExpr->nFlags & EXPR_FL_SUFFIX_MASK)
+ {
+ case EXPR_FL_LIST: /* return a set of unique values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+ for (i = 0; i < nModifierArg; i++)
+ {
+ genrand_key(&nTemp, DIST_UNIFORM, nMin, nMax, 0, 0);
+ pBuf[i].nValue = (nTemp % (nMax - nMin + 1)) + nMin;
+ pBuf[i].bUseInt = 1;
+ }
+ break;
+ case EXPR_FL_ULIST: /* return a set of unique values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+ pExpr->pPermuteKey = makeKeyPermutation(pExpr->pPermuteKey, nMax - nMin + 1, 0);
+ /*
+ * the permutation is controlled by the number of values that are needed
+ * once it is populated, than adjust the returned result based on the range of values that is permissible
+ */
+ for (i = 0; i < nModifierArg; i++)
+ {
+ pBuf[i].nValue = (getPermutationEntry(pExpr->pPermuteKey, i + 1) % (nMax - nMin + 1)) + nMin;
+ pBuf[i].bUseInt = 1;
+ }
+ break;
+ case EXPR_FL_RANGE: /* return end points of a range */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+
+ genrand_key(&nTemp, DIST_UNIFORM, nMin, nMax, nDistribution, 0);
+ pBuf->nValue = nTemp;
+ pBuf->bUseInt = 1;
+ pBuf[1].nValue = pBuf->nValue;
+ pBuf[1].bUseInt = 1;
+
+ nDirection = 1;
+ nTotal = nMax - nMin;
+ nTotal *= nModifierArg;
+ nTotal /= 100;
+
+ while (nTotal)
+ {
+ if (nDirection == 1)
+ {
+ pBuf[1].nValue += 1;
+ nTotal -= 1;
+ if (pBuf[1].nValue == nMax)
+ nDirection = -1;
+ }
+ else
+ {
+ pBuf->nValue -= 1;
+ nTotal -= 1;
+ }
+ }
+ break;
+ case EXPR_FL_RANGE|EXPR_FL_LIST: /* cannot use them both */
+ case EXPR_FL_RANGE|EXPR_FL_ULIST: /* cannot use them both */
+ case EXPR_FL_LIST|EXPR_FL_ULIST: /* cannot use them both */
+ ReportError(QERR_RANGE_LIST, NULL, 1);
+ break;
+ default:
+ genrand_key(&nTemp, DIST_UNIFORM, nMin, nMax, nDistribution, 0);
+ pBuf->nValue = nTemp;
+ pBuf->bUseInt = 1;
+ break;
+ }
+
+
+ return(DT_INT);
+}
+
+/*
+* Routine: EvalRownCountExpr(expr_t *pExpr, StringBuffer_t *pBuf);
+* Purpose: set the values to be used to replace a given tag for this query generation
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+EvalRownCountExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams)
+{
+ char szBuf[20],
+ szTable[40],
+ *szName;
+ int i;
+
+ szName = GetBuffer(pParams->pBuf);
+
+ if (pExpr->nFlags & EXPR_FL_TABLENAME)
+ {
+ for (i=1; i <= distsize("rowcounts"); i++)
+ {
+ dist_member(szTable, "rowcounts", i, 1);
+ if (strcasecmp(szTable, szName) == 0)
+ break;
+ }
+ if (i > distsize("rowcounts"))
+ ReportError(QERR_BAD_NAME, szName, 1);
+ sprintf(szBuf, HUGE_FORMAT, get_rowcount(i));
+ }
+ else
+ sprintf(szBuf, "%d", distsize(szName));
+ AddBuffer(pBuf->pBuf, szBuf);
+
+ return(DT_INT);
+}
+
+/*
+* Routine: EvalDistopExpr(expr_t *pExpr, StringBuffer_t *pBuf);
+* Purpose: set the values to be used to replace a given tag for this query generation
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+EvalDistExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam)
+{
+ char *szName,
+ *pChar = NULL;
+ int nRow,
+ nCol,
+ nDataType,
+ nOffset,
+ nModifierArg,
+ i, j,
+ nCount,
+ nTemp;
+
+ szName = GetBuffer(pParams->pBuf);
+ if (pParams[1].bUseInt)
+ nRow = (int)pParams[1].nValue;
+ else
+ nRow = DistNameIndex(szName, VALUE_NAME, GetBuffer(pParams[1].pBuf));
+ if (pParams[2].bUseInt)
+ nCol = (int)pParams[2].nValue;
+ else
+ nCol = DistNameIndex(szName, WEIGHT_NAME, GetBuffer(pParams[2].pBuf));
+
+ switch(pExpr->Value.nValue)
+ {
+ case KW_DISTMEMBER:
+ nDataType =
+ (dist_type(szName, nCol) == TKN_INT)?DT_INT:DT_STR;
+ if (nDataType == DT_STR)
+ {
+ dist_member(&pChar, szName, nRow, nCol);
+ AddBuffer(pBuf->pBuf, pChar);
+ }
+ else
+ {
+ dist_member(&nTemp, szName, nRow, nCol);
+ pBuf->nValue = nTemp;
+ pBuf->bUseInt = 1;
+ }
+ break;
+ case KW_DISTWEIGHT:
+ dist_weight(&nTemp, szName, nRow, nCol);
+ pBuf->nValue = nTemp;
+ pBuf->bUseInt = 1;
+ nDataType = DT_INT;
+ break;
+ default: /* regular call to DIST() */
+ nDataType = (dist_type(szName, nRow) == TKN_INT)?DT_INT:DT_STR;
+ switch (pExpr->nFlags & EXPR_FL_SUFFIX_MASK)
+ {
+ case EXPR_FL_RANGE:
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+ i = pick_distribution(NULL, szName, nRow, nCol, 0);
+ nOffset = IntegrateDist(szName, nModifierArg, i, nCol);
+ if (nDataType == DT_INT)
+ {
+ pBuf->bUseInt = 1;
+ dist_member(&nTemp, szName, i, nRow);
+ pBuf->nValue = nTemp;
+ dist_member(&nTemp, szName, nOffset, nRow);
+ pBuf[1].nValue = nTemp;
+ }
+ else
+ {
+ dist_member(pChar, szName, i, nRow);
+ AddBuffer(pBuf->pBuf, pChar);
+ dist_member(pChar, szName, nOffset, nRow);
+ AddBuffer(pBuf[1].pBuf, pChar);
+ }
+ break;
+ case EXPR_FL_LIST:
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+
+ /* pick n entries */
+ for (i=1; i <= nModifierArg; i++)
+ {
+ genrand_integer(&j, DIST_UNIFORM, 1, distsize(szName), 0, 0);
+ if (nDataType == DT_INT)
+ {
+ pBuf[i - 1].bUseInt = 1;
+ dist_member(&pBuf[i - 1].nValue, szName, j, nRow);
+ }
+ else
+ {
+ dist_member(&pChar, szName, j, nRow);
+ AddBuffer(pBuf[i - 1].pBuf, pChar);
+ }
+ }
+ break;
+ case EXPR_FL_ULIST: /* exclude duplicates from the returned list */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = (int)pParams[3].nValue;
+
+ /* permute it */
+ if (nModifierArg > distsize(szName))
+ ReportError(QERR_RANGE_ERROR, "", 1);
+ if (!(pExpr->pPermute = makePermutation(pExpr->pPermute, distsize(szName), 0)))
+ ReportError(QERR_RANGE_ERROR, NULL, 1);
+
+ /* get n unique entries */
+ nCount = 0;
+ i = 1;
+ while (nCount < nModifierArg)
+ {
+ if (nDataType == DT_INT)
+ {
+ /* integers can rely on implicit uniqueness within the permutation */
+ pBuf[nCount].bUseInt = 1;
+ dist_member(&pBuf[nCount].nValue, szName, getPermutationEntry(pExpr->pPermute, i), nRow);
+ i += 1;
+ nCount += 1;
+ }
+ else
+ {
+ /*
+ * for string values, a permutation alone doesn't assure uniqueness. Keep picking until
+ * there are no duplicates
+ */
+ dist_member(&pChar, szName, getPermutationEntry(pExpr->pPermute, i++), nRow);
+ j = 0;
+ while (nCount && (j < nCount))
+ {
+ for (j=0; j < nCount; j++)
+ if (strcmp(GetBuffer(pBuf[j].pBuf), pChar) == 0)
+ {
+ dist_member(&pChar, szName, getPermutationEntry(pExpr->pPermute, i++), nRow);
+ break;
+ }
+ }
+ AddBuffer(pBuf[nCount].pBuf, pChar);
+ nCount += 1;
+ }
+ }
+ break;
+ case EXPR_FL_LIST | EXPR_FL_RANGE:
+ case EXPR_FL_ULIST | EXPR_FL_RANGE:
+ case EXPR_FL_ULIST | EXPR_FL_LIST:
+ ReportError(QERR_RANGE_LIST, NULL, 1);
+ break;
+ default:
+ if (nDataType == DT_STR)
+ {
+ pick_distribution(&pChar, szName, nRow, nCol, 0);
+ AddBuffer(pBuf->pBuf, pChar);
+ }
+ else
+ {
+ pick_distribution(&nTemp, szName, nRow, nCol, 0);
+ pBuf->nValue = nTemp;
+ pBuf->bUseInt = 1;
+ }
+ break;
+ } /* end of generic DIST() switch case */
+ break;
+ }
+
+ return(nDataType);
+}
+
+
+/*
+* Routine: void EvalDateExpr(expr_t *pExpr, StringBuffer_t *pBuf)
+* Purpose: set the values to be used to replace a given tag for this query generation
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+int
+EvalDateExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam)
+{
+ date_t dBegin,
+ dEnd,
+ dResult;
+ int nDay,
+ nDay2,
+ nDistributionType,
+ nModifierArg,
+ i, j,
+ *pPermute = NULL,
+ nTotal = 0,
+ nDirection;
+
+ /* pull the parameters from pParams */
+ strtodt(&dBegin, GetBuffer(pParams->pBuf));
+ strtodt(&dEnd, GetBuffer(pParams[1].pBuf));
+ nDistributionType = pParams[2].nValue;
+
+ /* and then check to see if more are required */
+ switch (pExpr->nFlags & EXPR_FL_SUFFIX_MASK)
+ {
+ case EXPR_FL_LIST: /* return a set of values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = pParams[3].nValue;
+ nTotal = dEnd.julian - dBegin.julian;
+ if (nModifierArg > nTotal)
+ {
+ nModifierArg = nTotal;
+ ReportError(QERR_RANGE_OVERRUN, NULL, 0);
+ }
+ for (i=0; i < nModifierArg; i++)
+ {
+ genrand_integer(&j, DIST_UNIFORM, 1, nTotal, 0, 0);
+ jtodt(&dResult, dBegin.julian + j - 1);
+ AddBuffer(pBuf[i].pBuf, dttostr(&dResult));
+ }
+ break;
+ case EXPR_FL_ULIST: /* return a unique set of values */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = pParams[3].nValue;
+ i = dBegin.julian - dBegin.julian;
+ if (nModifierArg > i)
+ {
+ nModifierArg = i;
+ ReportError(QERR_RANGE_OVERRUN, NULL, 0);
+ pPermute = makePermutation(pPermute, i, 0);
+ }
+ for (i=0; i < nModifierArg; i++)
+ {
+ jtodt(&dResult, dBegin.julian + getPermutationEntry(pPermute, i + 1) - 1);
+ AddBuffer(pBuf[i].pBuf, dttostr(&dBegin));
+ }
+ free(pPermute);
+ break;
+ case EXPR_FL_RANGE: /* return end points of a range */
+ if (bIsParam)
+ ReportError(QERR_MODIFIED_PARAM, NULL, 1);
+ nModifierArg = pParams[3].nValue;
+
+ for (i=dBegin.julian; i < dEnd.julian; i++)
+ nTotal += getDateWeightFromJulian(i, nDistributionType);
+ nTotal *= nModifierArg;
+ nTotal /= 100;
+
+ genrand_date(&dResult, nDistributionType, &dBegin, &dEnd, NULL, 0);
+ nDay = dResult.julian;
+ nDay2 = nDay;
+
+ nDirection = 1;
+ while (nTotal > 0)
+ {
+ if (nDirection == 1)
+ {
+ nDay2 += 1;
+ nTotal -= getDateWeightFromJulian(nDay2, nDistributionType);
+ if (nDay2 == dEnd.julian)
+ nDirection = -1;
+ }
+ else
+ {
+ nDay -= 1;
+ nTotal -= getDateWeightFromJulian(nDay, nDistributionType);
+ }
+ }
+
+ jtodt(&dResult, nDay);
+ AddBuffer(pBuf->pBuf, dttostr(&dResult));
+ jtodt(&dResult, nDay2);
+ AddBuffer(pBuf[1].pBuf , dttostr(&dResult));
+ break;
+ case EXPR_FL_RANGE|EXPR_FL_LIST: /* cannot use them both */
+ case EXPR_FL_RANGE|EXPR_FL_ULIST: /* cannot use them both */
+ case EXPR_FL_ULIST|EXPR_FL_LIST: /* cannot use them both */
+ ReportError(QERR_RANGE_LIST, NULL, 1);
+ break;
+ default:
+ /* just do "normal" random date with a single return value */
+ genrand_date(&dResult, nDistributionType, &dBegin, &dEnd, NULL, 0);
+ AddBuffer(pBuf->pBuf, dttostr(&dResult));
+ pBuf->bUseInt = 0;
+ break;
+ }
+
+
+ return(DT_DATE);
+}
+
+ /*
+ * Routine: void EvalKeywordExpr(expr_t *pExpr, StringBuffer_t *pBuf)
+ * Purpose: set the values to be used to replace a given tag for this query generation
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ */
+ int
+ EvalKeywordExpr(expr_t *pExpr, Expr_Val_t *pV)
+ {
+ char szMessage[1024];
+ char *cp;
+ substitution_t *pSub;
+
+ switch (pExpr->Value.nValue)
+ {
+ case KW_QUERY:
+ pV->nValue = g_nQueryNumber;
+ pV->bUseInt = 1;
+ break;
+ case KW_TEMPLATE:
+ AddBuffer(pV->pBuf, GetBuffer(g_sbTemplateName));
+ pV->bUseInt = 0;
+ break;
+ case KW_STREAM:
+ pV->nValue = g_nStreamNumber;
+ pV->bUseInt = 1;
+ break;
+ case KW_SEED:
+ pV->nValue = Streams[0].nSeed;
+ pV->bUseInt = 1;
+ break;
+ case KW_SALES:
+ pV->nValue = DIST_SALES;
+ pV->bUseInt = 1;
+ break;
+ case KW_RETURNS:
+ pV->nValue = DIST_RETURNS;
+ pV->bUseInt = 1;
+ break;
+ case KW_UNIFORM:
+ pV->nValue = DIST_UNIFORM;
+ pV->bUseInt = 1;
+ break;
+ case KW_LIMIT:
+ pV->nValue = atoi(GetBuffer(pExpr->Value.pBuf));
+ pV->bUseInt = 1;
+ break;
+ case KW_LIMITA:
+ case KW_LIMITB:
+ case KW_LIMITC:
+ sprintf(szMessage, "__LIMIT%c", (int)pExpr->Value.nValue - KW_LIMITA + 'A');
+ pSub = findSubstitution(pCurrentQuery, szMessage, 0);
+ EvalExpr(pSub->pAssignment, pV, 0, g_nQueryNumber);
+ if (strlen(cp = GetBuffer(pV->pBuf)))
+ {
+ if (strchr(cp, '%'))
+ {
+ pSub = findSubstitution(pCurrentQuery, "_LIMIT", 0);
+ sprintf(szMessage, GetBuffer(pV->pBuf), atoi(GetBuffer(pSub->pAssignment->Value.pBuf)));
+ ResetBuffer(pV->pBuf);
+ AddBuffer(pV->pBuf, szMessage);
+ }
+ }
+ break;
+ default:
+ ReportError(QERR_SYNTAX, NULL, 1);
+ break;
+ }
+
+ return((pV->bUseInt)?EXPR_FL_INT:EXPR_FL_CHAR);
+ }
+
+
+ /*
+ * Routine: EvalExpr(expr_t *)
+ * Purpose: return the value of the expression as a string
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+ int
+ EvalExpr(expr_t *pExpr, Expr_Val_t *pValue, int bIsParam, int nQueryNumber)
+ {
+ int i,
+ nDataType = 0,
+ nArgCnt,
+ nUseCount;
+ expr_t *pArg;
+ substitution_t *pSub;
+ Expr_Val_t arParams[MAX_ARGS],
+ *pExistingValue;
+
+ for (i=0; i < MAX_ARGS; i++)
+ {
+ memset(&arParams[i], 0, sizeof(struct EXPR_VAL_T));
+ arParams[i].pBuf = InitBuffer(10, 10);
+ }
+
+ if (pExpr->Value.pBuf == NULL)
+ pExpr->Value.pBuf = InitBuffer(15, 15);
+
+ /* handle the constants */
+ if (pExpr->nFlags & EXPR_FL_CONST)
+ {
+ switch(i = pExpr->nFlags & EXPR_TYPE_MASK )
+ {
+ case EXPR_FL_INT|EXPR_FL_KEYWORD:
+ case EXPR_FL_CHAR|EXPR_FL_KEYWORD:
+ nDataType = EvalKeywordExpr(pExpr, pValue);
+ break;
+ case EXPR_FL_INT:
+ pValue->nValue = pExpr->Value.nValue;
+ nDataType = EXPR_FL_INT;
+ pValue->bUseInt = 1;
+ break;
+ case EXPR_FL_CHAR:
+ AddBuffer(pValue->pBuf, GetBuffer(pExpr->Value.pBuf));
+ nDataType = EXPR_FL_CHAR;
+ pValue->bUseInt = 0;
+ break;
+ default:
+ fprintf(stderr, "INTERNAL ERROR: unknown constant type %d\n", i);
+ exit(1);
+ }
+
+ pValue->nQueryNumber = nQueryNumber;
+ return(nDataType);
+ }
+ /* expressions get evaluated once per query; test is done here
+ to avoid a problem with constant values (e.g., LIMITB)
+ */
+ if (pValue->nQueryNumber == nQueryNumber)
+ return(pValue->bUseInt?DT_INT:DT_STR);
+
+ /* handle the parameterized expressions */
+ switch(pExpr->nFlags & EXPR_FUNC_MASK)
+ {
+ case EXPR_FL_REPL:
+ pValue->nValue = pExpr->Value.nValue;
+ AddBuffer(pValue->pBuf, GetBuffer(pExpr->Value.pBuf));
+ nDataType = EXPR_FL_CHAR;
+ break;
+ case EXPR_FL_SUBST:
+ pSub = findSubstitution(pCurrentQuery, GetBuffer(pExpr->Value.pBuf), &nUseCount);
+ if (pSub == NULL)
+ ReportError(QERR_BAD_NAME, GetBuffer(pExpr->Value.pBuf), 1);
+ if (pSub->nQueryNumber != nQueryNumber) /* we've not set a value; do so*/
+ {
+ pSub->nDataType = EvalExpr(pSub->pAssignment, pSub->arValues, 0, nQueryNumber);
+ }
+ /*
+ pExistingValue = pSub->arValues;
+ pExistingValue += pSub->nSubParts * (nUseCount - 1);
+ */
+ pExistingValue = &pSub->arValues[pExpr->nSubElement - 1];
+ memcpy(pValue, pExistingValue, sizeof(struct EXPR_VAL_T));
+ if (pExistingValue->bUseInt)
+ nDataType = DT_INT;
+ else
+ nDataType = DT_CHR;
+ pSub->nQueryNumber = nQueryNumber;
+ break;
+ case EXPR_FL_FUNC:
+ /* walk the argument list and put them in the appropriate arXXXArgs location
+ * based on data type
+ */
+ nArgCnt = 0;
+ for (pArg = (expr_t *)getHead(pExpr->ArgList); pArg; pArg = (expr_t *)getNext(pExpr->ArgList))
+ {
+ if (nArgCnt >= MAX_ARGS)
+ ReportError(QERR_ARG_OVERFLOW, NULL, 1);
+ ResetBuffer(arParams[nArgCnt].pBuf);
+ if (EvalExpr(pArg, &arParams[nArgCnt], 1, nQueryNumber) == DT_INT)
+ arParams[nArgCnt].bUseInt = 1;
+ nArgCnt += 1;
+
+ }
+
+ /* invoke each function */
+ switch(pExpr->Value.nValue)
+ {
+ case KW_TEXT:
+ nDataType = EvalTextExpr(pExpr, pValue, arParams, bIsParam);
+ break;
+ case KW_DATE:
+ nDataType = EvalDateExpr(pExpr, pValue, arParams, bIsParam);
+ break;
+ case KW_DISTWEIGHT:
+ case KW_DISTMEMBER:
+ case KW_DIST:
+ nDataType = EvalDistExpr(pExpr, pValue, arParams, bIsParam);
+ break;
+ case KW_RANDOM:
+ nDataType = EvalRandomExpr(pExpr, pValue, arParams, bIsParam);
+ break;
+ case OP_ADD:
+ case OP_SUBTRACT:
+ case OP_MULTIPLY:
+ case OP_DIVIDE:
+ nDataType = EvalArithmetic(pExpr, pValue, arParams);
+ break;
+ default:
+ ReportError(QERR_BAD_NAME, KeywordText((int)pExpr->Value.nValue), 1);
+ break;
+ }
+ break;
+ default:
+ fprintf(stderr, "INTERNAL ERROR: unknown expression type %x\n", pExpr->nFlags);
+ exit(1);
+ }
+
+ pValue->nQueryNumber = nQueryNumber;
+ return(nDataType);
+
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/eval.h b/ydb/library/benchmarks/gen/tpcds-dbgen/eval.h
new file mode 100644
index 000000000000..ae8be67df31f
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/eval.h
@@ -0,0 +1,38 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef EVAL_H
+#define EVAL_H
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/expr.c b/ydb/library/benchmarks/gen/tpcds-dbgen/expr.c
new file mode 100644
index 000000000000..74f934f61310
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/expr.c
@@ -0,0 +1,542 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#ifndef USE_STRINGS_H
+#include
+#else
+#include
+#endif
+#include "error_msg.h"
+#include "StringBuffer.h"
+#include "expr.h"
+#include "y.tab.h"
+#include "substitution.h"
+#include "substitution.h"
+#include "grammar_support.h"
+#include "date.h"
+#include "keywords.h"
+#include "dist.h"
+#include "genrand.h"
+#include "permute.h"
+#include "list.h"
+
+typedef struct FUNC_INFO_T {
+ int nKeyword;
+ int nParams;
+ int nDataType;
+ int nAddFlags;
+} func_info_t;
+
+#define MAX_FUNC 10
+static func_info_t arFuncInfo[MAX_FUNC + 1] =
+{
+ {KW_DATE, 3, EXPR_FL_DATE, EXPR_FL_SUFFIX},
+ {KW_DIST, 3, EXPR_FL_CHAR, EXPR_FL_SUFFIX},
+ {KW_LIST, 2, EXPR_FL_TYPESHIFT, 0},
+ {KW_ULIST, 2, EXPR_FL_TYPESHIFT, 0},
+ {KW_RANGE, 2, EXPR_FL_TYPESHIFT, 0},
+ {KW_RANDOM, 3, EXPR_FL_INT, 0},
+ {KW_TEXT, 2, EXPR_FL_CHAR, 0},
+ {KW_ROWCOUNT, 1, EXPR_FL_INT, 0},
+ {KW_DISTMEMBER, 3, EXPR_FL_CHAR, 0},
+ {KW_DISTWEIGHT, 3, EXPR_FL_INT, 0},
+ {-1, -1, -1}
+};
+static int arFuncArgs[MAX_FUNC][MAX_ARGS + 1] =
+{
+ /* KW_DATE */ {EXPR_FL_CHAR, EXPR_FL_CHAR, EXPR_FL_INT, 0},
+ /* KW_DIST */ {EXPR_FL_CHAR, EXPR_FL_TYPESHIFT, EXPR_FL_TYPESHIFT, 0},
+ /* KW_LIST */ {EXPR_FL_TYPESHIFT, EXPR_FL_INT, 0},
+ /* KW_ULIST */ {EXPR_FL_TYPESHIFT, EXPR_FL_INT, 0},
+ /* KW_RANGE */ {EXPR_FL_TYPESHIFT, EXPR_FL_INT, 0},
+ /* KW_RANDOM */ {EXPR_FL_INT, EXPR_FL_INT, EXPR_FL_INT, 0},
+ /* KW_TEXT */ {EXPR_FL_CHAR, EXPR_FL_INT, 0},
+ /* KW_ROWCOUNT */ {EXPR_FL_CHAR, 0},
+ /* KW_DISTMEMBER */ {EXPR_FL_CHAR, EXPR_FL_TYPESHIFT, EXPR_FL_TYPESHIFT, 0}, /* do the checking at runtime */
+ /* KW_DISTWEIGHT */ {EXPR_FL_CHAR, EXPR_FL_TYPESHIFT, EXPR_FL_TYPESHIFT, 0} /* do the checking at runtime */
+};
+
+int ValidateParams(int nFunc, expr_t *pExpr);
+extern template_t *pCurrentQuery;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+static int
+canCast(int nFromDataType, int nToDataType)
+{
+ int nValidSourceDataType = 0;
+
+ switch (nToDataType)
+ {
+ case EXPR_FL_INT:
+ nValidSourceDataType = EXPR_FL_KEYWORD|EXPR_FL_INT|EXPR_FL_CHAR;
+ break;
+ case EXPR_FL_CHAR:
+ nValidSourceDataType = EXPR_FL_CHAR|EXPR_FL_INT;
+ break;
+ case EXPR_FL_DATE:
+ nValidSourceDataType = EXPR_FL_DATE|EXPR_FL_CHAR;
+ break;
+ case EXPR_FL_TYPESHIFT:
+ nValidSourceDataType = EXPR_TYPE_MASK;
+ break;
+ }
+ return(nValidSourceDataType & nFromDataType);
+}
+
+/*
+* Routine: expr_t *makeExpr(void)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+makeExpr(void)
+{
+ expr_t *pResult;
+
+ pResult = (expr_t *)malloc(sizeof(struct EXPR_T));
+ MALLOC_CHECK(pResult);
+ if (pResult == NULL)
+ ReportError(QERR_NO_MEMORY, "in MakeReplacement()", 1);
+ memset(pResult, 0, sizeof(struct EXPR_T));
+ pResult->nValueCount = 1;
+#ifdef MEM_TEST
+ fprintf(stderr, "MakeExpr value %x\n", pResult);
+#endif
+ pResult->Value.pBuf = InitBuffer(10, 10);
+ if (pResult->Value.pBuf == NULL)
+ ReportError(QERR_NO_MEMORY, "in MakeReplacement()", 1);
+
+ return(pResult);
+}
+
+
+
+/*
+* Routine: MakeReplacement(char *szText, int nValue)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeReplacement(char *szText, int nValue)
+{
+ expr_t *pResult;
+
+ pResult = makeExpr();
+
+ AddBuffer(pResult->Value.pBuf, szText);
+ pResult->Value.nValue = nValue;
+ pResult->nFlags = EXPR_FL_REPL | EXPR_FL_CHAR;
+
+ return(pResult);
+}
+
+/*
+* Routine: MakeListExpr()
+* Purpose: add LIST/RANGE modifiers to an expression
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeListExpr(int nModifier, expr_t *pExpr, int nArg)
+{
+ expr_t *pArgExpr;
+
+ switch(nModifier)
+ {
+ case KW_LIST:
+ pExpr->nValueCount = nArg;
+ pExpr->nFlags |= EXPR_FL_LIST;
+ break;
+ case KW_ULIST:
+ pExpr->nValueCount = nArg;
+ pExpr->nFlags |= EXPR_FL_ULIST;
+ break;
+ case KW_RANGE:
+ pExpr->nValueCount = 2;
+ pExpr->nFlags |= EXPR_FL_RANGE;
+ break;
+ default:
+ INTERNAL("Bad modifier in MakeListExpr()");
+ break;
+ }
+
+ pArgExpr = MakeIntConstant(nArg);
+ addList(pExpr->ArgList, pArgExpr);
+
+ return(pExpr);
+}
+
+/*
+* Routine: MakeStringConstant(char *szText)
+* Purpose: add an argument to the pre-existing list
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeStringConstant(char *szText)
+{
+ expr_t *pResult;
+
+ pResult = makeExpr();
+ AddBuffer(pResult->Value.pBuf, szText);
+ pResult->nFlags = EXPR_FL_CONST | EXPR_FL_CHAR;
+ pResult->Value.bUseInt = 0;
+
+ return(pResult);
+}
+
+/*
+* Routine: makeArithmeticExpr(int nOp, expr_t *pArg1, expr_t *pArg2);
+* Purpose: handle simple arithmetic
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+makeArithmeticExpr(int nOp, expr_t *pArg1, expr_t *pArg2)
+{
+ expr_t *pResult;
+ int nDataType1, nDataType2;
+
+ pResult = makeExpr();
+ pResult->ArgList = makeList(L_FL_TAIL, NULL);
+ addList(pResult->ArgList, pArg1);
+ addList(pResult->ArgList, pArg2);
+ pResult->Value.nValue = nOp;
+ pResult->nFlags = EXPR_FL_FUNC;
+
+ /* now set the data type of the result */
+ nDataType1 = pArg1->nFlags & EXPR_TYPE_MASK;
+ nDataType2 = pArg2->nFlags & EXPR_TYPE_MASK;
+ if (nDataType1 >= nDataType2)
+ pResult->nFlags |= nDataType1;
+ else
+ pResult->nFlags |= nDataType2;
+
+ return(pResult);
+}
+
+
+
+/*
+* Routine: MakeStringConstant(char *szText)
+* Purpose: add an argument to the pre-existing list
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeVariableReference(char *szText, int nSuffix)
+{
+ expr_t *pResult;
+
+ pResult = makeExpr();
+
+ AddBuffer(pResult->Value.pBuf, szText);
+ pResult->nFlags = EXPR_FL_SUBST | EXPR_FL_CHAR;
+ pResult->nSubElement = (nSuffix >= 1)?nSuffix:1;
+ if (!findSubstitution(pCurrentQuery, szText, &nSuffix))
+ yywarn("Substitution used before being defined");
+
+ return(pResult);
+}
+/*
+* Routine: MakeIntConstant(int nValue)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeIntConstant(ds_key_t nValue)
+{
+ expr_t *pResult;
+
+ pResult = makeExpr();
+
+ pResult->Value.nValue = nValue;
+ pResult->nFlags = EXPR_FL_CONST | EXPR_FL_INT;
+ pResult->Value.bUseInt = 1;
+
+ return(pResult);
+}
+
+/*
+* Routine: MakeFunctionCall(int nKeyword, expr_t *pArgList)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+MakeFunctionCall(int nKeyword, list_t *pArgList)
+{
+ expr_t *pResult;
+ int nFuncNum = -1,
+ i;
+
+ pResult = makeExpr();
+
+ for (i=0; arFuncInfo[i].nKeyword >= 0; i++)
+ {
+ if (nKeyword == arFuncInfo[i].nKeyword)
+ nFuncNum = i;
+ }
+ if (nFuncNum < 0)
+ ReportError(QERR_BAD_NAME, NULL, 1);
+ pResult->Value.nValue = nKeyword;
+ pResult->nFlags = EXPR_FL_FUNC;
+ pResult->nFlags |= arFuncInfo[nFuncNum].nDataType;
+ pResult->nFlags |= arFuncInfo[nFuncNum].nAddFlags;
+ pResult->ArgList = pArgList;
+
+ if (ValidateParams(nFuncNum, pResult))
+ ReportError(QERR_SYNTAX, "in MakeFunctionCall()", 1);
+
+ return(pResult);
+}
+
+/*
+* Routine: PrintExpr(expr_t *)
+* Purpose: print out an expression to allow templates to be reconstructed
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+PrintExpr(expr_t *pExpr)
+{
+ int i,
+ bUseComma = 0;
+ expr_t *pArg;
+ char szFormat[20];
+
+ /* handle the constants */
+ if (pExpr->nFlags & EXPR_FL_CONST)
+ {
+ switch(i = pExpr->nFlags & (EXPR_TYPE_MASK ^ EXPR_FL_KEYWORD))
+ {
+ case EXPR_FL_INT:
+ if (pExpr->nFlags & EXPR_FL_KEYWORD)
+ printf("%s", KeywordText((int)pExpr->Value.nValue));
+ else
+ printf(HUGE_FORMAT, pExpr->Value.nValue);
+ break;
+ case EXPR_FL_CHAR:
+ printf("\"%s\"", GetBuffer(pExpr->Value.pBuf));
+ break;
+ default:
+ fprintf(stderr, "INTERNAL ERROR: unknown constant type %d\n", i);
+ exit(1);
+ }
+ return;
+ }
+
+ /* handle the parameterized expressions */
+ switch(pExpr->nFlags & EXPR_FUNC_MASK)
+ {
+ case EXPR_FL_FUNC:
+ if (pExpr->nFlags & EXPR_FL_FUNC)
+ {
+ printf("%s(", KeywordText((int)pExpr->Value.nValue));
+ for (pArg = (expr_t *)getHead(pExpr->ArgList); pArg; pArg = (expr_t *)getNext(pExpr->ArgList))
+ {
+ if (bUseComma)
+ printf(",\n\t");
+ PrintExpr(pArg);
+ bUseComma = 1;
+ }
+ printf(")");
+ }
+ break;
+ case EXPR_FL_REPL:
+ sprintf(szFormat, "{\"%%s\", %s}", HUGE_FORMAT);
+ printf(szFormat, GetBuffer(pExpr->Value.pBuf), pExpr->Value.nValue);
+ break;
+ case EXPR_FL_SUBST:
+ printf("[%s]", GetBuffer(pExpr->Value.pBuf));
+ break;
+ default:
+ fprintf(stderr, "INTERNAL ERROR: unknown expression type %x\n", pExpr->nFlags);
+ exit(1);
+ }
+
+ return;
+
+}
+
+/*
+* Routine: ValidateParams(int nFunc, expr_t *pArgs)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ValidateParams(int nFunc, expr_t *pArgs)
+{
+ int i = 0,
+ nArgs;
+ expr_t *pCurrentArg;
+ char msg[80];
+
+ pCurrentArg = getHead(pArgs->ArgList);
+ if (pCurrentArg)
+ {
+
+ if (pCurrentArg->nFlags & EXPR_FL_REPL) /* replacement sets can be arbitrarily long */
+ return(0);
+ }
+
+ nArgs = length(pArgs->ArgList);
+ if (nArgs != arFuncInfo[nFunc].nParams)
+ {
+
+ sprintf(msg, "wanted %d args, found %d", arFuncInfo[nFunc].nParams, nArgs);
+ ReportError(QERR_BAD_PARAMS, msg, 0);
+ return(1);
+ }
+
+ for (pCurrentArg = (expr_t *)getHead(pArgs->ArgList); pCurrentArg; pCurrentArg = (expr_t *)getNext(pArgs->ArgList))
+ {
+ if (!canCast(pCurrentArg->nFlags & EXPR_TYPE_MASK,arFuncArgs[nFunc][i]) &&
+ (arFuncArgs[nFunc][i] != EXPR_FL_TYPESHIFT))
+ {
+ sprintf(msg, "type mismatch in call to %s() on parameter %d (%d/%d)",
+ KeywordText(arFuncInfo[nFunc].nKeyword),
+ i + 1,
+ (pCurrentArg->nFlags & EXPR_TYPE_MASK), arFuncArgs[nFunc][i]);
+ ReportErrorNoLine(QERR_BAD_PARAMS, msg, 0);
+ return(1);
+ }
+ i += 1;
+ }
+
+ return(0);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/expr.h b/ydb/library/benchmarks/gen/tpcds-dbgen/expr.h
new file mode 100644
index 000000000000..3ccb770863a9
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/expr.h
@@ -0,0 +1,131 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef EXPR_H
+#define EXPR_H
+
+#include "StringBuffer.h"
+#include "list.h"
+#include "mathops.h"
+
+typedef struct EXPR_VAL_T {
+ int bUseInt;
+ StringBuffer_t *pBuf;
+ ds_key_t nValue;
+ int nQueryNumber;
+} Expr_Val_t;
+
+typedef struct EXPR_T
+{
+ int nFlags;
+ list_t *ArgList;
+ Expr_Val_t Value;
+ int nValueCount;
+ int *pPermute;
+ ds_key_t *pPermuteKey;
+ int nSubElement;
+} expr_t;
+
+/* expression flags */
+/* NOTE: order of data types is important to makeArithmeticExpr() CHANGE WITH CARE */
+#define EXPR_FL_CONST 0x00000001
+#define EXPR_FL_UNDEF 0x00000002
+#define EXPR_FL_FUNC 0x00000004
+#define EXPR_FL_INT 0x00000008 /* argument is an integer */
+#define EXPR_FL_CHAR 0x00000010 /* argument is a character string */
+#define EXPR_FL_SUBST 0x00000020 /* argument is a pre-defined substitution */
+#define EXPR_FL_KEYWORD 0x00000040 /* interpret nValue as a keyword index */
+#define EXPR_FL_DATE 0x00000080 /* interpret nValue as a julian date */
+#define EXPR_FL_TYPESHIFT 0x00000100 /* take type from arguments */
+#define EXPR_TYPE_MASK 0x000001D8 /* different data types */
+#define EXPR_FUNC_MASK 0x00000224 /* FUNC, REPL, SUBST */
+#define EXPR_FL_REPL 0x00000200 /* replacement pair */
+#define EXPR_FL_SUFFIX 0x00000400 /* expression can have begin/end tags */
+#define EXPR_FL_LIST 0x00000800 /* expression should return a list of values */
+#define EXPR_FL_RANGE 0x00001000 /* expression should return a range of values */
+#define EXPR_FL_INIT 0x00002000 /* the expression has been initialized */
+#define EXPR_FL_TEXT 0x00004000 /* substitution is a text value */
+#define EXPR_FL_DIST 0x00008000 /* substitution is taken from a distribution */
+#define EXPR_FL_RANDOM 0x00010000 /* substitution is a random integer */
+#define EXPR_FL_DISTMEMBER 0x00020000 /* substitution returns distribution value */
+#define EXPR_FL_DISTWEIGHT 0x00040000 /* substitution returns distribtuion weight */
+#define EXPR_FL_ROWCOUNT 0x00080000 /* substitution table/distribution rowcount */
+#define EXPR_FL_UNIFORM 0x00100000 /* use a uniform distribution */
+#define EXPR_FL_NORMAL 0x00200000 /* use a normal distribution */
+#define EXPR_FL_SALES 0x00400000 /* skew dates for sales */
+#define EXPR_FL_TABLENAME 0x00800000 /* rowcount() argument is a table name */
+#define EXPR_FL_VENDOR 0x01000000 /* do double substitution for vendor syntax */
+#define EXPR_FL_ULIST 0x02000000 /* return unique value set from list() */
+#define EXPR_FL_TYPE_MASK (EXPR_FL_TEXT|EXPR_FL_RANDOM|EXPR_FL_DIST) /* separate substitution types. */
+#define EXPR_FL_DIST_MASK (EXPR_FL_UNIFORM|EXPR_FL_NORMAL)
+#define EXPR_FL_SUFFIX_MASK (EXPR_FL_LIST|EXPR_FL_RANGE|EXPR_FL_ULIST) /* substitution that allow suffixes */
+
+#define MAX_ARGS 20 /* overly large to allow TEXT() to have a lot of options */
+
+#define DT_NONE -1
+#define DT_INT 0
+#define DT_STR 1
+#define DT_CHR 2
+#define DT_DEC 3
+#define DT_DATE 4
+#define DT_KEY 5
+
+#define OP_ADD 0
+#define OP_SUBTRACT 1
+#define OP_MULTIPLY 2
+#define OP_DIVIDE 3
+
+void AddArgument(expr_t *pArgList, expr_t *pExpr);
+expr_t *MakeStringConstant(char *szText);
+expr_t *MakeIntConstant(ds_key_t nValue);
+expr_t *MakeFunctionCall(int nKeyword, list_t *pArgList);
+expr_t *MakeListExpr(int nModifier, expr_t *pExpr, int nArg);
+expr_t *MakeReplacement(char *szText, int nValue);
+expr_t *MakeVariableReference(char *szText, int nSuffix);
+expr_t *makeArithmeticExpr(int nOp, expr_t *pArg1, expr_t *pArg2);
+void PrintExpr(expr_t *pExpr);
+
+
+int EvalTextExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam);
+char *GetParam(expr_t *pExpr, int nParam);
+int EvalDistExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam);
+int EvalRandomExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam);
+int EvalRowcountExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams);
+int EvalDateExpr(expr_t *pExpr, Expr_Val_t *pBuf, Expr_Val_t *pParams, int bIsParam);
+int EvalArg(expr_t *pArg, Expr_Val_t *pBuf, Expr_Val_t *pParams);
+int EvalExpr(expr_t *pExpr, Expr_Val_t *pValue, int bIsParam, int nQueryNumber);
+int EvalArithmetic(expr_t *pExpr, Expr_Val_t *pValue, Expr_Val_t *pParams);
+#endif
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/fips.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/fips.dst
new file mode 100644
index 000000000000..c3dbd154dead
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/fips.dst
@@ -0,0 +1,3187 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+--
+
+-- fields weights (aliases in parens)
+-- ====== =======
+-- 1: FIPS code (fips) 1: uniform (uniform)
+-- 2: county name (name) 2: population (population)
+-- 3: state abreviation (st) 3: timezone weighting (tz)
+-- 4: full state name (state) 4: in zone1 (tz90)
+-- 5: ZIP prefix (zone) 5: in zone2 (tz9)
+-- 6: gmt offset (gmt) 6 in zone3 (tz1)
+--
+-- NOTE: missing data for St. Clair County, AL
+-- NOTE: missing data for St. Francis County, AR
+-- NOTE: missing data for St. Johns County, FL
+-- NOTE: missing data for St. Lucie County, FL
+-- NOTE: missing data for St. Clair County, IL
+-- NOTE: missing data for St. Joseph County, IN
+-- NOTE: missing data for St. Bernard Parish, LA
+-- NOTE: missing data for St. Charles Parish, LA
+-- NOTE: missing data for St. Helena Parish, LA
+-- NOTE: missing data for St. John the Baptist Parish, LA
+-- NOTE: missing data for St. Landry Parish, LA
+-- NOTE: missing data for St. Martin Parish, LA
+-- NOTE: missing data for St. Mary Parish, LA
+-- NOTE: missing data for St. Tammany Parish, LA
+-- NOTE: missing data for St. Mary's County, MD
+-- NOTE: missing data for St. Clair County, MI
+-- NOTE: missing data for St. Joseph County, MI
+-- NOTE: missing data for St. Louis County, MN
+-- NOTE: missing data for St. Charles County, MO
+-- NOTE: missing data for St. Clair County, MO
+-- NOTE: missing data for Ste. Genevieve County, MO
+-- NOTE: missing data for St. Francois County, MO
+-- NOTE: missing data for St. Louis County, MO
+-- NOTE: missing data for St. Lawrence County, NY
+-- NOTE: missing data for St. Croix County, WI
+-- NOTE: outer ketchikan AK and some of the census areas from AK
+------
+create fips_county;
+set types = (int, varchar, varchar, varchar, varchar, int);
+set weights = 6;
+set names = (fips, county, st, state, zone, gmt:uniform, population, tz, tz90, tz9, tz1);
+add (47187,"Williamson County", "TN", "Tennesee", "3", -5:1, 117569, 1387, 1, 0, 0);
+add (46137,"Ziebach County", "SD", "South Dakota", "5", -6:1, 2176, 1148, 1, 0, 0);
+add (01127,"Walker County", "AL", "Alabama", "3", -6:1, 71027, 1148, 1, 0, 0);
+add (45039,"Fairfield County", "SC", "South Carolina", "2", -5:1, 22394, 1387, 1, 0, 0);
+add (39139,"Richland County", "OH", "Ohio", "4", -5:1, 127342, 1387, 1, 0, 0);
+add (22041,"Franklin Parish", "LA", "Louisiana", "7", -6:1, 22163, 1148, 1, 0, 0);
+add (29061,"Daviess County", "MO", "Mosourri", "6", -6:1, 7842, 1148, 1, 0, 0);
+add (13013,"Barrow County", "GA", "Georgia", "3", -5:1, 40344, 1387, 1, 0, 0);
+add (26095,"Luce County", "MI", "Michigan", "4", -5:1, 6640, 1387, 1, 0, 0);
+add (22053,"Jefferson Davis Parish", "LA", "Louisiana", "7", -6:1, 31607, 1148, 1, 0, 0);
+add (35047,"San Miguel County", "NM", "New Mexico", "8", -7:1, 28996, 4647, 1, 0, 0);
+add (26063,"Huron County", "MI", "Michigan", "4", -5:1, 35303, 1387, 1, 0, 0);
+add (42043,"Dauphin County", "PA", "Pennsylvania", "1", -5:1, 245579, 1387, 1, 0, 0);
+add (36005,"Bronx County", "NY", "New York", "1", -5:1, 1195599, 1387, 1, 0, 0);
+add (53037,"Kittitas County", "WA", "Washiington", "9", -8:1, 31714, 3240, 0, 1, 0);
+add (01097,"Mobile County", "AL", "Alabama", "3", -6:1, 399429, 1148, 1, 0, 0);
+add (13221,"Oglethorpe County", "GA", "Georgia", "3", -5:1, 11418, 1387, 1, 0, 0);
+add (27159,"Wadena County", "MN", "Minnesota", "5", -6:1, 13145, 1148, 1, 0, 0);
+add (18099,"Marshall County", "IN", "Indiana", "4", -5:1, 45444, 1387, 1, 0, 0);
+add (27113,"Pennington County", "MN", "Minnesota", "5", -6:1, 13562, 1148, 1, 0, 0);
+add (12075,"Levy County", "FL", "Florida", "3", -5:1, 31796, 1387, 1, 0, 0);
+add (54081,"Raleigh County", "WV", "West Virginia", "2", -5:1, 79066, 1387, 1, 0, 0);
+add (37099,"Jackson County", "NC", "North Carolina", "2", -5:1, 30210, 1387, 1, 0, 0);
+add (08077,"Mesa County", "CO", "Colorado", "8", -7:1, 112891, 4647, 1, 0, 0);
+add (31067,"Gage County", "NE", "Nebraska", "6", -6:1, 22666, 1148, 1, 0, 0);
+add (48323,"Maverick County", "TX", "Texas", "7", -6:1, 48131, 1148, 1, 0, 0);
+add (26053,"Gogebic County", "MI", "Michigan", "4", -5:1, 17097, 1387, 1, 0, 0);
+add (17145,"Perry County", "IL", "Illinois", "6", -6:1, 21048, 1148, 1, 0, 0);
+add (47165,"Sumner County", "TN", "Tennesee", "3", -6:1, 124056, 1148, 1, 0, 0);
+add (35051,"Sierra County", "NM", "New Mexico", "8", -7:1, 11025, 4647, 1, 0, 0);
+add (20077,"Harper County", "KS", "Kansas", "6", -6:1, 6430, 1148, 1, 0, 0);
+add (50009,"Essex County", "VT", "Vermont", "0", -5:1, 6580, 1387, 1, 0, 0);
+add (18001,"Adams County", "IN", "Indiana", "4", -5:1, 33083, 1387, 1, 0, 0);
+add (40057,"Harmon County", "OK", "Oklahoma", "7", -6:1, 3479, 1148, 1, 0, 0);
+add (06013,"Contra Costa County", "CA", "California", "9", -8:1, 918200, 3240, 0, 1, 0);
+add (21005,"Anderson County", "KY", "Kentucky", "4", -6:1, 18587, 1148, 1, 0, 0);
+add (31005,"Arthur County", "NE", "Nebraska", "6", -6:1, 428, 1148, 1, 0, 0);
+add (26145,"Saginaw County", "MI", "Michigan", "4", -5:1, 210101, 1387, 1, 0, 0);
+add (48361,"Orange County", "TX", "Texas", "7", -6:1, 84905, 1148, 1, 0, 0);
+add (13273,"Terrell County", "GA", "Georgia", "3", -5:1, 11146, 1387, 1, 0, 0);
+add (40029,"Coal County", "OK", "Oklahoma", "7", -6:1, 6009, 1148, 1, 0, 0);
+add (27057,"Hubbard County", "MN", "Minnesota", "5", -6:1, 16935, 1148, 1, 0, 0);
+add (19007,"Appanoose County", "IA", "Iowa", "5", -6:1, 13595, 1148, 1, 0, 0);
+add (48445,"Terry County", "TX", "Texas", "7", -6:1, 12896, 1148, 1, 0, 0);
+add (34033,"Salem County", "NJ", "New Jersey", "0", -5:1, 64912, 1387, 1, 0, 0);
+add (20125,"Montgomery County", "KS", "Kansas", "6", -6:1, 37089, 1148, 1, 0, 0);
+add (35037,"Quay County", "NM", "New Mexico", "8", -7:1, 10024, 4647, 1, 0, 0);
+add (13083,"Dade County", "GA", "Georgia", "3", -5:1, 15058, 1387, 1, 0, 0);
+add (48041,"Brazos County", "TX", "Texas", "7", -6:1, 133407, 1148, 1, 0, 0);
+add (48255,"Karnes County", "TX", "Texas", "7", -6:1, 12358, 1148, 1, 0, 0);
+add (30095,"Stillwater County", "MT", "Montana", "6", -7:1, 8069, 4647, 1, 0, 0);
+add (21199,"Pulaski County", "KY", "Kentucky", "4", -5:1, 56294, 1387, 1, 0, 0);
+add (06043,"Mariposa County", "CA", "California", "9", -8:1, 15877, 3240, 0, 1, 0);
+add (55047,"Green Lake County", "WI", "Wisconnsin", "5", -6:1, 19438, 1148, 1, 0, 0);
+add (22125,"West Feliciana Parish", "LA", "Louisiana", "7", -6:1, 13446, 1148, 1, 0, 0);
+add (24005,"Baltimore County", "MD", "Maryland", "2", -5:1, 721874, 1387, 1, 0, 0);
+add (47029,"Cocke County", "TN", "Tennesee", "3", -5:1, 31968, 1387, 1, 0, 0);
+add (48383,"Reagan County", "TX", "Texas", "7", -6:1, 4203, 1148, 1, 0, 0);
+add (37083,"Halifax County", "NC", "North Carolina", "2", -5:1, 56433, 1387, 1, 0, 0);
+add (45001,"Abbeville County", "SC", "South Carolina", "2", -5:1, 24632, 1387, 1, 0, 0);
+add (51181,"Surry County", "VA", "Virginia", "2", -5:1, 6471, 1387, 1, 0, 0);
+add (51111,"Lunenburg County", "VA", "Virginia", "2", -5:1, 12043, 1387, 1, 0, 0);
+add (27117,"Pipestone County", "MN", "Minnesota", "5", -6:1, 10092, 1148, 1, 0, 0);
+add (06103,"Tehama County", "CA", "California", "9", -8:1, 54073, 3240, 0, 1, 0);
+add (48071,"Chambers County", "TX", "Texas", "7", -6:1, 23743, 1148, 1, 0, 0);
+add (35025,"Lea County", "NM", "New Mexico", "8", -7:1, 56091, 4647, 1, 0, 0);
+add (13319,"Wilkinson County", "GA", "Georgia", "3", -5:1, 10838, 1387, 1, 0, 0);
+add (13201,"Miller County", "GA", "Georgia", "3", -5:1, 6409, 1387, 1, 0, 0);
+add (26159,"Van Buren County", "MI", "Michigan", "4", -5:1, 75666, 1387, 1, 0, 0);
+add (18171,"Warren County", "IN", "Indiana", "4", -5:1, 8251, 1387, 1, 0, 0);
+add (40019,"Carter County", "OK", "Oklahoma", "7", -6:1, 44503, 1148, 1, 0, 0);
+add (31129,"Nuckolls County", "NE", "Nebraska", "6", -7:1, 5226, 4647, 1, 0, 0);
+add (41035,"Klamath County", "OR", "Oregon", "9", -8:1, 63185, 3240, 0, 1, 0);
+add (24039,"Somerset County", "MD", "Maryland", "2", -5:1, 24296, 1387, 1, 0, 0);
+add (13039,"Camden County", "GA", "Georgia", "3", -5:1, 47443, 1387, 1, 0, 0);
+add (22081,"Red River Parish", "LA", "Louisiana", "7", -6:1, 9599, 1148, 1, 0, 0);
+add (35021,"Harding County", "NM", "New Mexico", "8", -7:1, 899, 4647, 1, 0, 0);
+add (20067,"Grant County", "KS", "Kansas", "6", -6:1, 8012, 1148, 1, 0, 0);
+add (51089,"Henry County", "VA", "Virginia", "2", -5:1, 55627, 1387, 1, 0, 0);
+add (40105,"Nowata County", "OK", "Oklahoma", "7", -6:1, 9969, 1148, 1, 0, 0);
+add (31065,"Furnas County", "NE", "Nebraska", "6", -6:1, 5381, 1148, 1, 0, 0);
+add (13213,"Murray County", "GA", "Georgia", "3", -5:1, 32682, 1387, 1, 0, 0);
+add (55103,"Richland County", "WI", "Wisconnsin", "5", -6:1, 17891, 1148, 1, 0, 0);
+add (38049,"McHenry County", "ND", "North Dakota", "5", -6:1, 6076, 1148, 1, 0, 0);
+add (55063,"La Crosse County", "WI", "Wisconnsin", "5", -6:1, 102565, 1148, 1, 0, 0);
+add (55099,"Price County", "WI", "Wisconnsin", "5", -6:1, 15813, 1148, 1, 0, 0);
+add (49031,"Piute County", "UT", "Utah", "8", -7:1, 1402, 4647, 1, 0, 0);
+add (20057,"Ford County", "KS", "Kansas", "6", -6:1, 29382, 1148, 1, 0, 0);
+add (28057,"Itawamba County", "MS", "Missippi", "5", -6:1, 21072, 1148, 1, 0, 0);
+add (16051,"Jefferson County", "ID", "Idaho", "8", -7:1, 19118, 4647, 1, 0, 0);
+add (01035,"Conecuh County", "AL", "Alabama", "3", -6:1, 13976, 1148, 1, 0, 0);
+add (31111,"Lincoln County", "NE", "Nebraska", "6", -7:1, 33515, 4647, 1, 0, 0);
+add (51187,"Warren County", "VA", "Virginia", "2", -5:1, 30126, 1387, 1, 0, 0);
+add (28049,"Hinds County", "MS", "Missippi", "5", -6:1, 247144, 1148, 1, 0, 0);
+add (48237,"Jack County", "TX", "Texas", "7", -6:1, 7430, 1148, 1, 0, 0);
+add (31013,"Box Butte County", "NE", "Nebraska", "6", -6:1, 12832, 1148, 1, 0, 0);
+add (08003,"Alamosa County", "CO", "Colorado", "8", -7:1, 14448, 4647, 1, 0, 0);
+add (54055,"Mercer County", "WV", "West Virginia", "2", -5:1, 63794, 1387, 1, 0, 0);
+add (55013,"Burnett County", "WI", "Wisconnsin", "5", -6:1, 14646, 1148, 1, 0, 0);
+add (27143,"Sibley County", "MN", "Minnesota", "5", -6:1, 14573, 1148, 1, 0, 0);
+add (18127,"Porter County", "IN", "Indiana", "4", -5:1, 145726, 1387, 1, 0, 0);
+add (02068,"Denali Borough", "AK", "Alaska", "9", -9:1, 1970, 1174, 0, 0, 1);
+add (45075,"Orangeburg County", "SC", "South Carolina", "2", -5:1, 87865, 1387, 1, 0, 0);
+add (21003,"Allen County", "KY", "Kentucky", "4", -6:1, 16555, 1148, 1, 0, 0);
+add (30003,"Big Horn County", "MT", "Montana", "6", -7:1, 12631, 4647, 1, 0, 0);
+add (08029,"Delta County", "CO", "Colorado", "8", -7:1, 26619, 4647, 1, 0, 0);
+add (18109,"Morgan County", "IN", "Indiana", "4", -5:1, 65500, 1387, 1, 0, 0);
+add (21043,"Carter County", "KY", "Kentucky", "4", -6:1, 26848, 1148, 1, 0, 0);
+add (01123,"Tallapoosa County", "AL", "Alabama", "3", -6:1, 40606, 1148, 1, 0, 0);
+add (09013,"Tolland County", "CT", "Connecticut", "0", -5:1, 131831, 1387, 1, 0, 0);
+add (39127,"Perry County", "OH", "Ohio", "4", -5:1, 34290, 1387, 1, 0, 0);
+add (42059,"Greene County", "PA", "Pennsylvania", "1", -5:1, 40742, 1387, 1, 0, 0);
+add (20165,"Rush County", "KS", "Kansas", "6", -6:1, 3413, 1148, 1, 0, 0);
+add (30027,"Fergus County", "MT", "Montana", "6", -7:1, 12271, 4647, 1, 0, 0);
+add (46021,"Campbell County", "SD", "South Dakota", "5", -6:1, 1917, 1148, 1, 0, 0);
+add (13249,"Schley County", "GA", "Georgia", "3", -5:1, 3945, 1387, 1, 0, 0);
+add (51179,"Stafford County", "VA", "Virginia", "2", -5:1, 87055, 1387, 1, 0, 0);
+add (01107,"Pickens County", "AL", "Alabama", "3", -6:1, 21089, 1148, 1, 0, 0);
+add (36027,"Dutchess County", "NY", "New York", "1", -5:1, 265317, 1387, 1, 0, 0);
+add (31017,"Brown County", "NE", "Nebraska", "6", -6:1, 3553, 1148, 1, 0, 0);
+add (36109,"Tompkins County", "NY", "New York", "1", -5:1, 96020, 1387, 1, 0, 0);
+add (39143,"Sandusky County", "OH", "Ohio", "4", -5:1, 62216, 1387, 1, 0, 0);
+add (13117,"Forsyth County", "GA", "Georgia", "3", -5:1, 86130, 1387, 1, 0, 0);
+add (02070,"Dillingham Census Area", "AK", "Alaska", "9", -9:1, 4534, 1174, 0, 0, 1);
+add (51011,"Appomattox County", "VA", "Virginia", "2", -5:1, 13134, 1387, 1, 0, 0);
+add (51640,"Galax city", "VA", "Virginia", "2", -5:1, 6864, 1387, 1, 0, 0);
+add (17097,"Lake County", "IL", "Illinois", "6", -6:1, 605116, 1148, 1, 0, 0);
+add (17093,"Kendall County", "IL", "Illinois", "6", -6:1, 51817, 1148, 1, 0, 0);
+add (37093,"Hoke County", "NC", "North Carolina", "2", -5:1, 30424, 1387, 1, 0, 0);
+add (53031,"Jefferson County", "WA", "Washiington", "9", -8:1, 26232, 3240, 0, 1, 0);
+add (33001,"Belknap County", "NH", "New Hampshire", "0", -5:1, 52481, 1387, 1, 0, 0);
+add (48465,"Val Verde County", "TX", "Texas", "7", -6:1, 43831, 1148, 1, 0, 0);
+add (16055,"Kootenai County", "ID", "Idaho", "8", -7:1, 101390, 4647, 1, 0, 0);
+add (05003,"Ashley County", "AR", "Arkansas", "7", -6:1, 24448, 1148, 1, 0, 0);
+add (39063,"Hancock County", "OH", "Ohio", "4", -5:1, 68922, 1387, 1, 0, 0);
+add (39165,"Warren County", "OH", "Ohio", "4", -5:1, 146033, 1387, 1, 0, 0);
+add (42091,"Montgomery County", "PA", "Pennsylvania", "1", -5:1, 719718, 1387, 1, 0, 0);
+add (41065,"Wasco County", "OR", "Oregon", "9", -8:1, 23059, 3240, 0, 1, 0);
+add (28101,"Newton County", "MS", "Missippi", "5", -6:1, 21516, 1148, 1, 0, 0);
+add (48169,"Garza County", "TX", "Texas", "7", -6:1, 4608, 1148, 1, 0, 0);
+add (17153,"Pulaski County", "IL", "Illinois", "6", -6:1, 7203, 1148, 1, 0, 0);
+add (13153,"Houston County", "GA", "Georgia", "3", -5:1, 105808, 1387, 1, 0, 0);
+add (13063,"Clayton County", "GA", "Georgia", "3", -5:1, 208999, 1387, 1, 0, 0);
+add (30065,"Musselshell County", "MT", "Montana", "6", -7:1, 4605, 4647, 1, 0, 0);
+add (06035,"Lassen County", "CA", "California", "9", -8:1, 33285, 3240, 0, 1, 0);
+add (24043,"Washington County", "MD", "Maryland", "2", -5:1, 127352, 1387, 1, 0, 0);
+add (46009,"Bon Homme County", "SD", "South Dakota", "5", -6:1, 7696, 1148, 1, 0, 0);
+add (55059,"Kenosha County", "WI", "Wisconnsin", "5", -6:1, 144339, 1148, 1, 0, 0);
+add (01003,"Baldwin County", "AL", "Alabama", "3", -6:1, 132828, 1148, 1, 0, 0);
+add (23013,"Knox County", "ME", "Maine", "0", -5:1, 37847, 1387, 1, 0, 0);
+add (31147,"Richardson County", "NE", "Nebraska", "6", -7:1, 9420, 4647, 1, 0, 0);
+add (08047,"Gilpin County", "CO", "Colorado", "8", -7:1, 4188, 4647, 1, 0, 0);
+add (28119,"Quitman County", "MS", "Missippi", "5", -6:1, 9914, 1148, 1, 0, 0);
+add (47033,"Crockett County", "TN", "Tennesee", "3", -5:1, 13959, 1387, 1, 0, 0);
+add (26117,"Montcalm County", "MI", "Michigan", "4", -5:1, 60559, 1387, 1, 0, 0);
+add (25023,"Plymouth County", "MA", "Massachusetts", "0", -5:1, 467588, 1387, 1, 0, 0);
+add (04015,"Mohave County", "AZ", "Arizona", "8", -7:1, 130618, 4647, 1, 0, 0);
+add (54059,"Mingo County", "WV", "West Virginia", "2", -5:1, 31926, 1387, 1, 0, 0);
+add (17033,"Crawford County", "IL", "Illinois", "6", -6:1, 20954, 1148, 1, 0, 0);
+add (37069,"Franklin County", "NC", "North Carolina", "2", -5:1, 44743, 1387, 1, 0, 0);
+add (40129,"Roger Mills County", "OK", "Oklahoma", "7", -6:1, 3580, 1148, 1, 0, 0);
+add (27125,"Red Lake County", "MN", "Minnesota", "5", -6:1, 4270, 1148, 1, 0, 0);
+add (17035,"Cumberland County", "IL", "Illinois", "6", -6:1, 11124, 1148, 1, 0, 0);
+add (27051,"Grant County", "MN", "Minnesota", "5", -6:1, 6178, 1148, 1, 0, 0);
+add (13053,"Chattahoochee County", "GA", "Georgia", "3", -5:1, 16679, 1387, 1, 0, 0);
+add (27149,"Stevens County", "MN", "Minnesota", "5", -6:1, 10136, 1148, 1, 0, 0);
+add (17079,"Jasper County", "IL", "Illinois", "6", -6:1, 10647, 1148, 1, 0, 0);
+add (31159,"Seward County", "NE", "Nebraska", "6", -7:1, 16299, 4647, 1, 0, 0);
+add (37159,"Rowan County", "NC", "North Carolina", "2", -5:1, 125505, 1387, 1, 0, 0);
+add (34021,"Mercer County", "NJ", "New Jersey", "0", -5:1, 331629, 1387, 1, 0, 0);
+add (47081,"Hickman County", "TN", "Tennesee", "3", -5:1, 20553, 1387, 1, 0, 0);
+add (55115,"Shawano County", "WI", "Wisconnsin", "5", -6:1, 38756, 1148, 1, 0, 0);
+add (46097,"Miner County", "SD", "South Dakota", "5", -7:1, 2799, 4647, 1, 0, 0);
+add (13075,"Cook County", "GA", "Georgia", "3", -5:1, 15011, 1387, 1, 0, 0);
+add (37021,"Buncombe County", "NC", "North Carolina", "2", -5:1, 194873, 1387, 1, 0, 0);
+add (21159,"Martin County", "KY", "Kentucky", "4", -5:1, 12120, 1387, 1, 0, 0);
+add (36007,"Broome County", "NY", "New York", "1", -5:1, 196545, 1387, 1, 0, 0);
+add (04021,"Pinal County", "AZ", "Arizona", "8", -7:1, 146929, 4647, 1, 0, 0);
+add (29165,"Platte County", "MO", "Mosourri", "6", -6:1, 70068, 1148, 1, 0, 0);
+add (12105,"Polk County", "FL", "Florida", "3", -5:1, 452584, 1387, 1, 0, 0);
+add (37151,"Randolph County", "NC", "North Carolina", "2", -5:1, 121289, 1387, 1, 0, 0);
+add (51133,"Northumberland County", "VA", "Virginia", "2", -5:1, 11513, 1387, 1, 0, 0);
+add (19091,"Humboldt County", "IA", "Iowa", "5", -6:1, 10323, 1148, 1, 0, 0);
+add (20003,"Anderson County", "KS", "Kansas", "6", -6:1, 8060, 1148, 1, 0, 0);
+add (37179,"Union County", "NC", "North Carolina", "2", -5:1, 110017, 1387, 1, 0, 0);
+add (05035,"Crittenden County", "AR", "Arkansas", "7", -6:1, 49905, 1148, 1, 0, 0);
+add (20059,"Franklin County", "KS", "Kansas", "6", -6:1, 24768, 1148, 1, 0, 0);
+add (02100,"Haines Borough", "AK", "Alaska", "9", -9:1, 2225, 1174, 0, 0, 1);
+add (18181,"White County", "IN", "Indiana", "4", -5:1, 25338, 1387, 1, 0, 0);
+add (13207,"Monroe County", "GA", "Georgia", "3", -5:1, 19645, 1387, 1, 0, 0);
+add (42021,"Cambria County", "PA", "Pennsylvania", "1", -5:1, 156080, 1387, 1, 0, 0);
+add (29035,"Carter County", "MO", "Mosourri", "6", -6:1, 6387, 1148, 1, 0, 0);
+add (17149,"Pike County", "IL", "Illinois", "6", -6:1, 17341, 1148, 1, 0, 0);
+add (48015,"Austin County", "TX", "Texas", "7", -6:1, 23439, 1148, 1, 0, 0);
+add (22071,"Orleans Parish", "LA", "Louisiana", "7", -6:1, 465538, 1148, 1, 0, 0);
+add (40099,"Murray County", "OK", "Oklahoma", "7", -6:1, 12335, 1148, 1, 0, 0);
+add (21015,"Boone County", "KY", "Kentucky", "4", -6:1, 79671, 1148, 1, 0, 0);
+add (19061,"Dubuque County", "IA", "Iowa", "5", -6:1, 87806, 1148, 1, 0, 0);
+add (29125,"Maries County", "MO", "Mosourri", "6", -6:1, 8473, 1148, 1, 0, 0);
+add (51009,"Amherst County", "VA", "Virginia", "2", -5:1, 30042, 1387, 1, 0, 0);
+add (38045,"LaMoure County", "ND", "North Dakota", "5", -6:1, 4759, 1148, 1, 0, 0);
+add (16069,"Nez Perce County", "ID", "Idaho", "8", -7:1, 36852, 4647, 1, 0, 0);
+add (26025,"Calhoun County", "MI", "Michigan", "4", -5:1, 141005, 1387, 1, 0, 0);
+add (37027,"Caldwell County", "NC", "North Carolina", "2", -5:1, 76096, 1387, 1, 0, 0);
+add (02164,"Lake and Peninsula Borough", "AK", "Alaska", "9", -9:1, 1699, 1174, 0, 0, 1);
+add (16039,"Elmore County", "ID", "Idaho", "8", -7:1, 25173, 4647, 1, 0, 0);
+add (30085,"Roosevelt County", "MT", "Montana", "6", -7:1, 10987, 4647, 1, 0, 0);
+add (26011,"Arenac County", "MI", "Michigan", "4", -5:1, 16413, 1387, 1, 0, 0);
+add (13121,"Fulton County", "GA", "Georgia", "3", -5:1, 739367, 1387, 1, 0, 0);
+add (17051,"Fayette County", "IL", "Illinois", "6", -6:1, 21972, 1148, 1, 0, 0);
+add (29049,"Clinton County", "MO", "Mosourri", "6", -6:1, 19070, 1148, 1, 0, 0);
+add (21237,"Wolfe County", "KY", "Kentucky", "4", -5:1, 7366, 1387, 1, 0, 0);
+add (39103,"Medina County", "OH", "Ohio", "4", -5:1, 144019, 1387, 1, 0, 0);
+add (39043,"Erie County", "OH", "Ohio", "4", -5:1, 78279, 1387, 1, 0, 0);
+add (17087,"Johnson County", "IL", "Illinois", "6", -6:1, 13283, 1148, 1, 0, 0);
+add (18157,"Tippecanoe County", "IN", "Indiana", "4", -5:1, 139005, 1387, 1, 0, 0);
+add (16083,"Twin Falls County", "ID", "Idaho", "8", -7:1, 62265, 4647, 1, 0, 0);
+add (40149,"Washita County", "OK", "Oklahoma", "7", -6:1, 11796, 1148, 1, 0, 0);
+add (13233,"Polk County", "GA", "Georgia", "3", -5:1, 36308, 1387, 1, 0, 0);
+add (19015,"Boone County", "IA", "Iowa", "5", -6:1, 26233, 1148, 1, 0, 0);
+add (19125,"Marion County", "IA", "Iowa", "5", -6:1, 31357, 1148, 1, 0, 0);
+add (20171,"Scott County", "KS", "Kansas", "6", -6:1, 5018, 1148, 1, 0, 0);
+add (42053,"Forest County", "PA", "Pennsylvania", "1", -5:1, 5002, 1387, 1, 0, 0);
+add (48205,"Hartley County", "TX", "Texas", "7", -6:1, 5102, 1148, 1, 0, 0);
+add (20199,"Wallace County", "KS", "Kansas", "6", -6:1, 1802, 1148, 1, 0, 0);
+add (47145,"Roane County", "TN", "Tennesee", "3", -6:1, 50026, 1148, 1, 0, 0);
+add (29113,"Lincoln County", "MO", "Mosourri", "6", -6:1, 36556, 1148, 1, 0, 0);
+add (30009,"Carbon County", "MT", "Montana", "6", -7:1, 9444, 4647, 1, 0, 0);
+add (53049,"Pacific County", "WA", "Washiington", "9", -8:1, 20802, 3240, 0, 1, 0);
+add (01045,"Dale County", "AL", "Alabama", "3", -6:1, 48872, 1148, 1, 0, 0);
+add (51071,"Giles County", "VA", "Virginia", "2", -5:1, 16242, 1387, 1, 0, 0);
+add (06099,"Stanislaus County", "CA", "California", "9", -8:1, 426460, 3240, 0, 1, 0);
+add (28093,"Marshall County", "MS", "Missippi", "5", -6:1, 32296, 1148, 1, 0, 0);
+add (47049,"Fentress County", "TN", "Tennesee", "3", -5:1, 16184, 1387, 1, 0, 0);
+add (01095,"Marshall County", "AL", "Alabama", "3", -6:1, 80346, 1148, 1, 0, 0);
+add (25025,"Suffolk County", "MA", "Massachusetts", "0", -5:1, 641715, 1387, 1, 0, 0);
+add (13287,"Turner County", "GA", "Georgia", "3", -5:1, 9160, 1387, 1, 0, 0);
+add (51049,"Cumberland County", "VA", "Virginia", "2", -5:1, 7851, 1387, 1, 0, 0);
+add (11001,"District of Columbia", "DC", "District of Columbia", "2", -5:1, 523124, 1387, 1, 0, 0);
+add (20021,"Cherokee County", "KS", "Kansas", "6", -6:1, 22552, 1148, 1, 0, 0);
+add (54107,"Wood County", "WV", "West Virginia", "2", -5:1, 86768, 1387, 1, 0, 0);
+add (48103,"Crane County", "TX", "Texas", "7", -6:1, 4510, 1148, 1, 0, 0);
+add (21075,"Fulton County", "KY", "Kentucky", "4", -6:1, 7542, 1148, 1, 0, 0);
+add (42013,"Blair County", "PA", "Pennsylvania", "1", -5:1, 130615, 1387, 1, 0, 0);
+add (44005,"Newport County", "RI", "Rhode Island", "0", -5:1, 82868, 1387, 1, 0, 0);
+add (19105,"Jones County", "IA", "Iowa", "5", -6:1, 20349, 1148, 1, 0, 0);
+add (39135,"Preble County", "OH", "Ohio", "4", -5:1, 43226, 1387, 1, 0, 0);
+add (26031,"Cheboygan County", "MI", "Michigan", "4", -5:1, 23738, 1387, 1, 0, 0);
+add (18107,"Montgomery County", "IN", "Indiana", "4", -5:1, 36337, 1387, 1, 0, 0);
+add (37005,"Alleghany County", "NC", "North Carolina", "2", -5:1, 9842, 1387, 1, 0, 0);
+add (46129,"Walworth County", "SD", "South Dakota", "5", -7:1, 5582, 4647, 1, 0, 0);
+add (37165,"Scotland County", "NC", "North Carolina", "2", -5:1, 35802, 1387, 1, 0, 0);
+add (05149,"Yell County", "AR", "Arkansas", "7", -6:1, 19110, 1148, 1, 0, 0);
+add (21085,"Grayson County", "KY", "Kentucky", "4", -6:1, 23763, 1148, 1, 0, 0);
+add (55139,"Winnebago County", "WI", "Wisconnsin", "5", -6:1, 149818, 1148, 1, 0, 0);
+add (26057,"Gratiot County", "MI", "Michigan", "4", -5:1, 40126, 1387, 1, 0, 0);
+add (37141,"Pender County", "NC", "North Carolina", "2", -5:1, 39510, 1387, 1, 0, 0);
+add (41037,"Lake County", "OR", "Oregon", "9", -8:1, 7152, 3240, 0, 1, 0);
+add (48125,"Dickens County", "TX", "Texas", "7", -6:1, 2242, 1148, 1, 0, 0);
+add (38009,"Bottineau County", "ND", "North Dakota", "5", -6:1, 7226, 1148, 1, 0, 0);
+add (36067,"Onondaga County", "NY", "New York", "1", -5:1, 458301, 1387, 1, 0, 0);
+add (08061,"Kiowa County", "CO", "Colorado", "8", -7:1, 1633, 4647, 1, 0, 0);
+add (27067,"Kandiyohi County", "MN", "Minnesota", "5", -6:1, 41086, 1148, 1, 0, 0);
+add (53001,"Adams County", "WA", "Washiington", "9", -8:1, 15324, 3240, 0, 1, 0);
+add (35027,"Lincoln County", "NM", "New Mexico", "8", -7:1, 16400, 4647, 1, 0, 0);
+add (20051,"Ellis County", "KS", "Kansas", "6", -6:1, 26309, 1148, 1, 0, 0);
+add (31051,"Dixon County", "NE", "Nebraska", "6", -6:1, 6300, 1148, 1, 0, 0);
+add (21131,"Leslie County", "KY", "Kentucky", "4", -5:1, 13582, 1387, 1, 0, 0);
+add (13297,"Walton County", "GA", "Georgia", "3", -5:1, 54485, 1387, 1, 0, 0);
+add (28099,"Neshoba County", "MS", "Missippi", "5", -6:1, 27653, 1148, 1, 0, 0);
+add (31087,"Hitchcock County", "NE", "Nebraska", "6", -6:1, 3442, 1148, 1, 0, 0);
+add (20085,"Jackson County", "KS", "Kansas", "6", -6:1, 12130, 1148, 1, 0, 0);
+add (39131,"Pike County", "OH", "Ohio", "4", -5:1, 27775, 1387, 1, 0, 0);
+add (27005,"Becker County", "MN", "Minnesota", "5", -6:1, 29381, 1148, 1, 0, 0);
+add (20145,"Pawnee County", "KS", "Kansas", "6", -6:1, 7437, 1148, 1, 0, 0);
+add (17189,"Washington County", "IL", "Illinois", "6", -6:1, 15367, 1148, 1, 0, 0);
+add (01025,"Clarke County", "AL", "Alabama", "3", -6:1, 28499, 1148, 1, 0, 0);
+add (37101,"Johnston County", "NC", "North Carolina", "2", -5:1, 106582, 1387, 1, 0, 0);
+add (13171,"Lamar County", "GA", "Georgia", "3", -5:1, 14706, 1387, 1, 0, 0);
+add (18131,"Pulaski County", "IN", "Indiana", "4", -5:1, 13257, 1387, 1, 0, 0);
+add (17183,"Vermilion County", "IL", "Illinois", "6", -6:1, 84204, 1148, 1, 0, 0);
+add (45067,"Marion County", "SC", "South Carolina", "2", -5:1, 34610, 1387, 1, 0, 0);
+add (38021,"Dickey County", "ND", "North Dakota", "5", -6:1, 5644, 1148, 1, 0, 0);
+add (30063,"Missoula County", "MT", "Montana", "6", -7:1, 88989, 4647, 1, 0, 0);
+add (45091,"York County", "SC", "South Carolina", "2", -5:1, 154313, 1387, 1, 0, 0);
+add (20169,"Saline County", "KS", "Kansas", "6", -6:1, 51617, 1148, 1, 0, 0);
+add (22111,"Union Parish", "LA", "Louisiana", "7", -6:1, 21989, 1148, 1, 0, 0);
+add (48291,"Liberty County", "TX", "Texas", "7", -6:1, 65078, 1148, 1, 0, 0);
+add (47097,"Lauderdale County", "TN", "Tennesee", "3", -6:1, 24206, 1148, 1, 0, 0);
+add (42019,"Butler County", "PA", "Pennsylvania", "1", -5:1, 170785, 1387, 1, 0, 0);
+add (46041,"Dewey County", "SD", "South Dakota", "5", -6:1, 5821, 1148, 1, 0, 0);
+add (39067,"Harrison County", "OH", "Ohio", "4", -5:1, 16097, 1387, 1, 0, 0);
+add (48453,"Travis County", "TX", "Texas", "7", -6:1, 710626, 1148, 1, 0, 0);
+add (48443,"Terrell County", "TX", "Texas", "7", -6:1, 1181, 1148, 1, 0, 0);
+add (51540,"Charlottesville city", "VA", "Virginia", "2", -5:1, 38223, 1387, 1, 0, 0);
+add (30041,"Hill County", "MT", "Montana", "6", -7:1, 17373, 4647, 1, 0, 0);
+add (16045,"Gem County", "ID", "Idaho", "8", -7:1, 14816, 4647, 1, 0, 0);
+add (22047,"Iberville Parish", "LA", "Louisiana", "7", -6:1, 31173, 1148, 1, 0, 0);
+add (17095,"Knox County", "IL", "Illinois", "6", -6:1, 55526, 1148, 1, 0, 0);
+add (26061,"Houghton County", "MI", "Michigan", "4", -5:1, 35719, 1387, 1, 0, 0);
+add (37061,"Duplin County", "NC", "North Carolina", "2", -5:1, 42993, 1387, 1, 0, 0);
+add (23025,"Somerset County", "ME", "Maine", "0", -5:1, 52380, 1387, 1, 0, 0);
+add (20061,"Geary County", "KS", "Kansas", "6", -6:1, 25370, 1148, 1, 0, 0);
+add (36105,"Sullivan County", "NY", "New York", "1", -5:1, 69111, 1387, 1, 0, 0);
+add (21203,"Rockcastle County", "KY", "Kentucky", "4", -5:1, 15951, 1387, 1, 0, 0);
+add (20183,"Smith County", "KS", "Kansas", "6", -6:1, 4588, 1148, 1, 0, 0);
+add (42117,"Tioga County", "PA", "Pennsylvania", "1", -5:1, 41606, 1387, 1, 0, 0);
+add (29137,"Monroe County", "MO", "Mosourri", "6", -6:1, 9021, 1148, 1, 0, 0);
+add (42071,"Lancaster County", "PA", "Pennsylvania", "1", -5:1, 456414, 1387, 1, 0, 0);
+add (48395,"Robertson County", "TX", "Texas", "7", -6:1, 15527, 1148, 1, 0, 0);
+add (18089,"Lake County", "IN", "Indiana", "4", -5:1, 478323, 1387, 1, 0, 0);
+add (12089,"Nassau County", "FL", "Florida", "3", -5:1, 55349, 1387, 1, 0, 0);
+add (55069,"Lincoln County", "WI", "Wisconnsin", "5", -6:1, 29727, 1148, 1, 0, 0);
+add (16077,"Power County", "ID", "Idaho", "8", -7:1, 8309, 4647, 1, 0, 0);
+add (13149,"Heard County", "GA", "Georgia", "3", -5:1, 10082, 1387, 1, 0, 0);
+add (25011,"Franklin County", "MA", "Massachusetts", "0", -5:1, 70597, 1387, 1, 0, 0);
+add (31153,"Sarpy County", "NE", "Nebraska", "6", -7:1, 120785, 4647, 1, 0, 0);
+add (42041,"Cumberland County", "PA", "Pennsylvania", "1", -5:1, 208634, 1387, 1, 0, 0);
+add (28059,"Jackson County", "MS", "Missippi", "5", -6:1, 130910, 1148, 1, 0, 0);
+add (37145,"Person County", "NC", "North Carolina", "2", -5:1, 33647, 1387, 1, 0, 0);
+add (21169,"Metcalfe County", "KY", "Kentucky", "4", -5:1, 9561, 1387, 1, 0, 0);
+add (51087,"Henrico County", "VA", "Virginia", "2", -5:1, 246052, 1387, 1, 0, 0);
+add (20151,"Pratt County", "KS", "Kansas", "6", -6:1, 9700, 1148, 1, 0, 0);
+add (06109,"Tuolumne County", "CA", "California", "9", -8:1, 53248, 3240, 0, 1, 0);
+add (05111,"Poinsett County", "AR", "Arkansas", "7", -6:1, 24750, 1148, 1, 0, 0);
+add (30019,"Daniels County", "MT", "Montana", "6", -7:1, 2001, 4647, 1, 0, 0);
+add (39039,"Defiance County", "OH", "Ohio", "4", -5:1, 39824, 1387, 1, 0, 0);
+add (02282,"Yakutat Borough", "AK", "Alaska", "9", -9:1, 799, 1174, 0, 0, 1);
+add (22015,"Bossier Parish", "LA", "Louisiana", "7", -6:1, 93463, 1148, 1, 0, 0);
+add (29105,"Laclede County", "MO", "Mosourri", "6", -6:1, 31029, 1148, 1, 0, 0);
+add (12103,"Pinellas County", "FL", "Florida", "3", -5:1, 878231, 1387, 1, 0, 0);
+add (36011,"Cayuga County", "NY", "New York", "1", -5:1, 81264, 1387, 1, 0, 0);
+add (45073,"Oconee County", "SC", "South Carolina", "2", -5:1, 64059, 1387, 1, 0, 0);
+add (55041,"Forest County", "WI", "Wisconnsin", "5", -6:1, 9645, 1148, 1, 0, 0);
+add (29219,"Warren County", "MO", "Mosourri", "6", -6:1, 24600, 1148, 1, 0, 0);
+add (18129,"Posey County", "IN", "Indiana", "4", -5:1, 26512, 1387, 1, 0, 0);
+add (23003,"Aroostook County", "ME", "Maine", "0", -5:1, 76085, 1387, 1, 0, 0);
+add (48409,"San Patricio County", "TX", "Texas", "7", -6:1, 71393, 1148, 1, 0, 0);
+add (13057,"Cherokee County", "GA", "Georgia", "3", -5:1, 134498, 1387, 1, 0, 0);
+add (01131,"Wilcox County", "AL", "Alabama", "3", -6:1, 13468, 1148, 1, 0, 0);
+add (26013,"Baraga County", "MI", "Michigan", "4", -5:1, 8413, 1387, 1, 0, 0);
+add (05139,"Union County", "AR", "Arkansas", "7", -6:1, 45304, 1148, 1, 0, 0);
+add (28055,"Issaquena County", "MS", "Missippi", "5", -6:1, 1629, 1148, 1, 0, 0);
+add (29205,"Shelby County", "MO", "Mosourri", "6", -6:1, 6802, 1148, 1, 0, 0);
+add (31173,"Thurston County", "NE", "Nebraska", "6", -7:1, 7181, 4647, 1, 0, 0);
+add (51740,"Portsmouth city", "VA", "Virginia", "2", -5:1, 98936, 1387, 1, 0, 0);
+add (28145,"Union County", "MS", "Missippi", "5", -6:1, 23828, 1148, 1, 0, 0);
+add (22105,"Tangipahoa Parish", "LA", "Louisiana", "7", -6:1, 96983, 1148, 1, 0, 0);
+add (36029,"Erie County", "NY", "New York", "1", -5:1, 934471, 1387, 1, 0, 0);
+add (29211,"Sullivan County", "MO", "Mosourri", "6", -6:1, 7040, 1148, 1, 0, 0);
+add (31169,"Thayer County", "NE", "Nebraska", "6", -7:1, 6277, 4647, 1, 0, 0);
+add (19175,"Union County", "IA", "Iowa", "5", -6:1, 12554, 1148, 1, 0, 0);
+add (06101,"Sutter County", "CA", "California", "9", -8:1, 76976, 3240, 0, 1, 0);
+add (46057,"Hamlin County", "SD", "South Dakota", "5", -7:1, 5335, 4647, 1, 0, 0);
+add (47103,"Lincoln County", "TN", "Tennesee", "3", -6:1, 29761, 1148, 1, 0, 0);
+add (30011,"Carter County", "MT", "Montana", "6", -7:1, 1537, 4647, 1, 0, 0);
+add (20043,"Doniphan County", "KS", "Kansas", "6", -6:1, 7856, 1148, 1, 0, 0);
+add (32003,"Clark County", "NV", "Nevada", "8", -8:1, 1162129, 3240, 0, 1, 0);
+add (06075,"San Francisco County", "CA", "California", "9", -8:1, 745774, 3240, 0, 1, 0);
+add (18045,"Fountain County", "IN", "Indiana", "4", -5:1, 18348, 1387, 1, 0, 0);
+add (47127,"Moore County", "TN", "Tennesee", "3", -6:1, 5196, 1148, 1, 0, 0);
+add (21113,"Jessamine County", "KY", "Kentucky", "4", -6:1, 36533, 1148, 1, 0, 0);
+add (40139,"Texas County", "OK", "Oklahoma", "7", -6:1, 18640, 1148, 1, 0, 0);
+add (37177,"Tyrrell County", "NC", "North Carolina", "2", -5:1, 3734, 1387, 1, 0, 0);
+add (05069,"Jefferson County", "AR", "Arkansas", "7", -6:1, 81556, 1148, 1, 0, 0);
+add (55093,"Pierce County", "WI", "Wisconnsin", "5", -6:1, 35606, 1148, 1, 0, 0);
+add (53009,"Clallam County", "WA", "Washiington", "9", -8:1, 64169, 3240, 0, 1, 0);
+add (51015,"Augusta County", "VA", "Virginia", "2", -5:1, 61775, 1387, 1, 0, 0);
+add (06027,"Inyo County", "CA", "California", "9", -8:1, 18125, 3240, 0, 1, 0);
+add (18165,"Vermillion County", "IN", "Indiana", "4", -5:1, 16908, 1387, 1, 0, 0);
+add (19153,"Polk County", "IA", "Iowa", "5", -6:1, 359826, 1148, 1, 0, 0);
+add (19009,"Audubon County", "IA", "Iowa", "5", -6:1, 6784, 1148, 1, 0, 0);
+add (40051,"Grady County", "OK", "Oklahoma", "7", -6:1, 45934, 1148, 1, 0, 0);
+add (21025,"Breathitt County", "KY", "Kentucky", "4", -6:1, 15686, 1148, 1, 0, 0);
+add (17193,"White County", "IL", "Illinois", "6", -6:1, 15646, 1148, 1, 0, 0);
+add (08057,"Jackson County", "CO", "Colorado", "8", -7:1, 1535, 4647, 1, 0, 0);
+add (24015,"Cecil County", "MD", "Maryland", "2", -5:1, 82522, 1387, 1, 0, 0);
+add (48293,"Limestone County", "TX", "Texas", "7", -6:1, 20930, 1148, 1, 0, 0);
+add (19133,"Monona County", "IA", "Iowa", "5", -6:1, 10110, 1148, 1, 0, 0);
+add (48381,"Randall County", "TX", "Texas", "7", -6:1, 99664, 1148, 1, 0, 0);
+add (18021,"Clay County", "IN", "Indiana", "4", -5:1, 26637, 1387, 1, 0, 0);
+add (16003,"Adams County", "ID", "Idaho", "8", -7:1, 3804, 4647, 1, 0, 0);
+add (21209,"Scott County", "KY", "Kentucky", "4", -5:1, 30685, 1387, 1, 0, 0);
+add (51019,"Bedford County", "VA", "Virginia", "2", -5:1, 55872, 1387, 1, 0, 0);
+add (46063,"Harding County", "SD", "South Dakota", "5", -7:1, 1476, 4647, 1, 0, 0);
+add (55131,"Washington County", "WI", "Wisconnsin", "5", -6:1, 113906, 1148, 1, 0, 0);
+add (19067,"Floyd County", "IA", "Iowa", "5", -6:1, 16353, 1148, 1, 0, 0);
+add (18179,"Wells County", "IN", "Indiana", "4", -5:1, 26842, 1387, 1, 0, 0);
+add (38003,"Barnes County", "ND", "North Dakota", "5", -6:1, 11958, 1148, 1, 0, 0);
+add (13195,"Madison County", "GA", "Georgia", "3", -5:1, 24312, 1387, 1, 0, 0);
+add (05049,"Fulton County", "AR", "Arkansas", "7", -6:1, 10901, 1148, 1, 0, 0);
+add (47117,"Marshall County", "TN", "Tennesee", "3", -6:1, 26302, 1148, 1, 0, 0);
+add (47037,"Davidson County", "TN", "Tennesee", "3", -5:1, 533967, 1387, 1, 0, 0);
+add (18067,"Howard County", "IN", "Indiana", "4", -5:1, 83452, 1387, 1, 0, 0);
+add (06017,"El Dorado County", "CA", "California", "9", -8:1, 158502, 3240, 0, 1, 0);
+add (05067,"Jackson County", "AR", "Arkansas", "7", -6:1, 17783, 1148, 1, 0, 0);
+add (12117,"Seminole County", "FL", "Florida", "3", -5:1, 350859, 1387, 1, 0, 0);
+add (16071,"Oneida County", "ID", "Idaho", "8", -7:1, 4051, 4647, 1, 0, 0);
+add (26085,"Lake County", "MI", "Michigan", "4", -5:1, 10475, 1387, 1, 0, 0);
+add (41059,"Umatilla County", "OR", "Oregon", "9", -8:1, 65495, 3240, 0, 1, 0);
+add (13173,"Lanier County", "GA", "Georgia", "3", -5:1, 6986, 1387, 1, 0, 0);
+add (27141,"Sherburne County", "MN", "Minnesota", "5", -6:1, 60391, 1148, 1, 0, 0);
+add (13237,"Putnam County", "GA", "Georgia", "3", -5:1, 17559, 1387, 1, 0, 0);
+add (17073,"Henry County", "IL", "Illinois", "6", -6:1, 51580, 1148, 1, 0, 0);
+add (30075,"Powder River County", "MT", "Montana", "6", -7:1, 1826, 4647, 1, 0, 0);
+add (31121,"Merrick County", "NE", "Nebraska", "6", -7:1, 8052, 4647, 1, 0, 0);
+add (42017,"Bucks County", "PA", "Pennsylvania", "1", -5:1, 587942, 1387, 1, 0, 0);
+add (40131,"Rogers County", "OK", "Oklahoma", "7", -6:1, 68128, 1148, 1, 0, 0);
+add (19043,"Clayton County", "IA", "Iowa", "5", -6:1, 18722, 1148, 1, 0, 0);
+add (53075,"Whitman County", "WA", "Washiington", "9", -8:1, 39487, 3240, 0, 1, 0);
+add (05021,"Clay County", "AR", "Arkansas", "7", -6:1, 17223, 1148, 1, 0, 0);
+add (31119,"Madison County", "NE", "Nebraska", "6", -7:1, 34585, 4647, 1, 0, 0);
+add (16031,"Cassia County", "ID", "Idaho", "8", -7:1, 21359, 4647, 1, 0, 0);
+add (12113,"Santa Rosa County", "FL", "Florida", "3", -5:1, 117322, 1387, 1, 0, 0);
+add (48135,"Ector County", "TX", "Texas", "7", -6:1, 125729, 1148, 1, 0, 0);
+add (48461,"Upton County", "TX", "Texas", "7", -6:1, 3749, 1148, 1, 0, 0);
+add (36103,"Suffolk County", "NY", "New York", "1", -5:1, 1371269, 1387, 1, 0, 0);
+add (26163,"Wayne County", "MI", "Michigan", "4", -5:1, 2118129, 1387, 1, 0, 0);
+add (01071,"Jackson County", "AL", "Alabama", "3", -6:1, 51329, 1148, 1, 0, 0);
+add (21121,"Knox County", "KY", "Kentucky", "4", -5:1, 31890, 1387, 1, 0, 0);
+add (48467,"Van Zandt County", "TX", "Texas", "7", -6:1, 44037, 1148, 1, 0, 0);
+add (34019,"Hunterdon County", "NJ", "New Jersey", "0", -5:1, 122428, 1387, 1, 0, 0);
+add (27103,"Nicollet County", "MN", "Minnesota", "5", -6:1, 29600, 1148, 1, 0, 0);
+add (29103,"Knox County", "MO", "Mosourri", "6", -6:1, 4355, 1148, 1, 0, 0);
+add (41019,"Douglas County", "OR", "Oregon", "9", -8:1, 101837, 3240, 0, 1, 0);
+add (41069,"Wheeler County", "OR", "Oregon", "9", -8:1, 1566, 3240, 0, 1, 0);
+add (28025,"Clay County", "MS", "Missippi", "5", -6:1, 21637, 1148, 1, 0, 0);
+add (21163,"Meade County", "KY", "Kentucky", "4", -5:1, 28809, 1387, 1, 0, 0);
+add (21017,"Bourbon County", "KY", "Kentucky", "4", -6:1, 19368, 1148, 1, 0, 0);
+add (19189,"Winnebago County", "IA", "Iowa", "5", -6:1, 11931, 1148, 1, 0, 0);
+add (26071,"Iron County", "MI", "Michigan", "4", -5:1, 12883, 1387, 1, 0, 0);
+add (13181,"Lincoln County", "GA", "Georgia", "3", -5:1, 8276, 1387, 1, 0, 0);
+add (29003,"Andrew County", "MO", "Mosourri", "6", -6:1, 15562, 1148, 1, 0, 0);
+add (13113,"Fayette County", "GA", "Georgia", "3", -5:1, 88609, 1387, 1, 0, 0);
+add (45007,"Anderson County", "SC", "South Carolina", "2", -5:1, 160791, 1387, 1, 0, 0);
+add (25003,"Berkshire County", "MA", "Massachusetts", "0", -5:1, 133038, 1387, 1, 0, 0);
+add (12049,"Hardee County", "FL", "Florida", "3", -5:1, 21046, 1387, 1, 0, 0);
+add (02290,"Yukon-Koyukuk Census Area", "AK", "Alaska", "9", -9:1, 5952, 1174, 0, 0, 1);
+add (06031,"Kings County", "CA", "California", "9", -8:1, 118866, 3240, 0, 1, 0);
+add (27107,"Norman County", "MN", "Minnesota", "5", -6:1, 7535, 1148, 1, 0, 0);
+add (36065,"Oneida County", "NY", "New York", "1", -5:1, 230628, 1387, 1, 0, 0);
+add (30047,"Lake County", "MT", "Montana", "6", -7:1, 25648, 4647, 1, 0, 0);
+add (02122,"Kenai Peninsula Borough", "AK", "Alaska", "9", -9:1, 48008, 1174, 0, 0, 1);
+add (48289,"Leon County", "TX", "Texas", "7", -6:1, 14489, 1148, 1, 0, 0);
+add (40001,"Adair County", "OK", "Oklahoma", "7", -6:1, 20349, 1148, 1, 0, 0);
+add (21221,"Trigg County", "KY", "Kentucky", "4", -5:1, 12399, 1387, 1, 0, 0);
+add (45061,"Lee County", "SC", "South Carolina", "2", -5:1, 20399, 1387, 1, 0, 0);
+add (22029,"Concordia Parish", "LA", "Louisiana", "7", -6:1, 20749, 1148, 1, 0, 0);
+add (12073,"Leon County", "FL", "Florida", "3", -5:1, 216978, 1387, 1, 0, 0);
+add (26021,"Berrien County", "MI", "Michigan", "4", -5:1, 160245, 1387, 1, 0, 0);
+add (20103,"Leavenworth County", "KS", "Kansas", "6", -6:1, 71299, 1148, 1, 0, 0);
+add (22109,"Terrebonne Parish", "LA", "Louisiana", "7", -6:1, 104534, 1148, 1, 0, 0);
+add (19097,"Jackson County", "IA", "Iowa", "5", -6:1, 20078, 1148, 1, 0, 0);
+add (49045,"Tooele County", "UT", "Utah", "8", -7:1, 33351, 4647, 1, 0, 0);
+add (48387,"Red River County", "TX", "Texas", "7", -6:1, 13731, 1148, 1, 0, 0);
+add (13103,"Effingham County", "GA", "Georgia", "3", -5:1, 36483, 1387, 1, 0, 0);
+add (13125,"Glascock County", "GA", "Georgia", "3", -5:1, 2512, 1387, 1, 0, 0);
+add (18075,"Jay County", "IN", "Indiana", "4", -5:1, 21729, 1387, 1, 0, 0);
+add (45025,"Chesterfield County", "SC", "South Carolina", "2", -5:1, 41080, 1387, 1, 0, 0);
+add (19145,"Page County", "IA", "Iowa", "5", -6:1, 17269, 1148, 1, 0, 0);
+add (21053,"Clinton County", "KY", "Kentucky", "4", -6:1, 9346, 1148, 1, 0, 0);
+add (29065,"Dent County", "MO", "Mosourri", "6", -6:1, 14103, 1148, 1, 0, 0);
+add (05141,"Van Buren County", "AR", "Arkansas", "7", -6:1, 15550, 1148, 1, 0, 0);
+add (02188,"Northwest Arctic Borough", "AK", "Alaska", "9", -9:1, 6758, 1174, 0, 0, 1);
+add (01057,"Fayette County", "AL", "Alabama", "3", -6:1, 18133, 1148, 1, 0, 0);
+add (54091,"Taylor County", "WV", "West Virginia", "2", -5:1, 15326, 1387, 1, 0, 0);
+add (13037,"Calhoun County", "GA", "Georgia", "3", -5:1, 5053, 1387, 1, 0, 0);
+add (39085,"Lake County", "OH", "Ohio", "4", -5:1, 223779, 1387, 1, 0, 0);
+add (19077,"Guthrie County", "IA", "Iowa", "5", -6:1, 11571, 1148, 1, 0, 0);
+add (17041,"Douglas County", "IL", "Illinois", "6", -6:1, 19915, 1148, 1, 0, 0);
+add (27041,"Douglas County", "MN", "Minnesota", "5", -6:1, 31045, 1148, 1, 0, 0);
+add (31131,"Otoe County", "NE", "Nebraska", "6", -7:1, 14787, 4647, 1, 0, 0);
+add (47045,"Dyer County", "TN", "Tennesee", "3", -5:1, 36782, 1387, 1, 0, 0);
+add (28007,"Attala County", "MS", "Missippi", "5", -6:1, 18404, 1148, 1, 0, 0);
+add (39083,"Knox County", "OH", "Ohio", "4", -5:1, 53309, 1387, 1, 0, 0);
+add (29225,"Webster County", "MO", "Mosourri", "6", -6:1, 29108, 1148, 1, 0, 0);
+add (54079,"Putnam County", "WV", "West Virginia", "2", -5:1, 51164, 1387, 1, 0, 0);
+add (01119,"Sumter County", "AL", "Alabama", "3", -6:1, 15766, 1148, 1, 0, 0);
+add (24041,"Talbot County", "MD", "Maryland", "2", -5:1, 33065, 1387, 1, 0, 0);
+add (54019,"Fayette County", "WV", "West Virginia", "2", -5:1, 47930, 1387, 1, 0, 0);
+add (54069,"Ohio County", "WV", "West Virginia", "2", -5:1, 48287, 1387, 1, 0, 0);
+add (12029,"Dixie County", "FL", "Florida", "3", -5:1, 12959, 1387, 1, 0, 0);
+add (13315,"Wilcox County", "GA", "Georgia", "3", -5:1, 7365, 1387, 1, 0, 0);
+add (13193,"Macon County", "GA", "Georgia", "3", -5:1, 13244, 1387, 1, 0, 0);
+add (26135,"Oscoda County", "MI", "Michigan", "4", -5:1, 8882, 1387, 1, 0, 0);
+add (50021,"Rutland County", "VT", "Vermont", "0", -5:1, 62524, 1387, 1, 0, 0);
+add (26137,"Otsego County", "MI", "Michigan", "4", -5:1, 22129, 1387, 1, 0, 0);
+add (38051,"McIntosh County", "ND", "North Dakota", "5", -6:1, 3442, 1148, 1, 0, 0);
+add (27165,"Watonwan County", "MN", "Minnesota", "5", -6:1, 11470, 1148, 1, 0, 0);
+add (47137,"Pickett County", "TN", "Tennesee", "3", -6:1, 4629, 1148, 1, 0, 0);
+add (18121,"Parke County", "IN", "Indiana", "4", -5:1, 16720, 1387, 1, 0, 0);
+add (49001,"Beaver County", "UT", "Utah", "8", -7:1, 5896, 4647, 1, 0, 0);
+add (48417,"Shackelford County", "TX", "Texas", "7", -6:1, 3303, 1148, 1, 0, 0);
+add (36073,"Orleans County", "NY", "New York", "1", -5:1, 44518, 1387, 1, 0, 0);
+add (01083,"Limestone County", "AL", "Alabama", "3", -6:1, 62241, 1148, 1, 0, 0);
+add (47083,"Houston County", "TN", "Tennesee", "3", -5:1, 7853, 1387, 1, 0, 0);
+add (37191,"Wayne County", "NC", "North Carolina", "2", -5:1, 112227, 1387, 1, 0, 0);
+add (29069,"Dunklin County", "MO", "Mosourri", "6", -6:1, 32700, 1148, 1, 0, 0);
+add (22051,"Jefferson Parish", "LA", "Louisiana", "7", -6:1, 450933, 1148, 1, 0, 0);
+add (08019,"Clear Creek County", "CO", "Colorado", "8", -7:1, 9001, 4647, 1, 0, 0);
+add (26127,"Oceana County", "MI", "Michigan", "4", -5:1, 24833, 1387, 1, 0, 0);
+add (46135,"Yankton County", "SD", "South Dakota", "5", -6:1, 21051, 1148, 1, 0, 0);
+add (20023,"Cheyenne County", "KS", "Kansas", "6", -6:1, 3174, 1148, 1, 0, 0);
+add (32029,"Storey County", "NV", "Nevada", "8", -8:1, 3053, 3240, 0, 1, 0);
+add (36115,"Washington County", "NY", "New York", "1", -5:1, 60481, 1387, 1, 0, 0);
+add (05125,"Saline County", "AR", "Arkansas", "7", -6:1, 77412, 1148, 1, 0, 0);
+add (51021,"Bland County", "VA", "Virginia", "2", -5:1, 6748, 1387, 1, 0, 0);
+add (48475,"Ward County", "TX", "Texas", "7", -6:1, 11801, 1148, 1, 0, 0);
+add (28015,"Carroll County", "MS", "Missippi", "5", -6:1, 9995, 1148, 1, 0, 0);
+add (48439,"Tarrant County", "TX", "Texas", "7", -6:1, 1355273, 1148, 1, 0, 0);
+add (25027,"Worcester County", "MA", "Massachusetts", "0", -5:1, 731881, 1387, 1, 0, 0);
+add (13285,"Troup County", "GA", "Georgia", "3", -5:1, 58783, 1387, 1, 0, 0);
+add (17177,"Stephenson County", "IL", "Illinois", "6", -6:1, 48951, 1148, 1, 0, 0);
+add (36083,"Rensselaer County", "NY", "New York", "1", -5:1, 152689, 1387, 1, 0, 0);
+add (29127,"Marion County", "MO", "Mosourri", "6", -6:1, 27771, 1148, 1, 0, 0);
+add (05013,"Calhoun County", "AR", "Arkansas", "7", -6:1, 5729, 1148, 1, 0, 0);
+add (29163,"Pike County", "MO", "Mosourri", "6", -6:1, 16347, 1148, 1, 0, 0);
+add (46035,"Davison County", "SD", "South Dakota", "5", -6:1, 18006, 1148, 1, 0, 0);
+add (48311,"McMullen County", "TX", "Texas", "7", -6:1, 790, 1148, 1, 0, 0);
+add (28151,"Washington County", "MS", "Missippi", "5", -6:1, 65264, 1148, 1, 0, 0);
+add (20063,"Gove County", "KS", "Kansas", "6", -6:1, 3054, 1148, 1, 0, 0);
+add (55135,"Waupaca County", "WI", "Wisconnsin", "5", -6:1, 50545, 1148, 1, 0, 0);
+add (05087,"Madison County", "AR", "Arkansas", "7", -6:1, 13224, 1148, 1, 0, 0);
+add (48363,"Palo Pinto County", "TX", "Texas", "7", -6:1, 25756, 1148, 1, 0, 0);
+add (25017,"Middlesex County", "MA", "Massachusetts", "0", -5:1, 1424116, 1387, 1, 0, 0);
+add (51131,"Northampton County", "VA", "Virginia", "2", -5:1, 12709, 1387, 1, 0, 0);
+add (13239,"Quitman County", "GA", "Georgia", "3", -5:1, 2486, 1387, 1, 0, 0);
+add (38101,"Ward County", "ND", "North Dakota", "5", -6:1, 58678, 1148, 1, 0, 0);
+add (47151,"Scott County", "TN", "Tennesee", "3", -6:1, 20044, 1148, 1, 0, 0);
+add (08105,"Rio Grande County", "CO", "Colorado", "8", -7:1, 11453, 4647, 1, 0, 0);
+add (21223,"Trimble County", "KY", "Kentucky", "4", -5:1, 7621, 1387, 1, 0, 0);
+add (48393,"Roberts County", "TX", "Texas", "7", -6:1, 939, 1148, 1, 0, 0);
+add (41063,"Wallowa County", "OR", "Oregon", "9", -8:1, 7368, 3240, 0, 1, 0);
+add (27123,"Ramsey County", "MN", "Minnesota", "5", -6:1, 485636, 1148, 1, 0, 0);
+add (21031,"Butler County", "KY", "Kentucky", "4", -6:1, 11926, 1148, 1, 0, 0);
+add (29171,"Putnam County", "MO", "Mosourri", "6", -6:1, 4912, 1148, 1, 0, 0);
+add (34011,"Cumberland County", "NJ", "New Jersey", "0", -5:1, 140341, 1387, 1, 0, 0);
+add (18125,"Pike County", "IN", "Indiana", "4", -5:1, 12882, 1387, 1, 0, 0);
+add (13279,"Toombs County", "GA", "Georgia", "3", -5:1, 25828, 1387, 1, 0, 0);
+add (01021,"Chilton County", "AL", "Alabama", "3", -6:1, 36918, 1148, 1, 0, 0);
+add (16041,"Franklin County", "ID", "Idaho", "8", -7:1, 11106, 4647, 1, 0, 0);
+add (49033,"Rich County", "UT", "Utah", "8", -7:1, 1834, 4647, 1, 0, 0);
+add (46125,"Turner County", "SD", "South Dakota", "5", -7:1, 8631, 4647, 1, 0, 0);
+add (04019,"Pima County", "AZ", "Arizona", "8", -7:1, 790755, 4647, 1, 0, 0);
+add (36091,"Saratoga County", "NY", "New York", "1", -5:1, 197606, 1387, 1, 0, 0);
+add (46081,"Lawrence County", "SD", "South Dakota", "5", -7:1, 22509, 4647, 1, 0, 0);
+add (10003,"New Castle County", "DE", "Delaware", "1", -5:1, 482807, 1387, 1, 0, 0);
+add (05061,"Howard County", "AR", "Arkansas", "7", -6:1, 13724, 1148, 1, 0, 0);
+add (21087,"Green County", "KY", "Kentucky", "4", -6:1, 10650, 1148, 1, 0, 0);
+add (13071,"Colquitt County", "GA", "Georgia", "3", -5:1, 40156, 1387, 1, 0, 0);
+add (12033,"Escambia County", "FL", "Florida", "3", -5:1, 282303, 1387, 1, 0, 0);
+add (51139,"Page County", "VA", "Virginia", "2", -5:1, 22989, 1387, 1, 0, 0);
+add (17167,"Sangamon County", "IL", "Illinois", "6", -6:1, 191378, 1148, 1, 0, 0);
+add (17133,"Monroe County", "IL", "Illinois", "6", -6:1, 26586, 1148, 1, 0, 0);
+add (06061,"Placer County", "CA", "California", "9", -8:1, 229259, 3240, 0, 1, 0);
+add (30071,"Phillips County", "MT", "Montana", "6", -7:1, 4821, 4647, 1, 0, 0);
+add (04007,"Gila County", "AZ", "Arizona", "8", -7:1, 48974, 4647, 1, 0, 0);
+add (01133,"Winston County", "AL", "Alabama", "3", -6:1, 24157, 1148, 1, 0, 0);
+add (13073,"Columbia County", "GA", "Georgia", "3", -5:1, 91118, 1387, 1, 0, 0);
+add (27109,"Olmsted County", "MN", "Minnesota", "5", -6:1, 116702, 1148, 1, 0, 0);
+add (40083,"Logan County", "OK", "Oklahoma", "7", -6:1, 30970, 1148, 1, 0, 0);
+add (55031,"Douglas County", "WI", "Wisconnsin", "5", -6:1, 43033, 1148, 1, 0, 0);
+add (34025,"Monmouth County", "NJ", "New Jersey", "0", -5:1, 603434, 1387, 1, 0, 0);
+add (17091,"Kankakee County", "IL", "Illinois", "6", -6:1, 102107, 1148, 1, 0, 0);
+add (48347,"Nacogdoches County", "TX", "Texas", "7", -6:1, 56220, 1148, 1, 0, 0);
+add (23005,"Cumberland County", "ME", "Maine", "0", -5:1, 253582, 1387, 1, 0, 0);
+add (18047,"Franklin County", "IN", "Indiana", "4", -5:1, 21808, 1387, 1, 0, 0);
+add (01075,"Lamar County", "AL", "Alabama", "3", -6:1, 15731, 1148, 1, 0, 0);
+add (22063,"Livingston Parish", "LA", "Louisiana", "7", -6:1, 88104, 1148, 1, 0, 0);
+add (18177,"Wayne County", "IN", "Indiana", "4", -5:1, 71313, 1387, 1, 0, 0);
+add (28157,"Wilkinson County", "MS", "Missippi", "5", -6:1, 9174, 1148, 1, 0, 0);
+add (48413,"Schleicher County", "TX", "Texas", "7", -6:1, 2984, 1148, 1, 0, 0);
+add (22123,"West Carroll Parish", "LA", "Louisiana", "7", -6:1, 12213, 1148, 1, 0, 0);
+add (08091,"Ouray County", "CO", "Colorado", "8", -7:1, 3313, 4647, 1, 0, 0);
+add (51830,"Williamsburg city", "VA", "Virginia", "2", -5:1, 11971, 1387, 1, 0, 0);
+add (51153,"Prince William County", "VA", "Virginia", "2", -5:1, 259827, 1387, 1, 0, 0);
+add (47183,"Weakley County", "TN", "Tennesee", "3", -6:1, 32942, 1148, 1, 0, 0);
+add (48207,"Haskell County", "TX", "Texas", "7", -6:1, 6158, 1148, 1, 0, 0);
+add (38031,"Foster County", "ND", "North Dakota", "5", -6:1, 3802, 1148, 1, 0, 0);
+add (37073,"Gates County", "NC", "North Carolina", "2", -5:1, 10070, 1387, 1, 0, 0);
+add (01113,"Russell County", "AL", "Alabama", "3", -6:1, 50387, 1148, 1, 0, 0);
+add (27037,"Dakota County", "MN", "Minnesota", "5", -6:1, 342528, 1148, 1, 0, 0);
+add (37077,"Granville County", "NC", "North Carolina", "2", -5:1, 42908, 1387, 1, 0, 0);
+add (47023,"Chester County", "TN", "Tennesee", "3", -5:1, 14700, 1387, 1, 0, 0);
+add (28041,"Greene County", "MS", "Missippi", "5", -6:1, 11766, 1148, 1, 0, 0);
+add (17015,"Carroll County", "IL", "Illinois", "6", -6:1, 16941, 1148, 1, 0, 0);
+add (39133,"Portage County", "OH", "Ohio", "4", -5:1, 151222, 1387, 1, 0, 0);
+add (06047,"Merced County", "CA", "California", "9", -8:1, 197730, 3240, 0, 1, 0);
+add (20073,"Greenwood County", "KS", "Kansas", "6", -6:1, 8139, 1148, 1, 0, 0);
+add (17057,"Fulton County", "IL", "Illinois", "6", -6:1, 38746, 1148, 1, 0, 0);
+add (36095,"Schoharie County", "NY", "New York", "1", -5:1, 32438, 1387, 1, 0, 0);
+add (40013,"Bryan County", "OK", "Oklahoma", "7", -6:1, 34690, 1148, 1, 0, 0);
+add (17065,"Hamilton County", "IL", "Illinois", "6", -6:1, 8611, 1148, 1, 0, 0);
+add (28095,"Monroe County", "MS", "Missippi", "5", -6:1, 38263, 1148, 1, 0, 0);
+add (48083,"Coleman County", "TX", "Texas", "7", -6:1, 9541, 1148, 1, 0, 0);
+add (26039,"Crawford County", "MI", "Michigan", "4", -5:1, 14150, 1387, 1, 0, 0);
+add (27089,"Marshall County", "MN", "Minnesota", "5", -6:1, 10313, 1148, 1, 0, 0);
+add (51033,"Caroline County", "VA", "Virginia", "2", -5:1, 22053, 1387, 1, 0, 0);
+add (21239,"Woodford County", "KY", "Kentucky", "4", -6:1, 22830, 1148, 1, 0, 0);
+add (29123,"Madison County", "MO", "Mosourri", "6", -6:1, 11481, 1148, 1, 0, 0);
+add (48141,"El Paso County", "TX", "Texas", "7", -6:1, 703127, 1148, 1, 0, 0);
+add (29115,"Linn County", "MO", "Mosourri", "6", -6:1, 13808, 1148, 1, 0, 0);
+add (13191,"McIntosh County", "GA", "Georgia", "3", -5:1, 10018, 1387, 1, 0, 0);
+add (21091,"Hancock County", "KY", "Kentucky", "4", -6:1, 8941, 1148, 1, 0, 0);
+add (28051,"Holmes County", "MS", "Missippi", "5", -6:1, 21522, 1148, 1, 0, 0);
+add (19179,"Wapello County", "IA", "Iowa", "5", -6:1, 35440, 1148, 1, 0, 0);
+add (37153,"Richmond County", "NC", "North Carolina", "2", -5:1, 46221, 1387, 1, 0, 0);
+add (37127,"Nash County", "NC", "North Carolina", "2", -5:1, 90968, 1387, 1, 0, 0);
+add (19027,"Carroll County", "IA", "Iowa", "5", -6:1, 21706, 1148, 1, 0, 0);
+add (21211,"Shelby County", "KY", "Kentucky", "4", -5:1, 29583, 1387, 1, 0, 0);
+add (22009,"Avoyelles Parish", "LA", "Louisiana", "7", -6:1, 40846, 1148, 1, 0, 0);
+add (48107,"Crosby County", "TX", "Texas", "7", -6:1, 7215, 1148, 1, 0, 0);
+add (40023,"Choctaw County", "OK", "Oklahoma", "7", -6:1, 15077, 1148, 1, 0, 0);
+add (28153,"Wayne County", "MS", "Missippi", "5", -6:1, 20368, 1148, 1, 0, 0);
+add (16043,"Fremont County", "ID", "Idaho", "8", -7:1, 11897, 4647, 1, 0, 0);
+add (39045,"Fairfield County", "OH", "Ohio", "4", -5:1, 123998, 1387, 1, 0, 0);
+add (30037,"Golden Valley County", "MT", "Montana", "6", -7:1, 1041, 4647, 1, 0, 0);
+add (36023,"Cortland County", "NY", "New York", "1", -5:1, 48033, 1387, 1, 0, 0);
+add (56013,"Fremont County", "WY", "Wyoming", "8", -7:1, 36044, 4647, 1, 0, 0);
+add (29179,"Reynolds County", "MO", "Mosourri", "6", -6:1, 6624, 1148, 1, 0, 0);
+add (13197,"Marion County", "GA", "Georgia", "3", -5:1, 6712, 1387, 1, 0, 0);
+add (13031,"Bulloch County", "GA", "Georgia", "3", -5:1, 50614, 1387, 1, 0, 0);
+add (49011,"Davis County", "UT", "Utah", "8", -7:1, 233013, 4647, 1, 0, 0);
+add (16085,"Valley County", "ID", "Idaho", "8", -7:1, 8005, 4647, 1, 0, 0);
+add (15001,"Hawaii County", "HI", "Hawaii", "9", -10:1, 143135, 6750, 0, 0, 1);
+add (01089,"Madison County", "AL", "Alabama", "3", -6:1, 278187, 1148, 1, 0, 0);
+add (27061,"Itasca County", "MN", "Minnesota", "5", -6:1, 43857, 1148, 1, 0, 0);
+add (16073,"Owyhee County", "ID", "Idaho", "8", -7:1, 10277, 4647, 1, 0, 0);
+add (51167,"Russell County", "VA", "Virginia", "2", -5:1, 29049, 1387, 1, 0, 0);
+add (36069,"Ontario County", "NY", "New York", "1", -5:1, 99662, 1387, 1, 0, 0);
+add (13005,"Bacon County", "GA", "Georgia", "3", -5:1, 10375, 1387, 1, 0, 0);
+add (13069,"Coffee County", "GA", "Georgia", "3", -5:1, 34298, 1387, 1, 0, 0);
+add (12045,"Gulf County", "FL", "Florida", "3", -5:1, 13476, 1387, 1, 0, 0);
+add (19019,"Buchanan County", "IA", "Iowa", "5", -6:1, 21190, 1148, 1, 0, 0);
+add (47101,"Lewis County", "TN", "Tennesee", "3", -6:1, 10868, 1148, 1, 0, 0);
+add (08069,"Larimer County", "CO", "Colorado", "8", -7:1, 231221, 4647, 1, 0, 0);
+add (29157,"Perry County", "MO", "Mosourri", "6", -6:1, 17410, 1148, 1, 0, 0);
+add (51690,"Martinsville city", "VA", "Virginia", "2", -5:1, 15668, 1387, 1, 0, 0);
+add (48321,"Matagorda County", "TX", "Texas", "7", -6:1, 37965, 1148, 1, 0, 0);
+add (13027,"Brooks County", "GA", "Georgia", "3", -5:1, 16000, 1387, 1, 0, 0);
+add (39095,"Lucas County", "OH", "Ohio", "4", -5:1, 448542, 1387, 1, 0, 0);
+add (31091,"Hooker County", "NE", "Nebraska", "6", -7:1, 702, 4647, 1, 0, 0);
+add (56043,"Washakie County", "WY", "Wyoming", "8", -7:1, 8669, 4647, 1, 0, 0);
+add (12133,"Washington County", "FL", "Florida", "3", -5:1, 20292, 1387, 1, 0, 0);
+add (16047,"Gooding County", "ID", "Idaho", "8", -7:1, 13626, 4647, 1, 0, 0);
+add (41021,"Gilliam County", "OR", "Oregon", "9", -8:1, 2023, 3240, 0, 1, 0);
+add (46029,"Codington County", "SD", "South Dakota", "5", -6:1, 25456, 1148, 1, 0, 0);
+add (40145,"Wagoner County", "OK", "Oklahoma", "7", -6:1, 55259, 1148, 1, 0, 0);
+add (55113,"Sawyer County", "WI", "Wisconnsin", "5", -6:1, 16110, 1148, 1, 0, 0);
+add (41049,"Morrow County", "OR", "Oregon", "9", -8:1, 9985, 3240, 0, 1, 0);
+add (48233,"Hutchinson County", "TX", "Texas", "7", -6:1, 24077, 1148, 1, 0, 0);
+add (21179,"Nelson County", "KY", "Kentucky", "4", -5:1, 35884, 1387, 1, 0, 0);
+add (30067,"Park County", "MT", "Montana", "6", -7:1, 15829, 4647, 1, 0, 0);
+add (20095,"Kingman County", "KS", "Kansas", "6", -6:1, 8543, 1148, 1, 0, 0);
+add (21039,"Carlisle County", "KY", "Kentucky", "4", -6:1, 5320, 1148, 1, 0, 0);
+add (51660,"Harrisonburg city", "VA", "Virginia", "2", -5:1, 33434, 1387, 1, 0, 0);
+add (46043,"Douglas County", "SD", "South Dakota", "5", -6:1, 3553, 1148, 1, 0, 0);
+add (21145,"McCracken County", "KY", "Kentucky", "4", -5:1, 64460, 1387, 1, 0, 0);
+add (17161,"Rock Island County", "IL", "Illinois", "6", -6:1, 147642, 1148, 1, 0, 0);
+add (48419,"Shelby County", "TX", "Texas", "7", -6:1, 22748, 1148, 1, 0, 0);
+add (28019,"Choctaw County", "MS", "Missippi", "5", -6:1, 9385, 1148, 1, 0, 0);
+add (28137,"Tate County", "MS", "Missippi", "5", -6:1, 23923, 1148, 1, 0, 0);
+add (45077,"Pickens County", "SC", "South Carolina", "2", -5:1, 107087, 1387, 1, 0, 0);
+add (37129,"New Hanover County", "NC", "North Carolina", "2", -5:1, 149832, 1387, 1, 0, 0);
+add (13007,"Baker County", "GA", "Georgia", "3", -5:1, 3673, 1387, 1, 0, 0);
+add (29129,"Mercer County", "MO", "Mosourri", "6", -6:1, 4003, 1148, 1, 0, 0);
+add (19115,"Louisa County", "IA", "Iowa", "5", -6:1, 11938, 1148, 1, 0, 0);
+add (46071,"Jackson County", "SD", "South Dakota", "5", -7:1, 2904, 4647, 1, 0, 0);
+add (31089,"Holt County", "NE", "Nebraska", "6", -7:1, 12042, 4647, 1, 0, 0);
+add (51109,"Louisa County", "VA", "Virginia", "2", -5:1, 24675, 1387, 1, 0, 0);
+add (49021,"Iron County", "UT", "Utah", "8", -7:1, 28659, 4647, 1, 0, 0);
+add (21107,"Hopkins County", "KY", "Kentucky", "4", -6:1, 46364, 1148, 1, 0, 0);
+add (22075,"Plaquemines Parish", "LA", "Louisiana", "7", -6:1, 26293, 1148, 1, 0, 0);
+add (19103,"Johnson County", "IA", "Iowa", "5", -6:1, 102724, 1148, 1, 0, 0);
+add (39023,"Clark County", "OH", "Ohio", "4", -5:1, 145341, 1387, 1, 0, 0);
+add (19111,"Lee County", "IA", "Iowa", "5", -6:1, 38471, 1148, 1, 0, 0);
+add (06059,"Orange County", "CA", "California", "9", -8:1, 2721701, 3240, 0, 1, 0);
+add (22003,"Allen Parish", "LA", "Louisiana", "7", -6:1, 23888, 1148, 1, 0, 0);
+add (19045,"Clinton County", "IA", "Iowa", "5", -6:1, 49897, 1148, 1, 0, 0);
+add (12043,"Glades County", "FL", "Florida", "3", -5:1, 8492, 1387, 1, 0, 0);
+add (51155,"Pulaski County", "VA", "Virginia", "2", -5:1, 34539, 1387, 1, 0, 0);
+add (56001,"Albany County", "WY", "Wyoming", "8", -7:1, 29185, 4647, 1, 0, 0);
+add (29227,"Worth County", "MO", "Mosourri", "6", -6:1, 2295, 1148, 1, 0, 0);
+add (08073,"Lincoln County", "CO", "Colorado", "8", -7:1, 5729, 4647, 1, 0, 0);
+add (51005,"Alleghany County", "VA", "Virginia", "2", -5:1, 12146, 1387, 1, 0, 0);
+add (36049,"Lewis County", "NY", "New York", "1", -5:1, 27494, 1387, 1, 0, 0);
+add (48221,"Hood County", "TX", "Texas", "7", -6:1, 37194, 1148, 1, 0, 0);
+add (51125,"Nelson County", "VA", "Virginia", "2", -5:1, 13917, 1387, 1, 0, 0);
+add (12007,"Bradford County", "FL", "Florida", "3", -5:1, 24777, 1387, 1, 0, 0);
+add (31099,"Kearney County", "NE", "Nebraska", "6", -7:1, 6853, 4647, 1, 0, 0);
+add (48421,"Sherman County", "TX", "Texas", "7", -6:1, 2864, 1148, 1, 0, 0);
+add (48085,"Collin County", "TX", "Texas", "7", -6:1, 428803, 1148, 1, 0, 0);
+add (08083,"Montezuma County", "CO", "Colorado", "8", -7:1, 22465, 4647, 1, 0, 0);
+add (51165,"Rockingham County", "VA", "Virginia", "2", -5:1, 63214, 1387, 1, 0, 0);
+add (47003,"Bedford County", "TN", "Tennesee", "3", -5:1, 34533, 1387, 1, 0, 0);
+add (12125,"Union County", "FL", "Florida", "3", -5:1, 12423, 1387, 1, 0, 0);
+add (51590,"Danville city", "VA", "Virginia", "2", -5:1, 50868, 1387, 1, 0, 0);
+add (21103,"Henry County", "KY", "Kentucky", "4", -6:1, 14765, 1148, 1, 0, 0);
+add (37067,"Forsyth County", "NC", "North Carolina", "2", -5:1, 287701, 1387, 1, 0, 0);
+add (06085,"Santa Clara County", "CA", "California", "9", -8:1, 1641215, 3240, 0, 1, 0);
+add (48423,"Smith County", "TX", "Texas", "7", -6:1, 168783, 1148, 1, 0, 0);
+add (49003,"Box Elder County", "UT", "Utah", "8", -7:1, 41949, 4647, 1, 0, 0);
+add (48407,"San Jacinto County", "TX", "Texas", "7", -6:1, 21768, 1148, 1, 0, 0);
+add (42055,"Franklin County", "PA", "Pennsylvania", "1", -5:1, 128002, 1387, 1, 0, 0);
+add (47099,"Lawrence County", "TN", "Tennesee", "3", -6:1, 39358, 1148, 1, 0, 0);
+add (41067,"Washington County", "OR", "Oregon", "9", -8:1, 399697, 3240, 0, 1, 0);
+add (40137,"Stephens County", "OK", "Oklahoma", "7", -6:1, 43410, 1148, 1, 0, 0);
+add (17029,"Coles County", "IL", "Illinois", "6", -6:1, 51103, 1148, 1, 0, 0);
+add (24009,"Calvert County", "MD", "Maryland", "2", -5:1, 71877, 1387, 1, 0, 0);
+add (26121,"Muskegon County", "MI", "Michigan", "4", -5:1, 166748, 1387, 1, 0, 0);
+add (50001,"Addison County", "VT", "Vermont", "0", -5:1, 35168, 1387, 1, 0, 0);
+add (55141,"Wood County", "WI", "Wisconnsin", "5", -6:1, 76036, 1148, 1, 0, 0);
+add (49055,"Wayne County", "UT", "Utah", "8", -7:1, 2379, 4647, 1, 0, 0);
+add (17067,"Hancock County", "IL", "Illinois", "6", -6:1, 21088, 1148, 1, 0, 0);
+add (46011,"Brookings County", "SD", "South Dakota", "5", -6:1, 25989, 1148, 1, 0, 0);
+add (37183,"Wake County", "NC", "North Carolina", "2", -5:1, 570615, 1387, 1, 0, 0);
+add (37035,"Catawba County", "NC", "North Carolina", "2", -5:1, 132545, 1387, 1, 0, 0);
+add (37131,"Northampton County", "NC", "North Carolina", "2", -5:1, 21184, 1387, 1, 0, 0);
+add (55137,"Waushara County", "WI", "Wisconnsin", "5", -6:1, 21609, 1148, 1, 0, 0);
+add (05083,"Logan County", "AR", "Arkansas", "7", -6:1, 21173, 1148, 1, 0, 0);
+add (34035,"Somerset County", "NJ", "New Jersey", "0", -5:1, 282900, 1387, 1, 0, 0);
+add (06115,"Yuba County", "CA", "California", "9", -8:1, 60067, 3240, 0, 1, 0);
+add (05031,"Craighead County", "AR", "Arkansas", "7", -6:1, 77500, 1148, 1, 0, 0);
+add (48033,"Borden County", "TX", "Texas", "7", -6:1, 758, 1148, 1, 0, 0);
+add (51069,"Frederick County", "VA", "Virginia", "2", -5:1, 55229, 1387, 1, 0, 0);
+add (06069,"San Benito County", "CA", "California", "9", -8:1, 48774, 3240, 0, 1, 0);
+add (55033,"Dunn County", "WI", "Wisconnsin", "5", -6:1, 38977, 1148, 1, 0, 0);
+add (19183,"Washington County", "IA", "Iowa", "5", -6:1, 20967, 1148, 1, 0, 0);
+add (49027,"Millard County", "UT", "Utah", "8", -7:1, 12249, 4647, 1, 0, 0);
+add (54095,"Tyler County", "WV", "West Virginia", "2", -5:1, 9835, 1387, 1, 0, 0);
+add (05091,"Miller County", "AR", "Arkansas", "7", -6:1, 39857, 1148, 1, 0, 0);
+add (48051,"Burleson County", "TX", "Texas", "7", -6:1, 15652, 1148, 1, 0, 0);
+add (13111,"Fannin County", "GA", "Georgia", "3", -5:1, 18622, 1387, 1, 0, 0);
+add (48249,"Jim Wells County", "TX", "Texas", "7", -6:1, 40028, 1148, 1, 0, 0);
+add (16025,"Camas County", "ID", "Idaho", "8", -7:1, 846, 4647, 1, 0, 0);
+add (31021,"Burt County", "NE", "Nebraska", "6", -6:1, 7998, 1148, 1, 0, 0);
+add (51147,"Prince Edward County", "VA", "Virginia", "2", -5:1, 19028, 1387, 1, 0, 0);
+add (53015,"Cowlitz County", "WA", "Washiington", "9", -8:1, 91574, 3240, 0, 1, 0);
+add (23007,"Franklin County", "ME", "Maine", "0", -5:1, 28933, 1387, 1, 0, 0);
+add (19177,"Van Buren County", "IA", "Iowa", "5", -6:1, 7886, 1148, 1, 0, 0);
+add (02090,"Fairbanks North Star Borough", "AK", "Alaska", "9", -9:1, 84217, 1174, 0, 0, 1);
+add (39161,"Van Wert County", "OH", "Ohio", "4", -5:1, 30200, 1387, 1, 0, 0);
+add (54063,"Monroe County", "WV", "West Virginia", "2", -5:1, 13205, 1387, 1, 0, 0);
+add (53005,"Benton County", "WA", "Washiington", "9", -8:1, 136250, 3240, 0, 1, 0);
+add (34023,"Middlesex County", "NJ", "New Jersey", "0", -5:1, 716176, 1387, 1, 0, 0);
+add (25009,"Essex County", "MA", "Massachusetts", "0", -5:1, 698806, 1387, 1, 0, 0);
+add (48325,"Medina County", "TX", "Texas", "7", -6:1, 37685, 1148, 1, 0, 0);
+add (13255,"Spalding County", "GA", "Georgia", "3", -5:1, 57626, 1387, 1, 0, 0);
+add (35029,"Luna County", "NM", "New Mexico", "8", -7:1, 24070, 4647, 1, 0, 0);
+add (51750,"Radford city", "VA", "Virginia", "2", -5:1, 15734, 1387, 1, 0, 0);
+add (27031,"Cook County", "MN", "Minnesota", "5", -6:1, 4792, 1148, 1, 0, 0);
+add (31055,"Douglas County", "NE", "Nebraska", "6", -6:1, 443794, 1148, 1, 0, 0);
+add (06089,"Shasta County", "CA", "California", "9", -8:1, 164349, 3240, 0, 1, 0);
+add (05103,"Ouachita County", "AR", "Arkansas", "7", -6:1, 27921, 1148, 1, 0, 0);
+add (36017,"Chenango County", "NY", "New York", "1", -5:1, 51052, 1387, 1, 0, 0);
+add (34015,"Gloucester County", "NJ", "New Jersey", "0", -5:1, 247897, 1387, 1, 0, 0);
+add (27071,"Koochiching County", "MN", "Minnesota", "5", -6:1, 15538, 1148, 1, 0, 0);
+add (55075,"Marinette County", "WI", "Wisconnsin", "5", -6:1, 43033, 1148, 1, 0, 0);
+add (48037,"Bowie County", "TX", "Texas", "7", -6:1, 83509, 1148, 1, 0, 0);
+add (36041,"Hamilton County", "NY", "New York", "1", -5:1, 5193, 1387, 1, 0, 0);
+add (29009,"Barry County", "MO", "Mosourri", "6", -6:1, 33120, 1148, 1, 0, 0);
+add (49037,"San Juan County", "UT", "Utah", "8", -7:1, 13711, 4647, 1, 0, 0);
+add (37007,"Anson County", "NC", "North Carolina", "2", -5:1, 24354, 1387, 1, 0, 0);
+add (46015,"Brule County", "SD", "South Dakota", "5", -6:1, 5555, 1148, 1, 0, 0);
+add (23023,"Sagadahoc County", "ME", "Maine", "0", -5:1, 35779, 1387, 1, 0, 0);
+add (48003,"Andrews County", "TX", "Texas", "7", -6:1, 13976, 1148, 1, 0, 0);
+add (17127,"Massac County", "IL", "Illinois", "6", -6:1, 15584, 1148, 1, 0, 0);
+add (21147,"McCreary County", "KY", "Kentucky", "4", -5:1, 16659, 1387, 1, 0, 0);
+add (48193,"Hamilton County", "TX", "Texas", "7", -6:1, 7603, 1148, 1, 0, 0);
+add (24019,"Dorchester County", "MD", "Maryland", "2", -5:1, 29503, 1387, 1, 0, 0);
+add (31027,"Cedar County", "NE", "Nebraska", "6", -6:1, 9650, 1148, 1, 0, 0);
+add (45065,"McCormick County", "SC", "South Carolina", "2", -5:1, 9545, 1387, 1, 0, 0);
+add (13093,"Dooly County", "GA", "Georgia", "3", -5:1, 10388, 1387, 1, 0, 0);
+add (54045,"Logan County", "WV", "West Virginia", "2", -5:1, 41080, 1387, 1, 0, 0);
+add (42057,"Fulton County", "PA", "Pennsylvania", "1", -5:1, 14498, 1387, 1, 0, 0);
+add (39171,"Williams County", "OH", "Ohio", "4", -5:1, 38001, 1387, 1, 0, 0);
+add (29007,"Audrain County", "MO", "Mosourri", "6", -6:1, 23573, 1148, 1, 0, 0);
+add (36123,"Yates County", "NY", "New York", "1", -5:1, 24202, 1387, 1, 0, 0);
+add (27085,"McLeod County", "MN", "Minnesota", "5", -6:1, 34017, 1148, 1, 0, 0);
+add (51570,"Colonial Heights city", "VA", "Virginia", "2", -5:1, 16955, 1387, 1, 0, 0);
+add (04013,"Maricopa County", "AZ", "Arizona", "8", -7:1, 2784075, 4647, 1, 0, 0);
+add (16013,"Blaine County", "ID", "Idaho", "8", -7:1, 17200, 4647, 1, 0, 0);
+add (08043,"Fremont County", "CO", "Colorado", "8", -7:1, 43904, 4647, 1, 0, 0);
+add (12077,"Liberty County", "FL", "Florida", "3", -5:1, 6759, 1387, 1, 0, 0);
+add (08125,"Yuma County", "CO", "Colorado", "8", -7:1, 9389, 4647, 1, 0, 0);
+add (42077,"Lehigh County", "PA", "Pennsylvania", "1", -5:1, 299341, 1387, 1, 0, 0);
+add (08071,"Las Animas County", "CO", "Colorado", "8", -7:1, 14573, 4647, 1, 0, 0);
+add (28063,"Jefferson County", "MS", "Missippi", "5", -6:1, 8427, 1148, 1, 0, 0);
+add (51800,"Suffolk city", "VA", "Virginia", "2", -5:1, 62703, 1387, 1, 0, 0);
+add (42111,"Somerset County", "PA", "Pennsylvania", "1", -5:1, 80267, 1387, 1, 0, 0);
+add (48035,"Bosque County", "TX", "Texas", "7", -6:1, 16557, 1148, 1, 0, 0);
+add (29031,"Cape Girardeau County", "MO", "Mosourri", "6", -6:1, 66314, 1148, 1, 0, 0);
+add (18163,"Vanderburgh County", "IN", "Indiana", "4", -5:1, 168179, 1387, 1, 0, 0);
+add (21049,"Clark County", "KY", "Kentucky", "4", -6:1, 31978, 1148, 1, 0, 0);
+add (48027,"Bell County", "TX", "Texas", "7", -6:1, 223468, 1148, 1, 0, 0);
+add (02060,"Bristol Bay Borough", "AK", "Alaska", "9", -9:1, 1356, 1174, 0, 0, 1);
+add (18111,"Newton County", "IN", "Indiana", "4", -5:1, 14734, 1387, 1, 0, 0);
+add (35001,"Bernalillo County", "NM", "New Mexico", "8", -7:1, 525958, 4647, 1, 0, 0);
+add (55095,"Polk County", "WI", "Wisconnsin", "5", -6:1, 38786, 1148, 1, 0, 0);
+add (25015,"Hampshire County", "MA", "Massachusetts", "0", -5:1, 149384, 1387, 1, 0, 0);
+add (40037,"Creek County", "OK", "Oklahoma", "7", -6:1, 67142, 1148, 1, 0, 0);
+add (54021,"Gilmer County", "WV", "West Virginia", "2", -5:1, 7130, 1387, 1, 0, 0);
+add (30029,"Flathead County", "MT", "Montana", "6", -7:1, 71831, 4647, 1, 0, 0);
+add (26113,"Missaukee County", "MI", "Michigan", "4", -5:1, 13892, 1387, 1, 0, 0);
+add (19163,"Scott County", "IA", "Iowa", "5", -6:1, 158591, 1148, 1, 0, 0);
+add (26059,"Hillsdale County", "MI", "Michigan", "4", -5:1, 46614, 1387, 1, 0, 0);
+add (19075,"Grundy County", "IA", "Iowa", "5", -6:1, 12183, 1148, 1, 0, 0);
+add (39153,"Summit County", "OH", "Ohio", "4", -5:1, 537730, 1387, 1, 0, 0);
+add (51183,"Sussex County", "VA", "Virginia", "2", -5:1, 9925, 1387, 1, 0, 0);
+add (51029,"Buckingham County", "VA", "Virginia", "2", -5:1, 14639, 1387, 1, 0, 0);
+add (53021,"Franklin County", "WA", "Washiington", "9", -8:1, 46459, 3240, 0, 1, 0);
+add (37111,"McDowell County", "NC", "North Carolina", "2", -5:1, 40048, 1387, 1, 0, 0);
+add (47011,"Bradley County", "TN", "Tennesee", "3", -5:1, 83292, 1387, 1, 0, 0);
+add (21027,"Breckinridge County", "KY", "Kentucky", "4", -6:1, 17465, 1148, 1, 0, 0);
+add (30039,"Granite County", "MT", "Montana", "6", -7:1, 2667, 4647, 1, 0, 0);
+add (13009,"Baldwin County", "GA", "Georgia", "3", -5:1, 41968, 1387, 1, 0, 0);
+add (13101,"Echols County", "GA", "Georgia", "3", -5:1, 2401, 1387, 1, 0, 0);
+add (21063,"Elliott County", "KY", "Kentucky", "4", -6:1, 6602, 1148, 1, 0, 0);
+add (27127,"Redwood County", "MN", "Minnesota", "5", -6:1, 16489, 1148, 1, 0, 0);
+add (30077,"Powell County", "MT", "Montana", "6", -7:1, 7000, 4647, 1, 0, 0);
+add (40047,"Garfield County", "OK", "Oklahoma", "7", -6:1, 56859, 1148, 1, 0, 0);
+add (56023,"Lincoln County", "WY", "Wyoming", "8", -7:1, 13876, 4647, 1, 0, 0);
+add (29037,"Cass County", "MO", "Mosourri", "6", -6:1, 80520, 1148, 1, 0, 0);
+add (01081,"Lee County", "AL", "Alabama", "3", -6:1, 100444, 1148, 1, 0, 0);
+add (06033,"Lake County", "CA", "California", "9", -8:1, 55147, 3240, 0, 1, 0);
+add (13021,"Bibb County", "GA", "Georgia", "3", -5:1, 156086, 1387, 1, 0, 0);
+add (27151,"Swift County", "MN", "Minnesota", "5", -6:1, 10804, 1148, 1, 0, 0);
+add (20049,"Elk County", "KS", "Kansas", "6", -6:1, 3351, 1148, 1, 0, 0);
+add (42109,"Snyder County", "PA", "Pennsylvania", "1", -5:1, 38226, 1387, 1, 0, 0);
+add (46115,"Spink County", "SD", "South Dakota", "5", -7:1, 7572, 4647, 1, 0, 0);
+add (20015,"Butler County", "KS", "Kansas", "6", -6:1, 61932, 1148, 1, 0, 0);
+add (06081,"San Mateo County", "CA", "California", "9", -8:1, 700765, 3240, 0, 1, 0);
+add (49051,"Wasatch County", "UT", "Utah", "8", -7:1, 13267, 4647, 1, 0, 0);
+add (16061,"Lewis County", "ID", "Idaho", "8", -7:1, 4007, 4647, 1, 0, 0);
+add (18173,"Warrick County", "IN", "Indiana", "4", -5:1, 51609, 1387, 1, 0, 0);
+add (36019,"Clinton County", "NY", "New York", "1", -5:1, 79970, 1387, 1, 0, 0);
+add (20155,"Reno County", "KS", "Kansas", "6", -6:1, 63211, 1148, 1, 0, 0);
+add (20007,"Barber County", "KS", "Kansas", "6", -6:1, 5342, 1148, 1, 0, 0);
+add (37049,"Craven County", "NC", "North Carolina", "2", -5:1, 88129, 1387, 1, 0, 0);
+add (23015,"Lincoln County", "ME", "Maine", "0", -5:1, 31815, 1387, 1, 0, 0);
+add (18059,"Hancock County", "IN", "Indiana", "4", -5:1, 54524, 1387, 1, 0, 0);
+add (39065,"Hardin County", "OH", "Ohio", "4", -5:1, 31725, 1387, 1, 0, 0);
+add (17017,"Cass County", "IL", "Illinois", "6", -6:1, 13266, 1148, 1, 0, 0);
+add (29207,"Stoddard County", "MO", "Mosourri", "6", -6:1, 29623, 1148, 1, 0, 0);
+add (46007,"Bennett County", "SD", "South Dakota", "5", -6:1, 3389, 1148, 1, 0, 0);
+add (29117,"Livingston County", "MO", "Mosourri", "6", -6:1, 14151, 1148, 1, 0, 0);
+add (13261,"Sumter County", "GA", "Georgia", "3", -5:1, 31324, 1387, 1, 0, 0);
+add (40049,"Garvin County", "OK", "Oklahoma", "7", -6:1, 27044, 1148, 1, 0, 0);
+add (32015,"Lander County", "NV", "Nevada", "8", -8:1, 6987, 3240, 0, 1, 0);
+add (36093,"Schenectady County", "NY", "New York", "1", -5:1, 145530, 1387, 1, 0, 0);
+add (12027,"DeSoto County", "FL", "Florida", "3", -5:1, 24820, 1387, 1, 0, 0);
+add (48059,"Callahan County", "TX", "Texas", "7", -6:1, 12796, 1148, 1, 0, 0);
+add (48401,"Rusk County", "TX", "Texas", "7", -6:1, 45877, 1148, 1, 0, 0);
+add (47073,"Hawkins County", "TN", "Tennesee", "3", -5:1, 49719, 1387, 1, 0, 0);
+add (30059,"Meagher County", "MT", "Montana", "6", -7:1, 1797, 4647, 1, 0, 0);
+add (05099,"Nevada County", "AR", "Arkansas", "7", -6:1, 10034, 1148, 1, 0, 0);
+add (13055,"Chattooga County", "GA", "Georgia", "3", -5:1, 22813, 1387, 1, 0, 0);
+add (18007,"Benton County", "IN", "Indiana", "4", -5:1, 9725, 1387, 1, 0, 0);
+add (47125,"Montgomery County", "TN", "Tennesee", "3", -6:1, 127265, 1148, 1, 0, 0);
+add (36101,"Steuben County", "NY", "New York", "1", -5:1, 97950, 1387, 1, 0, 0);
+add (44003,"Kent County", "RI", "Rhode Island", "0", -5:1, 161811, 1387, 1, 0, 0);
+add (18137,"Ripley County", "IN", "Indiana", "4", -5:1, 27205, 1387, 1, 0, 0);
+add (48001,"Anderson County", "TX", "Texas", "7", -6:1, 52352, 1148, 1, 0, 0);
+add (49019,"Grand County", "UT", "Utah", "8", -7:1, 8068, 4647, 1, 0, 0);
+add (32033,"White Pine County", "NV", "Nevada", "8", -8:1, 10078, 3240, 0, 1, 0);
+add (19147,"Palo Alto County", "IA", "Iowa", "5", -6:1, 10017, 1148, 1, 0, 0);
+add (23017,"Oxford County", "ME", "Maine", "0", -5:1, 53673, 1387, 1, 0, 0);
+add (05047,"Franklin County", "AR", "Arkansas", "7", -6:1, 16932, 1148, 1, 0, 0);
+add (37041,"Chowan County", "NC", "North Carolina", "2", -5:1, 14191, 1387, 1, 0, 0);
+add (55079,"Milwaukee County", "WI", "Wisconnsin", "5", -6:1, 911713, 1148, 1, 0, 0);
+add (56035,"Sublette County", "WY", "Wyoming", "8", -7:1, 5738, 4647, 1, 0, 0);
+add (29181,"Ripley County", "MO", "Mosourri", "6", -6:1, 14072, 1148, 1, 0, 0);
+add (30045,"Judith Basin County", "MT", "Montana", "6", -7:1, 2294, 4647, 1, 0, 0);
+add (01041,"Crenshaw County", "AL", "Alabama", "3", -6:1, 13636, 1148, 1, 0, 0);
+add (06105,"Trinity County", "CA", "California", "9", -8:1, 13117, 3240, 0, 1, 0);
+add (01101,"Montgomery County", "AL", "Alabama", "3", -6:1, 217693, 1148, 1, 0, 0);
+add (29169,"Pulaski County", "MO", "Mosourri", "6", -6:1, 38507, 1148, 1, 0, 0);
+add (40073,"Kingfisher County", "OK", "Oklahoma", "7", -6:1, 13528, 1148, 1, 0, 0);
+add (19095,"Iowa County", "IA", "Iowa", "5", -6:1, 15550, 1148, 1, 0, 0);
+add (05145,"White County", "AR", "Arkansas", "7", -6:1, 64526, 1148, 1, 0, 0);
+add (26075,"Jackson County", "MI", "Michigan", "4", -5:1, 156157, 1387, 1, 0, 0);
+add (13165,"Jenkins County", "GA", "Georgia", "3", -5:1, 8447, 1387, 1, 0, 0);
+add (24025,"Harford County", "MD", "Maryland", "2", -5:1, 214668, 1387, 1, 0, 0);
+add (47043,"Dickson County", "TN", "Tennesee", "3", -5:1, 42254, 1387, 1, 0, 0);
+add (28127,"Simpson County", "MS", "Missippi", "5", -6:1, 25338, 1148, 1, 0, 0);
+add (27001,"Aitkin County", "MN", "Minnesota", "5", -6:1, 14152, 1148, 1, 0, 0);
+add (04009,"Graham County", "AZ", "Arizona", "8", -7:1, 31696, 4647, 1, 0, 0);
+add (17049,"Effingham County", "IL", "Illinois", "6", -6:1, 33504, 1148, 1, 0, 0);
+add (35035,"Otero County", "NM", "New Mexico", "8", -7:1, 54630, 4647, 1, 0, 0);
+add (53033,"King County", "WA", "Washiington", "9", -8:1, 1654876, 3240, 0, 1, 0);
+add (29139,"Montgomery County", "MO", "Mosourri", "6", -6:1, 12074, 1148, 1, 0, 0);
+add (51550,"Chesapeake city", "VA", "Virginia", "2", -5:1, 199564, 1387, 1, 0, 0);
+add (48459,"Upshur County", "TX", "Texas", "7", -6:1, 35885, 1148, 1, 0, 0);
+add (05113,"Polk County", "AR", "Arkansas", "7", -6:1, 19662, 1148, 1, 0, 0);
+add (02270,"Wade Hampton Census Area", "AK", "Alaska", "9", -9:1, 6812, 1174, 0, 0, 1);
+add (19005,"Allamakee County", "IA", "Iowa", "5", -6:1, 13989, 1148, 1, 0, 0);
+add (20039,"Decatur County", "KS", "Kansas", "6", -6:1, 3456, 1148, 1, 0, 0);
+add (55125,"Vilas County", "WI", "Wisconnsin", "5", -6:1, 21277, 1148, 1, 0, 0);
+add (51700,"Newport News city", "VA", "Virginia", "2", -5:1, 178615, 1387, 1, 0, 0);
+add (28129,"Smith County", "MS", "Missippi", "5", -6:1, 15296, 1148, 1, 0, 0);
+add (17169,"Schuyler County", "IL", "Illinois", "6", -6:1, 7632, 1148, 1, 0, 0);
+add (29053,"Cooper County", "MO", "Mosourri", "6", -6:1, 16029, 1148, 1, 0, 0);
+add (18005,"Bartholomew County", "IN", "Indiana", "4", -5:1, 69579, 1387, 1, 0, 0);
+add (48357,"Ochiltree County", "TX", "Texas", "7", -6:1, 8827, 1148, 1, 0, 0);
+add (20133,"Neosho County", "KS", "Kansas", "6", -6:1, 16760, 1148, 1, 0, 0);
+add (48287,"Lee County", "TX", "Texas", "7", -6:1, 14916, 1148, 1, 0, 0);
+add (05077,"Lee County", "AR", "Arkansas", "7", -6:1, 12406, 1148, 1, 0, 0);
+add (35011,"DeBaca County", "NM", "New Mexico", "8", -7:1, 2389, 4647, 1, 0, 0);
+add (45035,"Dorchester County", "SC", "South Carolina", "2", -5:1, 88133, 1387, 1, 0, 0);
+add (48373,"Polk County", "TX", "Texas", "7", -6:1, 50309, 1148, 1, 0, 0);
+add (33007,"Coos County", "NH", "New Hampshire", "0", -5:1, 32875, 1387, 1, 0, 0);
+add (37031,"Carteret County", "NC", "North Carolina", "2", -5:1, 60054, 1387, 1, 0, 0);
+add (54075,"Pocahontas County", "WV", "West Virginia", "2", -5:1, 9268, 1387, 1, 0, 0);
+add (16027,"Canyon County", "ID", "Idaho", "8", -7:1, 120266, 4647, 1, 0, 0);
+add (01039,"Covington County", "AL", "Alabama", "3", -6:1, 37402, 1148, 1, 0, 0);
+add (19041,"Clay County", "IA", "Iowa", "5", -6:1, 17532, 1148, 1, 0, 0);
+add (01033,"Colbert County", "AL", "Alabama", "3", -6:1, 52946, 1148, 1, 0, 0);
+add (48271,"Kinney County", "TX", "Texas", "7", -6:1, 3482, 1148, 1, 0, 0);
+add (54053,"Mason County", "WV", "West Virginia", "2", -5:1, 25869, 1387, 1, 0, 0);
+add (13077,"Coweta County", "GA", "Georgia", "3", -5:1, 85028, 1387, 1, 0, 0);
+add (18035,"Delaware County", "IN", "Indiana", "4", -5:1, 116828, 1387, 1, 0, 0);
+add (54017,"Doddridge County", "WV", "West Virginia", "2", -5:1, 7554, 1387, 1, 0, 0);
+add (24011,"Caroline County", "MD", "Maryland", "2", -5:1, 29489, 1387, 1, 0, 0);
+add (29199,"Scotland County", "MO", "Mosourri", "6", -6:1, 4814, 1148, 1, 0, 0);
+add (51075,"Goochland County", "VA", "Virginia", "2", -5:1, 17823, 1387, 1, 0, 0);
+add (01005,"Barbour County", "AL", "Alabama", "3", -6:1, 26895, 1148, 1, 0, 0);
+add (13189,"McDuffie County", "GA", "Georgia", "3", -5:1, 21770, 1387, 1, 0, 0);
+add (01055,"Etowah County", "AL", "Alabama", "3", -6:1, 103975, 1148, 1, 0, 0);
+add (20175,"Seward County", "KS", "Kansas", "6", -6:1, 19984, 1148, 1, 0, 0);
+add (48501,"Yoakum County", "TX", "Texas", "7", -6:1, 8010, 1148, 1, 0, 0);
+add (05039,"Dallas County", "AR", "Arkansas", "7", -6:1, 9060, 1148, 1, 0, 0);
+add (29081,"Harrison County", "MO", "Mosourri", "6", -6:1, 8506, 1148, 1, 0, 0);
+add (28105,"Oktibbeha County", "MS", "Missippi", "5", -6:1, 39291, 1148, 1, 0, 0);
+add (34007,"Camden County", "NJ", "New Jersey", "0", -5:1, 505204, 1387, 1, 0, 0);
+add (27147,"Steele County", "MN", "Minnesota", "5", -6:1, 31736, 1148, 1, 0, 0);
+add (55029,"Door County", "WI", "Wisconnsin", "5", -6:1, 27027, 1148, 1, 0, 0);
+add (18073,"Jasper County", "IN", "Indiana", "4", -5:1, 29260, 1387, 1, 0, 0);
+add (28155,"Webster County", "MS", "Missippi", "5", -6:1, 10547, 1148, 1, 0, 0);
+add (23019,"Penobscot County", "ME", "Maine", "0", -5:1, 142323, 1387, 1, 0, 0);
+add (13199,"Meriwether County", "GA", "Georgia", "3", -5:1, 23112, 1387, 1, 0, 0);
+add (37091,"Hertford County", "NC", "North Carolina", "2", -5:1, 22289, 1387, 1, 0, 0);
+add (02150,"Kodiak Island Borough", "AK", "Alaska", "9", -9:1, 14520, 1174, 0, 0, 1);
+add (48503,"Young County", "TX", "Texas", "7", -6:1, 17697, 1148, 1, 0, 0);
+add (47087,"Jackson County", "TN", "Tennesee", "3", -5:1, 9629, 1387, 1, 0, 0);
+add (29131,"Miller County", "MO", "Mosourri", "6", -6:1, 22422, 1148, 1, 0, 0);
+add (20161,"Riley County", "KS", "Kansas", "6", -6:1, 63615, 1148, 1, 0, 0);
+add (01105,"Perry County", "AL", "Alabama", "3", -6:1, 12667, 1148, 1, 0, 0);
+add (41007,"Clatsop County", "OR", "Oregon", "9", -8:1, 35424, 3240, 0, 1, 0);
+add (36013,"Chautauqua County", "NY", "New York", "1", -5:1, 138103, 1387, 1, 0, 0);
+add (18167,"Vigo County", "IN", "Indiana", "4", -5:1, 105083, 1387, 1, 0, 0);
+add (49009,"Daggett County", "UT", "Utah", "8", -7:1, 737, 4647, 1, 0, 0);
+add (19083,"Hardin County", "IA", "Iowa", "5", -6:1, 18462, 1148, 1, 0, 0);
+add (26131,"Ontonagon County", "MI", "Michigan", "4", -5:1, 7878, 1387, 1, 0, 0);
+add (20013,"Brown County", "KS", "Kansas", "6", -6:1, 11070, 1148, 1, 0, 0);
+add (48225,"Houston County", "TX", "Texas", "7", -6:1, 21901, 1148, 1, 0, 0);
+add (29021,"Buchanan County", "MO", "Mosourri", "6", -6:1, 81776, 1148, 1, 0, 0);
+add (48369,"Parmer County", "TX", "Texas", "7", -6:1, 10302, 1148, 1, 0, 0);
+add (31095,"Jefferson County", "NE", "Nebraska", "6", -7:1, 8378, 4647, 1, 0, 0);
+add (24031,"Montgomery County", "MD", "Maryland", "2", -5:1, 840879, 1387, 1, 0, 0);
+add (31133,"Pawnee County", "NE", "Nebraska", "6", -7:1, 3131, 4647, 1, 0, 0);
+add (17081,"Jefferson County", "IL", "Illinois", "6", -6:1, 37373, 1148, 1, 0, 0);
+add (42049,"Erie County", "PA", "Pennsylvania", "1", -5:1, 276401, 1387, 1, 0, 0);
+add (24013,"Carroll County", "MD", "Maryland", "2", -5:1, 149697, 1387, 1, 0, 0);
+add (48257,"Kaufman County", "TX", "Texas", "7", -6:1, 65736, 1148, 1, 0, 0);
+add (48391,"Refugio County", "TX", "Texas", "7", -6:1, 7907, 1148, 1, 0, 0);
+add (28133,"Sunflower County", "MS", "Missippi", "5", -6:1, 34577, 1148, 1, 0, 0);
+add (21177,"Muhlenberg County", "KY", "Kentucky", "4", -5:1, 32173, 1387, 1, 0, 0);
+add (26125,"Oakland County", "MI", "Michigan", "4", -5:1, 1176488, 1387, 1, 0, 0);
+add (41029,"Jackson County", "OR", "Oregon", "9", -8:1, 173123, 3240, 0, 1, 0);
+add (47069,"Hardeman County", "TN", "Tennesee", "3", -5:1, 24895, 1387, 1, 0, 0);
+add (54099,"Wayne County", "WV", "West Virginia", "2", -5:1, 41957, 1387, 1, 0, 0);
+add (47105,"Loudon County", "TN", "Tennesee", "3", -6:1, 39052, 1148, 1, 0, 0);
+add (54025,"Greenbrier County", "WV", "West Virginia", "2", -5:1, 35383, 1387, 1, 0, 0);
+add (54001,"Barbour County", "WV", "West Virginia", "2", -5:1, 16152, 1387, 1, 0, 0);
+add (12047,"Hamilton County", "FL", "Florida", "3", -5:1, 12651, 1387, 1, 0, 0);
+add (30089,"Sanders County", "MT", "Montana", "6", -7:1, 10185, 4647, 1, 0, 0);
+add (28033,"DeSoto County", "MS", "Missippi", "5", -6:1, 96897, 1148, 1, 0, 0);
+add (19195,"Worth County", "IA", "Iowa", "5", -6:1, 7779, 1148, 1, 0, 0);
+add (40127,"Pushmataha County", "OK", "Oklahoma", "7", -6:1, 11584, 1148, 1, 0, 0);
+add (38011,"Bowman County", "ND", "North Dakota", "5", -6:1, 3317, 1148, 1, 0, 0);
+add (05081,"Little River County", "AR", "Arkansas", "7", -6:1, 13206, 1148, 1, 0, 0);
+add (13035,"Butts County", "GA", "Georgia", "3", -5:1, 17837, 1387, 1, 0, 0);
+add (37053,"Currituck County", "NC", "North Carolina", "2", -5:1, 17908, 1387, 1, 0, 0);
+add (19057,"Des Moines County", "IA", "Iowa", "5", -6:1, 41944, 1148, 1, 0, 0);
+add (48251,"Johnson County", "TX", "Texas", "7", -6:1, 118125, 1148, 1, 0, 0);
+add (54089,"Summers County", "WV", "West Virginia", "2", -5:1, 13146, 1387, 1, 0, 0);
+add (48153,"Floyd County", "TX", "Texas", "7", -6:1, 8191, 1148, 1, 0, 0);
+add (37115,"Madison County", "NC", "North Carolina", "2", -5:1, 18756, 1387, 1, 0, 0);
+add (18041,"Fayette County", "IN", "Indiana", "4", -5:1, 25969, 1387, 1, 0, 0);
+add (21019,"Boyd County", "KY", "Kentucky", "4", -6:1, 49543, 1148, 1, 0, 0);
+add (48173,"Glasscock County", "TX", "Texas", "7", -6:1, 1396, 1148, 1, 0, 0);
+add (17089,"Kane County", "IL", "Illinois", "6", -6:1, 391249, 1148, 1, 0, 0);
+add (54039,"Kanawha County", "WV", "West Virginia", "2", -5:1, 202011, 1387, 1, 0, 0);
+add (13265,"Taliaferro County", "GA", "Georgia", "3", -5:1, 1908, 1387, 1, 0, 0);
+add (34027,"Morris County", "NJ", "New Jersey", "0", -5:1, 459896, 1387, 1, 0, 0);
+add (51105,"Lee County", "VA", "Virginia", "2", -5:1, 23815, 1387, 1, 0, 0);
+add (40079,"Le Flore County", "OK", "Oklahoma", "7", -6:1, 46564, 1148, 1, 0, 0);
+add (19063,"Emmet County", "IA", "Iowa", "5", -6:1, 10887, 1148, 1, 0, 0);
+add (48449,"Titus County", "TX", "Texas", "7", -6:1, 25422, 1148, 1, 0, 0);
+add (21069,"Fleming County", "KY", "Kentucky", "4", -6:1, 13441, 1148, 1, 0, 0);
+add (18017,"Cass County", "IN", "Indiana", "4", -5:1, 38685, 1387, 1, 0, 0);
+add (35053,"Socorro County", "NM", "New Mexico", "8", -7:1, 16333, 4647, 1, 0, 0);
+add (08001,"Adams County", "CO", "Colorado", "8", -7:1, 323853, 4647, 1, 0, 0);
+add (33019,"Sullivan County", "NH", "New Hampshire", "0", -5:1, 40027, 1387, 1, 0, 0);
+add (40039,"Custer County", "OK", "Oklahoma", "7", -6:1, 25493, 1148, 1, 0, 0);
+add (51081,"Greensville County", "VA", "Virginia", "2", -5:1, 11281, 1387, 1, 0, 0);
+add (48223,"Hopkins County", "TX", "Texas", "7", -6:1, 30512, 1148, 1, 0, 0);
+add (40011,"Blaine County", "OK", "Oklahoma", "7", -6:1, 10513, 1148, 1, 0, 0);
+add (36033,"Franklin County", "NY", "New York", "1", -5:1, 48582, 1387, 1, 0, 0);
+add (47039,"Decatur County", "TN", "Tennesee", "3", -5:1, 10807, 1387, 1, 0, 0);
+add (55127,"Walworth County", "WI", "Wisconnsin", "5", -6:1, 85353, 1148, 1, 0, 0);
+add (48217,"Hill County", "TX", "Texas", "7", -6:1, 30534, 1148, 1, 0, 0);
+add (13321,"Worth County", "GA", "Georgia", "3", -5:1, 22485, 1387, 1, 0, 0);
+add (21201,"Robertson County", "KY", "Kentucky", "4", -5:1, 2209, 1387, 1, 0, 0);
+add (47141,"Putnam County", "TN", "Tennesee", "3", -6:1, 59143, 1148, 1, 0, 0);
+add (21213,"Simpson County", "KY", "Kentucky", "4", -5:1, 16401, 1387, 1, 0, 0);
+add (40109,"Oklahoma County", "OK", "Oklahoma", "7", -6:1, 632988, 1148, 1, 0, 0);
+add (24035,"Queen Anne County", "MD", "Maryland", "2", -5:1, 39672, 1387, 1, 0, 0);
+add (17203,"Woodford County", "IL", "Illinois", "6", -6:1, 35212, 1148, 1, 0, 0);
+add (19127,"Marshall County", "IA", "Iowa", "5", -6:1, 38732, 1148, 1, 0, 0);
+add (35009,"Curry County", "NM", "New Mexico", "8", -7:1, 45290, 4647, 1, 0, 0);
+add (21009,"Barren County", "KY", "Kentucky", "4", -6:1, 36979, 1148, 1, 0, 0);
+add (21229,"Washington County", "KY", "Kentucky", "4", -5:1, 10918, 1387, 1, 0, 0);
+add (13183,"Long County", "GA", "Georgia", "3", -5:1, 8585, 1387, 1, 0, 0);
+add (22013,"Bienville Parish", "LA", "Louisiana", "7", -6:1, 15814, 1148, 1, 0, 0);
+add (31117,"McPherson County", "NE", "Nebraska", "6", -7:1, 563, 4647, 1, 0, 0);
+add (46055,"Haakon County", "SD", "South Dakota", "5", -7:1, 2353, 4647, 1, 0, 0);
+add (16005,"Bannock County", "ID", "Idaho", "8", -7:1, 74866, 4647, 1, 0, 0);
+add (04017,"Navajo County", "AZ", "Arizona", "8", -7:1, 96997, 4647, 1, 0, 0);
+add (37055,"Dare County", "NC", "North Carolina", "2", -5:1, 28952, 1387, 1, 0, 0);
+add (48067,"Cass County", "TX", "Texas", "7", -6:1, 30828, 1148, 1, 0, 0);
+add (17023,"Clark County", "IL", "Illinois", "6", -6:1, 16534, 1148, 1, 0, 0);
+add (55071,"Manitowoc County", "WI", "Wisconnsin", "5", -6:1, 82412, 1148, 1, 0, 0);
+add (16065,"Madison County", "ID", "Idaho", "8", -7:1, 23569, 4647, 1, 0, 0);
+add (31155,"Saunders County", "NE", "Nebraska", "6", -7:1, 19245, 4647, 1, 0, 0);
+add (35039,"Rio Arriba County", "NM", "New Mexico", "8", -7:1, 37787, 4647, 1, 0, 0);
+add (01125,"Tuscaloosa County", "AL", "Alabama", "3", -6:1, 160768, 1148, 1, 0, 0);
+add (16019,"Bonneville County", "ID", "Idaho", "8", -7:1, 80672, 4647, 1, 0, 0);
+add (55129,"Washburn County", "WI", "Wisconnsin", "5", -6:1, 15421, 1148, 1, 0, 0);
+add (16033,"Clark County", "ID", "Idaho", "8", -7:1, 873, 4647, 1, 0, 0);
+add (47115,"Marion County", "TN", "Tennesee", "3", -6:1, 26851, 1148, 1, 0, 0);
+add (37195,"Wilson County", "NC", "North Carolina", "2", -5:1, 68188, 1387, 1, 0, 0);
+add (21161,"Mason County", "KY", "Kentucky", "4", -5:1, 17021, 1387, 1, 0, 0);
+add (36051,"Livingston County", "NY", "New York", "1", -5:1, 66000, 1387, 1, 0, 0);
+add (13061,"Clay County", "GA", "Georgia", "3", -5:1, 3453, 1387, 1, 0, 0);
+add (20191,"Sumner County", "KS", "Kansas", "6", -6:1, 27043, 1148, 1, 0, 0);
+add (20143,"Ottawa County", "KS", "Kansas", "6", -6:1, 5905, 1148, 1, 0, 0);
+add (51127,"New Kent County", "VA", "Virginia", "2", -5:1, 13052, 1387, 1, 0, 0);
+add (19071,"Fremont County", "IA", "Iowa", "5", -6:1, 7746, 1148, 1, 0, 0);
+add (45059,"Laurens County", "SC", "South Carolina", "2", -5:1, 63249, 1387, 1, 0, 0);
+add (20117,"Marshall County", "KS", "Kansas", "6", -6:1, 11006, 1148, 1, 0, 0);
+add (06025,"Imperial County", "CA", "California", "9", -8:1, 144051, 3240, 0, 1, 0);
+add (27049,"Goodhue County", "MN", "Minnesota", "5", -6:1, 43137, 1148, 1, 0, 0);
+add (31105,"Kimball County", "NE", "Nebraska", "6", -7:1, 4082, 4647, 1, 0, 0);
+add (40043,"Dewey County", "OK", "Oklahoma", "7", -6:1, 4928, 1148, 1, 0, 0);
+add (29087,"Holt County", "MO", "Mosourri", "6", -6:1, 5554, 1148, 1, 0, 0);
+add (13159,"Jasper County", "GA", "Georgia", "3", -5:1, 10155, 1387, 1, 0, 0);
+add (48105,"Crockett County", "TX", "Texas", "7", -6:1, 4602, 1148, 1, 0, 0);
+add (54047,"McDowell County", "WV", "West Virginia", "2", -5:1, 29916, 1387, 1, 0, 0);
+add (48437,"Swisher County", "TX", "Texas", "7", -6:1, 8301, 1148, 1, 0, 0);
+add (38089,"Stark County", "ND", "North Dakota", "5", -6:1, 22780, 1148, 1, 0, 0);
+add (26051,"Gladwin County", "MI", "Michigan", "4", -5:1, 25333, 1387, 1, 0, 0);
+add (50027,"Windsor County", "VT", "Vermont", "0", -5:1, 55444, 1387, 1, 0, 0);
+add (46119,"Sully County", "SD", "South Dakota", "5", -7:1, 1470, 4647, 1, 0, 0);
+add (01109,"Pike County", "AL", "Alabama", "3", -6:1, 28646, 1148, 1, 0, 0);
+add (12059,"Holmes County", "FL", "Florida", "3", -5:1, 18622, 1387, 1, 0, 0);
+add (29145,"Newton County", "MO", "Mosourri", "6", -6:1, 49152, 1148, 1, 0, 0);
+add (37167,"Stanly County", "NC", "North Carolina", "2", -5:1, 56083, 1387, 1, 0, 0);
+add (53027,"Grays Harbor County", "WA", "Washiington", "9", -8:1, 67739, 3240, 0, 1, 0);
+add (24023,"Garrett County", "MD", "Maryland", "2", -5:1, 29238, 1387, 1, 0, 0);
+add (38097,"Traill County", "ND", "North Dakota", "5", -6:1, 8544, 1148, 1, 0, 0);
+add (18071,"Jackson County", "IN", "Indiana", "4", -5:1, 40992, 1387, 1, 0, 0);
+add (08085,"Montrose County", "CO", "Colorado", "8", -7:1, 30764, 4647, 1, 0, 0);
+add (38027,"Eddy County", "ND", "North Dakota", "5", -6:1, 2847, 1148, 1, 0, 0);
+add (29043,"Christian County", "MO", "Mosourri", "6", -6:1, 48997, 1148, 1, 0, 0);
+add (22127,"Winn Parish", "LA", "Louisiana", "7", -6:1, 17714, 1148, 1, 0, 0);
+add (39075,"Holmes County", "OH", "Ohio", "4", -5:1, 37841, 1387, 1, 0, 0);
+add (33005,"Cheshire County", "NH", "New Hampshire", "0", -5:1, 71828, 1387, 1, 0, 0);
+add (36053,"Madison County", "NY", "New York", "1", -5:1, 71069, 1387, 1, 0, 0);
+add (19079,"Hamilton County", "IA", "Iowa", "5", -6:1, 16011, 1148, 1, 0, 0);
+add (29001,"Adair County", "MO", "Mosourri", "6", -6:1, 24286, 1148, 1, 0, 0);
+add (48149,"Fayette County", "TX", "Texas", "7", -6:1, 21414, 1148, 1, 0, 0);
+add (42101,"Philadelphia County", "PA", "Pennsylvania", "1", -5:1, 1436287, 1387, 1, 0, 0);
+add (47129,"Morgan County", "TN", "Tennesee", "3", -6:1, 18775, 1148, 1, 0, 0);
+add (17137,"Morgan County", "IL", "Illinois", "6", -6:1, 35346, 1148, 1, 0, 0);
+add (17071,"Henderson County", "IL", "Illinois", "6", -6:1, 8601, 1148, 1, 0, 0);
+add (16009,"Benewah County", "ID", "Idaho", "8", -7:1, 9119, 4647, 1, 0, 0);
+add (48427,"Starr County", "TX", "Texas", "7", -6:1, 55906, 1148, 1, 0, 0);
+add (05131,"Sebastian County", "AR", "Arkansas", "7", -6:1, 106180, 1148, 1, 0, 0);
+add (38017,"Cass County", "ND", "North Dakota", "5", -6:1, 116832, 1148, 1, 0, 0);
+add (17135,"Montgomery County", "IL", "Illinois", "6", -6:1, 31390, 1148, 1, 0, 0);
+add (28143,"Tunica County", "MS", "Missippi", "5", -6:1, 8039, 1148, 1, 0, 0);
+add (47061,"Grundy County", "TN", "Tennesee", "3", -5:1, 14138, 1387, 1, 0, 0);
+add (56011,"Crook County", "WY", "Wyoming", "8", -7:1, 5829, 4647, 1, 0, 0);
+add (39159,"Union County", "OH", "Ohio", "4", -5:1, 39494, 1387, 1, 0, 0);
+add (21065,"Estill County", "KY", "Kentucky", "4", -6:1, 15588, 1148, 1, 0, 0);
+add (42007,"Beaver County", "PA", "Pennsylvania", "1", -5:1, 184406, 1387, 1, 0, 0);
+add (38025,"Dunn County", "ND", "North Dakota", "5", -6:1, 3560, 1148, 1, 0, 0);
+add (55083,"Oconto County", "WI", "Wisconnsin", "5", -6:1, 34014, 1148, 1, 0, 0);
+add (51820,"Waynesboro city", "VA", "Virginia", "2", -5:1, 18561, 1387, 1, 0, 0);
+add (18081,"Johnson County", "IN", "Indiana", "4", -5:1, 109368, 1387, 1, 0, 0);
+add (40005,"Atoka County", "OK", "Oklahoma", "7", -6:1, 13237, 1148, 1, 0, 0);
+add (48341,"Moore County", "TX", "Texas", "7", -6:1, 19686, 1148, 1, 0, 0);
+add (45053,"Jasper County", "SC", "South Carolina", "2", -5:1, 16995, 1387, 1, 0, 0);
+add (39101,"Marion County", "OH", "Ohio", "4", -5:1, 64774, 1387, 1, 0, 0);
+add (22027,"Claiborne Parish", "LA", "Louisiana", "7", -6:1, 16919, 1148, 1, 0, 0);
+add (13129,"Gordon County", "GA", "Georgia", "3", -5:1, 41052, 1387, 1, 0, 0);
+add (04001,"Apache County", "AZ", "Arizona", "8", -7:1, 68782, 4647, 1, 0, 0);
+add (48355,"Nueces County", "TX", "Texas", "7", -6:1, 316340, 1148, 1, 0, 0);
+add (18155,"Switzerland County", "IN", "Indiana", "4", -5:1, 8893, 1387, 1, 0, 0);
+add (41027,"Hood River County", "OR", "Oregon", "9", -8:1, 19553, 3240, 0, 1, 0);
+add (27035,"Crow Wing County", "MN", "Minnesota", "5", -6:1, 51681, 1148, 1, 0, 0);
+add (55065,"Lafayette County", "WI", "Wisconnsin", "5", -6:1, 16261, 1148, 1, 0, 0);
+add (21225,"Union County", "KY", "Kentucky", "4", -5:1, 16577, 1387, 1, 0, 0);
+add (06037,"Los Angeles County", "CA", "California", "9", -8:1, 9213533, 3240, 0, 1, 0);
+add (21219,"Todd County", "KY", "Kentucky", "4", -5:1, 11222, 1387, 1, 0, 0);
+add (39091,"Logan County", "OH", "Ohio", "4", -5:1, 46204, 1387, 1, 0, 0);
+add (26091,"Lenawee County", "MI", "Michigan", "4", -5:1, 98412, 1387, 1, 0, 0);
+add (46123,"Tripp County", "SD", "South Dakota", "5", -7:1, 6737, 4647, 1, 0, 0);
+add (40119,"Payne County", "OK", "Oklahoma", "7", -6:1, 65109, 1148, 1, 0, 0);
+add (55105,"Rock County", "WI", "Wisconnsin", "5", -6:1, 150736, 1148, 1, 0, 0);
+add (08081,"Moffat County", "CO", "Colorado", "8", -7:1, 12535, 4647, 1, 0, 0);
+add (48261,"Kenedy County", "TX", "Texas", "7", -6:1, 438, 1148, 1, 0, 0);
+add (51710,"Norfolk city", "VA", "Virginia", "2", -5:1, 215215, 1387, 1, 0, 0);
+add (29229,"Wright County", "MO", "Mosourri", "6", -6:1, 19578, 1148, 1, 0, 0);
+add (30107,"Wheatland County", "MT", "Montana", "6", -7:1, 2373, 4647, 1, 0, 0);
+add (37029,"Camden County", "NC", "North Carolina", "2", -5:1, 6878, 1387, 1, 0, 0);
+add (54027,"Hampshire County", "WV", "West Virginia", "2", -5:1, 19041, 1387, 1, 0, 0);
+add (17055,"Franklin County", "IL", "Illinois", "6", -6:1, 40476, 1148, 1, 0, 0);
+add (48441,"Taylor County", "TX", "Texas", "7", -6:1, 122016, 1148, 1, 0, 0);
+add (48203,"Harrison County", "TX", "Texas", "7", -6:1, 59773, 1148, 1, 0, 0);
+add (19049,"Dallas County", "IA", "Iowa", "5", -6:1, 36900, 1148, 1, 0, 0);
+add (44001,"Bristol County", "RI", "Rhode Island", "0", -5:1, 49114, 1387, 1, 0, 0);
+add (48181,"Grayson County", "TX", "Texas", "7", -6:1, 102815, 1148, 1, 0, 0);
+add (05119,"Pulaski County", "AR", "Arkansas", "7", -6:1, 350345, 1148, 1, 0, 0);
+add (48007,"Aransas County", "TX", "Texas", "7", -6:1, 22910, 1148, 1, 0, 0);
+add (29045,"Clark County", "MO", "Mosourri", "6", -6:1, 7467, 1148, 1, 0, 0);
+add (26047,"Emmet County", "MI", "Michigan", "4", -5:1, 28677, 1387, 1, 0, 0);
+add (17195,"Whiteside County", "IL", "Illinois", "6", -6:1, 59623, 1148, 1, 0, 0);
+add (06019,"Fresno County", "CA", "California", "9", -8:1, 755730, 3240, 0, 1, 0);
+add (48319,"Mason County", "TX", "Texas", "7", -6:1, 3692, 1148, 1, 0, 0);
+add (51117,"Mecklenburg County", "VA", "Virginia", "2", -5:1, 31047, 1387, 1, 0, 0);
+add (31093,"Howard County", "NE", "Nebraska", "6", -7:1, 6458, 4647, 1, 0, 0);
+add (36031,"Essex County", "NY", "New York", "1", -5:1, 37548, 1387, 1, 0, 0);
+add (26129,"Ogemaw County", "MI", "Michigan", "4", -5:1, 21193, 1387, 1, 0, 0);
+add (18055,"Greene County", "IN", "Indiana", "4", -5:1, 33467, 1387, 1, 0, 0);
+add (31151,"Saline County", "NE", "Nebraska", "6", -7:1, 12966, 4647, 1, 0, 0);
+add (20019,"Chautauqua County", "KS", "Kansas", "6", -6:1, 4360, 1148, 1, 0, 0);
+add (48507,"Zavala County", "TX", "Texas", "7", -6:1, 11927, 1148, 1, 0, 0);
+add (21127,"Lawrence County", "KY", "Kentucky", "4", -5:1, 15647, 1387, 1, 0, 0);
+add (48005,"Angelina County", "TX", "Texas", "7", -6:1, 77351, 1148, 1, 0, 0);
+add (29077,"Greene County", "MO", "Mosourri", "6", -6:1, 226758, 1148, 1, 0, 0);
+add (27003,"Anoka County", "MN", "Minnesota", "5", -6:1, 292181, 1148, 1, 0, 0);
+add (51017,"Bath County", "VA", "Virginia", "2", -5:1, 4891, 1387, 1, 0, 0);
+add (06071,"San Bernardino County", "CA", "California", "9", -8:1, 1635234, 3240, 0, 1, 0);
+add (13289,"Twiggs County", "GA", "Georgia", "3", -5:1, 10126, 1387, 1, 0, 0);
+add (33003,"Carroll County", "NH", "New Hampshire", "0", -5:1, 39346, 1387, 1, 0, 0);
+add (48143,"Erath County", "TX", "Texas", "7", -6:1, 31562, 1148, 1, 0, 0);
+add (45045,"Greenville County", "SC", "South Carolina", "2", -5:1, 353845, 1387, 1, 0, 0);
+add (20087,"Jefferson County", "KS", "Kansas", "6", -6:1, 18243, 1148, 1, 0, 0);
+add (49015,"Emery County", "UT", "Utah", "8", -7:1, 10989, 4647, 1, 0, 0);
+add (48479,"Webb County", "TX", "Texas", "7", -6:1, 188166, 1148, 1, 0, 0);
+add (39027,"Clinton County", "OH", "Ohio", "4", -5:1, 39979, 1387, 1, 0, 0);
+add (21033,"Caldwell County", "KY", "Kentucky", "4", -6:1, 13314, 1148, 1, 0, 0);
+add (06003,"Alpine County", "CA", "California", "9", -8:1, 1209, 3240, 0, 1, 0);
+add (47005,"Benton County", "TN", "Tennesee", "3", -5:1, 16328, 1387, 1, 0, 0);
+add (18183,"Whitley County", "IN", "Indiana", "4", -5:1, 30459, 1387, 1, 0, 0);
+add (22007,"Assumption Parish", "LA", "Louisiana", "7", -6:1, 23015, 1148, 1, 0, 0);
+add (48385,"Real County", "TX", "Texas", "7", -6:1, 2687, 1148, 1, 0, 0);
+add (12017,"Citrus County", "FL", "Florida", "3", -5:1, 114068, 1387, 1, 0, 0);
+add (29149,"Oregon County", "MO", "Mosourri", "6", -6:1, 10164, 1148, 1, 0, 0);
+add (08097,"Pitkin County", "CO", "Colorado", "8", -7:1, 13423, 4647, 1, 0, 0);
+add (18093,"Lawrence County", "IN", "Indiana", "4", -5:1, 45615, 1387, 1, 0, 0);
+add (36063,"Niagara County", "NY", "New York", "1", -5:1, 218070, 1387, 1, 0, 0);
+add (51053,"Dinwiddie County", "VA", "Virginia", "2", -5:1, 24657, 1387, 1, 0, 0);
+add (05101,"Newton County", "AR", "Arkansas", "7", -6:1, 8180, 1148, 1, 0, 0);
+add (12127,"Volusia County", "FL", "Florida", "3", -5:1, 423409, 1387, 1, 0, 0);
+add (37089,"Henderson County", "NC", "North Carolina", "2", -5:1, 80822, 1387, 1, 0, 0);
+add (54015,"Clay County", "WV", "West Virginia", "2", -5:1, 10530, 1387, 1, 0, 0);
+add (27007,"Beltrami County", "MN", "Minnesota", "5", -6:1, 38729, 1148, 1, 0, 0);
+add (29039,"Cedar County", "MO", "Mosourri", "6", -6:1, 13215, 1148, 1, 0, 0);
+add (32027,"Pershing County", "NV", "Nevada", "8", -8:1, 5434, 3240, 0, 1, 0);
+add (09011,"New London County", "CT", "Connecticut", "0", -5:1, 245740, 1387, 1, 0, 0);
+add (27095,"Mille Lacs County", "MN", "Minnesota", "5", -6:1, 21044, 1148, 1, 0, 0);
+add (46047,"Fall River County", "SD", "South Dakota", "5", -6:1, 7133, 1148, 1, 0, 0);
+add (41025,"Harney County", "OR", "Oregon", "9", -8:1, 7198, 3240, 0, 1, 0);
+add (49049,"Utah County", "UT", "Utah", "8", -7:1, 335635, 4647, 1, 0, 0);
+add (18161,"Union County", "IN", "Indiana", "4", -5:1, 7263, 1387, 1, 0, 0);
+add (02013,"Aleutians East Borough", "AK", "Alaska", "9", -9:1, 2253, 1174, 0, 0, 1);
+add (01085,"Lowndes County", "AL", "Alabama", "3", -6:1, 12984, 1148, 1, 0, 0);
+add (19029,"Cass County", "IA", "Iowa", "5", -6:1, 14591, 1148, 1, 0, 0);
+add (50019,"Orleans County", "VT", "Vermont", "0", -5:1, 25296, 1387, 1, 0, 0);
+add (37045,"Cleveland County", "NC", "North Carolina", "2", -5:1, 92753, 1387, 1, 0, 0);
+add (12081,"Manatee County", "FL", "Florida", "3", -5:1, 239682, 1387, 1, 0, 0);
+add (37155,"Robeson County", "NC", "North Carolina", "2", -5:1, 115589, 1387, 1, 0, 0);
+add (20111,"Lyon County", "KS", "Kansas", "6", -6:1, 33920, 1148, 1, 0, 0);
+add (38079,"Rolette County", "ND", "North Dakota", "5", -6:1, 14219, 1148, 1, 0, 0);
+add (06095,"Solano County", "CA", "California", "9", -8:1, 377415, 3240, 0, 1, 0);
+add (47035,"Cumberland County", "TN", "Tennesee", "3", -5:1, 44291, 1387, 1, 0, 0);
+add (05137,"Stone County", "AR", "Arkansas", "7", -6:1, 11154, 1148, 1, 0, 0);
+add (48241,"Jasper County", "TX", "Texas", "7", -6:1, 33437, 1148, 1, 0, 0);
+add (28029,"Copiah County", "MS", "Missippi", "5", -6:1, 28944, 1148, 1, 0, 0);
+add (20179,"Sheridan County", "KS", "Kansas", "6", -6:1, 2741, 1148, 1, 0, 0);
+add (53007,"Chelan County", "WA", "Washiington", "9", -8:1, 60052, 3240, 0, 1, 0);
+add (48177,"Gonzales County", "TX", "Texas", "7", -6:1, 17551, 1148, 1, 0, 0);
+add (53013,"Columbia County", "WA", "Washiington", "9", -8:1, 4156, 3240, 0, 1, 0);
+add (53073,"Whatcom County", "WA", "Washiington", "9", -8:1, 156830, 3240, 0, 1, 0);
+add (48481,"Wharton County", "TX", "Texas", "7", -6:1, 40133, 1148, 1, 0, 0);
+add (27105,"Nobles County", "MN", "Minnesota", "5", -6:1, 19312, 1148, 1, 0, 0);
+add (48161,"Freestone County", "TX", "Texas", "7", -6:1, 17675, 1148, 1, 0, 0);
+add (49013,"Duchesne County", "UT", "Utah", "8", -7:1, 14481, 4647, 1, 0, 0);
+add (55067,"Langlade County", "WI", "Wisconnsin", "5", -6:1, 20466, 1148, 1, 0, 0);
+add (45019,"Charleston County", "SC", "South Carolina", "2", -5:1, 316482, 1387, 1, 0, 0);
+add (47063,"Hamblen County", "TN", "Tennesee", "3", -5:1, 54050, 1387, 1, 0, 0);
+add (48281,"Lampasas County", "TX", "Texas", "7", -6:1, 17775, 1148, 1, 0, 0);
+add (20205,"Wilson County", "KS", "Kansas", "6", -6:1, 10218, 1148, 1, 0, 0);
+add (26161,"Washtenaw County", "MI", "Michigan", "4", -5:1, 303069, 1387, 1, 0, 0);
+add (54013,"Calhoun County", "WV", "West Virginia", "2", -5:1, 7940, 1387, 1, 0, 0);
+add (17007,"Boone County", "IL", "Illinois", "6", -6:1, 38734, 1148, 1, 0, 0);
+add (37051,"Cumberland County", "NC", "North Carolina", "2", -5:1, 284629, 1387, 1, 0, 0);
+add (28037,"Franklin County", "MS", "Missippi", "5", -6:1, 8319, 1148, 1, 0, 0);
+add (27023,"Chippewa County", "MN", "Minnesota", "5", -6:1, 13053, 1148, 1, 0, 0);
+add (08053,"Hinsdale County", "CO", "Colorado", "8", -7:1, 737, 4647, 1, 0, 0);
+add (46109,"Roberts County", "SD", "South Dakota", "5", -7:1, 9786, 4647, 1, 0, 0);
+add (08027,"Custer County", "CO", "Colorado", "8", -7:1, 3449, 4647, 1, 0, 0);
+add (40093,"Major County", "OK", "Oklahoma", "7", -6:1, 7829, 1148, 1, 0, 0);
+add (26109,"Menominee County", "MI", "Michigan", "4", -5:1, 24468, 1387, 1, 0, 0);
+add (34037,"Sussex County", "NJ", "New Jersey", "0", -5:1, 143030, 1387, 1, 0, 0);
+add (24027,"Howard County", "MD", "Maryland", "2", -5:1, 236388, 1387, 1, 0, 0);
+add (37137,"Pamlico County", "NC", "North Carolina", "2", -5:1, 12345, 1387, 1, 0, 0);
+add (47157,"Shelby County", "TN", "Tennesee", "3", -6:1, 868825, 1148, 1, 0, 0);
+add (38037,"Grant County", "ND", "North Dakota", "5", -6:1, 2969, 1148, 1, 0, 0);
+add (41033,"Josephine County", "OR", "Oregon", "9", -8:1, 74377, 3240, 0, 1, 0);
+add (42003,"Allegheny County", "PA", "Pennsylvania", "1", -5:1, 1268446, 1387, 1, 0, 0);
+add (51620,"Franklin city", "VA", "Virginia", "2", -5:1, 8685, 1387, 1, 0, 0);
+add (05085,"Lonoke County", "AR", "Arkansas", "7", -6:1, 50156, 1148, 1, 0, 0);
+add (40021,"Cherokee County", "OK", "Oklahoma", "7", -6:1, 39138, 1148, 1, 0, 0);
+add (45089,"Williamsburg County", "SC", "South Carolina", "2", -5:1, 37121, 1387, 1, 0, 0);
+add (51059,"Fairfax County", "VA", "Virginia", "2", -5:1, 929239, 1387, 1, 0, 0);
+add (08039,"Elbert County", "CO", "Colorado", "8", -7:1, 18600, 4647, 1, 0, 0);
+add (05051,"Garland County", "AR", "Arkansas", "7", -6:1, 83976, 1148, 1, 0, 0);
+add (21181,"Nicholas County", "KY", "Kentucky", "4", -5:1, 6998, 1387, 1, 0, 0);
+add (19037,"Chickasaw County", "IA", "Iowa", "5", -6:1, 13441, 1148, 1, 0, 0);
+add (48285,"Lavaca County", "TX", "Texas", "7", -6:1, 18813, 1148, 1, 0, 0);
+add (20177,"Shawnee County", "KS", "Kansas", "6", -6:1, 165348, 1148, 1, 0, 0);
+add (39123,"Ottawa County", "OH", "Ohio", "4", -5:1, 40983, 1387, 1, 0, 0);
+add (18151,"Steuben County", "IN", "Indiana", "4", -5:1, 31450, 1387, 1, 0, 0);
+add (17121,"Marion County", "IL", "Illinois", "6", -6:1, 41883, 1148, 1, 0, 0);
+add (17059,"Gallatin County", "IL", "Illinois", "6", -6:1, 6642, 1148, 1, 0, 0);
+add (56007,"Carbon County", "WY", "Wyoming", "8", -7:1, 15575, 4647, 1, 0, 0);
+add (51595,"Emporia city", "VA", "Virginia", "2", -5:1, 5474, 1387, 1, 0, 0);
+add (29085,"Hickory County", "MO", "Mosourri", "6", -6:1, 8617, 1148, 1, 0, 0);
+add (08017,"Cheyenne County", "CO", "Colorado", "8", -7:1, 2346, 4647, 1, 0, 0);
+add (46025,"Clark County", "SD", "South Dakota", "5", -6:1, 4337, 1148, 1, 0, 0);
+add (39001,"Adams County", "OH", "Ohio", "4", -5:1, 28587, 1387, 1, 0, 0);
+add (18033,"De Kalb County", "IN", "Indiana", "4", -5:1, 39330, 1387, 1, 0, 0);
+add (29041,"Chariton County", "MO", "Mosourri", "6", -6:1, 8621, 1148, 1, 0, 0);
+add (40089,"McCurtain County", "OK", "Oklahoma", "7", -6:1, 34783, 1148, 1, 0, 0);
+add (20189,"Stevens County", "KS", "Kansas", "6", -6:1, 5371, 1148, 1, 0, 0);
+add (48267,"Kimble County", "TX", "Texas", "7", -6:1, 4124, 1148, 1, 0, 0);
+add (05037,"Cross County", "AR", "Arkansas", "7", -6:1, 19564, 1148, 1, 0, 0);
+add (41013,"Crook County", "OR", "Oregon", "9", -8:1, 17236, 3240, 0, 1, 0);
+add (13163,"Jefferson County", "GA", "Georgia", "3", -5:1, 17767, 1387, 1, 0, 0);
+add (48313,"Madison County", "TX", "Texas", "7", -6:1, 11889, 1148, 1, 0, 0);
+add (36077,"Otsego County", "NY", "New York", "1", -5:1, 60788, 1387, 1, 0, 0);
+add (51007,"Amelia County", "VA", "Virginia", "2", -5:1, 10367, 1387, 1, 0, 0);
+add (40007,"Beaver County", "OK", "Oklahoma", "7", -6:1, 6056, 1148, 1, 0, 0);
+add (13085,"Dawson County", "GA", "Georgia", "3", -5:1, 14851, 1387, 1, 0, 0);
+add (48049,"Brown County", "TX", "Texas", "7", -6:1, 37051, 1148, 1, 0, 0);
+add (30021,"Dawson County", "MT", "Montana", "6", -7:1, 8849, 4647, 1, 0, 0);
+add (50015,"Lamoille County", "VT", "Vermont", "0", -5:1, 21597, 1387, 1, 0, 0);
+add (29099,"Jefferson County", "MO", "Mosourri", "6", -6:1, 195675, 1148, 1, 0, 0);
+add (48263,"Kent County", "TX", "Texas", "7", -6:1, 880, 1148, 1, 0, 0);
+add (41071,"Yamhill County", "OR", "Oregon", "9", -8:1, 82085, 3240, 0, 1, 0);
+add (42027,"Centre County", "PA", "Pennsylvania", "1", -5:1, 132700, 1387, 1, 0, 0);
+add (13147,"Hart County", "GA", "Georgia", "3", -5:1, 21833, 1387, 1, 0, 0);
+add (19003,"Adams County", "IA", "Iowa", "5", -6:1, 4352, 1148, 1, 0, 0);
+add (31077,"Greeley County", "NE", "Nebraska", "6", -6:1, 2850, 1148, 1, 0, 0);
+add (50003,"Bennington County", "VT", "Vermont", "0", -5:1, 35968, 1387, 1, 0, 0);
+add (19053,"Decatur County", "IA", "Iowa", "5", -6:1, 8220, 1148, 1, 0, 0);
+add (48133,"Eastland County", "TX", "Texas", "7", -6:1, 17591, 1148, 1, 0, 0);
+add (12071,"Lee County", "FL", "Florida", "3", -5:1, 392895, 1387, 1, 0, 0);
+add (13043,"Candler County", "GA", "Georgia", "3", -5:1, 9078, 1387, 1, 0, 0);
+add (05057,"Hempstead County", "AR", "Arkansas", "7", -6:1, 22113, 1148, 1, 0, 0);
+add (18025,"Crawford County", "IN", "Indiana", "4", -5:1, 10582, 1387, 1, 0, 0);
+add (26079,"Kalkaska County", "MI", "Michigan", "4", -5:1, 15568, 1387, 1, 0, 0);
+add (31183,"Wheeler County", "NE", "Nebraska", "6", -7:1, 925, 4647, 1, 0, 0);
+add (25001,"Barnstable County", "MA", "Massachusetts", "0", -5:1, 208418, 1387, 1, 0, 0);
+add (53023,"Garfield County", "WA", "Washiington", "9", -8:1, 2330, 3240, 0, 1, 0);
+add (38103,"Wells County", "ND", "North Dakota", "5", -6:1, 5200, 1148, 1, 0, 0);
+add (18133,"Putnam County", "IN", "Indiana", "4", -5:1, 34468, 1387, 1, 0, 0);
+add (21207,"Russell County", "KY", "Kentucky", "4", -5:1, 16233, 1387, 1, 0, 0);
+add (53067,"Thurston County", "WA", "Washiington", "9", -8:1, 202255, 3240, 0, 1, 0);
+add (06083,"Santa Barbara County", "CA", "California", "9", -8:1, 389502, 3240, 0, 1, 0);
+add (18027,"Daviess County", "IN", "Indiana", "4", -5:1, 28987, 1387, 1, 0, 0);
+add (48185,"Grimes County", "TX", "Texas", "7", -6:1, 23293, 1148, 1, 0, 0);
+add (17139,"Moultrie County", "IL", "Illinois", "6", -6:1, 14410, 1148, 1, 0, 0);
+add (20113,"McPherson County", "KS", "Kansas", "6", -6:1, 28630, 1148, 1, 0, 0);
+add (40031,"Comanche County", "OK", "Oklahoma", "7", -6:1, 113508, 1148, 1, 0, 0);
+add (18057,"Hamilton County", "IN", "Indiana", "4", -5:1, 162597, 1387, 1, 0, 0);
+add (29173,"Ralls County", "MO", "Mosourri", "6", -6:1, 8813, 1148, 1, 0, 0);
+add (17171,"Scott County", "IL", "Illinois", "6", -6:1, 5610, 1148, 1, 0, 0);
+add (48335,"Mitchell County", "TX", "Texas", "7", -6:1, 9708, 1148, 1, 0, 0);
+add (37187,"Washington County", "NC", "North Carolina", "2", -5:1, 13615, 1387, 1, 0, 0);
+add (37163,"Sampson County", "NC", "North Carolina", "2", -5:1, 52438, 1387, 1, 0, 0);
+add (48231,"Hunt County", "TX", "Texas", "7", -6:1, 70893, 1148, 1, 0, 0);
+add (56029,"Park County", "WY", "Wyoming", "8", -7:1, 25782, 4647, 1, 0, 0);
+add (51678,"Lexington city", "VA", "Virginia", "2", -5:1, 7360, 1387, 1, 0, 0);
+add (41043,"Linn County", "OR", "Oregon", "9", -8:1, 104464, 3240, 0, 1, 0);
+add (31123,"Morrill County", "NE", "Nebraska", "6", -7:1, 5455, 4647, 1, 0, 0);
+add (48211,"Hemphill County", "TX", "Texas", "7", -6:1, 3529, 1148, 1, 0, 0);
+add (22079,"Rapides Parish", "LA", "Louisiana", "7", -6:1, 126763, 1148, 1, 0, 0);
+add (28087,"Lowndes County", "MS", "Missippi", "5", -6:1, 61208, 1148, 1, 0, 0);
+add (37063,"Durham County", "NC", "North Carolina", "2", -5:1, 202411, 1387, 1, 0, 0);
+add (29019,"Boone County", "MO", "Mosourri", "6", -6:1, 129098, 1148, 1, 0, 0);
+add (48493,"Wilson County", "TX", "Texas", "7", -6:1, 31423, 1148, 1, 0, 0);
+add (20157,"Republic County", "KS", "Kansas", "6", -6:1, 6102, 1148, 1, 0, 0);
+add (41039,"Lane County", "OR", "Oregon", "9", -8:1, 314068, 3240, 0, 1, 0);
+add (54029,"Hancock County", "WV", "West Virginia", "2", -5:1, 33973, 1387, 1, 0, 0);
+add (48483,"Wheeler County", "TX", "Texas", "7", -6:1, 5293, 1148, 1, 0, 0);
+add (48113,"Dallas County", "TX", "Texas", "7", -6:1, 2050865, 1148, 1, 0, 0);
+add (28091,"Marion County", "MS", "Missippi", "5", -6:1, 26386, 1148, 1, 0, 0);
+add (29155,"Pemiscot County", "MO", "Mosourri", "6", -6:1, 21516, 1148, 1, 0, 0);
+add (16001,"Ada County", "ID", "Idaho", "8", -7:1, 275687, 4647, 1, 0, 0);
+add (16053,"Jerome County", "ID", "Idaho", "8", -7:1, 17962, 4647, 1, 0, 0);
+add (06065,"Riverside County", "CA", "California", "9", -8:1, 1478838, 3240, 0, 1, 0);
+add (18029,"Dearborn County", "IN", "Indiana", "4", -5:1, 47206, 1387, 1, 0, 0);
+add (42079,"Luzerne County", "PA", "Pennsylvania", "1", -5:1, 313767, 1387, 1, 0, 0);
+add (55003,"Ashland County", "WI", "Wisconnsin", "5", -6:1, 16474, 1148, 1, 0, 0);
+add (18105,"Monroe County", "IN", "Indiana", "4", -5:1, 115130, 1387, 1, 0, 0);
+add (21081,"Grant County", "KY", "Kentucky", "4", -6:1, 20347, 1148, 1, 0, 0);
+add (46065,"Hughes County", "SD", "South Dakota", "5", -7:1, 15373, 4647, 1, 0, 0);
+add (45027,"Clarendon County", "SC", "South Carolina", "2", -5:1, 30814, 1387, 1, 0, 0);
+add (20181,"Sherman County", "KS", "Kansas", "6", -6:1, 6511, 1148, 1, 0, 0);
+add (27145,"Stearns County", "MN", "Minnesota", "5", -6:1, 128094, 1148, 1, 0, 0);
+add (39069,"Henry County", "OH", "Ohio", "4", -5:1, 29923, 1387, 1, 0, 0);
+add (26003,"Alger County", "MI", "Michigan", "4", -5:1, 9887, 1387, 1, 0, 0);
+add (05133,"Sevier County", "AR", "Arkansas", "7", -6:1, 14623, 1148, 1, 0, 0);
+add (54101,"Webster County", "WV", "West Virginia", "2", -5:1, 10230, 1387, 1, 0, 0);
+add (51630,"Fredericksburg city", "VA", "Virginia", "2", -5:1, 21686, 1387, 1, 0, 0);
+add (17085,"Jo Daviess County", "IL", "Illinois", "6", -6:1, 21468, 1148, 1, 0, 0);
+add (48165,"Gaines County", "TX", "Texas", "7", -6:1, 14992, 1148, 1, 0, 0);
+add (20115,"Marion County", "KS", "Kansas", "6", -6:1, 13593, 1148, 1, 0, 0);
+add (41055,"Sherman County", "OR", "Oregon", "9", -8:1, 1789, 3240, 0, 1, 0);
+add (13115,"Floyd County", "GA", "Georgia", "3", -5:1, 85185, 1387, 1, 0, 0);
+add (21089,"Greenup County", "KY", "Kentucky", "4", -6:1, 36874, 1148, 1, 0, 0);
+add (06087,"Santa Cruz County", "CA", "California", "9", -8:1, 242994, 3240, 0, 1, 0);
+add (27139,"Scott County", "MN", "Minnesota", "5", -6:1, 79031, 1148, 1, 0, 0);
+add (47077,"Henderson County", "TN", "Tennesee", "3", -5:1, 24424, 1387, 1, 0, 0);
+add (53055,"San Juan County", "WA", "Washiington", "9", -8:1, 12493, 3240, 0, 1, 0);
+add (35006,"Cibola County", "NM", "New Mexico", "8", -7:1, 26250, 4647, 1, 0, 0);
+add (19193,"Woodbury County", "IA", "Iowa", "5", -6:1, 101672, 1148, 1, 0, 0);
+add (46073,"Jerauld County", "SD", "South Dakota", "5", -7:1, 2222, 4647, 1, 0, 0);
+add (27153,"Todd County", "MN", "Minnesota", "5", -6:1, 24020, 1148, 1, 0, 0);
+add (48065,"Carson County", "TX", "Texas", "7", -6:1, 6696, 1148, 1, 0, 0);
+add (47161,"Stewart County", "TN", "Tennesee", "3", -6:1, 11545, 1148, 1, 0, 0);
+add (42093,"Montour County", "PA", "Pennsylvania", "1", -5:1, 17730, 1387, 1, 0, 0);
+add (18053,"Grant County", "IN", "Indiana", "4", -5:1, 72570, 1387, 1, 0, 0);
+add (26019,"Benzie County", "MI", "Michigan", "4", -5:1, 14678, 1387, 1, 0, 0);
+add (29141,"Morgan County", "MO", "Mosourri", "6", -6:1, 18434, 1148, 1, 0, 0);
+add (13025,"Brantley County", "GA", "Georgia", "3", -5:1, 13571, 1387, 1, 0, 0);
+add (13301,"Warren County", "GA", "Georgia", "3", -5:1, 6059, 1387, 1, 0, 0);
+add (54077,"Preston County", "WV", "West Virginia", "2", -5:1, 29811, 1387, 1, 0, 0);
+add (46033,"Custer County", "SD", "South Dakota", "5", -6:1, 6930, 1148, 1, 0, 0);
+add (22005,"Ascension Parish", "LA", "Louisiana", "7", -6:1, 71628, 1148, 1, 0, 0);
+add (08055,"Huerfano County", "CO", "Colorado", "8", -7:1, 6813, 4647, 1, 0, 0);
+add (47107,"McMinn County", "TN", "Tennesee", "3", -6:1, 46283, 1148, 1, 0, 0);
+add (01027,"Clay County", "AL", "Alabama", "3", -6:1, 13970, 1148, 1, 0, 0);
+add (48303,"Lubbock County", "TX", "Texas", "7", -6:1, 229475, 1148, 1, 0, 0);
+add (08123,"Weld County", "CO", "Colorado", "8", -7:1, 159429, 4647, 1, 0, 0);
+add (28135,"Tallahatchie County", "MS", "Missippi", "5", -6:1, 14893, 1148, 1, 0, 0);
+add (08023,"Costilla County", "CO", "Colorado", "8", -7:1, 3641, 4647, 1, 0, 0);
+add (48279,"Lamb County", "TX", "Texas", "7", -6:1, 14760, 1148, 1, 0, 0);
+add (29101,"Johnson County", "MO", "Mosourri", "6", -6:1, 47644, 1148, 1, 0, 0);
+add (40045,"Ellis County", "OK", "Oklahoma", "7", -6:1, 4291, 1148, 1, 0, 0);
+add (55121,"Trempealeau County", "WI", "Wisconnsin", "5", -6:1, 26469, 1148, 1, 0, 0);
+add (22119,"Webster Parish", "LA", "Louisiana", "7", -6:1, 42707, 1148, 1, 0, 0);
+add (19021,"Buena Vista County", "IA", "Iowa", "5", -6:1, 19454, 1148, 1, 0, 0);
+add (47015,"Cannon County", "TN", "Tennesee", "3", -5:1, 12139, 1387, 1, 0, 0);
+add (21173,"Montgomery County", "KY", "Kentucky", "4", -5:1, 20932, 1387, 1, 0, 0);
+add (47169,"Trousdale County", "TN", "Tennesee", "3", -6:1, 6844, 1148, 1, 0, 0);
+add (31049,"Deuel County", "NE", "Nebraska", "6", -6:1, 2029, 1148, 1, 0, 0);
+add (19169,"Story County", "IA", "Iowa", "5", -6:1, 75268, 1148, 1, 0, 0);
+add (17157,"Randolph County", "IL", "Illinois", "6", -6:1, 33489, 1148, 1, 0, 0);
+add (17037,"DeKalb County", "IL", "Illinois", "6", -6:1, 84169, 1148, 1, 0, 0);
+add (40067,"Jefferson County", "OK", "Oklahoma", "7", -6:1, 6583, 1148, 1, 0, 0);
+add (47185,"White County", "TN", "Tennesee", "3", -6:1, 22708, 1148, 1, 0, 0);
+add (05089,"Marion County", "AR", "Arkansas", "7", -6:1, 14918, 1148, 1, 0, 0);
+add (20083,"Hodgeman County", "KS", "Kansas", "6", -6:1, 2209, 1148, 1, 0, 0);
+add (13135,"Gwinnett County", "GA", "Georgia", "3", -5:1, 522095, 1387, 1, 0, 0);
+add (05095,"Monroe County", "AR", "Arkansas", "7", -6:1, 10200, 1148, 1, 0, 0);
+add (45083,"Spartanburg County", "SC", "South Carolina", "2", -5:1, 247458, 1387, 1, 0, 0);
+add (30055,"McCone County", "MT", "Montana", "6", -7:1, 1964, 4647, 1, 0, 0);
+add (05079,"Lincoln County", "AR", "Arkansas", "7", -6:1, 14274, 1148, 1, 0, 0);
+add (30105,"Valley County", "MT", "Montana", "6", -7:1, 8195, 4647, 1, 0, 0);
+add (26077,"Kalamazoo County", "MI", "Michigan", "4", -5:1, 229660, 1387, 1, 0, 0);
+add (06073,"San Diego County", "CA", "California", "9", -8:1, 2780592, 3240, 0, 1, 0);
+add (20135,"Ness County", "KS", "Kansas", "6", -6:1, 3607, 1148, 1, 0, 0);
+add (31175,"Valley County", "NE", "Nebraska", "6", -7:1, 4602, 4647, 1, 0, 0);
+add (19065,"Fayette County", "IA", "Iowa", "5", -6:1, 21761, 1148, 1, 0, 0);
+add (47091,"Johnson County", "TN", "Tennesee", "3", -6:1, 16755, 1148, 1, 0, 0);
+add (05007,"Benton County", "AR", "Arkansas", "7", -6:1, 134162, 1148, 1, 0, 0);
+add (46031,"Corson County", "SD", "South Dakota", "5", -6:1, 4190, 1148, 1, 0, 0);
+add (45009,"Bamberg County", "SC", "South Carolina", "2", -5:1, 16498, 1387, 1, 0, 0);
+add (31137,"Phelps County", "NE", "Nebraska", "6", -7:1, 9908, 4647, 1, 0, 0);
+add (01011,"Bullock County", "AL", "Alabama", "3", -6:1, 11311, 1148, 1, 0, 0);
+add (06005,"Amador County", "CA", "California", "9", -8:1, 33334, 3240, 0, 1, 0);
+add (29159,"Pettis County", "MO", "Mosourri", "6", -6:1, 37069, 1148, 1, 0, 0);
+add (13271,"Telfair County", "GA", "Georgia", "3", -5:1, 11558, 1387, 1, 0, 0);
+add (19101,"Jefferson County", "IA", "Iowa", "5", -6:1, 17113, 1148, 1, 0, 0);
+add (17191,"Wayne County", "IL", "Illinois", "6", -6:1, 16989, 1148, 1, 0, 0);
+add (20079,"Harvey County", "KS", "Kansas", "6", -6:1, 34361, 1148, 1, 0, 0);
+add (22019,"Calcasieu Parish", "LA", "Louisiana", "7", -6:1, 180330, 1148, 1, 0, 0);
+add (46095,"Mellette County", "SD", "South Dakota", "5", -7:1, 2029, 4647, 1, 0, 0);
+add (21227,"Warren County", "KY", "Kentucky", "4", -5:1, 87323, 1387, 1, 0, 0);
+add (30099,"Teton County", "MT", "Montana", "6", -7:1, 6333, 4647, 1, 0, 0);
+add (27055,"Houston County", "MN", "Minnesota", "5", -6:1, 19267, 1148, 1, 0, 0);
+add (33017,"Strafford County", "NH", "New Hampshire", "0", -5:1, 108650, 1387, 1, 0, 0);
+add (47159,"Smith County", "TN", "Tennesee", "3", -6:1, 16368, 1148, 1, 0, 0);
+add (44007,"Providence County", "RI", "Rhode Island", "0", -5:1, 574038, 1387, 1, 0, 0);
+add (16015,"Boise County", "ID", "Idaho", "8", -7:1, 5114, 4647, 1, 0, 0);
+add (56019,"Johnson County", "WY", "Wyoming", "8", -7:1, 6824, 4647, 1, 0, 0);
+add (01067,"Henry County", "AL", "Alabama", "3", -6:1, 15836, 1148, 1, 0, 0);
+add (30101,"Toole County", "MT", "Montana", "6", -7:1, 4727, 4647, 1, 0, 0);
+add (51177,"Spotsylvania County", "VA", "Virginia", "2", -5:1, 83692, 1387, 1, 0, 0);
+add (21029,"Bullitt County", "KY", "Kentucky", "4", -6:1, 59304, 1148, 1, 0, 0);
+add (40111,"Okmulgee County", "OK", "Oklahoma", "7", -6:1, 38860, 1148, 1, 0, 0);
+add (12123,"Taylor County", "FL", "Florida", "3", -5:1, 18849, 1387, 1, 0, 0);
+add (51135,"Nottoway County", "VA", "Virginia", "2", -5:1, 14999, 1387, 1, 0, 0);
+add (29133,"Mississippi County", "MO", "Mosourri", "6", -6:1, 13395, 1148, 1, 0, 0);
+add (01129,"Washington County", "AL", "Alabama", "3", -6:1, 17677, 1148, 1, 0, 0);
+add (08035,"Douglas County", "CO", "Colorado", "8", -7:1, 140975, 4647, 1, 0, 0);
+add (55133,"Waukesha County", "WI", "Wisconnsin", "5", -6:1, 353110, 1148, 1, 0, 0);
+add (47131,"Obion County", "TN", "Tennesee", "3", -6:1, 32219, 1148, 1, 0, 0);
+add (42061,"Huntingdon County", "PA", "Pennsylvania", "1", -5:1, 44599, 1387, 1, 0, 0);
+add (46013,"Brown County", "SD", "South Dakota", "5", -6:1, 35433, 1148, 1, 0, 0);
+add (17187,"Warren County", "IL", "Illinois", "6", -6:1, 18824, 1148, 1, 0, 0);
+add (34041,"Warren County", "NJ", "New Jersey", "0", -5:1, 98600, 1387, 1, 0, 0);
+add (28043,"Grenada County", "MS", "Missippi", "5", -6:1, 22427, 1148, 1, 0, 0);
+add (36079,"Putnam County", "NY", "New York", "1", -5:1, 93358, 1387, 1, 0, 0);
+add (42067,"Juniata County", "PA", "Pennsylvania", "1", -5:1, 22101, 1387, 1, 0, 0);
+add (20109,"Logan County", "KS", "Kansas", "6", -6:1, 2987, 1148, 1, 0, 0);
+add (05115,"Pope County", "AR", "Arkansas", "7", -6:1, 52059, 1148, 1, 0, 0);
+add (13029,"Bryan County", "GA", "Georgia", "3", -5:1, 23482, 1387, 1, 0, 0);
+add (49039,"Sanpete County", "UT", "Utah", "8", -7:1, 21452, 4647, 1, 0, 0);
+add (29011,"Barton County", "MO", "Mosourri", "6", -6:1, 12078, 1148, 1, 0, 0);
+add (20097,"Kiowa County", "KS", "Kansas", "6", -6:1, 3470, 1148, 1, 0, 0);
+add (40081,"Lincoln County", "OK", "Oklahoma", "7", -6:1, 31361, 1148, 1, 0, 0);
+add (48297,"Live Oak County", "TX", "Texas", "7", -6:1, 10137, 1148, 1, 0, 0);
+add (48269,"King County", "TX", "Texas", "7", -6:1, 363, 1148, 1, 0, 0);
+add (37121,"Mitchell County", "NC", "North Carolina", "2", -5:1, 14831, 1387, 1, 0, 0);
+add (18043,"Floyd County", "IN", "Indiana", "4", -5:1, 71990, 1387, 1, 0, 0);
+add (31115,"Loup County", "NE", "Nebraska", "6", -7:1, 666, 4647, 1, 0, 0);
+add (48259,"Kendall County", "TX", "Texas", "7", -6:1, 21222, 1148, 1, 0, 0);
+add (18095,"Madison County", "IN", "Indiana", "4", -5:1, 131360, 1387, 1, 0, 0);
+add (27021,"Cass County", "MN", "Minnesota", "5", -6:1, 26465, 1148, 1, 0, 0);
+add (18123,"Perry County", "IN", "Indiana", "4", -5:1, 19350, 1387, 1, 0, 0);
+add (30033,"Garfield County", "MT", "Montana", "6", -7:1, 1393, 4647, 1, 0, 0);
+add (12131,"Walton County", "FL", "Florida", "3", -5:1, 37410, 1387, 1, 0, 0);
+add (16049,"Idaho County", "ID", "Idaho", "8", -7:1, 15066, 4647, 1, 0, 0);
+add (45013,"Beaufort County", "SC", "South Carolina", "2", -5:1, 108959, 1387, 1, 0, 0);
+add (20129,"Morton County", "KS", "Kansas", "6", -6:1, 3440, 1148, 1, 0, 0);
+add (08033,"Dolores County", "CO", "Colorado", "8", -7:1, 1822, 4647, 1, 0, 0);
+add (18169,"Wabash County", "IN", "Indiana", "4", -5:1, 34537, 1387, 1, 0, 0);
+add (39175,"Wyandot County", "OH", "Ohio", "4", -5:1, 22826, 1387, 1, 0, 0);
+add (12087,"Monroe County", "FL", "Florida", "3", -5:1, 81203, 1387, 1, 0, 0);
+add (28131,"Stone County", "MS", "Missippi", "5", -6:1, 13166, 1148, 1, 0, 0);
+add (18147,"Spencer County", "IN", "Indiana", "4", -5:1, 20937, 1387, 1, 0, 0);
+add (17075,"Iroquois County", "IL", "Illinois", "6", -6:1, 31243, 1148, 1, 0, 0);
+add (51043,"Clarke County", "VA", "Virginia", "2", -5:1, 12779, 1387, 1, 0, 0);
+add (46059,"Hand County", "SD", "South Dakota", "5", -7:1, 4144, 4647, 1, 0, 0);
+add (42035,"Clinton County", "PA", "Pennsylvania", "1", -5:1, 37000, 1387, 1, 0, 0);
+add (17185,"Wabash County", "IL", "Illinois", "6", -6:1, 12630, 1148, 1, 0, 0);
+add (39031,"Coshocton County", "OH", "Ohio", "4", -5:1, 36115, 1387, 1, 0, 0);
+add (01111,"Randolph County", "AL", "Alabama", "3", -6:1, 19923, 1148, 1, 0, 0);
+add (35028,"Los Alamos County", "NM", "New Mexico", "8", -7:1, 18344, 4647, 1, 0, 0);
+add (28089,"Madison County", "MS", "Missippi", "5", -6:1, 72857, 1148, 1, 0, 0);
+add (46117,"Stanley County", "SD", "South Dakota", "5", -7:1, 2929, 4647, 1, 0, 0);
+add (13185,"Lowndes County", "GA", "Georgia", "3", -5:1, 85231, 1387, 1, 0, 0);
+add (46023,"Charles Mix County", "SD", "South Dakota", "5", -6:1, 9337, 1148, 1, 0, 0);
+add (19161,"Sac County", "IA", "Iowa", "5", -6:1, 11931, 1148, 1, 0, 0);
+add (22011,"Beauregard Parish", "LA", "Louisiana", "7", -6:1, 31976, 1148, 1, 0, 0);
+add (19157,"Poweshiek County", "IA", "Iowa", "5", -6:1, 18865, 1148, 1, 0, 0);
+add (53041,"Lewis County", "WA", "Washiington", "9", -8:1, 68163, 3240, 0, 1, 0);
+add (05055,"Greene County", "AR", "Arkansas", "7", -6:1, 36192, 1148, 1, 0, 0);
+add (18153,"Sullivan County", "IN", "Indiana", "4", -5:1, 19270, 1387, 1, 0, 0);
+add (55061,"Kewaunee County", "WI", "Wisconnsin", "5", -6:1, 19806, 1148, 1, 0, 0);
+add (45015,"Berkeley County", "SC", "South Carolina", "2", -5:1, 136544, 1387, 1, 0, 0);
+add (41017,"Deschutes County", "OR", "Oregon", "9", -8:1, 105640, 3240, 0, 1, 0);
+add (21189,"Owsley County", "KY", "Kentucky", "4", -5:1, 5404, 1387, 1, 0, 0);
+add (01029,"Cleburne County", "AL", "Alabama", "3", -6:1, 14308, 1148, 1, 0, 0);
+add (42131,"Wyoming County", "PA", "Pennsylvania", "1", -5:1, 29149, 1387, 1, 0, 0);
+add (06077,"San Joaquin County", "CA", "California", "9", -8:1, 550445, 3240, 0, 1, 0);
+add (29005,"Atchison County", "MO", "Mosourri", "6", -6:1, 6999, 1148, 1, 0, 0);
+add (31009,"Blaine County", "NE", "Nebraska", "6", -6:1, 578, 1148, 1, 0, 0);
+add (37037,"Chatham County", "NC", "North Carolina", "2", -5:1, 45406, 1387, 1, 0, 0);
+add (22039,"Evangeline Parish", "LA", "Louisiana", "7", -6:1, 34097, 1148, 1, 0, 0);
+add (12099,"Palm Beach County", "FL", "Florida", "3", -5:1, 1032625, 1387, 1, 0, 0);
+add (01031,"Coffee County", "AL", "Alabama", "3", -6:1, 42436, 1148, 1, 0, 0);
+add (48123,"DeWitt County", "TX", "Texas", "7", -6:1, 19661, 1148, 1, 0, 0);
+add (54065,"Morgan County", "WV", "West Virginia", "2", -5:1, 13640, 1387, 1, 0, 0);
+add (47133,"Overton County", "TN", "Tennesee", "3", -6:1, 19557, 1148, 1, 0, 0);
+add (26133,"Osceola County", "MI", "Michigan", "4", -5:1, 22106, 1387, 1, 0, 0);
+add (40121,"Pittsburg County", "OK", "Oklahoma", "7", -6:1, 42798, 1148, 1, 0, 0);
+add (37047,"Columbus County", "NC", "North Carolina", "2", -5:1, 52634, 1387, 1, 0, 0);
+add (27047,"Freeborn County", "MN", "Minnesota", "5", -6:1, 31584, 1148, 1, 0, 0);
+add (28103,"Noxubee County", "MS", "Missippi", "5", -6:1, 12366, 1148, 1, 0, 0);
+add (48073,"Cherokee County", "TX", "Texas", "7", -6:1, 42947, 1148, 1, 0, 0);
+add (31149,"Rock County", "NE", "Nebraska", "6", -7:1, 1743, 4647, 1, 0, 0);
+add (19197,"Wright County", "IA", "Iowa", "5", -6:1, 14003, 1148, 1, 0, 0);
+add (47143,"Rhea County", "TN", "Tennesee", "3", -6:1, 27836, 1148, 1, 0, 0);
+add (24001,"Allegany County", "MD", "Maryland", "2", -5:1, 71333, 1387, 1, 0, 0);
+add (36085,"Richmond County", "NY", "New York", "1", -5:1, 407123, 1387, 1, 0, 0);
+add (21185,"Oldham County", "KY", "Kentucky", "4", -5:1, 44395, 1387, 1, 0, 0);
+add (28159,"Winston County", "MS", "Missippi", "5", -6:1, 19387, 1148, 1, 0, 0);
+add (47149,"Rutherford County", "TN", "Tennesee", "3", -6:1, 166035, 1148, 1, 0, 0);
+add (19017,"Bremer County", "IA", "Iowa", "5", -6:1, 23411, 1148, 1, 0, 0);
+add (41051,"Multnomah County", "OR", "Oregon", "9", -8:1, 631082, 3240, 0, 1, 0);
+add (42125,"Washington County", "PA", "Pennsylvania", "1", -5:1, 205566, 1387, 1, 0, 0);
+add (51013,"Arlington County", "VA", "Virginia", "2", -5:1, 177275, 1387, 1, 0, 0);
+add (22031,"De Soto Parish", "LA", "Louisiana", "7", -6:1, 24921, 1148, 1, 0, 0);
+add (19107,"Keokuk County", "IA", "Iowa", "5", -6:1, 11499, 1148, 1, 0, 0);
+add (13251,"Screven County", "GA", "Georgia", "3", -5:1, 14431, 1387, 1, 0, 0);
+add (38059,"Morton County", "ND", "North Dakota", "5", -6:1, 24575, 1148, 1, 0, 0);
+add (19011,"Benton County", "IA", "Iowa", "5", -6:1, 25418, 1148, 1, 0, 0);
+add (26023,"Branch County", "MI", "Michigan", "4", -5:1, 43634, 1387, 1, 0, 0);
+add (51720,"Norton city", "VA", "Virginia", "2", -5:1, 4155, 1387, 1, 0, 0);
+add (02130,"Ketchikan Gateway Borough", "AK", "Alaska", "9", -9:1, 13443, 1174, 0, 0, 1);
+add (35033,"Mora County", "NM", "New Mexico", "8", -7:1, 4861, 4647, 1, 0, 0);
+add (29071,"Franklin County", "MO", "Mosourri", "6", -6:1, 91763, 1148, 1, 0, 0);
+add (22043,"Grant Parish", "LA", "Louisiana", "7", -6:1, 18990, 1148, 1, 0, 0);
+add (54043,"Lincoln County", "WV", "West Virginia", "2", -5:1, 22192, 1387, 1, 0, 0);
+add (37113,"Macon County", "NC", "North Carolina", "2", -5:1, 28338, 1387, 1, 0, 0);
+add (17053,"Ford County", "IL", "Illinois", "6", -6:1, 14084, 1148, 1, 0, 0);
+add (37001,"Alamance County", "NC", "North Carolina", "2", -5:1, 119397, 1387, 1, 0, 0);
+add (38099,"Walsh County", "ND", "North Dakota", "5", -6:1, 13532, 1148, 1, 0, 0);
+add (42075,"Lebanon County", "PA", "Pennsylvania", "1", -5:1, 117434, 1387, 1, 0, 0);
+add (18097,"Marion County", "IN", "Indiana", "4", -5:1, 813405, 1387, 1, 0, 0);
+add (51023,"Botetourt County", "VA", "Virginia", "2", -5:1, 28561, 1387, 1, 0, 0);
+add (51171,"Shenandoah County", "VA", "Virginia", "2", -5:1, 34663, 1387, 1, 0, 0);
+add (18061,"Harrison County", "IN", "Indiana", "4", -5:1, 34730, 1387, 1, 0, 0);
+add (51035,"Carroll County", "VA", "Virginia", "2", -5:1, 27873, 1387, 1, 0, 0);
+add (51091,"Highland County", "VA", "Virginia", "2", -5:1, 2499, 1387, 1, 0, 0);
+add (20045,"Douglas County", "KS", "Kansas", "6", -6:1, 93137, 1148, 1, 0, 0);
+add (31059,"Fillmore County", "NE", "Nebraska", "6", -6:1, 6929, 1148, 1, 0, 0);
+add (36057,"Montgomery County", "NY", "New York", "1", -5:1, 50755, 1387, 1, 0, 0);
+add (20005,"Atchison County", "KS", "Kansas", "6", -6:1, 16908, 1148, 1, 0, 0);
+add (47147,"Robertson County", "TN", "Tennesee", "3", -6:1, 53077, 1148, 1, 0, 0);
+add (48043,"Brewster County", "TX", "Texas", "7", -6:1, 8893, 1148, 1, 0, 0);
+add (05117,"Prairie County", "AR", "Arkansas", "7", -6:1, 9410, 1148, 1, 0, 0);
+add (26157,"Tuscola County", "MI", "Michigan", "4", -5:1, 58181, 1387, 1, 0, 0);
+add (46061,"Hanson County", "SD", "South Dakota", "5", -7:1, 2935, 4647, 1, 0, 0);
+add (48061,"Cameron County", "TX", "Texas", "7", -6:1, 326449, 1148, 1, 0, 0);
+add (21077,"Gallatin County", "KY", "Kentucky", "4", -6:1, 7182, 1148, 1, 0, 0);
+add (42073,"Lawrence County", "PA", "Pennsylvania", "1", -5:1, 94887, 1387, 1, 0, 0);
+add (48137,"Edwards County", "TX", "Texas", "7", -6:1, 3779, 1148, 1, 0, 0);
+add (55011,"Buffalo County", "WI", "Wisconnsin", "5", -6:1, 14298, 1148, 1, 0, 0);
+add (42001,"Adams County", "PA", "Pennsylvania", "1", -5:1, 86537, 1387, 1, 0, 0);
+add (18037,"Dubois County", "IN", "Indiana", "4", -5:1, 39682, 1387, 1, 0, 0);
+add (19143,"Osceola County", "IA", "Iowa", "5", -6:1, 6980, 1148, 1, 0, 0);
+add (32005,"Douglas County", "NV", "Nevada", "8", -8:1, 37051, 3240, 0, 1, 0);
+add (50025,"Windham County", "VT", "Vermont", "0", -5:1, 42650, 1387, 1, 0, 0);
+add (45063,"Lexington County", "SC", "South Carolina", "2", -5:1, 205260, 1387, 1, 0, 0);
+add (12085,"Martin County", "FL", "Florida", "3", -5:1, 115940, 1387, 1, 0, 0);
+add (46093,"Meade County", "SD", "South Dakota", "5", -7:1, 21911, 4647, 1, 0, 0);
+add (27075,"Lake County", "MN", "Minnesota", "5", -6:1, 10566, 1148, 1, 0, 0);
+add (20033,"Comanche County", "KS", "Kansas", "6", -6:1, 2012, 1148, 1, 0, 0);
+add (21139,"Livingston County", "KY", "Kentucky", "4", -5:1, 9432, 1387, 1, 0, 0);
+add (19023,"Butler County", "IA", "Iowa", "5", -6:1, 15693, 1148, 1, 0, 0);
+add (48367,"Parker County", "TX", "Texas", "7", -6:1, 81985, 1148, 1, 0, 0);
+add (53019,"Ferry County", "WA", "Washiington", "9", -8:1, 7170, 3240, 0, 1, 0);
+add (09015,"Windham County", "CT", "Connecticut", "0", -5:1, 105121, 1387, 1, 0, 0);
+add (48315,"Marion County", "TX", "Texas", "7", -6:1, 10886, 1148, 1, 0, 0);
+add (21165,"Menifee County", "KY", "Kentucky", "4", -5:1, 5736, 1387, 1, 0, 0);
+add (53043,"Lincoln County", "WA", "Washiington", "9", -8:1, 9734, 3240, 0, 1, 0);
+add (19109,"Kossuth County", "IA", "Iowa", "5", -6:1, 17738, 1148, 1, 0, 0);
+add (40035,"Craig County", "OK", "Oklahoma", "7", -6:1, 14450, 1148, 1, 0, 0);
+add (51037,"Charlotte County", "VA", "Virginia", "2", -5:1, 12259, 1387, 1, 0, 0);
+add (48429,"Stephens County", "TX", "Texas", "7", -6:1, 9811, 1148, 1, 0, 0);
+add (30093,"Silver Bow County", "MT", "Montana", "6", -7:1, 34560, 4647, 1, 0, 0);
+add (54083,"Randolph County", "WV", "West Virginia", "2", -5:1, 28658, 1387, 1, 0, 0);
+add (55078,"Menominee County", "WI", "Wisconnsin", "5", -6:1, 4779, 1148, 1, 0, 0);
+add (21183,"Ohio County", "KY", "Kentucky", "4", -5:1, 22005, 1387, 1, 0, 0);
+add (27063,"Jackson County", "MN", "Minnesota", "5", -6:1, 11529, 1148, 1, 0, 0);
+add (08009,"Baca County", "CO", "Colorado", "8", -7:1, 4365, 4647, 1, 0, 0);
+add (06053,"Monterey County", "CA", "California", "9", -8:1, 365605, 3240, 0, 1, 0);
+add (29161,"Phelps County", "MO", "Mosourri", "6", -6:1, 38592, 1148, 1, 0, 0);
+add (29067,"Douglas County", "MO", "Mosourri", "6", -6:1, 12422, 1148, 1, 0, 0);
+add (39111,"Monroe County", "OH", "Ohio", "4", -5:1, 15357, 1387, 1, 0, 0);
+add (48189,"Hale County", "TX", "Texas", "7", -6:1, 36676, 1148, 1, 0, 0);
+add (13257,"Stephens County", "GA", "Georgia", "3", -5:1, 25421, 1387, 1, 0, 0);
+add (29167,"Polk County", "MO", "Mosourri", "6", -6:1, 25530, 1148, 1, 0, 0);
+add (36071,"Orange County", "NY", "New York", "1", -5:1, 329220, 1387, 1, 0, 0);
+add (19047,"Crawford County", "IA", "Iowa", "5", -6:1, 16446, 1148, 1, 0, 0);
+add (46085,"Lyman County", "SD", "South Dakota", "5", -7:1, 3768, 4647, 1, 0, 0);
+add (12091,"Okaloosa County", "FL", "Florida", "3", -5:1, 169289, 1387, 1, 0, 0);
+add (29153,"Ozark County", "MO", "Mosourri", "6", -6:1, 9897, 1148, 1, 0, 0);
+add (48109,"Culberson County", "TX", "Texas", "7", -6:1, 3050, 1148, 1, 0, 0);
+add (18009,"Blackford County", "IN", "Indiana", "4", -5:1, 13910, 1387, 1, 0, 0);
+add (40033,"Cotton County", "OK", "Oklahoma", "7", -6:1, 6705, 1148, 1, 0, 0);
+add (48155,"Foard County", "TX", "Texas", "7", -6:1, 1699, 1148, 1, 0, 0);
+add (28073,"Lamar County", "MS", "Missippi", "5", -6:1, 36888, 1148, 1, 0, 0);
+add (17107,"Logan County", "IL", "Illinois", "6", -6:1, 31289, 1148, 1, 0, 0);
+add (38013,"Burke County", "ND", "North Dakota", "5", -6:1, 2266, 1148, 1, 0, 0);
+add (29075,"Gentry County", "MO", "Mosourri", "6", -6:1, 6938, 1148, 1, 0, 0);
+add (35013,"Dona Ana County", "NM", "New Mexico", "8", -7:1, 169165, 4647, 1, 0, 0);
+add (51107,"Loudoun County", "VA", "Virginia", "2", -5:1, 143940, 1387, 1, 0, 0);
+add (06023,"Humboldt County", "CA", "California", "9", -8:1, 122262, 3240, 0, 1, 0);
+add (21193,"Perry County", "KY", "Kentucky", "4", -5:1, 31049, 1387, 1, 0, 0);
+add (20203,"Wichita County", "KS", "Kansas", "6", -6:1, 2643, 1148, 1, 0, 0);
+add (01053,"Escambia County", "AL", "Alabama", "3", -6:1, 36740, 1148, 1, 0, 0);
+add (22049,"Jackson Parish", "LA", "Louisiana", "7", -6:1, 15566, 1148, 1, 0, 0);
+add (42025,"Carbon County", "PA", "Pennsylvania", "1", -5:1, 58857, 1387, 1, 0, 0);
+add (32023,"Nye County", "NV", "Nevada", "8", -8:1, 28799, 3240, 0, 1, 0);
+add (32031,"Washoe County", "NV", "Nevada", "8", -8:1, 313660, 3240, 0, 1, 0);
+add (31127,"Nemaha County", "NE", "Nebraska", "6", -7:1, 7697, 4647, 1, 0, 0);
+add (48121,"Denton County", "TX", "Texas", "7", -6:1, 384020, 1148, 1, 0, 0);
+add (39163,"Vinton County", "OH", "Ohio", "4", -5:1, 12158, 1387, 1, 0, 0);
+add (27029,"Clearwater County", "MN", "Minnesota", "5", -6:1, 8285, 1148, 1, 0, 0);
+add (39081,"Jefferson County", "OH", "Ohio", "4", -5:1, 74558, 1387, 1, 0, 0);
+add (08099,"Prowers County", "CO", "Colorado", "8", -7:1, 13729, 4647, 1, 0, 0);
+add (49005,"Cache County", "UT", "Utah", "8", -7:1, 86949, 4647, 1, 0, 0);
+add (31001,"Adams County", "NE", "Nebraska", "6", -6:1, 29464, 1148, 1, 0, 0);
+add (29111,"Lewis County", "MO", "Mosourri", "6", -6:1, 10199, 1148, 1, 0, 0);
+add (45011,"Barnwell County", "SC", "South Carolina", "2", -5:1, 21766, 1387, 1, 0, 0);
+add (36035,"Fulton County", "NY", "New York", "1", -5:1, 52914, 1387, 1, 0, 0);
+add (05065,"Izard County", "AR", "Arkansas", "7", -6:1, 13093, 1148, 1, 0, 0);
+add (39019,"Carroll County", "OH", "Ohio", "4", -5:1, 29095, 1387, 1, 0, 0);
+add (38075,"Renville County", "ND", "North Dakota", "5", -6:1, 2808, 1148, 1, 0, 0);
+add (08109,"Saguache County", "CO", "Colorado", "8", -7:1, 6076, 4647, 1, 0, 0);
+add (46037,"Day County", "SD", "South Dakota", "5", -6:1, 6400, 1148, 1, 0, 0);
+add (08089,"Otero County", "CO", "Colorado", "8", -7:1, 20671, 4647, 1, 0, 0);
+add (21217,"Taylor County", "KY", "Kentucky", "4", -5:1, 22943, 1387, 1, 0, 0);
+add (31071,"Garfield County", "NE", "Nebraska", "6", -6:1, 2039, 1148, 1, 0, 0);
+add (09007,"Middlesex County", "CT", "Connecticut", "0", -5:1, 150034, 1387, 1, 0, 0);
+add (27111,"Otter Tail County", "MN", "Minnesota", "5", -6:1, 54911, 1148, 1, 0, 0);
+add (48375,"Potter County", "TX", "Texas", "7", -6:1, 108943, 1148, 1, 0, 0);
+add (47041,"DeKalb County", "TN", "Tennesee", "3", -5:1, 15943, 1387, 1, 0, 0);
+add (48011,"Armstrong County", "TX", "Texas", "7", -6:1, 2164, 1148, 1, 0, 0);
+add (48331,"Milam County", "TX", "Texas", "7", -6:1, 24286, 1148, 1, 0, 0);
+add (55009,"Brown County", "WI", "Wisconnsin", "5", -6:1, 215373, 1148, 1, 0, 0);
+add (21001,"Adair County", "KY", "Kentucky", "4", -6:1, 16447, 1148, 1, 0, 0);
+add (40077,"Latimer County", "OK", "Oklahoma", "7", -6:1, 10321, 1148, 1, 0, 0);
+add (48333,"Mills County", "TX", "Texas", "7", -6:1, 4723, 1148, 1, 0, 0);
+add (20141,"Osborne County", "KS", "Kansas", "6", -6:1, 4712, 1148, 1, 0, 0);
+add (37017,"Bladen County", "NC", "North Carolina", "2", -5:1, 30717, 1387, 1, 0, 0);
+add (19181,"Warren County", "IA", "Iowa", "5", -6:1, 40196, 1148, 1, 0, 0);
+add (12013,"Calhoun County", "FL", "Florida", "3", -5:1, 12420, 1387, 1, 0, 0);
+add (39105,"Meigs County", "OH", "Ohio", "4", -5:1, 24006, 1387, 1, 0, 0);
+add (37169,"Stokes County", "NC", "North Carolina", "2", -5:1, 43292, 1387, 1, 0, 0);
+add (55123,"Vernon County", "WI", "Wisconnsin", "5", -6:1, 27343, 1148, 1, 0, 0);
+add (41011,"Coos County", "OR", "Oregon", "9", -8:1, 62162, 3240, 0, 1, 0);
+add (31085,"Hayes County", "NE", "Nebraska", "6", -6:1, 1069, 1148, 1, 0, 0);
+add (13051,"Chatham County", "GA", "Georgia", "3", -5:1, 225543, 1387, 1, 0, 0);
+add (26143,"Roscommon County", "MI", "Michigan", "4", -5:1, 23467, 1387, 1, 0, 0);
+add (29093,"Iron County", "MO", "Mosourri", "6", -6:1, 10871, 1148, 1, 0, 0);
+add (48075,"Childress County", "TX", "Texas", "7", -6:1, 7532, 1148, 1, 0, 0);
+add (35031,"McKinley County", "NM", "New Mexico", "8", -7:1, 67558, 4647, 1, 0, 0);
+add (12039,"Gadsden County", "FL", "Florida", "3", -5:1, 44043, 1387, 1, 0, 0);
+add (47123,"Monroe County", "TN", "Tennesee", "3", -6:1, 34830, 1148, 1, 0, 0);
+add (17045,"Edgar County", "IL", "Illinois", "6", -6:1, 19652, 1148, 1, 0, 0);
+add (20187,"Stanton County", "KS", "Kansas", "6", -6:1, 2265, 1148, 1, 0, 0);
+add (19059,"Dickinson County", "IA", "Iowa", "5", -6:1, 16236, 1148, 1, 0, 0);
+add (29073,"Gasconade County", "MO", "Mosourri", "6", -6:1, 14890, 1148, 1, 0, 0);
+add (49035,"Salt Lake County", "UT", "Utah", "8", -7:1, 850667, 4647, 1, 0, 0);
+add (13215,"Muscogee County", "GA", "Georgia", "3", -5:1, 182752, 1387, 1, 0, 0);
+add (38057,"Mercer County", "ND", "North Dakota", "5", -6:1, 9418, 1148, 1, 0, 0);
+add (16081,"Teton County", "ID", "Idaho", "8", -7:1, 5488, 4647, 1, 0, 0);
+add (42085,"Mercer County", "PA", "Pennsylvania", "1", -5:1, 121938, 1387, 1, 0, 0);
+add (40085,"Love County", "OK", "Oklahoma", "7", -6:1, 8536, 1148, 1, 0, 0);
+add (29151,"Osage County", "MO", "Mosourri", "6", -6:1, 12425, 1148, 1, 0, 0);
+add (48213,"Henderson County", "TX", "Texas", "7", -6:1, 68757, 1148, 1, 0, 0);
+add (40059,"Harper County", "OK", "Oklahoma", "7", -6:1, 3596, 1148, 1, 0, 0);
+add (18031,"Decatur County", "IN", "Indiana", "4", -5:1, 25562, 1387, 1, 0, 0);
+add (45069,"Marlboro County", "SC", "South Carolina", "2", -5:1, 29589, 1387, 1, 0, 0);
+add (51113,"Madison County", "VA", "Virginia", "2", -5:1, 12697, 1387, 1, 0, 0);
+add (01093,"Marion County", "AL", "Alabama", "3", -6:1, 30986, 1148, 1, 0, 0);
+add (37135,"Orange County", "NC", "North Carolina", "2", -5:1, 110116, 1387, 1, 0, 0);
+add (19087,"Henry County", "IA", "Iowa", "5", -6:1, 19983, 1148, 1, 0, 0);
+add (37185,"Warren County", "NC", "North Carolina", "2", -5:1, 18297, 1387, 1, 0, 0);
+add (30051,"Liberty County", "MT", "Montana", "6", -7:1, 2323, 4647, 1, 0, 0);
+add (22037,"East Feliciana Parish", "LA", "Louisiana", "7", -6:1, 20847, 1148, 1, 0, 0);
+add (17159,"Richland County", "IL", "Illinois", "6", -6:1, 16769, 1148, 1, 0, 0);
+add (39087,"Lawrence County", "OH", "Ohio", "4", -5:1, 64427, 1387, 1, 0, 0);
+add (22117,"Washington Parish", "LA", "Louisiana", "7", -6:1, 43059, 1148, 1, 0, 0);
+add (48265,"Kerr County", "TX", "Texas", "7", -6:1, 43248, 1148, 1, 0, 0);
+add (12083,"Marion County", "FL", "Florida", "3", -5:1, 241513, 1387, 1, 0, 0);
+add (48055,"Caldwell County", "TX", "Texas", "7", -6:1, 32447, 1148, 1, 0, 0);
+add (13011,"Banks County", "GA", "Georgia", "3", -5:1, 12798, 1387, 1, 0, 0);
+add (51770,"Roanoke city", "VA", "Virginia", "2", -5:1, 93749, 1387, 1, 0, 0);
+add (20009,"Barton County", "KS", "Kansas", "6", -6:1, 27641, 1148, 1, 0, 0);
+add (21099,"Hart County", "KY", "Kentucky", "4", -6:1, 16738, 1148, 1, 0, 0);
+add (51063,"Floyd County", "VA", "Virginia", "2", -5:1, 13091, 1387, 1, 0, 0);
+add (40097,"Mayes County", "OK", "Oklahoma", "7", -6:1, 37638, 1148, 1, 0, 0);
+add (46075,"Jones County", "SD", "South Dakota", "5", -7:1, 1219, 4647, 1, 0, 0);
+add (38071,"Ramsey County", "ND", "North Dakota", "5", -6:1, 12120, 1148, 1, 0, 0);
+add (40055,"Greer County", "OK", "Oklahoma", "7", -6:1, 6366, 1148, 1, 0, 0);
+add (41047,"Marion County", "OR", "Oregon", "9", -8:1, 268541, 3240, 0, 1, 0);
+add (47089,"Jefferson County", "TN", "Tennesee", "3", -6:1, 43663, 1148, 1, 0, 0);
+add (38033,"Golden Valley County", "ND", "North Dakota", "5", -6:1, 1876, 1148, 1, 0, 0);
+add (40153,"Woodward County", "OK", "Oklahoma", "7", -6:1, 18553, 1148, 1, 0, 0);
+add (28027,"Coahoma County", "MS", "Missippi", "5", -6:1, 31089, 1148, 1, 0, 0);
+add (48487,"Wilbarger County", "TX", "Texas", "7", -6:1, 13711, 1148, 1, 0, 0);
+add (55021,"Columbia County", "WI", "Wisconnsin", "5", -6:1, 51152, 1148, 1, 0, 0);
+add (37161,"Rutherford County", "NC", "North Carolina", "2", -5:1, 60842, 1387, 1, 0, 0);
+add (18145,"Shelby County", "IN", "Indiana", "4", -5:1, 43451, 1387, 1, 0, 0);
+add (01013,"Butler County", "AL", "Alabama", "3", -6:1, 21695, 1148, 1, 0, 0);
+add (37175,"Transylvania County", "NC", "North Carolina", "2", -5:1, 28481, 1387, 1, 0, 0);
+add (20139,"Osage County", "KS", "Kansas", "6", -6:1, 17139, 1148, 1, 0, 0);
+add (21073,"Franklin County", "KY", "Kentucky", "4", -6:1, 46438, 1148, 1, 0, 0);
+add (06009,"Calaveras County", "CA", "California", "9", -8:1, 39830, 3240, 0, 1, 0);
+add (28097,"Montgomery County", "MS", "Missippi", "5", -6:1, 12425, 1148, 1, 0, 0);
+add (26081,"Kent County", "MI", "Michigan", "4", -5:1, 545166, 1387, 1, 0, 0);
+add (20031,"Coffey County", "KS", "Kansas", "6", -6:1, 8696, 1148, 1, 0, 0);
+add (39005,"Ashland County", "OH", "Ohio", "4", -5:1, 52237, 1387, 1, 0, 0);
+add (27077,"Lake of the Woods County", "MN", "Minnesota", "5", -6:1, 4563, 1148, 1, 0, 0);
+add (51099,"King George County", "VA", "Virginia", "2", -5:1, 17236, 1387, 1, 0, 0);
+add (39015,"Brown County", "OH", "Ohio", "4", -5:1, 40795, 1387, 1, 0, 0);
+add (54073,"Pleasants County", "WV", "West Virginia", "2", -5:1, 7421, 1387, 1, 0, 0);
+add (21023,"Bracken County", "KY", "Kentucky", "4", -6:1, 8455, 1148, 1, 0, 0);
+add (40069,"Johnston County", "OK", "Oklahoma", "7", -6:1, 10346, 1148, 1, 0, 0);
+add (39115,"Morgan County", "OH", "Ohio", "4", -5:1, 14536, 1387, 1, 0, 0);
+add (37181,"Vance County", "NC", "North Carolina", "2", -5:1, 42155, 1387, 1, 0, 0);
+add (13259,"Stewart County", "GA", "Georgia", "3", -5:1, 5468, 1387, 1, 0, 0);
+add (01099,"Monroe County", "AL", "Alabama", "3", -6:1, 23965, 1148, 1, 0, 0);
+add (13087,"Decatur County", "GA", "Georgia", "3", -5:1, 27035, 1387, 1, 0, 0);
+add (41009,"Columbia County", "OR", "Oregon", "9", -8:1, 44416, 3240, 0, 1, 0);
+add (49047,"Uintah County", "UT", "Utah", "8", -7:1, 25660, 4647, 1, 0, 0);
+add (51025,"Brunswick County", "VA", "Virginia", "2", -5:1, 16716, 1387, 1, 0, 0);
+add (28139,"Tippah County", "MS", "Missippi", "5", -6:1, 21031, 1148, 1, 0, 0);
+add (53061,"Snohomish County", "WA", "Washiington", "9", -8:1, 587783, 3240, 0, 1, 0);
+add (40125,"Pottawatomie County", "OK", "Oklahoma", "7", -6:1, 62244, 1148, 1, 0, 0);
+add (55023,"Crawford County", "WI", "Wisconnsin", "5", -6:1, 16576, 1148, 1, 0, 0);
+add (26069,"Iosco County", "MI", "Michigan", "4", -5:1, 25111, 1387, 1, 0, 0);
+add (19155,"Pottawattamie County", "IA", "Iowa", "5", -6:1, 86174, 1148, 1, 0, 0);
+add (04003,"Cochise County", "AZ", "Arizona", "8", -7:1, 112564, 4647, 1, 0, 0);
+add (36113,"Warren County", "NY", "New York", "1", -5:1, 61261, 1387, 1, 0, 0);
+add (46051,"Grant County", "SD", "South Dakota", "5", -6:1, 8063, 1148, 1, 0, 0);
+add (12069,"Lake County", "FL", "Florida", "3", -5:1, 202207, 1387, 1, 0, 0);
+add (16059,"Lemhi County", "ID", "Idaho", "8", -7:1, 8030, 4647, 1, 0, 0);
+add (45037,"Edgefield County", "SC", "South Carolina", "2", -5:1, 20003, 1387, 1, 0, 0);
+add (21143,"Lyon County", "KY", "Kentucky", "4", -5:1, 8052, 1387, 1, 0, 0);
+add (36009,"Cattaraugus County", "NY", "New York", "1", -5:1, 85086, 1387, 1, 0, 0);
+add (48019,"Bandera County", "TX", "Texas", "7", -6:1, 15754, 1148, 1, 0, 0);
+add (27087,"Mahnomen County", "MN", "Minnesota", "5", -6:1, 5077, 1148, 1, 0, 0);
+add (20041,"Dickinson County", "KS", "Kansas", "6", -6:1, 19742, 1148, 1, 0, 0);
+add (37097,"Iredell County", "NC", "North Carolina", "2", -5:1, 113247, 1387, 1, 0, 0);
+add (20195,"Trego County", "KS", "Kansas", "6", -6:1, 3283, 1148, 1, 0, 0);
+add (51790,"Staunton city", "VA", "Virginia", "2", -5:1, 23346, 1387, 1, 0, 0);
+add (37157,"Rockingham County", "NC", "North Carolina", "2", -5:1, 90039, 1387, 1, 0, 0);
+add (56021,"Laramie County", "WY", "Wyoming", "8", -7:1, 78872, 4647, 1, 0, 0);
+add (51600,"Fairfax city", "VA", "Virginia", "2", -5:1, 20697, 1387, 1, 0, 0);
+add (12003,"Baker County", "FL", "Florida", "3", -5:1, 21103, 1387, 1, 0, 0);
+add (46039,"Deuel County", "SD", "South Dakota", "5", -6:1, 4512, 1148, 1, 0, 0);
+add (51095,"James City County", "VA", "Virginia", "2", -5:1, 44233, 1387, 1, 0, 0);
+add (06063,"Plumas County", "CA", "California", "9", -8:1, 20370, 3240, 0, 1, 0);
+add (20069,"Gray County", "KS", "Kansas", "6", -6:1, 5595, 1148, 1, 0, 0);
+add (48191,"Hall County", "TX", "Texas", "7", -6:1, 3644, 1148, 1, 0, 0);
+add (51195,"Wise County", "VA", "Virginia", "2", -5:1, 38599, 1387, 1, 0, 0);
+add (40143,"Tulsa County", "OK", "Oklahoma", "7", -6:1, 543539, 1148, 1, 0, 0);
+add (22045,"Iberia Parish", "LA", "Louisiana", "7", -6:1, 73154, 1148, 1, 0, 0);
+add (53035,"Kitsap County", "WA", "Washiington", "9", -8:1, 232623, 3240, 0, 1, 0);
+add (45005,"Allendale County", "SC", "South Carolina", "2", -5:1, 11460, 1387, 1, 0, 0);
+add (42047,"Elk County", "PA", "Pennsylvania", "1", -5:1, 34540, 1387, 1, 0, 0);
+add (48275,"Knox County", "TX", "Texas", "7", -6:1, 4252, 1148, 1, 0, 0);
+add (51079,"Greene County", "VA", "Virginia", "2", -5:1, 13991, 1387, 1, 0, 0);
+add (18103,"Miami County", "IN", "Indiana", "4", -5:1, 33543, 1387, 1, 0, 0);
+add (29079,"Grundy County", "MO", "Mosourri", "6", -6:1, 10159, 1148, 1, 0, 0);
+add (37139,"Pasquotank County", "NC", "North Carolina", "2", -5:1, 35474, 1387, 1, 0, 0);
+add (42065,"Jefferson County", "PA", "Pennsylvania", "1", -5:1, 46250, 1387, 1, 0, 0);
+add (47025,"Claiborne County", "TN", "Tennesee", "3", -5:1, 29529, 1387, 1, 0, 0);
+add (17173,"Shelby County", "IL", "Illinois", "6", -6:1, 22731, 1148, 1, 0, 0);
+add (44009,"Washington County", "RI", "Rhode Island", "0", -5:1, 120649, 1387, 1, 0, 0);
+add (01015,"Calhoun County", "AL", "Alabama", "3", -6:1, 117018, 1148, 1, 0, 0);
+add (08087,"Morgan County", "CO", "Colorado", "8", -7:1, 25087, 4647, 1, 0, 0);
+add (55001,"Adams County", "WI", "Wisconnsin", "5", -6:1, 18492, 1148, 1, 0, 0);
+add (17129,"Menard County", "IL", "Illinois", "6", -6:1, 12469, 1148, 1, 0, 0);
+add (47093,"Knox County", "TN", "Tennesee", "3", -6:1, 366846, 1148, 1, 0, 0);
+add (21167,"Mercer County", "KY", "Kentucky", "4", -5:1, 20704, 1387, 1, 0, 0);
+add (31179,"Wayne County", "NE", "Nebraska", "6", -7:1, 9400, 4647, 1, 0, 0);
+add (38091,"Steele County", "ND", "North Dakota", "5", -6:1, 2263, 1148, 1, 0, 0);
+add (48491,"Williamson County", "TX", "Texas", "7", -6:1, 223910, 1148, 1, 0, 0);
+add (55025,"Dane County", "WI", "Wisconnsin", "5", -6:1, 424586, 1148, 1, 0, 0);
+add (31161,"Sheridan County", "NE", "Nebraska", "6", -7:1, 6454, 4647, 1, 0, 0);
+add (54109,"Wyoming County", "WV", "West Virginia", "2", -5:1, 27380, 1387, 1, 0, 0);
+add (40133,"Seminole County", "OK", "Oklahoma", "7", -6:1, 24770, 1148, 1, 0, 0);
+add (26105,"Mason County", "MI", "Michigan", "4", -5:1, 27950, 1387, 1, 0, 0);
+add (24510,"Baltimore city", "MD", "Maryland", "2", -5:1, 645593, 1387, 1, 0, 0);
+add (39025,"Clermont County", "OH", "Ohio", "4", -5:1, 175960, 1387, 1, 0, 0);
+add (42087,"Mifflin County", "PA", "Pennsylvania", "1", -5:1, 46961, 1387, 1, 0, 0);
+add (23009,"Hancock County", "ME", "Maine", "0", -5:1, 49932, 1387, 1, 0, 0);
+add (18039,"Elkhart County", "IN", "Indiana", "4", -5:1, 172310, 1387, 1, 0, 0);
+add (48157,"Fort Bend County", "TX", "Texas", "7", -6:1, 337798, 1148, 1, 0, 0);
+add (41015,"Curry County", "OR", "Oregon", "9", -8:1, 21157, 3240, 0, 1, 0);
+add (01061,"Geneva County", "AL", "Alabama", "3", -6:1, 24944, 1148, 1, 0, 0);
+add (53053,"Pierce County", "WA", "Washiington", "9", -8:1, 676505, 3240, 0, 1, 0);
+add (48299,"Llano County", "TX", "Texas", "7", -6:1, 13480, 1148, 1, 0, 0);
+add (55053,"Jackson County", "WI", "Wisconnsin", "5", -6:1, 17735, 1148, 1, 0, 0);
+add (38019,"Cavalier County", "ND", "North Dakota", "5", -6:1, 5011, 1148, 1, 0, 0);
+add (34031,"Passaic County", "NJ", "New Jersey", "0", -5:1, 485737, 1387, 1, 0, 0);
+add (26089,"Leelanau County", "MI", "Michigan", "4", -5:1, 19142, 1387, 1, 0, 0);
+add (32011,"Eureka County", "NV", "Nevada", "8", -8:1, 1994, 3240, 0, 1, 0);
+add (21007,"Ballard County", "KY", "Kentucky", "4", -6:1, 8488, 1148, 1, 0, 0);
+add (27015,"Brown County", "MN", "Minnesota", "5", -6:1, 27037, 1148, 1, 0, 0);
+add (48195,"Hansford County", "TX", "Texas", "7", -6:1, 5347, 1148, 1, 0, 0);
+add (54033,"Harrison County", "WV", "West Virginia", "2", -5:1, 70891, 1387, 1, 0, 0);
+add (47171,"Unicoi County", "TN", "Tennesee", "3", -6:1, 17216, 1148, 1, 0, 0);
+add (40103,"Noble County", "OK", "Oklahoma", "7", -6:1, 11425, 1148, 1, 0, 0);
+add (32009,"Esmeralda County", "NV", "Nevada", "8", -8:1, 1135, 3240, 0, 1, 0);
+add (08067,"La Plata County", "CO", "Colorado", "8", -7:1, 40413, 4647, 1, 0, 0);
+add (48167,"Galveston County", "TX", "Texas", "7", -6:1, 245556, 1148, 1, 0, 0);
+add (31031,"Cherry County", "NE", "Nebraska", "6", -6:1, 6326, 1148, 1, 0, 0);
+add (23027,"Waldo County", "ME", "Maine", "0", -5:1, 36465, 1387, 1, 0, 0);
+add (49057,"Weber County", "UT", "Utah", "8", -7:1, 184065, 4647, 1, 0, 0);
+add (06111,"Ventura County", "CA", "California", "9", -8:1, 731967, 3240, 0, 1, 0);
+add (46121,"Todd County", "SD", "South Dakota", "5", -7:1, 9247, 4647, 1, 0, 0);
+add (17019,"Champaign County", "IL", "Illinois", "6", -6:1, 167788, 1148, 1, 0, 0);
+add (05093,"Mississippi County", "AR", "Arkansas", "7", -6:1, 50635, 1148, 1, 0, 0);
+add (51173,"Smyth County", "VA", "Virginia", "2", -5:1, 32757, 1387, 1, 0, 0);
+add (26073,"Isabella County", "MI", "Michigan", "4", -5:1, 58026, 1387, 1, 0, 0);
+add (55043,"Grant County", "WI", "Wisconnsin", "5", -6:1, 49340, 1148, 1, 0, 0);
+add (26067,"Ionia County", "MI", "Michigan", "4", -5:1, 61700, 1387, 1, 0, 0);
+add (13281,"Towns County", "GA", "Georgia", "3", -5:1, 8529, 1387, 1, 0, 0);
+add (55057,"Juneau County", "WI", "Wisconnsin", "5", -6:1, 23822, 1148, 1, 0, 0);
+add (20075,"Hamilton County", "KS", "Kansas", "6", -6:1, 2343, 1148, 1, 0, 0);
+add (45087,"Union County", "SC", "South Carolina", "2", -5:1, 30495, 1387, 1, 0, 0);
+add (51085,"Hanover County", "VA", "Virginia", "2", -5:1, 81975, 1387, 1, 0, 0);
+add (26093,"Livingston County", "MI", "Michigan", "4", -5:1, 146165, 1387, 1, 0, 0);
+add (48079,"Cochran County", "TX", "Texas", "7", -6:1, 3952, 1148, 1, 0, 0);
+add (31075,"Grant County", "NE", "Nebraska", "6", -6:1, 763, 1148, 1, 0, 0);
+add (17147,"Piatt County", "IL", "Illinois", "6", -6:1, 16400, 1148, 1, 0, 0);
+add (55037,"Florence County", "WI", "Wisconnsin", "5", -6:1, 5199, 1148, 1, 0, 0);
+add (48097,"Cooke County", "TX", "Texas", "7", -6:1, 32837, 1148, 1, 0, 0);
+add (55077,"Marquette County", "WI", "Wisconnsin", "5", -6:1, 15101, 1148, 1, 0, 0);
+add (51193,"Westmoreland County", "VA", "Virginia", "2", -5:1, 16282, 1387, 1, 0, 0);
+add (09009,"New Haven County", "CT", "Connecticut", "0", -5:1, 793504, 1387, 1, 0, 0);
+add (08025,"Crowley County", "CO", "Colorado", "8", -7:1, 4310, 4647, 1, 0, 0);
+add (17025,"Clay County", "IL", "Illinois", "6", -6:1, 14485, 1148, 1, 0, 0);
+add (26107,"Mecosta County", "MI", "Michigan", "4", -5:1, 40006, 1387, 1, 0, 0);
+add (37065,"Edgecombe County", "NC", "North Carolina", "2", -5:1, 55199, 1387, 1, 0, 0);
+add (21013,"Bell County", "KY", "Kentucky", "4", -6:1, 29133, 1148, 1, 0, 0);
+add (27081,"Lincoln County", "MN", "Minnesota", "5", -6:1, 6459, 1148, 1, 0, 0);
+add (29107,"Lafayette County", "MO", "Mosourri", "6", -6:1, 32653, 1148, 1, 0, 0);
+add (49017,"Garfield County", "UT", "Utah", "8", -7:1, 4272, 4647, 1, 0, 0);
+add (18011,"Boone County", "IN", "Indiana", "4", -5:1, 43843, 1387, 1, 0, 0);
+add (55027,"Dodge County", "WI", "Wisconnsin", "5", -6:1, 83261, 1148, 1, 0, 0);
+add (51137,"Orange County", "VA", "Virginia", "2", -5:1, 25408, 1387, 1, 0, 0);
+add (42099,"Perry County", "PA", "Pennsylvania", "1", -5:1, 44384, 1387, 1, 0, 0);
+add (21021,"Boyle County", "KY", "Kentucky", "4", -6:1, 27186, 1148, 1, 0, 0);
+add (04011,"Greenlee County", "AZ", "Arizona", "8", -7:1, 9304, 4647, 1, 0, 0);
+add (31029,"Chase County", "NE", "Nebraska", "6", -6:1, 4248, 1148, 1, 0, 0);
+add (48305,"Lynn County", "TX", "Texas", "7", -6:1, 6706, 1148, 1, 0, 0);
+add (40095,"Marshall County", "OK", "Oklahoma", "7", -6:1, 12326, 1148, 1, 0, 0);
+add (48245,"Jefferson County", "TX", "Texas", "7", -6:1, 241901, 1148, 1, 0, 0);
+add (51031,"Campbell County", "VA", "Virginia", "2", -5:1, 50335, 1387, 1, 0, 0);
+add (51145,"Powhatan County", "VA", "Virginia", "2", -5:1, 21950, 1387, 1, 0, 0);
+add (48145,"Falls County", "TX", "Texas", "7", -6:1, 17434, 1148, 1, 0, 0);
+add (01009,"Blount County", "AL", "Alabama", "3", -6:1, 46266, 1148, 1, 0, 0);
+add (51157,"Rappahannock County", "VA", "Virginia", "2", -5:1, 7269, 1387, 1, 0, 0);
+add (26155,"Shiawassee County", "MI", "Michigan", "4", -5:1, 72569, 1387, 1, 0, 0);
+add (18085,"Kosciusko County", "IN", "Indiana", "4", -5:1, 71207, 1387, 1, 0, 0);
+add (20163,"Rooks County", "KS", "Kansas", "6", -6:1, 5660, 1148, 1, 0, 0);
+add (30035,"Glacier County", "MT", "Montana", "6", -7:1, 12540, 4647, 1, 0, 0);
+add (48365,"Panola County", "TX", "Texas", "7", -6:1, 23070, 1148, 1, 0, 0);
+add (51073,"Gloucester County", "VA", "Virginia", "2", -5:1, 35081, 1387, 1, 0, 0);
+add (13097,"Douglas County", "GA", "Georgia", "3", -5:1, 89843, 1387, 1, 0, 0);
+add (12031,"Duval County", "FL", "Florida", "3", -5:1, 735733, 1387, 1, 0, 0);
+add (39089,"Licking County", "OH", "Ohio", "4", -5:1, 136896, 1387, 1, 0, 0);
+add (36117,"Wayne County", "NY", "New York", "1", -5:1, 94977, 1387, 1, 0, 0);
+add (29083,"Henry County", "MO", "Mosourri", "6", -6:1, 21232, 1148, 1, 0, 0);
+add (33011,"Hillsborough County", "NH", "New Hampshire", "0", -5:1, 363031, 1387, 1, 0, 0);
+add (48025,"Bee County", "TX", "Texas", "7", -6:1, 27718, 1148, 1, 0, 0);
+add (47109,"McNairy County", "TN", "Tennesee", "3", -6:1, 24048, 1148, 1, 0, 0);
+add (51185,"Tazewell County", "VA", "Virginia", "2", -5:1, 46766, 1387, 1, 0, 0);
+add (45085,"Sumter County", "SC", "South Carolina", "2", -5:1, 107127, 1387, 1, 0, 0);
+add (42089,"Monroe County", "PA", "Pennsylvania", "1", -5:1, 125583, 1387, 1, 0, 0);
+add (05121,"Randolph County", "AR", "Arkansas", "7", -6:1, 17802, 1148, 1, 0, 0);
+add (48253,"Jones County", "TX", "Texas", "7", -6:1, 18669, 1148, 1, 0, 0);
+add (22035,"East Carroll Parish", "LA", "Louisiana", "7", -6:1, 8905, 1148, 1, 0, 0);
+add (48163,"Frio County", "TX", "Texas", "7", -6:1, 15757, 1148, 1, 0, 0);
+add (17021,"Christian County", "IL", "Illinois", "6", -6:1, 34543, 1148, 1, 0, 0);
+add (04012,"La Paz County", "AZ", "Arizona", "8", -7:1, 14880, 4647, 1, 0, 0);
+add (54041,"Lewis County", "WV", "West Virginia", "2", -5:1, 17427, 1387, 1, 0, 0);
+add (28035,"Forrest County", "MS", "Missippi", "5", -6:1, 74364, 1148, 1, 0, 0);
+add (21215,"Spencer County", "KY", "Kentucky", "4", -5:1, 9660, 1387, 1, 0, 0);
+add (18115,"Ohio County", "IN", "Indiana", "4", -5:1, 5423, 1387, 1, 0, 0);
+add (13307,"Webster County", "GA", "Georgia", "3", -5:1, 2193, 1387, 1, 0, 0);
+add (18003,"Allen County", "IN", "Indiana", "4", -5:1, 314218, 1387, 1, 0, 0);
+add (56009,"Converse County", "WY", "Wyoming", "8", -7:1, 12337, 4647, 1, 0, 0);
+add (20105,"Lincoln County", "KS", "Kansas", "6", -6:1, 3338, 1148, 1, 0, 0);
+add (21235,"Whitley County", "KY", "Kentucky", "4", -5:1, 35938, 1387, 1, 0, 0);
+add (39169,"Wayne County", "OH", "Ohio", "4", -5:1, 110125, 1387, 1, 0, 0);
+add (42107,"Schuylkill County", "PA", "Pennsylvania", "1", -5:1, 148266, 1387, 1, 0, 0);
+add (13277,"Tift County", "GA", "Georgia", "3", -5:1, 36673, 1387, 1, 0, 0);
+add (45033,"Dillon County", "SC", "South Carolina", "2", -5:1, 29747, 1387, 1, 0, 0);
+add (22033,"East Baton Rouge Parish", "LA", "Louisiana", "7", -6:1, 394714, 1148, 1, 0, 0);
+add (17151,"Pope County", "IL", "Illinois", "6", -6:1, 4808, 1148, 1, 0, 0);
+add (42095,"Northampton County", "PA", "Pennsylvania", "1", -5:1, 258679, 1387, 1, 0, 0);
+add (48183,"Gregg County", "TX", "Texas", "7", -6:1, 113330, 1148, 1, 0, 0);
+add (18113,"Noble County", "IN", "Indiana", "4", -5:1, 42626, 1387, 1, 0, 0);
+add (29059,"Dallas County", "MO", "Mosourri", "6", -6:1, 15245, 1148, 1, 0, 0);
+add (51057,"Essex County", "VA", "Virginia", "2", -5:1, 9127, 1387, 1, 0, 0);
+add (19167,"Sioux County", "IA", "Iowa", "5", -6:1, 31280, 1148, 1, 0, 0);
+add (21195,"Pike County", "KY", "Kentucky", "4", -5:1, 72121, 1387, 1, 0, 0);
+add (31081,"Hamilton County", "NE", "Nebraska", "6", -6:1, 9471, 1148, 1, 0, 0);
+add (12079,"Madison County", "FL", "Florida", "3", -5:1, 17652, 1387, 1, 0, 0);
+add (17005,"Bond County", "IL", "Illinois", "6", -6:1, 15858, 1148, 1, 0, 0);
+add (48197,"Hardeman County", "TX", "Texas", "7", -6:1, 4591, 1148, 1, 0, 0);
+add (20119,"Meade County", "KS", "Kansas", "6", -6:1, 4424, 1148, 1, 0, 0);
+add (17039,"De Witt County", "IL", "Illinois", "6", -6:1, 16796, 1148, 1, 0, 0);
+add (12023,"Columbia County", "FL", "Florida", "3", -5:1, 52956, 1387, 1, 0, 0);
+add (29015,"Benton County", "MO", "Mosourri", "6", -6:1, 17040, 1148, 1, 0, 0);
+add (17009,"Brown County", "IL", "Illinois", "6", -6:1, 6822, 1148, 1, 0, 0);
+add (19141,"O-Brien County", "IA", "Iowa", "5", -6:1, 14910, 1148, 1, 0, 0);
+add (48309,"McLennan County", "TX", "Texas", "7", -6:1, 203446, 1148, 1, 0, 0);
+add (13235,"Pulaski County", "GA", "Georgia", "3", -5:1, 8401, 1387, 1, 0, 0);
+add (12065,"Jefferson County", "FL", "Florida", "3", -5:1, 12952, 1387, 1, 0, 0);
+add (37123,"Montgomery County", "NC", "North Carolina", "2", -5:1, 24080, 1387, 1, 0, 0);
+add (28023,"Clarke County", "MS", "Missippi", "5", -6:1, 18231, 1148, 1, 0, 0);
+add (27019,"Carver County", "MN", "Minnesota", "5", -6:1, 64674, 1148, 1, 0, 0);
+add (30057,"Madison County", "MT", "Montana", "6", -7:1, 6875, 4647, 1, 0, 0);
+add (20093,"Kearny County", "KS", "Kansas", "6", -6:1, 4177, 1148, 1, 0, 0);
+add (39051,"Fulton County", "OH", "Ohio", "4", -5:1, 41895, 1387, 1, 0, 0);
+add (29215,"Texas County", "MO", "Mosourri", "6", -6:1, 22357, 1148, 1, 0, 0);
+add (19055,"Delaware County", "IA", "Iowa", "5", -6:1, 18578, 1148, 1, 0, 0);
+add (40061,"Haskell County", "OK", "Oklahoma", "7", -6:1, 11368, 1148, 1, 0, 0);
+add (31103,"Keya Paha County", "NE", "Nebraska", "6", -7:1, 972, 4647, 1, 0, 0);
+add (39003,"Allen County", "OH", "Ohio", "4", -5:1, 107139, 1387, 1, 0, 0);
+add (48317,"Martin County", "TX", "Texas", "7", -6:1, 5043, 1148, 1, 0, 0);
+add (40071,"Kay County", "OK", "Oklahoma", "7", -6:1, 46698, 1148, 1, 0, 0);
+add (37095,"Hyde County", "NC", "North Carolina", "2", -5:1, 5612, 1387, 1, 0, 0);
+add (20127,"Morris County", "KS", "Kansas", "6", -6:1, 6169, 1148, 1, 0, 0);
+add (30069,"Petroleum County", "MT", "Montana", "6", -7:1, 499, 4647, 1, 0, 0);
+add (06045,"Mendocino County", "CA", "California", "9", -8:1, 83734, 3240, 0, 1, 0);
+add (28011,"Bolivar County", "MS", "Missippi", "5", -6:1, 40318, 1148, 1, 0, 0);
+add (51101,"King William County", "VA", "Virginia", "2", -5:1, 12768, 1387, 1, 0, 0);
+add (02110,"Juneau Borough", "AK", "Alaska", "9", -9:1, 30191, 1174, 0, 0, 1);
+add (35043,"Sandoval County", "NM", "New Mexico", "8", -7:1, 88049, 4647, 1, 0, 0);
+add (13225,"Peach County", "GA", "Georgia", "3", -5:1, 24462, 1387, 1, 0, 0);
+add (39117,"Morrow County", "OH", "Ohio", "4", -5:1, 31467, 1387, 1, 0, 0);
+add (47009,"Blount County", "TN", "Tennesee", "3", -5:1, 101295, 1387, 1, 0, 0);
+add (28017,"Chickasaw County", "MS", "Missippi", "5", -6:1, 18013, 1148, 1, 0, 0);
+add (13267,"Tattnall County", "GA", "Georgia", "3", -5:1, 18975, 1387, 1, 0, 0);
+add (26101,"Manistee County", "MI", "Michigan", "4", -5:1, 23330, 1387, 1, 0, 0);
+add (13081,"Crisp County", "GA", "Georgia", "3", -5:1, 20725, 1387, 1, 0, 0);
+add (13317,"Wilkes County", "GA", "Georgia", "3", -5:1, 10568, 1387, 1, 0, 0);
+add (12001,"Alachua County", "FL", "Florida", "3", -5:1, 198662, 1387, 1, 0, 0);
+add (54051,"Marshall County", "WV", "West Virginia", "2", -5:1, 35441, 1387, 1, 0, 0);
+add (17197,"Will County", "IL", "Illinois", "6", -6:1, 459189, 1148, 1, 0, 0);
+add (54009,"Brooke County", "WV", "West Virginia", "2", -5:1, 26004, 1387, 1, 0, 0);
+add (42129,"Westmoreland County", "PA", "Pennsylvania", "1", -5:1, 372103, 1387, 1, 0, 0);
+add (33013,"Merrimack County", "NH", "New Hampshire", "0", -5:1, 127381, 1387, 1, 0, 0);
+add (27045,"Fillmore County", "MN", "Minnesota", "5", -6:1, 20793, 1148, 1, 0, 0);
+add (48091,"Comal County", "TX", "Texas", "7", -6:1, 73391, 1148, 1, 0, 0);
+add (28031,"Covington County", "MS", "Missippi", "5", -6:1, 17802, 1148, 1, 0, 0);
+add (06091,"Sierra County", "CA", "California", "9", -8:1, 3380, 3240, 0, 1, 0);
+add (48151,"Fisher County", "TX", "Texas", "7", -6:1, 4241, 1148, 1, 0, 0);
+add (48477,"Washington County", "TX", "Texas", "7", -6:1, 29127, 1148, 1, 0, 0);
+add (13091,"Dodge County", "GA", "Georgia", "3", -5:1, 18108, 1387, 1, 0, 0);
+add (48469,"Victoria County", "TX", "Texas", "7", -6:1, 82650, 1148, 1, 0, 0);
+add (40113,"Osage County", "OK", "Oklahoma", "7", -6:1, 42838, 1148, 1, 0, 0);
+add (47059,"Greene County", "TN", "Tennesee", "3", -5:1, 60502, 1387, 1, 0, 0);
+add (29217,"Vernon County", "MO", "Mosourri", "6", -6:1, 19436, 1148, 1, 0, 0);
+add (55111,"Sauk County", "WI", "Wisconnsin", "5", -6:1, 53369, 1148, 1, 0, 0);
+add (31061,"Franklin County", "NE", "Nebraska", "6", -6:1, 3730, 1148, 1, 0, 0);
+add (48495,"Winkler County", "TX", "Texas", "7", -6:1, 7964, 1148, 1, 0, 0);
+add (30007,"Broadwater County", "MT", "Montana", "6", -7:1, 4132, 4647, 1, 0, 0);
+add (20065,"Graham County", "KS", "Kansas", "6", -6:1, 3204, 1148, 1, 0, 0);
+add (45021,"Cherokee County", "SC", "South Carolina", "2", -5:1, 49170, 1387, 1, 0, 0);
+add (39061,"Hamilton County", "OH", "Ohio", "4", -5:1, 847403, 1387, 1, 0, 0);
+add (56003,"Big Horn County", "WY", "Wyoming", "8", -7:1, 11380, 4647, 1, 0, 0);
+add (13187,"Lumpkin County", "GA", "Georgia", "3", -5:1, 18981, 1387, 1, 0, 0);
+add (19051,"Davis County", "IA", "Iowa", "5", -6:1, 8403, 1148, 1, 0, 0);
+add (30017,"Custer County", "MT", "Montana", "6", -7:1, 12035, 4647, 1, 0, 0);
+add (54093,"Tucker County", "WV", "West Virginia", "2", -5:1, 7631, 1387, 1, 0, 0);
+add (20131,"Nemaha County", "KS", "Kansas", "6", -6:1, 10132, 1148, 1, 0, 0);
+add (37015,"Bertie County", "NC", "North Carolina", "2", -5:1, 20459, 1387, 1, 0, 0);
+add (55119,"Taylor County", "WI", "Wisconnsin", "5", -6:1, 19313, 1148, 1, 0, 0);
+add (13137,"Habersham County", "GA", "Georgia", "3", -5:1, 31858, 1387, 1, 0, 0);
+add (48031,"Blanco County", "TX", "Texas", "7", -6:1, 8400, 1148, 1, 0, 0);
+add (16057,"Latah County", "ID", "Idaho", "8", -7:1, 32051, 4647, 1, 0, 0);
+add (26029,"Charlevoix County", "MI", "Michigan", "4", -5:1, 24436, 1387, 1, 0, 0);
+add (37103,"Jones County", "NC", "North Carolina", "2", -5:1, 9456, 1387, 1, 0, 0);
+add (05015,"Carroll County", "AR", "Arkansas", "7", -6:1, 22534, 1148, 1, 0, 0);
+add (48111,"Dallam County", "TX", "Texas", "7", -6:1, 6602, 1148, 1, 0, 0);
+add (40141,"Tillman County", "OK", "Oklahoma", "7", -6:1, 9503, 1148, 1, 0, 0);
+add (26111,"Midland County", "MI", "Michigan", "4", -5:1, 81842, 1387, 1, 0, 0);
+add (18159,"Tipton County", "IN", "Indiana", "4", -5:1, 16724, 1387, 1, 0, 0);
+add (48359,"Oldham County", "TX", "Texas", "7", -6:1, 2153, 1148, 1, 0, 0);
+add (53051,"Pend Oreille County", "WA", "Washiington", "9", -8:1, 11526, 3240, 0, 1, 0);
+add (45017,"Calhoun County", "SC", "South Carolina", "2", -5:1, 14051, 1387, 1, 0, 0);
+add (42119,"Union County", "PA", "Pennsylvania", "1", -5:1, 40897, 1387, 1, 0, 0);
+add (48485,"Wichita County", "TX", "Texas", "7", -6:1, 128904, 1148, 1, 0, 0);
+add (30025,"Fallon County", "MT", "Montana", "6", -7:1, 2941, 4647, 1, 0, 0);
+add (01051,"Elmore County", "AL", "Alabama", "3", -6:1, 61993, 1148, 1, 0, 0);
+add (38093,"Stutsman County", "ND", "North Dakota", "5", -6:1, 20964, 1148, 1, 0, 0);
+add (05105,"Perry County", "AR", "Arkansas", "7", -6:1, 9640, 1148, 1, 0, 0);
+add (48081,"Coke County", "TX", "Texas", "7", -6:1, 3367, 1148, 1, 0, 0);
+add (19171,"Tama County", "IA", "Iowa", "5", -6:1, 17739, 1148, 1, 0, 0);
+add (29213,"Taney County", "MO", "Mosourri", "6", -6:1, 34504, 1148, 1, 0, 0);
+add (31185,"York County", "NE", "Nebraska", "6", -6:1, 14512, 1148, 1, 0, 0);
+add (39155,"Trumbull County", "OH", "Ohio", "4", -5:1, 225066, 1387, 1, 0, 0);
+add (46107,"Potter County", "SD", "South Dakota", "5", -7:1, 2857, 4647, 1, 0, 0);
+add (38023,"Divide County", "ND", "North Dakota", "5", -6:1, 2366, 1148, 1, 0, 0);
+add (13067,"Cobb County", "GA", "Georgia", "3", -5:1, 566203, 1387, 1, 0, 0);
+add (16035,"Clearwater County", "ID", "Idaho", "8", -7:1, 9310, 4647, 1, 0, 0);
+add (54061,"Monongalia County", "WV", "West Virginia", "2", -5:1, 77505, 1387, 1, 0, 0);
+add (50011,"Franklin County", "VT", "Vermont", "0", -5:1, 44017, 1387, 1, 0, 0);
+add (32001,"Churchill County", "NV", "Nevada", "8", -8:1, 23293, 3240, 0, 1, 0);
+add (47079,"Henry County", "TN", "Tennesee", "3", -5:1, 30066, 1387, 1, 0, 0);
+add (26017,"Bay County", "MI", "Michigan", "4", -5:1, 110048, 1387, 1, 0, 0);
+add (13017,"Ben Hill County", "GA", "Georgia", "3", -5:1, 17496, 1387, 1, 0, 0);
+add (39059,"Guernsey County", "OH", "Ohio", "4", -5:1, 40994, 1387, 1, 0, 0);
+add (05029,"Conway County", "AR", "Arkansas", "7", -6:1, 19920, 1148, 1, 0, 0);
+add (18023,"Clinton County", "IN", "Indiana", "4", -5:1, 33215, 1387, 1, 0, 0);
+add (46111,"Sanborn County", "SD", "South Dakota", "5", -7:1, 2740, 4647, 1, 0, 0);
+add (51121,"Montgomery County", "VA", "Virginia", "2", -5:1, 75878, 1387, 1, 0, 0);
+add (47001,"Anderson County", "TN", "Tennesee", "3", -5:1, 71116, 1387, 1, 0, 0);
+add (21097,"Harrison County", "KY", "Kentucky", "4", -6:1, 17565, 1148, 1, 0, 0);
+add (27083,"Lyon County", "MN", "Minnesota", "5", -6:1, 24339, 1148, 1, 0, 0);
+add (22069,"Natchitoches Parish", "LA", "Louisiana", "7", -6:1, 37018, 1148, 1, 0, 0);
+add (13305,"Wayne County", "GA", "Georgia", "3", -5:1, 25437, 1387, 1, 0, 0);
+add (21067,"Fayette County", "KY", "Kentucky", "4", -6:1, 241749, 1148, 1, 0, 0);
+add (27157,"Wabasha County", "MN", "Minnesota", "5", -6:1, 20943, 1148, 1, 0, 0);
+add (41001,"Baker County", "OR", "Oregon", "9", -8:1, 16448, 3240, 0, 1, 0);
+add (13283,"Treutlen County", "GA", "Georgia", "3", -5:1, 6003, 1387, 1, 0, 0);
+add (47051,"Franklin County", "TN", "Tennesee", "3", -5:1, 37465, 1387, 1, 0, 0);
+add (48283,"La Salle County", "TX", "Texas", "7", -6:1, 6034, 1148, 1, 0, 0);
+add (17011,"Bureau County", "IL", "Illinois", "6", -6:1, 35530, 1148, 1, 0, 0);
+add (26165,"Wexford County", "MI", "Michigan", "4", -5:1, 29185, 1387, 1, 0, 0);
+add (40091,"McIntosh County", "OK", "Oklahoma", "7", -6:1, 19050, 1148, 1, 0, 0);
+add (48209,"Hays County", "TX", "Texas", "7", -6:1, 88536, 1148, 1, 0, 0);
+add (38007,"Billings County", "ND", "North Dakota", "5", -6:1, 1058, 1148, 1, 0, 0);
+add (05017,"Chicot County", "AR", "Arkansas", "7", -6:1, 14841, 1148, 1, 0, 0);
+add (38041,"Hettinger County", "ND", "North Dakota", "5", -6:1, 2924, 1148, 1, 0, 0);
+add (13133,"Greene County", "GA", "Georgia", "3", -5:1, 13651, 1387, 1, 0, 0);
+add (20193,"Thomas County", "KS", "Kansas", "6", -6:1, 8037, 1148, 1, 0, 0);
+add (37149,"Polk County", "NC", "North Carolina", "2", -5:1, 16835, 1387, 1, 0, 0);
+add (55081,"Monroe County", "WI", "Wisconnsin", "5", -6:1, 39532, 1148, 1, 0, 0);
+add (46005,"Beadle County", "SD", "South Dakota", "5", -6:1, 17183, 1148, 1, 0, 0);
+add (39097,"Madison County", "OH", "Ohio", "4", -5:1, 41576, 1387, 1, 0, 0);
+add (48239,"Jackson County", "TX", "Texas", "7", -6:1, 13685, 1148, 1, 0, 0);
+add (12097,"Osceola County", "FL", "Florida", "3", -5:1, 145666, 1387, 1, 0, 0);
+add (37105,"Lee County", "NC", "North Carolina", "2", -5:1, 49328, 1387, 1, 0, 0);
+add (48371,"Pecos County", "TX", "Texas", "7", -6:1, 16003, 1148, 1, 0, 0);
+add (51810,"Virginia Beach city", "VA", "Virginia", "2", -5:1, 432380, 1387, 1, 0, 0);
+add (40065,"Jackson County", "OK", "Oklahoma", "7", -6:1, 28771, 1148, 1, 0, 0);
+add (13155,"Irwin County", "GA", "Georgia", "3", -5:1, 8982, 1387, 1, 0, 0);
+add (20101,"Lane County", "KS", "Kansas", "6", -6:1, 2264, 1148, 1, 0, 0);
+add (40017,"Canadian County", "OK", "Oklahoma", "7", -6:1, 85463, 1148, 1, 0, 0);
+add (19073,"Greene County", "IA", "Iowa", "5", -6:1, 10065, 1148, 1, 0, 0);
+add (25013,"Hampden County", "MA", "Massachusetts", "0", -5:1, 439609, 1387, 1, 0, 0);
+add (04025,"Yavapai County", "AZ", "Arizona", "8", -7:1, 148511, 4647, 1, 0, 0);
+add (47113,"Madison County", "TN", "Tennesee", "3", -6:1, 85954, 1148, 1, 0, 0);
+add (18175,"Washington County", "IN", "Indiana", "4", -5:1, 27900, 1387, 1, 0, 0);
+add (55005,"Barron County", "WI", "Wisconnsin", "5", -6:1, 43872, 1148, 1, 0, 0);
+add (17109,"McDonough County", "IL", "Illinois", "6", -6:1, 33917, 1148, 1, 0, 0);
+add (17113,"McLean County", "IL", "Illinois", "6", -6:1, 142652, 1148, 1, 0, 0);
+add (13033,"Burke County", "GA", "Georgia", "3", -5:1, 22854, 1387, 1, 0, 0);
+add (04023,"Santa Cruz County", "AZ", "Arizona", "8", -7:1, 38116, 4647, 1, 0, 0);
+add (54067,"Nicholas County", "WV", "West Virginia", "2", -5:1, 27595, 1387, 1, 0, 0);
+add (19135,"Monroe County", "IA", "Iowa", "5", -6:1, 8041, 1148, 1, 0, 0);
+add (21083,"Graves County", "KY", "Kentucky", "4", -6:1, 35847, 1148, 1, 0, 0);
+add (38067,"Pembina County", "ND", "North Dakota", "5", -6:1, 8485, 1148, 1, 0, 0);
+add (19031,"Cedar County", "IA", "Iowa", "5", -6:1, 17977, 1148, 1, 0, 0);
+add (21059,"Daviess County", "KY", "Kentucky", "4", -6:1, 91139, 1148, 1, 0, 0);
+add (51580,"Covington city", "VA", "Virginia", "2", -5:1, 6857, 1387, 1, 0, 0);
+add (42045,"Delaware County", "PA", "Pennsylvania", "1", -5:1, 542593, 1387, 1, 0, 0);
+add (05009,"Boone County", "AR", "Arkansas", "7", -6:1, 31872, 1148, 1, 0, 0);
+add (42103,"Pike County", "PA", "Pennsylvania", "1", -5:1, 40172, 1387, 1, 0, 0);
+add (40151,"Woods County", "OK", "Oklahoma", "7", -6:1, 8366, 1148, 1, 0, 0);
+add (13311,"White County", "GA", "Georgia", "3", -5:1, 17457, 1387, 1, 0, 0);
+add (22065,"Madison Parish", "LA", "Louisiana", "7", -6:1, 12808, 1148, 1, 0, 0);
+add (55091,"Pepin County", "WI", "Wisconnsin", "5", -6:1, 7118, 1148, 1, 0, 0);
+add (28047,"Harrison County", "MS", "Missippi", "5", -6:1, 177981, 1148, 1, 0, 0);
+add (38105,"Williams County", "ND", "North Dakota", "5", -6:1, 20150, 1148, 1, 0, 0);
+add (12093,"Okeechobee County", "FL", "Florida", "3", -5:1, 31158, 1387, 1, 0, 0);
+add (27043,"Faribault County", "MN", "Minnesota", "5", -6:1, 16244, 1148, 1, 0, 0);
+add (29027,"Callaway County", "MO", "Mosourri", "6", -6:1, 37437, 1148, 1, 0, 0);
+add (20081,"Haskell County", "KS", "Kansas", "6", -6:1, 3976, 1148, 1, 0, 0);
+add (06067,"Sacramento County", "CA", "California", "9", -8:1, 1144202, 3240, 0, 1, 0);
+add (20011,"Bourbon County", "KS", "Kansas", "6", -6:1, 15260, 1148, 1, 0, 0);
+add (21129,"Lee County", "KY", "Kentucky", "4", -5:1, 8021, 1387, 1, 0, 0);
+add (40101,"Muskogee County", "OK", "Oklahoma", "7", -6:1, 70004, 1148, 1, 0, 0);
+add (35045,"San Juan County", "NM", "New Mexico", "8", -7:1, 106020, 4647, 1, 0, 0);
+add (39021,"Champaign County", "OH", "Ohio", "4", -5:1, 38182, 1387, 1, 0, 0);
+add (51045,"Craig County", "VA", "Virginia", "2", -5:1, 4882, 1387, 1, 0, 0);
+add (40123,"Pontotoc County", "OK", "Oklahoma", "7", -6:1, 34591, 1148, 1, 0, 0);
+add (48457,"Tyler County", "TX", "Texas", "7", -6:1, 20408, 1148, 1, 0, 0);
+add (39077,"Huron County", "OH", "Ohio", "4", -5:1, 60293, 1387, 1, 0, 0);
+add (28141,"Tishomingo County", "MS", "Missippi", "5", -6:1, 18654, 1148, 1, 0, 0);
+add (21171,"Monroe County", "KY", "Kentucky", "4", -5:1, 11201, 1387, 1, 0, 0);
+add (20025,"Clark County", "KS", "Kansas", "6", -6:1, 2361, 1148, 1, 0, 0);
+add (30083,"Richland County", "MT", "Montana", "6", -7:1, 10105, 4647, 1, 0, 0);
+add (45003,"Aiken County", "SC", "South Carolina", "2", -5:1, 134051, 1387, 1, 0, 0);
+add (31113,"Logan County", "NE", "Nebraska", "6", -7:1, 880, 4647, 1, 0, 0);
+add (51670,"Hopewell city", "VA", "Virginia", "2", -5:1, 22529, 1387, 1, 0, 0);
+add (38053,"McKenzie County", "ND", "North Dakota", "5", -6:1, 5682, 1148, 1, 0, 0);
+add (08075,"Logan County", "CO", "Colorado", "8", -7:1, 17890, 4647, 1, 0, 0);
+add (17069,"Hardin County", "IL", "Illinois", "6", -6:1, 4902, 1148, 1, 0, 0);
+add (02170,"Matanuska-Susitna Borough", "AK", "Alaska", "9", -9:1, 56258, 1174, 0, 0, 1);
+add (28117,"Prentiss County", "MS", "Missippi", "5", -6:1, 24295, 1148, 1, 0, 0);
+add (31073,"Gosper County", "NE", "Nebraska", "6", -6:1, 2329, 1148, 1, 0, 0);
+add (48101,"Cottle County", "TX", "Texas", "7", -6:1, 1922, 1148, 1, 0, 0);
+add (05011,"Bradley County", "AR", "Arkansas", "7", -6:1, 11433, 1148, 1, 0, 0);
+add (40147,"Washington County", "OK", "Oklahoma", "7", -6:1, 47519, 1148, 1, 0, 0);
+add (29063,"DeKalb County", "MO", "Mosourri", "6", -6:1, 11129, 1148, 1, 0, 0);
+add (39109,"Miami County", "OH", "Ohio", "4", -5:1, 98147, 1387, 1, 0, 0);
+add (05025,"Cleveland County", "AR", "Arkansas", "7", -6:1, 8452, 1148, 1, 0, 0);
+add (05041,"Desha County", "AR", "Arkansas", "7", -6:1, 15110, 1148, 1, 0, 0);
+add (18083,"Knox County", "IN", "Indiana", "4", -5:1, 39388, 1387, 1, 0, 0);
+add (38005,"Benson County", "ND", "North Dakota", "5", -6:1, 6893, 1148, 1, 0, 0);
+add (45055,"Kershaw County", "SC", "South Carolina", "2", -5:1, 48593, 1387, 1, 0, 0);
+add (47095,"Lake County", "TN", "Tennesee", "3", -6:1, 8171, 1148, 1, 0, 0);
+add (08101,"Pueblo County", "CO", "Colorado", "8", -7:1, 134867, 4647, 1, 0, 0);
+add (01077,"Lauderdale County", "AL", "Alabama", "3", -6:1, 84325, 1148, 1, 0, 0);
+add (30097,"Sweet Grass County", "MT", "Montana", "6", -7:1, 3407, 4647, 1, 0, 0);
+add (31043,"Dakota County", "NE", "Nebraska", "6", -6:1, 18792, 1148, 1, 0, 0);
+add (48301,"Loving County", "TX", "Texas", "7", -6:1, 114, 1148, 1, 0, 0);
+add (22025,"Catahoula Parish", "LA", "Louisiana", "7", -6:1, 11064, 1148, 1, 0, 0);
+add (02016,"Aleutians West Census Area", "AK", "Alaska", "9", -9:1, 3879, 1174, 0, 0, 1);
+add (30079,"Prairie County", "MT", "Montana", "6", -7:1, 1333, 4647, 1, 0, 0);
+add (31135,"Perkins County", "NE", "Nebraska", "6", -7:1, 3171, 4647, 1, 0, 0);
+add (06039,"Madera County", "CA", "California", "9", -8:1, 114748, 3240, 0, 1, 0);
+add (18119,"Owen County", "IN", "Indiana", "4", -5:1, 20419, 1387, 1, 0, 0);
+add (21149,"McLean County", "KY", "Kentucky", "4", -5:1, 9845, 1387, 1, 0, 0);
+add (12119,"Sumter County", "FL", "Florida", "3", -5:1, 40426, 1387, 1, 0, 0);
+add (17181,"Union County", "IL", "Illinois", "6", -6:1, 17996, 1148, 1, 0, 0);
+add (28149,"Warren County", "MS", "Missippi", "5", -6:1, 49404, 1148, 1, 0, 0);
+add (22121,"West Baton Rouge Parish", "LA", "Louisiana", "7", -6:1, 20683, 1148, 1, 0, 0);
+add (06001,"Alameda County", "CA", "California", "9", -8:1, 1400322, 3240, 0, 1, 0);
+add (18019,"Clark County", "IN", "Indiana", "4", -5:1, 93805, 1387, 1, 0, 0);
+add (27173,"Yellow Medicine County", "MN", "Minnesota", "5", -6:1, 11416, 1148, 1, 0, 0);
+add (17013,"Calhoun County", "IL", "Illinois", "6", -6:1, 4981, 1148, 1, 0, 0);
+add (01017,"Chambers County", "AL", "Alabama", "3", -6:1, 36713, 1148, 1, 0, 0);
+add (48131,"Duval County", "TX", "Texas", "7", -6:1, 13662, 1148, 1, 0, 0);
+add (06051,"Mono County", "CA", "California", "9", -8:1, 10288, 3240, 0, 1, 0);
+add (35003,"Catron County", "NM", "New Mexico", "8", -7:1, 2845, 4647, 1, 0, 0);
+add (05129,"Searcy County", "AR", "Arkansas", "7", -6:1, 7761, 1148, 1, 0, 0);
+add (55097,"Portage County", "WI", "Wisconnsin", "5", -6:1, 64752, 1148, 1, 0, 0);
+add (21157,"Marshall County", "KY", "Kentucky", "4", -5:1, 30312, 1387, 1, 0, 0);
+add (31053,"Dodge County", "NE", "Nebraska", "6", -6:1, 35333, 1148, 1, 0, 0);
+add (40063,"Hughes County", "OK", "Oklahoma", "7", -6:1, 14081, 1148, 1, 0, 0);
+add (05019,"Clark County", "AR", "Arkansas", "7", -6:1, 21933, 1148, 1, 0, 0);
+add (41031,"Jefferson County", "OR", "Oregon", "9", -8:1, 16627, 3240, 0, 1, 0);
+add (23021,"Piscataquis County", "ME", "Maine", "0", -5:1, 18282, 1387, 1, 0, 0);
+add (13119,"Franklin County", "GA", "Georgia", "3", -5:1, 19080, 1387, 1, 0, 0);
+add (31165,"Sioux County", "NE", "Nebraska", "6", -7:1, 1486, 4647, 1, 0, 0);
+add (29177,"Ray County", "MO", "Mosourri", "6", -6:1, 23708, 1148, 1, 0, 0);
+add (23011,"Kennebec County", "ME", "Maine", "0", -5:1, 115207, 1387, 1, 0, 0);
+add (27025,"Chisago County", "MN", "Minnesota", "5", -6:1, 40852, 1148, 1, 0, 0);
+add (40075,"Kiowa County", "OK", "Oklahoma", "7", -6:1, 10613, 1148, 1, 0, 0);
+add (55085,"Oneida County", "WI", "Wisconnsin", "5", -6:1, 35672, 1148, 1, 0, 0);
+add (19113,"Linn County", "IA", "Iowa", "5", -6:1, 182651, 1148, 1, 0, 0);
+add (53039,"Klickitat County", "WA", "Washiington", "9", -8:1, 19295, 3240, 0, 1, 0);
+add (54023,"Grant County", "WV", "West Virginia", "2", -5:1, 11098, 1387, 1, 0, 0);
+add (38055,"McLean County", "ND", "North Dakota", "5", -6:1, 9704, 1148, 1, 0, 0);
+add (01023,"Choctaw County", "AL", "Alabama", "3", -6:1, 15917, 1148, 1, 0, 0);
+add (21051,"Clay County", "KY", "Kentucky", "4", -6:1, 22799, 1148, 1, 0, 0);
+add (09005,"Litchfield County", "CT", "Connecticut", "0", -5:1, 181277, 1387, 1, 0, 0);
+add (40025,"Cimarron County", "OK", "Oklahoma", "7", -6:1, 2959, 1148, 1, 0, 0);
+add (18015,"Carroll County", "IN", "Indiana", "4", -5:1, 20010, 1387, 1, 0, 0);
+add (21119,"Knott County", "KY", "Kentucky", "4", -5:1, 17989, 1387, 1, 0, 0);
+add (17077,"Jackson County", "IL", "Illinois", "6", -6:1, 60410, 1148, 1, 0, 0);
+add (47075,"Haywood County", "TN", "Tennesee", "3", -5:1, 19525, 1387, 1, 0, 0);
+add (53029,"Island County", "WA", "Washiington", "9", -8:1, 70319, 3240, 0, 1, 0);
+add (35019,"Guadalupe County", "NM", "New Mexico", "8", -7:1, 4050, 4647, 1, 0, 0);
+add (31047,"Dawson County", "NE", "Nebraska", "6", -6:1, 23183, 1148, 1, 0, 0);
+add (35061,"Valencia County", "NM", "New Mexico", "8", -7:1, 64626, 4647, 1, 0, 0);
+add (27053,"Hennepin County", "MN", "Minnesota", "5", -6:1, 1059669, 1148, 1, 0, 0);
+add (39151,"Stark County", "OH", "Ohio", "4", -5:1, 373112, 1387, 1, 0, 0);
+add (36015,"Chemung County", "NY", "New York", "1", -5:1, 92021, 1387, 1, 0, 0);
+add (37011,"Avery County", "NC", "North Carolina", "2", -5:1, 15742, 1387, 1, 0, 0);
+add (47179,"Washington County", "TN", "Tennesee", "3", -6:1, 102211, 1148, 1, 0, 0);
+add (05075,"Lawrence County", "AR", "Arkansas", "7", -6:1, 17304, 1148, 1, 0, 0);
+add (26097,"Mackinac County", "MI", "Michigan", "4", -5:1, 11097, 1387, 1, 0, 0);
+add (54031,"Hardy County", "WV", "West Virginia", "2", -5:1, 11829, 1387, 1, 0, 0);
+add (45049,"Hampton County", "SC", "South Carolina", "2", -5:1, 19200, 1387, 1, 0, 0);
+add (47085,"Humphreys County", "TN", "Tennesee", "3", -5:1, 17059, 1387, 1, 0, 0);
+add (28075,"Lauderdale County", "MS", "Missippi", "5", -6:1, 76143, 1148, 1, 0, 0);
+add (48129,"Donley County", "TX", "Texas", "7", -6:1, 3822, 1148, 1, 0, 0);
+add (09001,"Fairfield County", "CT", "Connecticut", "0", -5:1, 838362, 1148, 1, 0, 0);
+add (39107,"Mercer County", "OH", "Ohio", "4", -5:1, 41198, 1387, 1, 0, 0);
+add (31045,"Dawes County", "NE", "Nebraska", "6", -6:1, 8979, 1148, 1, 0, 0);
+add (38061,"Mountrail County", "ND", "North Dakota", "5", -6:1, 6633, 1148, 1, 0, 0);
+add (31167,"Stanton County", "NE", "Nebraska", "6", -7:1, 6215, 4647, 1, 0, 0);
+add (26115,"Monroe County", "MI", "Michigan", "4", -5:1, 143499, 1387, 1, 0, 0);
+add (21231,"Wayne County", "KY", "Kentucky", "4", -5:1, 19107, 1387, 1, 0, 0);
+add (29057,"Dade County", "MO", "Mosourri", "6", -6:1, 7892, 1148, 1, 0, 0);
+add (51149,"Prince George County", "VA", "Virginia", "2", -5:1, 30135, 1387, 1, 0, 0);
+add (12019,"Clay County", "FL", "Florida", "3", -5:1, 137455, 1387, 1, 0, 0);
+add (18101,"Martin County", "IN", "Indiana", "4", -5:1, 10531, 1387, 1, 0, 0);
+add (49041,"Sevier County", "UT", "Utah", "8", -7:1, 18452, 4647, 1, 0, 0);
+add (22059,"La Salle Parish", "LA", "Louisiana", "7", -6:1, 13661, 1148, 1, 0, 0);
+add (27027,"Clay County", "MN", "Minnesota", "5", -6:1, 51599, 1148, 1, 0, 0);
+add (22077,"Pointe Coupee Parish", "LA", "Louisiana", "7", -6:1, 23565, 1148, 1, 0, 0);
+add (17103,"Lee County", "IL", "Illinois", "6", -6:1, 36021, 1148, 1, 0, 0);
+add (01047,"Dallas County", "AL", "Alabama", "3", -6:1, 46768, 1148, 1, 0, 0);
+add (47135,"Perry County", "TN", "Tennesee", "3", -6:1, 7508, 1148, 1, 0, 0);
+add (05107,"Phillips County", "AR", "Arkansas", "7", -6:1, 27363, 1148, 1, 0, 0);
+add (37107,"Lenoir County", "NC", "North Carolina", "2", -5:1, 59046, 1387, 1, 0, 0);
+add (28001,"Adams County", "MS", "Missippi", "5", -6:1, 34225, 1148, 1, 0, 0);
+add (21117,"Kenton County", "KY", "Kentucky", "4", -5:1, 146732, 1387, 1, 0, 0);
+add (48057,"Calhoun County", "TX", "Texas", "7", -6:1, 20596, 1148, 1, 0, 0);
+add (46079,"Lake County", "SD", "South Dakota", "5", -7:1, 11139, 4647, 1, 0, 0);
+add (48345,"Motley County", "TX", "Texas", "7", -6:1, 1305, 1148, 1, 0, 0);
+add (10001,"Kent County", "DE", "Delaware", "1", -5:1, 124089, 1387, 1, 0, 0);
+add (39013,"Belmont County", "OH", "Ohio", "4", -5:1, 69175, 1387, 1, 0, 0);
+add (29197,"Schuyler County", "MO", "Mosourri", "6", -6:1, 4443, 1148, 1, 0, 0);
+add (46017,"Buffalo County", "SD", "South Dakota", "5", -6:1, 1738, 1148, 1, 0, 0);
+add (13303,"Washington County", "GA", "Georgia", "3", -5:1, 20033, 1387, 1, 0, 0);
+add (47007,"Bledsoe County", "TN", "Tennesee", "3", -5:1, 10795, 1387, 1, 0, 0);
+add (26083,"Keweenaw County", "MI", "Michigan", "4", -5:1, 2077, 1387, 1, 0, 0);
+add (48411,"San Saba County", "TX", "Texas", "7", -6:1, 5615, 1148, 1, 0, 0);
+add (51515,"Bedford city", "VA", "Virginia", "2", -5:1, 6317, 1387, 1, 0, 0);
+add (48399,"Runnels County", "TX", "Texas", "7", -6:1, 11507, 1148, 1, 0, 0);
+add (51760,"Richmond city", "VA", "Virginia", "2", -5:1, 194173, 1387, 1, 0, 0);
+add (31063,"Frontier County", "NE", "Nebraska", "6", -6:1, 3082, 1148, 1, 0, 0);
+add (31033,"Cheyenne County", "NE", "Nebraska", "6", -6:1, 9476, 1148, 1, 0, 0);
+add (28039,"George County", "MS", "Missippi", "5", -6:1, 19645, 1148, 1, 0, 0);
+add (29055,"Crawford County", "MO", "Mosourri", "6", -6:1, 22165, 1148, 1, 0, 0);
+add (48179,"Gray County", "TX", "Texas", "7", -6:1, 23603, 1148, 1, 0, 0);
+add (48337,"Montague County", "TX", "Texas", "7", -6:1, 18539, 1148, 1, 0, 0);
+add (31109,"Lancaster County", "NE", "Nebraska", "6", -7:1, 235589, 4647, 1, 0, 0);
+add (13099,"Early County", "GA", "Georgia", "3", -5:1, 12197, 1387, 1, 0, 0);
+add (29201,"Scott County", "MO", "Mosourri", "6", -6:1, 40262, 1148, 1, 0, 0);
+add (22017,"Caddo Parish", "LA", "Louisiana", "7", -6:1, 242471, 1148, 1, 0, 0);
+add (48139,"Ellis County", "TX", "Texas", "7", -6:1, 103638, 1148, 1, 0, 0);
+add (48175,"Goliad County", "TX", "Texas", "7", -6:1, 6998, 1148, 1, 0, 0);
+add (36075,"Oswego County", "NY", "New York", "1", -5:1, 124006, 1387, 1, 0, 0);
+add (21041,"Carroll County", "KY", "Kentucky", "4", -6:1, 9603, 1148, 1, 0, 0);
+add (48405,"San Augustine County", "TX", "Texas", "7", -6:1, 8086, 1148, 1, 0, 0);
+add (17043,"DuPage County", "IL", "Illinois", "6", -6:1, 880491, 1148, 1, 0, 0);
+add (27163,"Washington County", "MN", "Minnesota", "5", -6:1, 196486, 1148, 1, 0, 0);
+add (46103,"Pennington County", "SD", "South Dakota", "5", -7:1, 87702, 4647, 1, 0, 0);
+add (48389,"Reeves County", "TX", "Texas", "7", -6:1, 14478, 1148, 1, 0, 0);
+add (39041,"Delaware County", "OH", "Ohio", "4", -5:1, 92209, 1387, 1, 0, 0);
+add (48425,"Somervell County", "TX", "Texas", "7", -6:1, 6421, 1148, 1, 0, 0);
+add (21101,"Henderson County", "KY", "Kentucky", "4", -6:1, 44457, 1148, 1, 0, 0);
+add (37119,"Mecklenburg County", "NC", "North Carolina", "2", -5:1, 630848, 1387, 1, 0, 0);
+add (31069,"Garden County", "NE", "Nebraska", "6", -6:1, 2138, 1148, 1, 0, 0);
+add (42051,"Fayette County", "PA", "Pennsylvania", "1", -5:1, 144847, 1387, 1, 0, 0);
+add (36025,"Delaware County", "NY", "New York", "1", -5:1, 46086, 1387, 1, 0, 0);
+add (28071,"Lafayette County", "MS", "Missippi", "5", -6:1, 34555, 1148, 1, 0, 0);
+add (48201,"Harris County", "TX", "Texas", "7", -6:1, 3206063, 1148, 1, 0, 0);
+add (28045,"Hancock County", "MS", "Missippi", "5", -6:1, 40327, 1148, 1, 0, 0);
+add (37197,"Yadkin County", "NC", "North Carolina", "2", -5:1, 34955, 1387, 1, 0, 0);
+add (19173,"Taylor County", "IA", "Iowa", "5", -6:1, 7153, 1148, 1, 0, 0);
+add (13223,"Paulding County", "GA", "Georgia", "3", -5:1, 73534, 1387, 1, 0, 0);
+add (47155,"Sevier County", "TN", "Tennesee", "3", -6:1, 64505, 1148, 1, 0, 0);
+add (34003,"Bergen County", "NJ", "New Jersey", "0", -5:1, 858529, 1387, 1, 0, 0);
+add (05071,"Johnson County", "AR", "Arkansas", "7", -6:1, 21403, 1148, 1, 0, 0);
+add (48295,"Lipscomb County", "TX", "Texas", "7", -6:1, 2973, 1148, 1, 0, 0);
+add (45079,"Richland County", "SC", "South Carolina", "2", -5:1, 307056, 1387, 1, 0, 0);
+add (30109,"Wibaux County", "MT", "Montana", "6", -7:1, 1148, 4647, 1, 0, 0);
+add (51735,"Poquoson city", "VA", "Virginia", "2", -5:1, 11455, 1387, 1, 0, 0);
+add (17083,"Jersey County", "IL", "Illinois", "6", -6:1, 21373, 1148, 1, 0, 0);
+add (45029,"Colleton County", "SC", "South Carolina", "2", -5:1, 37364, 1387, 1, 0, 0);
+add (21105,"Hickman County", "KY", "Kentucky", "4", -6:1, 5247, 1148, 1, 0, 0);
+add (45031,"Darlington County", "SC", "South Carolina", "2", -5:1, 66366, 1387, 1, 0, 0);
+add (20047,"Edwards County", "KS", "Kansas", "6", -6:1, 3312, 1148, 1, 0, 0);
+add (17179,"Tazewell County", "IL", "Illinois", "6", -6:1, 127958, 1148, 1, 0, 0);
+add (08095,"Phillips County", "CO", "Colorado", "8", -7:1, 4325, 4647, 1, 0, 0);
+add (51683,"Manassas city", "VA", "Virginia", "2", -5:1, 35336, 1387, 1, 0, 0);
+add (27013,"Blue Earth County", "MN", "Minnesota", "5", -6:1, 53767, 1148, 1, 0, 0);
+add (53057,"Skagit County", "WA", "Washiington", "9", -8:1, 99357, 3240, 0, 1, 0);
+add (19081,"Hancock County", "IA", "Iowa", "5", -6:1, 12044, 1148, 1, 0, 0);
+add (13131,"Grady County", "GA", "Georgia", "3", -5:1, 21501, 1387, 1, 0, 0);
+add (48379,"Rains County", "TX", "Texas", "7", -6:1, 8618, 1148, 1, 0, 0);
+add (37117,"Martin County", "NC", "North Carolina", "2", -5:1, 26192, 1387, 1, 0, 0);
+add (21233,"Webster County", "KY", "Kentucky", "4", -5:1, 13482, 1387, 1, 0, 0);
+add (37081,"Guilford County", "NC", "North Carolina", "2", -5:1, 387722, 1387, 1, 0, 0);
+add (08107,"Routt County", "CO", "Colorado", "8", -7:1, 17514, 4647, 1, 0, 0);
+add (21191,"Pendleton County", "KY", "Kentucky", "4", -5:1, 13703, 1387, 1, 0, 0);
+add (21115,"Johnson County", "KY", "Kentucky", "4", -6:1, 24022, 1148, 1, 0, 0);
+add (27099,"Mower County", "MN", "Minnesota", "5", -6:1, 37039, 1148, 1, 0, 0);
+add (08121,"Washington County", "CO", "Colorado", "8", -7:1, 4576, 4647, 1, 0, 0);
+add (08007,"Archuleta County", "CO", "Colorado", "8", -7:1, 9113, 4647, 1, 0, 0);
+add (36099,"Seneca County", "NY", "New York", "1", -5:1, 31943, 1387, 1, 0, 0);
+add (51065,"Fluvanna County", "VA", "Virginia", "2", -5:1, 18575, 1387, 1, 0, 0);
+add (37087,"Haywood County", "NC", "North Carolina", "2", -5:1, 51422, 1387, 1, 0, 0);
+add (55049,"Iowa County", "WI", "Wisconnsin", "5", -6:1, 22422, 1148, 1, 0, 0);
+add (27121,"Pope County", "MN", "Minnesota", "5", -6:1, 10886, 1148, 1, 0, 0);
+add (46113,"Shannon County", "SD", "South Dakota", "5", -7:1, 12183, 4647, 1, 0, 0);
+add (18117,"Orange County", "IN", "Indiana", "4", -5:1, 19606, 1387, 1, 0, 0);
+add (46053,"Gregory County", "SD", "South Dakota", "5", -6:1, 4948, 1148, 1, 0, 0);
+add (47021,"Cheatham County", "TN", "Tennesee", "3", -5:1, 35344, 1387, 1, 0, 0);
+add (08117,"Summit County", "CO", "Colorado", "8", -7:1, 18749, 4647, 1, 0, 0);
+add (31003,"Antelope County", "NE", "Nebraska", "6", -6:1, 7181, 1148, 1, 0, 0);
+add (46045,"Edmunds County", "SD", "South Dakota", "5", -6:1, 4219, 1148, 1, 0, 0);
+add (45051,"Horry County", "SC", "South Carolina", "2", -5:1, 174762, 1387, 1, 0, 0);
+add (27039,"Dodge County", "MN", "Minnesota", "5", -6:1, 17209, 1148, 1, 0, 0);
+add (42015,"Bradford County", "PA", "Pennsylvania", "1", -5:1, 62459, 1387, 1, 0, 0);
+add (19025,"Calhoun County", "IA", "Iowa", "5", -6:1, 11378, 1148, 1, 0, 0);
+add (47119,"Maury County", "TN", "Tennesee", "3", -6:1, 69633, 1148, 1, 0, 0);
+add (48089,"Colorado County", "TX", "Texas", "7", -6:1, 19021, 1148, 1, 0, 0);
+add (28147,"Walthall County", "MS", "Missippi", "5", -6:1, 14369, 1148, 1, 0, 0);
+add (05059,"Hot Spring County", "AR", "Arkansas", "7", -6:1, 29035, 1148, 1, 0, 0);
+add (37059,"Davie County", "NC", "North Carolina", "2", -5:1, 32095, 1387, 1, 0, 0);
+add (26055,"Grand Traverse County", "MI", "Michigan", "4", -5:1, 74134, 1387, 1, 0, 0);
+add (51001,"Accomack County", "VA", "Virginia", "2", -5:1, 32245, 1387, 1, 0, 0);
+add (51036,"Charles City County", "VA", "Virginia", "2", -5:1, 7092, 1387, 1, 0, 0);
+add (30023,"Deer Lodge County", "MT", "Montana", "6", -7:1, 9999, 4647, 1, 0, 0);
+add (48023,"Baylor County", "TX", "Texas", "7", -6:1, 4152, 1148, 1, 0, 0);
+add (22021,"Caldwell Parish", "LA", "Louisiana", "7", -6:1, 10364, 1148, 1, 0, 0);
+add (25005,"Bristol County", "MA", "Massachusetts", "0", -5:1, 517543, 1387, 1, 0, 0);
+add (12037,"Franklin County", "FL", "Florida", "3", -5:1, 10079, 1387, 1, 0, 0);
+add (28163,"Yazoo County", "MS", "Missippi", "5", -6:1, 25510, 1148, 1, 0, 0);
+add (01049,"DeKalb County", "AL", "Alabama", "3", -6:1, 58454, 1148, 1, 0, 0);
+add (51041,"Chesterfield County", "VA", "Virginia", "2", -5:1, 245915, 1387, 1, 0, 0);
+add (22023,"Cameron Parish", "LA", "Louisiana", "7", -6:1, 9063, 1148, 1, 0, 0);
+add (20185,"Stafford County", "KS", "Kansas", "6", -6:1, 5000, 1148, 1, 0, 0);
+add (30015,"Chouteau County", "MT", "Montana", "6", -7:1, 5187, 4647, 1, 0, 0);
+add (48039,"Brazoria County", "TX", "Texas", "7", -6:1, 230335, 1148, 1, 0, 0);
+add (10005,"Sussex County", "DE", "Delaware", "1", -5:1, 136707, 1387, 1, 0, 0);
+add (56025,"Natrona County", "WY", "Wyoming", "8", -7:1, 63341, 4647, 1, 0, 0);
+add (48017,"Bailey County", "TX", "Texas", "7", -6:1, 6907, 1148, 1, 0, 0);
+add (19033,"Cerro Gordo County", "IA", "Iowa", "5", -6:1, 46159, 1148, 1, 0, 0);
+add (35007,"Colfax County", "NM", "New Mexico", "8", -7:1, 13597, 4647, 1, 0, 0);
+add (42031,"Clarion County", "PA", "Pennsylvania", "1", -5:1, 41841, 1387, 1, 0, 0);
+add (39029,"Columbiana County", "OH", "Ohio", "4", -5:1, 111521, 1387, 1, 0, 0);
+add (36001,"Albany County", "NY", "New York", "1", -5:1, 292586, 1387, 1, 0, 0);
+add (27033,"Cottonwood County", "MN", "Minnesota", "5", -6:1, 12045, 1148, 1, 0, 0);
+add (42115,"Susquehanna County", "PA", "Pennsylvania", "1", -5:1, 42144, 1387, 1, 0, 0);
+add (38081,"Sargent County", "ND", "North Dakota", "5", -6:1, 4457, 1148, 1, 0, 0);
+add (48147,"Fannin County", "TX", "Texas", "7", -6:1, 28129, 1148, 1, 0, 0);
+add (24003,"Anne Arundel County", "MD", "Maryland", "2", -5:1, 476060, 1387, 1, 0, 0);
+add (22085,"Sabine Parish", "LA", "Louisiana", "7", -6:1, 23824, 1148, 1, 0, 0);
+add (27171,"Wright County", "MN", "Minnesota", "5", -6:1, 85123, 1148, 1, 0, 0);
+add (01117,"Shelby County", "AL", "Alabama", "3", -6:1, 140715, 1148, 1, 0, 0);
+add (29135,"Moniteau County", "MO", "Mosourri", "6", -6:1, 13263, 1148, 1, 0, 0);
+add (18069,"Huntington County", "IN", "Indiana", "4", -5:1, 37259, 1387, 1, 0, 0);
+add (28085,"Lincoln County", "MS", "Missippi", "5", -6:1, 31771, 1148, 1, 0, 0);
+add (35055,"Taos County", "NM", "New Mexico", "8", -7:1, 26815, 4647, 1, 0, 0);
+add (12011,"Broward County", "FL", "Florida", "3", -5:1, 1503407, 1387, 1, 0, 0);
+add (51077,"Grayson County", "VA", "Virginia", "2", -5:1, 16118, 1387, 1, 0, 0);
+add (29203,"Shannon County", "MO", "Mosourri", "6", -6:1, 8252, 1148, 1, 0, 0);
+add (48171,"Gillespie County", "TX", "Texas", "7", -6:1, 20045, 1148, 1, 0, 0);
+add (17131,"Mercer County", "IL", "Illinois", "6", -6:1, 17640, 1148, 1, 0, 0);
+add (40041,"Delaware County", "OK", "Oklahoma", "7", -6:1, 34154, 1148, 1, 0, 0);
+add (18065,"Henry County", "IN", "Indiana", "4", -5:1, 48785, 1387, 1, 0, 0);
+add (54037,"Jefferson County", "WV", "West Virginia", "2", -5:1, 41368, 1387, 1, 0, 0);
+add (18135,"Randolph County", "IN", "Indiana", "4", -5:1, 27628, 1387, 1, 0, 0);
+add (28121,"Rankin County", "MS", "Missippi", "5", -6:1, 109613, 1148, 1, 0, 0);
+add (45041,"Florence County", "SC", "South Carolina", "2", -5:1, 124904, 1387, 1, 0, 0);
+add (48431,"Sterling County", "TX", "Texas", "7", -6:1, 1364, 1148, 1, 0, 0);
+add (29091,"Howell County", "MO", "Mosourri", "6", -6:1, 35776, 1148, 1, 0, 0);
+add (37199,"Yancey County", "NC", "North Carolina", "2", -5:1, 16607, 1387, 1, 0, 0);
+add (38065,"Oliver County", "ND", "North Dakota", "5", -6:1, 2215, 1148, 1, 0, 0);
+add (46105,"Perkins County", "SD", "South Dakota", "5", -7:1, 3505, 4647, 1, 0, 0);
+add (13015,"Bartow County", "GA", "Georgia", "3", -5:1, 71929, 1387, 1, 0, 0);
+add (51175,"Southampton County", "VA", "Virginia", "2", -5:1, 17450, 1387, 1, 0, 0);
+add (29017,"Bollinger County", "MO", "Mosourri", "6", -6:1, 11513, 1148, 1, 0, 0);
+add (31097,"Johnson County", "NE", "Nebraska", "6", -7:1, 4564, 4647, 1, 0, 0);
+add (31039,"Cuming County", "NE", "Nebraska", "6", -6:1, 9993, 1148, 1, 0, 0);
+add (21125,"Laurel County", "KY", "Kentucky", "4", -5:1, 50734, 1387, 1, 0, 0);
+add (38001,"Adams County", "ND", "North Dakota", "5", -6:1, 2714, 1148, 1, 0, 0);
+add (39047,"Fayette County", "OH", "Ohio", "4", -5:1, 28493, 1387, 1, 0, 0);
+add (06057,"Nevada County", "CA", "California", "9", -8:1, 91334, 3240, 0, 1, 0);
+add (20001,"Allen County", "KS", "Kansas", "6", -6:1, 14556, 1148, 1, 0, 0);
+add (48353,"Nolan County", "TX", "Texas", "7", -6:1, 16501, 1148, 1, 0, 0);
+add (13211,"Morgan County", "GA", "Georgia", "3", -5:1, 15091, 1387, 1, 0, 0);
+add (08015,"Chaffee County", "CO", "Colorado", "8", -7:1, 15075, 4647, 1, 0, 0);
+add (39007,"Ashtabula County", "OH", "Ohio", "4", -5:1, 103300, 1387, 1, 0, 0);
+add (28107,"Panola County", "MS", "Missippi", "5", -6:1, 33400, 1148, 1, 0, 0);
+add (56005,"Campbell County", "WY", "Wyoming", "8", -7:1, 32465, 4647, 1, 0, 0);
+add (12055,"Highlands County", "FL", "Florida", "3", -5:1, 75206, 1387, 1, 0, 0);
+add (45057,"Lancaster County", "SC", "South Carolina", "2", -5:1, 58887, 1387, 1, 0, 0);
+add (39119,"Muskingum County", "OH", "Ohio", "4", -5:1, 84470, 1387, 1, 0, 0);
+add (31015,"Boyd County", "NE", "Nebraska", "6", -6:1, 2565, 1148, 1, 0, 0);
+add (19001,"Adair County", "IA", "Iowa", "5", -6:1, 8064, 1387, 1, 0, 0);
+add (25007,"Dukes County", "MA", "Massachusetts", "0", -5:1, 13888, 1387, 1, 0, 0);
+add (26141,"Presque Isle County", "MI", "Michigan", "4", -5:1, 14424, 1387, 1, 0, 0);
+add (31141,"Platte County", "NE", "Nebraska", "6", -7:1, 30737, 4647, 1, 0, 0);
+add (26139,"Ottawa County", "MI", "Michigan", "4", -5:1, 224357, 1387, 1, 0, 0);
+add (08113,"San Miguel County", "CO", "Colorado", "8", -7:1, 5437, 4647, 1, 0, 0);
+add (06021,"Glenn County", "CA", "California", "9", -8:1, 26234, 3240, 0, 1, 0);
+add (23029,"Washington County", "ME", "Maine", "0", -5:1, 35502, 1387, 1, 0, 0);
+add (56039,"Teton County", "WY", "Wyoming", "8", -7:1, 14163, 4647, 1, 0, 0);
+add (51097,"King and Queen County", "VA", "Virginia", "2", -5:1, 6529, 1387, 1, 0, 0);
+add (02220,"Sitka Borough", "AK", "Alaska", "9", -9:1, 8338, 1174, 0, 0, 1);
+add (41057,"Tillamook County", "OR", "Oregon", "9", -8:1, 24356, 3240, 0, 1, 0);
+add (35005,"Chaves County", "NM", "New Mexico", "8", -7:1, 62505, 4647, 1, 0, 0);
+add (39057,"Greene County", "OH", "Ohio", "4", -5:1, 146607, 1387, 1, 0, 0);
+add (47053,"Gibson County", "TN", "Tennesee", "3", -5:1, 48186, 1387, 1, 0, 0);
+add (30049,"Lewis and Clark County", "MT", "Montana", "6", -7:1, 53655, 4647, 1, 0, 0);
+add (20089,"Jewell County", "KS", "Kansas", "6", -6:1, 3867, 1148, 1, 0, 0);
+add (05043,"Drew County", "AR", "Arkansas", "7", -6:1, 17575, 1148, 1, 0, 0);
+add (24021,"Frederick County", "MD", "Maryland", "2", -5:1, 186777, 1387, 1, 0, 0);
+add (17061,"Greene County", "IL", "Illinois", "6", -6:1, 15549, 1148, 1, 0, 0);
+add (55017,"Chippewa County", "WI", "Wisconnsin", "5", -6:1, 54574, 1148, 1, 0, 0);
+add (48235,"Irion County", "TX", "Texas", "7", -6:1, 1739, 1148, 1, 0, 0);
+add (47111,"Macon County", "TN", "Tennesee", "3", -6:1, 18181, 1148, 1, 0, 0);
+add (18077,"Jefferson County", "IN", "Indiana", "4", -5:1, 31466, 1387, 1, 0, 0);
+add (47177,"Warren County", "TN", "Tennesee", "3", -6:1, 36160, 1148, 1, 0, 0);
+add (16017,"Bonner County", "ID", "Idaho", "8", -7:1, 35226, 4647, 1, 0, 0);
+add (35057,"Torrance County", "NM", "New Mexico", "8", -7:1, 15433, 4647, 1, 0, 0);
+add (26153,"Schoolcraft County", "MI", "Michigan", "4", -5:1, 8805, 1387, 1, 0, 0);
+add (05073,"Lafayette County", "AR", "Arkansas", "7", -6:1, 8926, 1148, 1, 0, 0);
+add (49053,"Washington County", "UT", "Utah", "8", -7:1, 82115, 4647, 1, 0, 0);
+add (51067,"Franklin County", "VA", "Virginia", "2", -5:1, 44538, 1387, 1, 0, 0);
+add (17105,"Livingston County", "IL", "Illinois", "6", -6:1, 39702, 1148, 1, 0, 0);
+add (08021,"Conejos County", "CO", "Colorado", "8", -7:1, 7972, 4647, 1, 0, 0);
+add (31079,"Hall County", "NE", "Nebraska", "6", -6:1, 51851, 1148, 1, 0, 0);
+add (35049,"Santa Fe County", "NM", "New Mexico", "8", -7:1, 123386, 4647, 1, 0, 0);
+add (48497,"Wise County", "TX", "Texas", "7", -6:1, 44135, 1148, 1, 0, 0);
+add (48397,"Rockwall County", "TX", "Texas", "7", -6:1, 37174, 1148, 1, 0, 0);
+add (20053,"Ellsworth County", "KS", "Kansas", "6", -6:1, 6285, 1148, 1, 0, 0);
+add (22107,"Tensas Parish", "LA", "Louisiana", "7", -6:1, 6631, 1148, 1, 0, 0);
+add (31035,"Clay County", "NE", "Nebraska", "6", -6:1, 7147, 1148, 1, 0, 0);
+add (19119,"Lyon County", "IA", "Iowa", "5", -6:1, 12012, 1148, 1, 0, 0);
+add (28053,"Humphreys County", "MS", "Missippi", "5", -6:1, 11344, 1148, 1, 0, 0);
+add (19131,"Mitchell County", "IA", "Iowa", "5", -6:1, 11012, 1148, 1, 0, 0);
+add (37039,"Cherokee County", "NC", "North Carolina", "2", -5:1, 22758, 1387, 1, 0, 0);
+add (31139,"Pierce County", "NE", "Nebraska", "6", -7:1, 7914, 4647, 1, 0, 0);
+add (22083,"Richland Parish", "LA", "Louisiana", "7", -6:1, 21022, 1148, 1, 0, 0);
+add (08051,"Gunnison County", "CO", "Colorado", "8", -7:1, 12456, 4647, 1, 0, 0);
+add (56033,"Sheridan County", "WY", "Wyoming", "8", -7:1, 25165, 4647, 1, 0, 0);
+add (51530,"Buena Vista city", "VA", "Virginia", "2", -5:1, 6288, 1387, 1, 0, 0);
+add (26119,"Montmorency County", "MI", "Michigan", "4", -5:1, 10011, 1387, 1, 0, 0);
+add (47121,"Meigs County", "TN", "Tennesee", "3", -6:1, 9955, 1148, 1, 0, 0);
+add (17125,"Mason County", "IL", "Illinois", "6", -6:1, 16837, 1148, 1, 0, 0);
+add (28077,"Lawrence County", "MS", "Missippi", "5", -6:1, 13053, 1148, 1, 0, 0);
+add (20107,"Linn County", "KS", "Kansas", "6", -6:1, 9158, 1148, 1, 0, 0);
+add (34029,"Ocean County", "NJ", "New Jersey", "0", -5:1, 489819, 1387, 1, 0, 0);
+add (31083,"Harlan County", "NE", "Nebraska", "6", -6:1, 3748, 1148, 1, 0, 0);
+add (51083,"Halifax County", "VA", "Virginia", "2", -5:1, 36863, 1387, 1, 0, 0);
+add (20071,"Greeley County", "KS", "Kansas", "6", -6:1, 1704, 1148, 1, 0, 0);
+add (46127,"Union County", "SD", "South Dakota", "5", -7:1, 12213, 4647, 1, 0, 0);
+add (19123,"Mahaska County", "IA", "Iowa", "5", -6:1, 21901, 1148, 1, 0, 0);
+add (36119,"Westchester County", "NY", "New York", "1", -5:1, 897920, 1387, 1, 0, 0);
+add (51610,"Falls Church city", "VA", "Virginia", "2", -5:1, 10042, 1387, 1, 0, 0);
+add (28069,"Kemper County", "MS", "Missippi", "5", -6:1, 10575, 1148, 1, 0, 0);
+add (21137,"Lincoln County", "KY", "Kentucky", "4", -5:1, 22367, 1387, 1, 0, 0);
+add (51103,"Lancaster County", "VA", "Virginia", "2", -5:1, 11373, 1387, 1, 0, 0);
+add (13269,"Taylor County", "GA", "Georgia", "3", -5:1, 8306, 1387, 1, 0, 0);
+add (36039,"Greene County", "NY", "New York", "1", -5:1, 47807, 1387, 1, 0, 0);
+add (26123,"Newaygo County", "MI", "Michigan", "4", -5:1, 45784, 1387, 1, 0, 0);
+add (34013,"Essex County", "NJ", "New Jersey", "0", -5:1, 750273, 1387, 1, 0, 0);
+add (17199,"Williamson County", "IL", "Illinois", "6", -6:1, 60819, 1148, 1, 0, 0);
+add (17155,"Putnam County", "IL", "Illinois", "6", -6:1, 5826, 1148, 1, 0, 0);
+add (31177,"Washington County", "NE", "Nebraska", "6", -7:1, 18661, 4647, 1, 0, 0);
+add (37193,"Wilkes County", "NC", "North Carolina", "2", -5:1, 62837, 1387, 1, 0, 0);
+add (37009,"Ashe County", "NC", "North Carolina", "2", -5:1, 24025, 1387, 1, 0, 0);
+add (12121,"Suwannee County", "FL", "Florida", "3", -5:1, 32665, 1387, 1, 0, 0);
+add (29221,"Washington County", "MO", "Mosourri", "6", -6:1, 22966, 1148, 1, 0, 0);
+add (21037,"Campbell County", "KY", "Kentucky", "4", -6:1, 87381, 1148, 1, 0, 0);
+add (53047,"Okanogan County", "WA", "Washiington", "9", -8:1, 38237, 3240, 0, 1, 0);
+add (30073,"Pondera County", "MT", "Montana", "6", -7:1, 6402, 4647, 1, 0, 0);
+add (01121,"Talladega County", "AL", "Alabama", "3", -6:1, 76633, 1148, 1, 0, 0);
+add (13241,"Rabun County", "GA", "Georgia", "3", -5:1, 13406, 1387, 1, 0, 0);
+add (05045,"Faulkner County", "AR", "Arkansas", "7", -6:1, 78382, 1148, 1, 0, 0);
+add (13109,"Evans County", "GA", "Georgia", "3", -5:1, 9949, 1387, 1, 0, 0);
+add (28111,"Perry County", "MS", "Missippi", "5", -6:1, 11798, 1148, 1, 0, 0);
+add (54085,"Ritchie County", "WV", "West Virginia", "2", -5:1, 10356, 1387, 1, 0, 0);
+add (12021,"Collier County", "FL", "Florida", "3", -5:1, 199436, 1387, 1, 0, 0);
+add (19069,"Franklin County", "IA", "Iowa", "5", -6:1, 10863, 1148, 1, 0, 0);
+add (48159,"Franklin County", "TX", "Texas", "7", -6:1, 9676, 1148, 1, 0, 0);
+add (48339,"Montgomery County", "TX", "Texas", "7", -6:1, 271788, 1148, 1, 0, 0);
+add (27119,"Polk County", "MN", "Minnesota", "5", -6:1, 30954, 1148, 1, 0, 0);
+add (26037,"Clinton County", "MI", "Michigan", "4", -5:1, 63379, 1387, 1, 0, 0);
+add (20121,"Miami County", "KS", "Kansas", "6", -6:1, 26597, 1148, 1, 0, 0);
+add (19185,"Wayne County", "IA", "Iowa", "5", -6:1, 6659, 1148, 1, 0, 0);
+add (29051,"Cole County", "MO", "Mosourri", "6", -6:1, 69307, 1148, 1, 0, 0);
+add (36107,"Tioga County", "NY", "New York", "1", -5:1, 52477, 1387, 1, 0, 0);
+add (39145,"Scioto County", "OH", "Ohio", "4", -5:1, 80355, 1387, 1, 0, 0);
+add (12115,"Sarasota County", "FL", "Florida", "3", -5:1, 303400, 1387, 1, 0, 0);
+add (24017,"Charles County", "MD", "Maryland", "2", -5:1, 117963, 1387, 1, 0, 0);
+add (53063,"Spokane County", "WA", "Washiington", "9", -8:1, 408669, 3240, 0, 1, 0);
+add (42009,"Bedford County", "PA", "Pennsylvania", "1", -5:1, 49373, 1387, 1, 0, 0);
+add (17117,"Macoupin County", "IL", "Illinois", "6", -6:1, 48872, 1148, 1, 0, 0);
+add (42037,"Columbia County", "PA", "Pennsylvania", "1", -5:1, 64120, 1387, 1, 0, 0);
+add (46049,"Faulk County", "SD", "South Dakota", "5", -6:1, 2521, 1148, 1, 0, 0);
+add (54097,"Upshur County", "WV", "West Virginia", "2", -5:1, 23526, 1387, 1, 0, 0);
+add (18087,"Lagrange County", "IN", "Indiana", "4", -5:1, 33484, 1387, 1, 0, 0);
+add (04027,"Yuma County", "AZ", "Arizona", "8", -7:1, 132259, 4647, 1, 0, 0);
+add (49029,"Morgan County", "UT", "Utah", "8", -7:1, 7022, 4647, 1, 0, 0);
+add (19013,"Black Hawk County", "IA", "Iowa", "5", -6:1, 121121, 1148, 1, 0, 0);
+add (01037,"Coosa County", "AL", "Alabama", "3", -6:1, 11658, 1148, 1, 0, 0);
+add (09003,"Hartford County", "CT", "Connecticut", "0", -5:1, 828200, 1387, 1, 0, 0);
+add (29175,"Randolph County", "MO", "Mosourri", "6", -6:1, 24024, 1148, 1, 0, 0);
+add (28083,"Leflore County", "MS", "Missippi", "5", -6:1, 36951, 1148, 1, 0, 0);
+add (39049,"Franklin County", "OH", "Ohio", "4", -5:1, 1021194, 1387, 1, 0, 0);
+add (24045,"Wicomico County", "MD", "Maryland", "2", -5:1, 79367, 1387, 1, 0, 0);
+add (39037,"Darke County", "OH", "Ohio", "4", -5:1, 54180, 1387, 1, 0, 0);
+add (21141,"Logan County", "KY", "Kentucky", "4", -5:1, 26145, 1387, 1, 0, 0);
+add (36043,"Herkimer County", "NY", "New York", "1", -5:1, 64049, 1387, 1, 0, 0);
+add (13167,"Johnson County", "GA", "Georgia", "3", -5:1, 8316, 1387, 1, 0, 0);
+add (08037,"Eagle County", "CO", "Colorado", "8", -7:1, 33538, 4647, 1, 0, 0);
+add (18013,"Brown County", "IN", "Indiana", "4", -5:1, 15982, 1387, 1, 0, 0);
+add (13151,"Henry County", "GA", "Georgia", "3", -5:1, 104667, 1387, 1, 0, 0);
+add (39147,"Seneca County", "OH", "Ohio", "4", -5:1, 60099, 1387, 1, 0, 0);
+add (21057,"Cumberland County", "KY", "Kentucky", "4", -6:1, 6828, 1148, 1, 0, 0);
+add (53077,"Yakima County", "WA", "Washiington", "9", -8:1, 218062, 3240, 0, 1, 0);
+add (13003,"Atkinson County", "GA", "Georgia", "3", -5:1, 7138, 1387, 1, 0, 0);
+add (13089,"DeKalb County", "GA", "Georgia", "3", -5:1, 593850, 1387, 1, 0, 0);
+add (37079,"Greene County", "NC", "North Carolina", "2", -5:1, 18308, 1387, 1, 0, 0);
+add (20017,"Chase County", "KS", "Kansas", "6", -6:1, 2950, 1148, 1, 0, 0);
+add (01001,"Autauga County", "AL", "Alabama", "3", -6:1, 42095, 1148, 1, 0, 0);
+add (26065,"Ingham County", "MI", "Michigan", "4", -5:1, 285214, 1387, 1, 0, 0);
+add (48063,"Camp County", "TX", "Texas", "7", -6:1, 10962, 1148, 1, 0, 0);
+add (19093,"Ida County", "IA", "Iowa", "5", -6:1, 7912, 1148, 1, 0, 0);
+add (39173,"Wood County", "OH", "Ohio", "4", -5:1, 119498, 1387, 1, 0, 0);
+add (13227,"Pickens County", "GA", "Georgia", "3", -5:1, 19679, 1387, 1, 0, 0);
+add (26033,"Chippewa County", "MI", "Michigan", "4", -5:1, 37968, 1387, 1, 0, 0);
+add (29023,"Butler County", "MO", "Mosourri", "6", -6:1, 40561, 1148, 1, 0, 0);
+add (47067,"Hancock County", "TN", "Tennesee", "3", -5:1, 6778, 1387, 1, 0, 0);
+add (27091,"Martin County", "MN", "Minnesota", "5", -6:1, 21984, 1148, 1, 0, 0);
+add (19139,"Muscatine County", "IA", "Iowa", "5", -6:1, 41126, 1148, 1, 0, 0);
+add (54011,"Cabell County", "WV", "West Virginia", "2", -5:1, 94273, 1387, 1, 0, 0);
+add (13247,"Rockdale County", "GA", "Georgia", "3", -5:1, 68305, 1387, 1, 0, 0);
+add (12061,"Indian River County", "FL", "Florida", "3", -5:1, 99155, 1387, 1, 0, 0);
+add (31023,"Butler County", "NE", "Nebraska", "6", -6:1, 8680, 1148, 1, 0, 0);
+add (18051,"Gibson County", "IN", "Indiana", "4", -5:1, 32149, 1387, 1, 0, 0);
+add (38073,"Ransom County", "ND", "North Dakota", "5", -6:1, 5776, 1148, 1, 0, 0);
+add (29089,"Howard County", "MO", "Mosourri", "6", -6:1, 9741, 1148, 1, 0, 0);
+add (05023,"Cleburne County", "AR", "Arkansas", "7", -6:1, 22923, 1148, 1, 0, 0);
+add (05109,"Pike County", "AR", "Arkansas", "7", -6:1, 10592, 1148, 1, 0, 0);
+add (51650,"Hampton city", "VA", "Virginia", "2", -5:1, 136968, 1387, 1, 0, 0);
+add (01065,"Hale County", "AL", "Alabama", "3", -6:1, 16744, 1148, 1, 0, 0);
+add (39011,"Auglaize County", "OH", "Ohio", "4", -5:1, 47103, 1387, 1, 0, 0);
+add (51685,"Manassas Park city", "VA", "Virginia", "2", -5:1, 8711, 1387, 1, 0, 0);
+add (27059,"Isanti County", "MN", "Minnesota", "5", -6:1, 30121, 1148, 1, 0, 0);
+add (31037,"Colfax County", "NE", "Nebraska", "6", -6:1, 10716, 1148, 1, 0, 0);
+add (51141,"Patrick County", "VA", "Virginia", "2", -5:1, 18441, 1387, 1, 0, 0);
+add (21153,"Magoffin County", "KY", "Kentucky", "4", -5:1, 13838, 1387, 1, 0, 0);
+add (13139,"Hall County", "GA", "Georgia", "3", -5:1, 119210, 1387, 1, 0, 0);
+add (01091,"Marengo County", "AL", "Alabama", "3", -6:1, 23378, 1148, 1, 0, 0);
+add (27093,"Meeker County", "MN", "Minnesota", "5", -6:1, 21735, 1148, 1, 0, 0);
+add (55087,"Outagamie County", "WI", "Wisconnsin", "5", -6:1, 156269, 1148, 1, 0, 0);
+add (08041,"El Paso County", "CO", "Colorado", "8", -7:1, 490378, 4647, 1, 0, 0);
+add (19129,"Mills County", "IA", "Iowa", "5", -6:1, 14477, 1148, 1, 0, 0);
+add (01063,"Greene County", "AL", "Alabama", "3", -6:1, 9880, 1148, 1, 0, 0);
+add (17047,"Edwards County", "IL", "Illinois", "6", -6:1, 6950, 1148, 1, 0, 0);
+add (18143,"Scott County", "IN", "Indiana", "4", -5:1, 22939, 1387, 1, 0, 0);
+add (08115,"Sedgwick County", "CO", "Colorado", "8", -7:1, 2547, 4647, 1, 0, 0);
+add (37173,"Swain County", "NC", "North Carolina", "2", -5:1, 12300, 1387, 1, 0, 0);
+add (31157,"Scotts Bluff County", "NE", "Nebraska", "6", -7:1, 36109, 4647, 1, 0, 0);
+add (42105,"Potter County", "PA", "Pennsylvania", "1", -5:1, 17184, 1387, 1, 0, 0);
+add (17001,"Adams County", "IL", "Illinois", "6", -6:1, 67105, 1148, 1, 0, 0);
+add (24033,"Prince George County", "MD", "Maryland", "2", -5:1, 777811, 1387, 1, 0, 0);
+add (12095,"Orange County", "FL", "Florida", "3", -5:1, 805837, 1387, 1, 0, 0);
+add (51169,"Scott County", "VA", "Virginia", "2", -5:1, 22605, 1387, 1, 0, 0);
+add (05063,"Independence County", "AR", "Arkansas", "7", -6:1, 33054, 1148, 1, 0, 0);
+add (17141,"Ogle County", "IL", "Illinois", "6", -6:1, 50511, 1148, 1, 0, 0);
+add (27009,"Benton County", "MN", "Minnesota", "5", -6:1, 34128, 1148, 1, 0, 0);
+add (28115,"Pontotoc County", "MS", "Missippi", "5", -6:1, 25397, 1148, 1, 0, 0);
+add (21133,"Letcher County", "KY", "Kentucky", "4", -5:1, 26185, 1387, 1, 0, 0);
+add (51047,"Culpeper County", "VA", "Virginia", "2", -5:1, 33083, 1387, 1, 0, 0);
+add (47019,"Carter County", "TN", "Tennesee", "3", -5:1, 53323, 1387, 1, 0, 0);
+add (08049,"Grand County", "CO", "Colorado", "8", -7:1, 10050, 4647, 1, 0, 0);
+add (17031,"Cook County", "IL", "Illinois", "6", -6:1, 5189689, 1148, 1, 0, 0);
+add (13079,"Crawford County", "GA", "Georgia", "3", -5:1, 10667, 1387, 1, 0, 0);
+add (13217,"Newton County", "GA", "Georgia", "3", -5:1, 57847, 1387, 1, 0, 0);
+add (17201,"Winnebago County", "IL", "Illinois", "6", -6:1, 267642, 1148, 1, 0, 0);
+add (27131,"Rice County", "MN", "Minnesota", "5", -6:1, 54106, 1148, 1, 0, 0);
+add (39137,"Putnam County", "OH", "Ohio", "4", -5:1, 35255, 1387, 1, 0, 0);
+add (19191,"Winneshiek County", "IA", "Iowa", "5", -6:1, 20934, 1148, 1, 0, 0);
+add (20207,"Woodson County", "KS", "Kansas", "6", -6:1, 3983, 1148, 1, 0, 0);
+add (02020,"Anchorage Borough", "AK", "Alaska", "9", -9:1, 254982, 1174, 0, 0, 1);
+add (28065,"Jefferson Davis County", "MS", "Missippi", "5", -6:1, 13860, 1148, 1, 0, 0);
+add (48329,"Midland County", "TX", "Texas", "7", -6:1, 119647, 1148, 1, 0, 0);
+add (19121,"Madison County", "IA", "Iowa", "5", -6:1, 13872, 1148, 1, 0, 0);
+add (08111,"San Juan County", "CO", "Colorado", "8", -7:1, 530, 4647, 1, 0, 0);
+add (37075,"Graham County", "NC", "North Carolina", "2", -5:1, 7647, 1387, 1, 0, 0);
+add (37043,"Clay County", "NC", "North Carolina", "2", -5:1, 8575, 1387, 1, 0, 0);
+add (06011,"Colusa County", "CA", "California", "9", -8:1, 18572, 3240, 0, 1, 0);
+add (37071,"Gaston County", "NC", "North Carolina", "2", -5:1, 184247, 1387, 1, 0, 0);
+add (56041,"Uinta County", "WY", "Wyoming", "8", -7:1, 20465, 4647, 1, 0, 0);
+add (45043,"Georgetown County", "SC", "South Carolina", "2", -5:1, 53727, 1387, 1, 0, 0);
+add (51197,"Wythe County", "VA", "Virginia", "2", -5:1, 26268, 1387, 1, 0, 0);
+add (17027,"Clinton County", "IL", "Illinois", "6", -6:1, 35591, 1148, 1, 0, 0);
+add (45071,"Newberry County", "SC", "South Carolina", "2", -5:1, 34462, 1387, 1, 0, 0);
+add (30013,"Cascade County", "MT", "Montana", "6", -7:1, 78983, 4647, 1, 0, 0);
+add (51163,"Rockbridge County", "VA", "Virginia", "2", -5:1, 19557, 1387, 1, 0, 0);
+add (27135,"Roseau County", "MN", "Minnesota", "5", -6:1, 16120, 1148, 1, 0, 0);
+add (48455,"Trinity County", "TX", "Texas", "7", -6:1, 12613, 1148, 1, 0, 0);
+add (27169,"Winona County", "MN", "Minnesota", "5", -6:1, 48080, 1148, 1, 0, 0);
+add (47065,"Hamilton County", "TN", "Tennesee", "3", -5:1, 294745, 1387, 1, 0, 0);
+add (51027,"Buchanan County", "VA", "Virginia", "2", -5:1, 28929, 1387, 1, 0, 0);
+add (48229,"Hudspeth County", "TX", "Texas", "7", -6:1, 3250, 1148, 1, 0, 0);
+add (26103,"Marquette County", "MI", "Michigan", "4", -5:1, 61565, 1387, 1, 0, 0);
+add (13141,"Hancock County", "GA", "Georgia", "3", -5:1, 9134, 1387, 1, 0, 0);
+add (48187,"Guadalupe County", "TX", "Texas", "7", -6:1, 80472, 1148, 1, 0, 0);
+add (46083,"Lincoln County", "SD", "South Dakota", "5", -7:1, 20411, 4647, 1, 0, 0);
+add (06097,"Sonoma County", "CA", "California", "9", -8:1, 433304, 3240, 0, 1, 0);
+add (12009,"Brevard County", "FL", "Florida", "3", -5:1, 466093, 1387, 1, 0, 0);
+add (42023,"Cameron County", "PA", "Pennsylvania", "1", -5:1, 5620, 1387, 1, 0, 0);
+add (47167,"Tipton County", "TN", "Tennesee", "3", -6:1, 47343, 1148, 1, 0, 0);
+add (48327,"Menard County", "TX", "Texas", "7", -6:1, 2336, 1148, 1, 0, 0);
+add (15009,"Maui County", "HI", "Hawaii", "9", -10:1, 120711, 6750, 0, 0, 1);
+add (55045,"Green County", "WI", "Wisconnsin", "5", -6:1, 33404, 1148, 1, 0, 0);
+add (30053,"Lincoln County", "MT", "Montana", "6", -7:1, 18696, 4647, 1, 0, 0);
+add (20091,"Johnson County", "KS", "Kansas", "6", -6:1, 429563, 1148, 1, 0, 0);
+add (39129,"Pickaway County", "OH", "Ohio", "4", -5:1, 53731, 1387, 1, 0, 0);
+add (19159,"Ringgold County", "IA", "Iowa", "5", -6:1, 5354, 1148, 1, 0, 0);
+add (22067,"Morehouse Parish", "LA", "Louisiana", "7", -6:1, 31477, 1148, 1, 0, 0);
+add (48087,"Collingsworth County", "TX", "Texas", "7", -6:1, 3287, 1148, 1, 0, 0);
+add (39055,"Geauga County", "OH", "Ohio", "4", -5:1, 88788, 1387, 1, 0, 0);
+add (16075,"Payette County", "ID", "Idaho", "8", -7:1, 20519, 4647, 1, 0, 0);
+add (48499,"Wood County", "TX", "Texas", "7", -6:1, 34321, 1148, 1, 0, 0);
+add (31011,"Boone County", "NE", "Nebraska", "6", -6:1, 6377, 1148, 1, 0, 0);
+add (39035,"Cuyahoga County", "OH", "Ohio", "4", -5:1, 1380696, 1387, 1, 0, 0);
+add (22055,"Lafayette Parish", "LA", "Louisiana", "7", -6:1, 186631, 1148, 1, 0, 0);
+add (39141,"Ross County", "OH", "Ohio", "4", -5:1, 75473, 1387, 1, 0, 0);
+add (02261,"Valdez-Cordova Census Area", "AK", "Alaska", "9", -9:1, 10279, 1174, 0, 0, 1);
+add (51730,"Petersburg city", "VA", "Virginia", "2", -5:1, 34724, 1387, 1, 0, 0);
+add (42063,"Indiana County", "PA", "Pennsylvania", "1", -5:1, 88567, 1387, 1, 0, 0);
+add (24029,"Kent County", "MD", "Maryland", "2", -5:1, 18925, 1387, 1, 0, 0);
+add (40107,"Okfuskee County", "OK", "Oklahoma", "7", -6:1, 11402, 1148, 1, 0, 0);
+add (28067,"Jones County", "MS", "Missippi", "5", -6:1, 63461, 1148, 1, 0, 0);
+add (41045,"Malheur County", "OR", "Oregon", "9", -8:1, 28542, 3240, 0, 1, 0);
+add (36081,"Queens County", "NY", "New York", "1", -5:1, 1998853, 1387, 1, 0, 0);
+add (16079,"Shoshone County", "ID", "Idaho", "8", -7:1, 13870, 4647, 1, 0, 0);
+add (08079,"Mineral County", "CO", "Colorado", "8", -7:1, 694, 4647, 1, 0, 0);
+add (21135,"Lewis County", "KY", "Kentucky", "4", -5:1, 13584, 1387, 1, 0, 0);
+add (55007,"Bayfield County", "WI", "Wisconnsin", "5", -6:1, 15151, 1148, 1, 0, 0);
+add (25021,"Norfolk County", "MA", "Massachusetts", "0", -5:1, 642705, 1387, 1, 0, 0);
+add (42081,"Lycoming County", "PA", "Pennsylvania", "1", -5:1, 117308, 1387, 1, 0, 0);
+add (12035,"Flagler County", "FL", "Florida", "3", -5:1, 47455, 1387, 1, 0, 0);
+add (34017,"Hudson County", "NJ", "New Jersey", "0", -5:1, 557159, 1387, 1, 0, 0);
+add (53045,"Mason County", "WA", "Washiington", "9", -8:1, 49867, 3240, 0, 1, 0);
+add (31163,"Sherman County", "NE", "Nebraska", "6", -7:1, 3432, 4647, 1, 0, 0);
+add (46089,"McPherson County", "SD", "South Dakota", "5", -7:1, 2738, 4647, 1, 0, 0);
+add (31007,"Banner County", "NE", "Nebraska", "6", -6:1, 878, 1148, 1, 0, 0);
+add (38029,"Emmons County", "ND", "North Dakota", "5", -6:1, 4311, 1148, 1, 0, 0);
+add (47181,"Wayne County", "TN", "Tennesee", "3", -6:1, 16495, 1148, 1, 0, 0);
+add (51051,"Dickenson County", "VA", "Virginia", "2", -5:1, 16894, 1387, 1, 0, 0);
+add (17143,"Peoria County", "IL", "Illinois", "6", -6:1, 181609, 1148, 1, 0, 0);
+add (50007,"Chittenden County", "VT", "Vermont", "0", -5:1, 142642, 1387, 1, 0, 0);
+add (21047,"Christian County", "KY", "Kentucky", "4", -6:1, 72493, 1148, 1, 0, 0);
+add (31143,"Polk County", "NE", "Nebraska", "6", -7:1, 5631, 4647, 1, 0, 0);
+add (35059,"Union County", "NM", "New Mexico", "8", -7:1, 3985, 4647, 1, 0, 0);
+add (53025,"Grant County", "WA", "Washiington", "9", -8:1, 70545, 3240, 0, 1, 0);
+add (20027,"Clay County", "KS", "Kansas", "6", -6:1, 9148, 1148, 1, 0, 0);
+add (46099,"Minnehaha County", "SD", "South Dakota", "5", -7:1, 143011, 4647, 1, 0, 0);
+add (31171,"Thomas County", "NE", "Nebraska", "6", -7:1, 797, 4647, 1, 0, 0);
+add (20167,"Russell County", "KS", "Kansas", "6", -6:1, 7558, 1148, 1, 0, 0);
+add (08063,"Kit Carson County", "CO", "Colorado", "8", -7:1, 7313, 4647, 1, 0, 0);
+add (37033,"Caswell County", "NC", "North Carolina", "2", -5:1, 22215, 1387, 1, 0, 0);
+add (55101,"Racine County", "WI", "Wisconnsin", "5", -6:1, 186119, 1148, 1, 0, 0);
+add (48463,"Uvalde County", "TX", "Texas", "7", -6:1, 25565, 1148, 1, 0, 0);
+add (22057,"Lafourche Parish", "LA", "Louisiana", "7", -6:1, 89324, 1148, 1, 0, 0);
+add (20201,"Washington County", "KS", "Kansas", "6", -6:1, 6490, 1148, 1, 0, 0);
+add (13253,"Seminole County", "GA", "Georgia", "3", -5:1, 9788, 1387, 1, 0, 0);
+add (22001,"Acadia Parish", "LA", "Louisiana", "7", -6:1, 57721, 1148, 1, 0, 0);
+add (39009,"Athens County", "OH", "Ohio", "4", -5:1, 61490, 1387, 1, 0, 0);
+add (21093,"Hardin County", "KY", "Kentucky", "4", -6:1, 91462, 1148, 1, 0, 0);
+add (42083,"McKean County", "PA", "Pennsylvania", "1", -5:1, 46500, 1387, 1, 0, 0);
+add (13169,"Jones County", "GA", "Georgia", "3", -5:1, 23020, 1387, 1, 0, 0);
+add (39099,"Mahoning County", "OH", "Ohio", "4", -5:1, 255165, 1387, 1, 0, 0);
+add (48093,"Comanche County", "TX", "Texas", "7", -6:1, 13568, 1148, 1, 0, 0);
+add (47057,"Grainger County", "TN", "Tennesee", "3", -5:1, 19829, 1387, 1, 0, 0);
+add (15003,"Honolulu County", "HI", "Hawaii", "9", -10:1, 872478, 6750, 0, 0, 1);
+add (13001,"Appling County", "GA", "Georgia", "3", -5:1, 16493, 1387, 1, 0, 0);
+add (30091,"Sheridan County", "MT", "Montana", "6", -7:1, 4269, 4647, 1, 0, 0);
+add (05143,"Washington County", "AR", "Arkansas", "7", -6:1, 138454, 1148, 1, 0, 0);
+add (08045,"Garfield County", "CO", "Colorado", "8", -7:1, 39301, 4647, 1, 0, 0);
+add (13157,"Jackson County", "GA", "Georgia", "3", -5:1, 37641, 1387, 1, 0, 0);
+add (29195,"Saline County", "MO", "Mosourri", "6", -6:1, 22703, 1148, 1, 0, 0);
+add (16067,"Minidoka County", "ID", "Idaho", "8", -7:1, 20207, 4647, 1, 0, 0);
+add (48199,"Hardin County", "TX", "Texas", "7", -6:1, 48758, 1148, 1, 0, 0);
+add (16021,"Boundary County", "ID", "Idaho", "8", -7:1, 9800, 4647, 1, 0, 0);
+add (21123,"Larue County", "KY", "Kentucky", "4", -5:1, 13058, 1387, 1, 0, 0);
+add (23031,"York County", "ME", "Maine", "0", -5:1, 175165, 1387, 1, 0, 0);
+add (27133,"Rock County", "MN", "Minnesota", "5", -6:1, 9743, 1148, 1, 0, 0);
+add (17119,"Madison County", "IL", "Illinois", "6", -6:1, 259351, 1148, 1, 0, 0);
+add (28123,"Scott County", "MS", "Missippi", "5", -6:1, 25001, 1148, 1, 0, 0);
+add (37143,"Perquimans County", "NC", "North Carolina", "2", -5:1, 11282, 1387, 1, 0, 0);
+add (13145,"Harris County", "GA", "Georgia", "3", -5:1, 22315, 1387, 1, 0, 0);
+add (49023,"Juab County", "UT", "Utah", "8", -7:1, 7572, 4647, 1, 0, 0);
+add (38087,"Slope County", "ND", "North Dakota", "5", -6:1, 865, 1148, 1, 0, 0);
+add (13175,"Laurens County", "GA", "Georgia", "3", -5:1, 43772, 1387, 1, 0, 0);
+add (49025,"Kane County", "UT", "Utah", "8", -7:1, 6200, 4647, 1, 0, 0);
+add (36055,"Monroe County", "NY", "New York", "1", -5:1, 716072, 1387, 1, 0, 0);
+add (26045,"Eaton County", "MI", "Michigan", "4", -5:1, 101090, 1387, 1, 0, 0);
+add (05097,"Montgomery County", "AR", "Arkansas", "7", -6:1, 8655, 1148, 1, 0, 0);
+add (12015,"Charlotte County", "FL", "Florida", "3", -5:1, 134899, 1387, 1, 0, 0);
+add (13049,"Charlton County", "GA", "Georgia", "3", -5:1, 9442, 1387, 1, 0, 0);
+add (20159,"Rice County", "KS", "Kansas", "6", -6:1, 10360, 1148, 1, 0, 0);
+add (48277,"Lamar County", "TX", "Texas", "7", -6:1, 46045, 1148, 1, 0, 0);
+add (29029,"Camden County", "MO", "Mosourri", "6", -6:1, 33952, 1148, 1, 0, 0);
+add (12067,"Lafayette County", "FL", "Florida", "3", -5:1, 6325, 1387, 1, 0, 0);
+add (29223,"Wayne County", "MO", "Mosourri", "6", -6:1, 13059, 1148, 1, 0, 0);
+add (48433,"Stonewall County", "TX", "Texas", "7", -6:1, 1783, 1148, 1, 0, 0);
+add (20099,"Labette County", "KS", "Kansas", "6", -6:1, 23030, 1148, 1, 0, 0);
+add (51199,"York County", "VA", "Virginia", "2", -5:1, 58789, 1387, 1, 0, 0);
+add (39149,"Shelby County", "OH", "Ohio", "4", -5:1, 47457, 1387, 1, 0, 0);
+add (22113,"Vermilion Parish", "LA", "Louisiana", "7", -6:1, 52090, 1148, 1, 0, 0);
+add (39093,"Lorain County", "OH", "Ohio", "4", -5:1, 282149, 1387, 1, 0, 0);
+add (53003,"Asotin County", "WA", "Washiington", "9", -8:1, 21264, 3240, 0, 1, 0);
+add (18149,"Starke County", "IN", "Indiana", "4", -5:1, 23968, 1387, 1, 0, 0);
+add (26041,"Delta County", "MI", "Michigan", "4", -5:1, 38947, 1387, 1, 0, 0);
+add (30005,"Blaine County", "MT", "Montana", "6", -7:1, 7148, 4647, 1, 0, 0);
+add (05027,"Columbia County", "AR", "Arkansas", "7", -6:1, 25060, 1148, 1, 0, 0);
+add (08011,"Bent County", "CO", "Colorado", "8", -7:1, 5497, 4647, 1, 0, 0);
+add (51119,"Middlesex County", "VA", "Virginia", "2", -5:1, 9630, 1387, 1, 0, 0);
+add (48471,"Walker County", "TX", "Texas", "7", -6:1, 54972, 1148, 1, 0, 0);
+add (12063,"Jackson County", "FL", "Florida", "3", -5:1, 45660, 1387, 1, 0, 0);
+add (31101,"Keith County", "NE", "Nebraska", "6", -7:1, 8665, 4647, 1, 0, 0);
+add (21035,"Calloway County", "KY", "Kentucky", "4", -6:1, 33478, 1148, 1, 0, 0);
+add (28125,"Sharkey County", "MS", "Missippi", "5", -6:1, 6650, 1148, 1, 0, 0);
+add (05127,"Scott County", "AR", "Arkansas", "7", -6:1, 10686, 1148, 1, 0, 0);
+add (08093,"Park County", "CO", "Colorado", "8", -7:1, 13399, 4647, 1, 0, 0);
+add (27115,"Pine County", "MN", "Minnesota", "5", -6:1, 23916, 1148, 1, 0, 0);
+add (53069,"Wahkiakum County", "WA", "Washiington", "9", -8:1, 3857, 3240, 0, 1, 0);
+add (02180,"Nome Census Area", "AK", "Alaska", "9", -9:1, 9016, 1174, 0, 0, 1);
+add (21205,"Rowan County", "KY", "Kentucky", "4", -5:1, 22196, 1387, 1, 0, 0);
+add (37057,"Davidson County", "NC", "North Carolina", "2", -5:1, 141178, 1387, 1, 0, 0);
+add (37013,"Beaufort County", "NC", "North Carolina", "2", -5:1, 44531, 1387, 1, 0, 0);
+add (50005,"Caledonia County", "VT", "Vermont", "0", -5:1, 28529, 1387, 1, 0, 0);
+add (26043,"Dickinson County", "MI", "Michigan", "4", -5:1, 27074, 1387, 1, 0, 0);
+add (06015,"Del Norte County", "CA", "California", "9", -8:1, 27000, 3240, 0, 1, 0);
+add (55107,"Rusk County", "WI", "Wisconnsin", "5", -6:1, 15252, 1148, 1, 0, 0);
+add (22061,"Lincoln Parish", "LA", "Louisiana", "7", -6:1, 41560, 1148, 1, 0, 0);
+add (48117,"Deaf Smith County", "TX", "Texas", "7", -6:1, 19061, 1148, 1, 0, 0);
+add (27079,"Le Sueur County", "MN", "Minnesota", "5", -6:1, 25320, 1148, 1, 0, 0);
+add (39033,"Crawford County", "OH", "Ohio", "4", -5:1, 47217, 1387, 1, 0, 0);
+add (37003,"Alexander County", "NC", "North Carolina", "2", -5:1, 31280, 1387, 1, 0, 0);
+add (21011,"Bath County", "KY", "Kentucky", "4", -6:1, 10570, 1148, 1, 0, 0);
+add (08005,"Arapahoe County", "CO", "Colorado", "8", -7:1, 473168, 4647, 1, 0, 0);
+add (51775,"Salem city", "VA", "Virginia", "2", -5:1, 24679, 1387, 1, 0, 0);
+add (36061,"New York County", "NY", "New York", "1", -5:1, 1550649, 1387, 1, 0, 0);
+add (26001,"Alcona County", "MI", "Michigan", "4", -5:1, 11108, 1387, 1, 0, 0);
+add (12041,"Gilchrist County", "FL", "Florida", "3", -5:1, 13791, 1387, 1, 0, 0);
+add (33015,"Rockingham County", "NH", "New Hampshire", "0", -5:1, 271152, 1387, 1, 0, 0);
+add (15007,"Kauai County", "HI", "Hawaii", "9", -10:1, 56603, 6750, 0, 0, 1);
+add (47163,"Sullivan County", "TN", "Tennesee", "3", -6:1, 150617, 1148, 1, 0, 0);
+add (51191,"Washington County", "VA", "Virginia", "2", -5:1, 49168, 1387, 1, 0, 0);
+add (55117,"Sheboygan County", "WI", "Wisconnsin", "5", -6:1, 110170, 1148, 1, 0, 0);
+add (12051,"Hendry County", "FL", "Florida", "3", -5:1, 29357, 1387, 1, 0, 0);
+add (51510,"Alexandria city", "VA", "Virginia", "2", -5:1, 118300, 1387, 1, 0, 0);
+add (21045,"Casey County", "KY", "Kentucky", "4", -6:1, 14773, 1148, 1, 0, 0);
+add (31125,"Nance County", "NE", "Nebraska", "6", -7:1, 4099, 4647, 1, 0, 0);
+add (27155,"Traverse County", "MN", "Minnesota", "5", -6:1, 4248, 1148, 1, 0, 0);
+add (34005,"Burlington County", "NJ", "New Jersey", "0", -5:1, 420323, 1387, 1, 0, 0);
+add (12005,"Bay County", "FL", "Florida", "3", -5:1, 146999, 1387, 1, 0, 0);
+add (47017,"Carroll County", "TN", "Tennesee", "3", -5:1, 29115, 1387, 1, 0, 0);
+add (19035,"Cherokee County", "IA", "Iowa", "5", -6:1, 13191, 1148, 1, 0, 0);
+add (13243,"Randolph County", "GA", "Georgia", "3", -5:1, 7881, 1387, 1, 0, 0);
+add (05135,"Sharp County", "AR", "Arkansas", "7", -6:1, 16993, 1148, 1, 0, 0);
+add (27017,"Carlton County", "MN", "Minnesota", "5", -6:1, 30817, 1148, 1, 0, 0);
+add (48435,"Sutton County", "TX", "Texas", "7", -6:1, 4463, 1148, 1, 0, 0);
+add (33009,"Grafton County", "NH", "New Hampshire", "0", -5:1, 78277, 1387, 1, 0, 0);
+add (39017,"Butler County", "OH", "Ohio", "4", -5:1, 330428, 1387, 1, 0, 0);
+add (36021,"Columbia County", "NY", "New York", "1", -5:1, 63221, 1387, 1, 0, 0);
+add (41061,"Union County", "OR", "Oregon", "9", -8:1, 24829, 3240, 0, 1, 0);
+add (13059,"Clarke County", "GA", "Georgia", "3", -5:1, 90630, 1387, 1, 0, 0);
+add (48243,"Jeff Davis County", "TX", "Texas", "7", -6:1, 2356, 1148, 1, 0, 0);
+add (55055,"Jefferson County", "WI", "Wisconnsin", "5", -6:1, 73550, 1148, 1, 0, 0);
+add (36003,"Allegany County", "NY", "New York", "1", -5:1, 50997, 1387, 1, 0, 0);
+add (51159,"Richmond County", "VA", "Virginia", "2", -5:1, 8665, 1387, 1, 0, 0);
+add (38043,"Kidder County", "ND", "North Dakota", "5", -6:1, 2877, 1148, 1, 0, 0);
+add (48215,"Hidalgo County", "TX", "Texas", "7", -6:1, 522204, 1148, 1, 0, 0);
+add (27073,"Lac qui Parle County", "MN", "Minnesota", "5", -6:1, 8022, 1148, 1, 0, 0);
+add (55015,"Calumet County", "WI", "Wisconnsin", "5", -6:1, 38377, 1148, 1, 0, 0);
+add (48119,"Delta County", "TX", "Texas", "7", -6:1, 4945, 1148, 1, 0, 0);
+add (13095,"Dougherty County", "GA", "Georgia", "3", -5:1, 95309, 1387, 1, 0, 0);
+add (19165,"Shelby County", "IA", "Iowa", "5", -6:1, 12978, 1148, 1, 0, 0);
+add (53017,"Douglas County", "WA", "Washiington", "9", -8:1, 33631, 3240, 0, 1, 0);
+add (19089,"Howard County", "IA", "Iowa", "5", -6:1, 9689, 1148, 1, 0, 0);
+add (01073,"Jefferson County", "AL", "Alabama", "3", -6:1, 659524, 1148, 1, 0, 0);
+add (48047,"Brooks County", "TX", "Texas", "7", -6:1, 8501, 1148, 1, 0, 0);
+add (13179,"Liberty County", "GA", "Georgia", "3", -5:1, 59162, 1387, 1, 0, 0);
+add (20055,"Finney County", "KS", "Kansas", "6", -6:1, 36514, 1148, 1, 0, 0);
+add (27161,"Waseca County", "MN", "Minnesota", "5", -6:1, 18178, 1148, 1, 0, 0);
+add (19187,"Webster County", "IA", "Iowa", "5", -6:1, 38705, 1148, 1, 0, 0);
+add (28005,"Amite County", "MS", "Missippi", "5", -6:1, 13752, 1148, 1, 0, 0);
+add (35015,"Eddy County", "NM", "New Mexico", "8", -7:1, 53543, 4647, 1, 0, 0);
+add (48415,"Scurry County", "TX", "Texas", "7", -6:1, 18073, 1148, 1, 0, 0);
+add (20035,"Cowley County", "KS", "Kansas", "6", -6:1, 36319, 1148, 1, 0, 0);
+add (51093,"Isle of Wight County", "VA", "Virginia", "2", -5:1, 29252, 1387, 1, 0, 0);
+add (29143,"New Madrid County", "MO", "Mosourri", "6", -6:1, 20370, 1148, 1, 0, 0);
+add (48013,"Atascosa County", "TX", "Texas", "7", -6:1, 36471, 1148, 1, 0, 0);
+add (01069,"Houston County", "AL", "Alabama", "3", -6:1, 85877, 1148, 1, 0, 0);
+add (19151,"Pocahontas County", "IA", "Iowa", "5", -6:1, 8777, 1148, 1, 0, 0);
+add (46027,"Clay County", "SD", "South Dakota", "5", -6:1, 15167, 1148, 1, 0, 0);
+add (06107,"Tulare County", "CA", "California", "9", -8:1, 355240, 3240, 0, 1, 0);
+add (01079,"Lawrence County", "AL", "Alabama", "3", -6:1, 33447, 1148, 1, 0, 0);
+add (48377,"Presidio County", "TX", "Texas", "7", -6:1, 8636, 1148, 1, 0, 0);
+add (40115,"Ottawa County", "OK", "Oklahoma", "7", -6:1, 30944, 1148, 1, 0, 0);
+add (18091,"La Porte County", "IN", "Indiana", "4", -5:1, 109461, 1387, 1, 0, 0);
+add (12057,"Hillsborough County", "FL", "Florida", "3", -5:1, 925277, 1387, 1, 0, 0);
+add (38085,"Sioux County", "ND", "North Dakota", "5", -6:1, 4192, 1148, 1, 0, 0);
+add (42133,"York County", "PA", "Pennsylvania", "1", -5:1, 373255, 1387, 1, 0, 0);
+add (08059,"Jefferson County", "CO", "Colorado", "8", -7:1, 501591, 4647, 1, 0, 0);
+add (13209,"Montgomery County", "GA", "Georgia", "3", -5:1, 7741, 1387, 1, 0, 0);
+add (35041,"Roosevelt County", "NM", "New Mexico", "8", -7:1, 18185, 4647, 1, 0, 0);
+add (55039,"Fond du Lac County", "WI", "Wisconnsin", "5", -6:1, 94690, 1148, 1, 0, 0);
+add (13309,"Wheeler County", "GA", "Georgia", "3", -5:1, 4875, 1387, 1, 0, 0);
+add (13299,"Ware County", "GA", "Georgia", "3", -5:1, 35364, 1387, 1, 0, 0);
+add (27069,"Kittson County", "MN", "Minnesota", "5", -6:1, 5322, 1148, 1, 0, 0);
+add (06055,"Napa County", "CA", "California", "9", -8:1, 119288, 3240, 0, 1, 0);
+add (54035,"Jackson County", "WV", "West Virginia", "2", -5:1, 27972, 1387, 1, 0, 0);
+add (29033,"Carroll County", "MO", "Mosourri", "6", -6:1, 10217, 1148, 1, 0, 0);
+add (35017,"Grant County", "NM", "New Mexico", "8", -7:1, 31612, 4647, 1, 0, 0);
+add (48021,"Bastrop County", "TX", "Texas", "7", -6:1, 50390, 1148, 1, 0, 0);
+add (17003,"Alexander County", "IL", "Illinois", "6", -6:1, 9745, 1148, 1, 0, 0);
+add (21071,"Floyd County", "KY", "Kentucky", "4", -6:1, 43340, 1148, 1, 0, 0);
+add (20137,"Norton County", "KS", "Kansas", "6", -6:1, 5752, 1148, 1, 0, 0);
+add (48447,"Throckmorton County", "TX", "Texas", "7", -6:1, 1727, 1148, 1, 0, 0);
+add (16007,"Bear Lake County", "ID", "Idaho", "8", -7:1, 6539, 4647, 1, 0, 0);
+add (39079,"Jackson County", "OH", "Ohio", "4", -5:1, 32563, 1387, 1, 0, 0);
+add (06093,"Siskiyou County", "CA", "California", "9", -8:1, 44044, 3240, 0, 1, 0);
+add (36059,"Nassau County", "NY", "New York", "1", -5:1, 1302220, 1387, 1, 0, 0);
+add (36097,"Schuyler County", "NY", "New York", "1", -5:1, 19125, 1387, 1, 0, 0);
+add (31057,"Dundy County", "NE", "Nebraska", "6", -6:1, 2302, 1148, 1, 0, 0);
+add (37147,"Pitt County", "NC", "North Carolina", "2", -5:1, 126630, 1387, 1, 0, 0);
+add (51520,"Bristol city", "VA", "Virginia", "2", -5:1, 17486, 1387, 1, 0, 0);
+add (54087,"Roane County", "WV", "West Virginia", "2", -5:1, 15342, 1387, 1, 0, 0);
+add (54103,"Wetzel County", "WV", "West Virginia", "2", -5:1, 18256, 1387, 1, 0, 0);
+add (05147,"Woodruff County", "AR", "Arkansas", "7", -6:1, 8888, 1148, 1, 0, 0);
+add (29119,"McDonald County", "MO", "Mosourri", "6", -6:1, 19887, 1148, 1, 0, 0);
+add (40135,"Sequoyah County", "OK", "Oklahoma", "7", -6:1, 37531, 1148, 1, 0, 0);
+add (13245,"Richmond County", "GA", "Georgia", "3", -5:1, 191329, 1387, 1, 0, 0);
+add (26027,"Cass County", "MI", "Michigan", "4", -5:1, 49693, 1387, 1, 0, 0);
+add (46077,"Kingsbury County", "SD", "South Dakota", "5", -7:1, 5712, 4647, 1, 0, 0);
+add (30001,"Beaverhead County", "MT", "Montana", "6", -7:1, 8867, 4647, 1, 0, 0);
+add (06041,"Marin County", "CA", "California", "9", -8:1, 236770, 3240, 0, 1, 0);
+add (48219,"Hockley County", "TX", "Texas", "7", -6:1, 23788, 1148, 1, 0, 0);
+add (34001,"Atlantic County", "NJ", "New Jersey", "0", -5:1, 238047, 1387, 1, 0, 0);
+add (48029,"Bexar County", "TX", "Texas", "7", -6:1, 1353052, 1148, 1, 0, 0);
+add (46101,"Moody County", "SD", "South Dakota", "5", -7:1, 6505, 4647, 1, 0, 0);
+add (20153,"Rawlins County", "KS", "Kansas", "6", -6:1, 3125, 1148, 1, 0, 0);
+add (05005,"Baxter County", "AR", "Arkansas", "7", -6:1, 36402, 1148, 1, 0, 0);
+add (32021,"Mineral County", "NV", "Nevada", "8", -8:1, 5463, 3240, 0, 1, 0);
+add (13275,"Thomas County", "GA", "Georgia", "3", -5:1, 42953, 1387, 1, 0, 0);
+add (20123,"Mitchell County", "KS", "Kansas", "6", -6:1, 6936, 1148, 1, 0, 0);
+add (29097,"Jasper County", "MO", "Mosourri", "6", -6:1, 99532, 1148, 1, 0, 0);
+add (45081,"Saluda County", "SC", "South Carolina", "2", -5:1, 17025, 1387, 1, 0, 0);
+add (17101,"Lawrence County", "IL", "Illinois", "6", -6:1, 15343, 1148, 1, 0, 0);
+add (26087,"Lapeer County", "MI", "Michigan", "4", -5:1, 88270, 1387, 1, 0, 0);
+add (32017,"Lincoln County", "NV", "Nevada", "8", -8:1, 4220, 3240, 0, 1, 0);
+add (46003,"Aurora County", "SD", "South Dakota", "5", -6:1, 2975, 1148, 1, 0, 0);
+add (21055,"Crittenden County", "KY", "Kentucky", "4", -6:1, 9574, 1148, 1, 0, 0);
+add (13229,"Pierce County", "GA", "Georgia", "3", -5:1, 15794, 1387, 1, 0, 0);
+add (48115,"Dawson County", "TX", "Texas", "7", -6:1, 14700, 1148, 1, 0, 0);
+add (37085,"Harnett County", "NC", "North Carolina", "2", -5:1, 82391, 1387, 1, 0, 0);
+add (39167,"Washington County", "OH", "Ohio", "4", -5:1, 63413, 1387, 1, 0, 0);
+add (47189,"Wilson County", "TN", "Tennesee", "3", -5:1, 83923, 1387, 1, 0, 0);
+add (05053,"Grant County", "AR", "Arkansas", "7", -6:1, 15897, 1148, 1, 0, 0);
+add (46067,"Hutchinson County", "SD", "South Dakota", "5", -7:1, 8045, 4647, 1, 0, 0);
+add (48351,"Newton County", "TX", "Texas", "7", -6:1, 14243, 1148, 1, 0, 0);
+add (48045,"Briscoe County", "TX", "Texas", "7", -6:1, 1888, 1148, 1, 0, 0);
+add (37019,"Brunswick County", "NC", "North Carolina", "2", -5:1, 68416, 1387, 1, 0, 0);
+add (13313,"Whitfield County", "GA", "Georgia", "3", -5:1, 82039, 1387, 1, 0, 0);
+add (54003,"Berkeley County", "WV", "West Virginia", "2", -5:1, 70970, 1387, 1, 0, 0);
+add (13291,"Union County", "GA", "Georgia", "3", -5:1, 16519, 1387, 1, 0, 0);
+add (36047,"Kings County", "NY", "New York", "1", -5:1, 2267942, 1387, 1, 0, 0);
+add (42127,"Wayne County", "PA", "Pennsylvania", "1", -5:1, 45226, 1387, 1, 0, 0);
+add (31145,"Red Willow County", "NE", "Nebraska", "6", -7:1, 11255, 4647, 1, 0, 0);
+add (28061,"Jasper County", "MS", "Missippi", "5", -6:1, 17672, 1148, 1, 0, 0);
+add (08119,"Teller County", "CO", "Colorado", "8", -7:1, 20606, 4647, 1, 0, 0);
+add (19085,"Harrison County", "IA", "Iowa", "5", -6:1, 15364, 1148, 1, 0, 0);
+add (19137,"Montgomery County", "IA", "Iowa", "5", -6:1, 11910, 1148, 1, 0, 0);
+add (41005,"Clackamas County", "OR", "Oregon", "9", -8:1, 334732, 3240, 0, 1, 0);
+add (42011,"Berks County", "PA", "Pennsylvania", "1", -5:1, 355956, 1387, 1, 0, 0);
+add (26009,"Antrim County", "MI", "Michigan", "4", -5:1, 21522, 1387, 1, 0, 0);
+add (08013,"Boulder County", "CO", "Colorado", "8", -7:1, 267274, 4647, 1, 0, 0);
+add (26151,"Sanilac County", "MI", "Michigan", "4", -5:1, 42975, 1387, 1, 0, 0);
+add (30031,"Gallatin County", "MT", "Montana", "6", -7:1, 62545, 4647, 1, 0, 0);
+add (48009,"Archer County", "TX", "Texas", "7", -6:1, 8333, 1148, 1, 0, 0);
+add (08065,"Lake County", "CO", "Colorado", "8", -7:1, 6391, 4647, 1, 0, 0);
+add (47031,"Coffee County", "TN", "Tennesee", "3", -5:1, 45767, 1387, 1, 0, 0);
+add (30087,"Rosebud County", "MT", "Montana", "6", -7:1, 10050, 4647, 1, 0, 0);
+add (40053,"Grant County", "OK", "Oklahoma", "7", -6:1, 5338, 1148, 1, 0, 0);
+add (38083,"Sheridan County", "ND", "North Dakota", "5", -6:1, 1694, 1148, 1, 0, 0);
+add (21095,"Harlan County", "KY", "Kentucky", "4", -6:1, 34950, 1148, 1, 0, 0);
+add (20029,"Cloud County", "KS", "Kansas", "6", -6:1, 10027, 1148, 1, 0, 0);
+add (55035,"Eau Claire County", "WI", "Wisconnsin", "5", -6:1, 89287, 1148, 1, 0, 0);
+add (21111,"Jefferson County", "KY", "Kentucky", "4", -6:1, 672104, 1148, 1, 0, 0);
+add (36121,"Wyoming County", "NY", "New York", "1", -5:1, 44049, 1387, 1, 0, 0);
+add (24047,"Worcester County", "MD", "Maryland", "2", -5:1, 42789, 1387, 1, 0, 0);
+add (20209,"Wyandotte County", "KS", "Kansas", "6", -6:1, 152355, 1148, 1, 0, 0);
+add (30103,"Treasure County", "MT", "Montana", "6", -7:1, 870, 4647, 1, 0, 0);
+add (01019,"Cherokee County", "AL", "Alabama", "3", -6:1, 21833, 1148, 1, 0, 0);
+add (20197,"Wabaunsee County", "KS", "Kansas", "6", -6:1, 6651, 1148, 1, 0, 0);
+add (56045,"Weston County", "WY", "Wyoming", "8", -7:1, 6472, 4647, 1, 0, 0);
+add (47173,"Union County", "TN", "Tennesee", "3", -6:1, 16260, 1148, 1, 0, 0);
+add (12101,"Pasco County", "FL", "Florida", "3", -5:1, 325824, 1387, 1, 0, 0);
+add (28081,"Lee County", "MS", "Missippi", "5", -6:1, 74637, 1148, 1, 0, 0);
+add (29047,"Clay County", "MO", "Mosourri", "6", -6:1, 176206, 1148, 1, 0, 0);
+add (30111,"Yellowstone County", "MT", "Montana", "6", -7:1, 126158, 4647, 1, 0, 0);
+add (47139,"Polk County", "TN", "Tennesee", "3", -6:1, 14883, 1148, 1, 0, 0);
+add (37109,"Lincoln County", "NC", "North Carolina", "2", -5:1, 58093, 1387, 1, 0, 0);
+add (27129,"Renville County", "MN", "Minnesota", "5", -6:1, 16923, 1148, 1, 0, 0);
+add (54005,"Boone County", "WV", "West Virginia", "2", -5:1, 26118, 1387, 1, 0, 0);
+add (42033,"Clearfield County", "PA", "Pennsylvania", "1", -5:1, 80752, 1387, 1, 0, 0);
+add (32013,"Humboldt County", "NV", "Nevada", "8", -8:1, 18145, 3240, 0, 1, 0);
+add (35023,"Hidalgo County", "NM", "New Mexico", "8", -7:1, 6210, 4647, 1, 0, 0);
+add (39157,"Tuscarawas County", "OH", "Ohio", "4", -5:1, 88608, 1387, 1, 0, 0);
+add (20173,"Sedgwick County", "KS", "Kansas", "6", -6:1, 448050, 1148, 1, 0, 0);
+add (13295,"Walker County", "GA", "Georgia", "3", -5:1, 63082, 1387, 1, 0, 0);
+add (49043,"Summit County", "UT", "Utah", "8", -7:1, 26746, 4647, 1, 0, 0);
+add (53065,"Stevens County", "WA", "Washiington", "9", -8:1, 39464, 3240, 0, 1, 0);
+add (49007,"Carbon County", "UT", "Utah", "8", -7:1, 20966, 4647, 1, 0, 0);
+add (16063,"Lincoln County", "ID", "Idaho", "8", -7:1, 3792, 4647, 1, 0, 0);
+add (20037,"Crawford County", "KS", "Kansas", "6", -6:1, 36360, 1148, 1, 0, 0);
+add (37025,"Cabarrus County", "NC", "North Carolina", "2", -5:1, 120057, 1387, 1, 0, 0);
+add (38069,"Pierce County", "ND", "North Dakota", "5", -6:1, 4623, 1148, 1, 0, 0);
+add (27097,"Morrison County", "MN", "Minnesota", "5", -6:1, 30543, 1148, 1, 0, 0);
+add (51840,"Winchester city", "VA", "Virginia", "2", -5:1, 22659, 1387, 1, 0, 0);
+add (54071,"Pendleton County", "WV", "West Virginia", "2", -5:1, 8062, 1387, 1, 0, 0);
+add (05033,"Crawford County", "AR", "Arkansas", "7", -6:1, 50334, 1148, 1, 0, 0);
+add (39073,"Hocking County", "OH", "Ohio", "4", -5:1, 29004, 1387, 1, 0, 0);
+add (08031,"Denver County", "CO", "Colorado", "8", -7:1, 499055, 4647, 1, 0, 0);
+add (48247,"Jim Hogg County", "TX", "Texas", "7", -6:1, 5007, 1148, 1, 0, 0);
+add (13143,"Haralson County", "GA", "Georgia", "3", -5:1, 24653, 1387, 1, 0, 0);
+add (26015,"Barry County", "MI", "Michigan", "4", -5:1, 54535, 1387, 1, 0, 0);
+add (06113,"Yolo County", "CA", "California", "9", -8:1, 153849, 3240, 0, 1, 0);
+add (19039,"Clarke County", "IA", "Iowa", "5", -6:1, 8362, 1148, 1, 0, 0);
+add (17123,"Marshall County", "IL", "Illinois", "6", -6:1, 12882, 1148, 1, 0, 0);
+add (29095,"Jackson County", "MO", "Mosourri", "6", -6:1, 654986, 1148, 1, 0, 0);
+add (48227,"Howard County", "TX", "Texas", "7", -6:1, 32051, 1148, 1, 0, 0);
+add (01103,"Morgan County", "AL", "Alabama", "3", -6:1, 109369, 1148, 1, 0, 0);
+add (02050,"Bethel Census Area", "AK", "Alaska", "9", -9:1, 15967, 1174, 0, 0, 1);
+add (55073,"Marathon County", "WI", "Wisconnsin", "5", -6:1, 123223, 1148, 1, 0, 0);
+add (51560,"Clifton Forge city", "VA", "Virginia", "2", -5:1, 4342, 1387, 1, 0, 0);
+add (13047,"Catoosa County", "GA", "Georgia", "3", -5:1, 50547, 1387, 1, 0, 0);
+add (50023,"Washington County", "VT", "Vermont", "0", -5:1, 56308, 1387, 1, 0, 0);
+add (56037,"Sweetwater County", "WY", "Wyoming", "8", -7:1, 39780, 4647, 1, 0, 0);
+add (21175,"Morgan County", "KY", "Kentucky", "4", -5:1, 13559, 1387, 1, 0, 0);
+add (48505,"Zapata County", "TX", "Texas", "7", -6:1, 11491, 1148, 1, 0, 0);
+add (04005,"Coconino County", "AZ", "Arizona", "8", -7:1, 114171, 4647, 1, 0, 0);
+add (36037,"Genesee County", "NY", "New York", "1", -5:1, 60654, 1387, 1, 0, 0);
+add (26007,"Alpena County", "MI", "Michigan", "4", -5:1, 30405, 1387, 1, 0, 0);
+add (17063,"Grundy County", "IL", "Illinois", "6", -6:1, 36686, 1148, 1, 0, 0);
+add (18049,"Fulton County", "IN", "Indiana", "4", -5:1, 20620, 1387, 1, 0, 0);
+add (13205,"Mitchell County", "GA", "Georgia", "3", -5:1, 21176, 1387, 1, 0, 0);
+add (48273,"Kleberg County", "TX", "Texas", "7", -6:1, 30163, 1148, 1, 0, 0);
+add (38077,"Richland County", "ND", "North Dakota", "5", -6:1, 18272, 1148, 1, 0, 0);
+add (42029,"Chester County", "PA", "Pennsylvania", "1", -5:1, 421686, 1387, 1, 0, 0);
+add (13231,"Pike County", "GA", "Georgia", "3", -5:1, 12645, 1387, 1, 0, 0);
+add (53071,"Walla Walla County", "WA", "Washiington", "9", -8:1, 53702, 3240, 0, 1, 0);
+add (21061,"Edmonson County", "KY", "Kentucky", "4", -6:1, 11353, 1148, 1, 0, 0);
+add (34009,"Cape May County", "NJ", "New Jersey", "0", -5:1, 98069, 1387, 1, 0, 0);
+add (40027,"Cleveland County", "OK", "Oklahoma", "7", -6:1, 201110, 1148, 1, 0, 0);
+add (47027,"Clay County", "TN", "Tennesee", "3", -5:1, 7255, 1387, 1, 0, 0);
+add (06049,"Modoc County", "CA", "California", "9", -8:1, 9398, 3240, 0, 1, 0);
+add (45023,"Chester County", "SC", "South Carolina", "2", -5:1, 34401, 1387, 1, 0, 0);
+add (42113,"Sullivan County", "PA", "Pennsylvania", "1", -5:1, 6107, 1387, 1, 0, 0);
+add (54105,"Wirt County", "WV", "West Virginia", "2", -5:1, 5669, 1387, 1, 0, 0);
+add (06007,"Butte County", "CA", "California", "9", -8:1, 194597, 3240, 0, 1, 0);
+add (16037,"Custer County", "ID", "Idaho", "8", -7:1, 4107, 4647, 1, 0, 0);
+add (13219,"Oconee County", "GA", "Georgia", "3", -5:1, 23737, 1387, 1, 0, 0);
+add (54057,"Mineral County", "WV", "West Virginia", "2", -5:1, 26737, 1387, 1, 0, 0);
+add (26049,"Genesee County", "MI", "Michigan", "4", -5:1, 436084, 1387, 1, 0, 0);
+add (13127,"Glynn County", "GA", "Georgia", "3", -5:1, 67320, 1387, 1, 0, 0);
+add (29025,"Caldwell County", "MO", "Mosourri", "6", -6:1, 8838, 1148, 1, 0, 0);
+add (13105,"Elbert County", "GA", "Georgia", "3", -5:1, 19335, 1387, 1, 0, 0);
+add (42121,"Venango County", "PA", "Pennsylvania", "1", -5:1, 57844, 1387, 1, 0, 0);
+add (28003,"Alcorn County", "MS", "Missippi", "5", -6:1, 32716, 1148, 1, 0, 0);
+add (55051,"Iron County", "WI", "Wisconnsin", "5", -6:1, 6350, 1148, 1, 0, 0);
+add (51115,"Mathews County", "VA", "Virginia", "2", -5:1, 9073, 1387, 1, 0, 0);
+add (27065,"Kanabec County", "MN", "Minnesota", "5", -6:1, 14173, 1148, 1, 0, 0);
+add (20149,"Pottawatomie County", "KS", "Kansas", "6", -6:1, 18691, 1148, 1, 0, 0);
+add (25019,"Nantucket County", "MA", "Massachusetts", "0", -5:1, 7844, 1387, 1, 0, 0);
+add (19117,"Lucas County", "IA", "Iowa", "5", -6:1, 9152, 1148, 1, 0, 0);
+add (38015,"Burleigh County", "ND", "North Dakota", "5", -6:1, 66867, 1148, 1, 0, 0);
+add (41041,"Lincoln County", "OR", "Oregon", "9", -8:1, 45368, 3240, 0, 1, 0);
+add (50013,"Grand Isle County", "VT", "Vermont", "0", -5:1, 6236, 1387, 1, 0, 0);
+add (47055,"Giles County", "TN", "Tennesee", "3", -5:1, 28925, 1387, 1, 0, 0);
+add (01007,"Bibb County", "AL", "Alabama", "3", -6:1, 18926, 1148, 1, 0, 0);
+add (51143,"Pittsylvania County", "VA", "Virginia", "2", -5:1, 57384, 1387, 1, 0, 0);
+add (51061,"Fauquier County", "VA", "Virginia", "2", -5:1, 54109, 1387, 1, 0, 0);
+add (48069,"Castro County", "TX", "Texas", "7", -6:1, 8357, 1148, 1, 0, 0);
+add (39071,"Highland County", "OH", "Ohio", "4", -5:1, 40364, 1387, 1, 0, 0);
+add (02185,"North Slope Borough", "AK", "Alaska", "9", -9:1, 7152, 1174, 0, 0, 1);
+add (56015,"Goshen County", "WY", "Wyoming", "8", -7:1, 12886, 4647, 1, 0, 0);
+add (17165,"Saline County", "IL", "Illinois", "6", -6:1, 26149, 1148, 1, 0, 0);
+add (27167,"Wilkin County", "MN", "Minnesota", "5", -6:1, 7312, 1148, 1, 0, 0);
+add (28009,"Benton County", "MS", "Missippi", "5", -6:1, 8140, 1148, 1, 0, 0);
+add (28013,"Calhoun County", "MS", "Missippi", "5", -6:1, 14822, 1148, 1, 0, 0);
+add (12107,"Putnam County", "FL", "Florida", "3", -5:1, 70419, 1387, 1, 0, 0);
+add (31041,"Custer County", "NE", "Nebraska", "6", -6:1, 12026, 1148, 1, 0, 0);
+add (17099,"La Salle County", "IL", "Illinois", "6", -6:1, 110189, 1148, 1, 0, 0);
+add (47175,"Van Buren County", "TN", "Tennesee", "3", -6:1, 5071, 1148, 1, 0, 0);
+add (13065,"Clinch County", "GA", "Georgia", "3", -5:1, 6660, 1387, 1, 0, 0);
+add (17111,"McHenry County", "IL", "Illinois", "6", -6:1, 240945, 1148, 1, 0, 0);
+add (22115,"Vernon Parish", "LA", "Louisiana", "7", -6:1, 51570, 1148, 1, 0, 0);
+add (48349,"Navarro County", "TX", "Texas", "7", -6:1, 41738, 1148, 1, 0, 0);
+add (17115,"Macon County", "IL", "Illinois", "6", -6:1, 113772, 1148, 1, 0, 0);
+add (51003,"Albemarle County", "VA", "Virginia", "2", -5:1, 78401, 1387, 1, 0, 0);
+add (01087,"Macon County", "AL", "Alabama", "3", -6:1, 22951, 1148, 1, 0, 0);
+add (54007,"Braxton County", "WV", "West Virginia", "2", -5:1, 13185, 1387, 1, 0, 0);
+add (39113,"Montgomery County", "OH", "Ohio", "4", -5:1, 558427, 1387, 1, 0, 0);
+add (12053,"Hernando County", "FL", "Florida", "3", -5:1, 127227, 1387, 1, 0, 0);
+add (37189,"Watauga County", "NC", "North Carolina", "2", -5:1, 40965, 1387, 1, 0, 0);
+add (40009,"Beckham County", "OK", "Oklahoma", "7", -6:1, 19584, 1148, 1, 0, 0);
+add (18063,"Hendricks County", "IN", "Indiana", "4", -5:1, 95146, 1387, 1, 0, 0);
+add (42069,"Lackawanna County", "PA", "Pennsylvania", "1", -5:1, 208455, 1387, 1, 0, 0);
+add (56027,"Niobrara County", "WY", "Wyoming", "8", -7:1, 2706, 4647, 1, 0, 0);
+add (19099,"Jasper County", "IA", "Iowa", "5", -6:1, 35961, 1148, 1, 0, 0);
+add (55089,"Ozaukee County", "WI", "Wisconnsin", "5", -6:1, 81076, 1148, 1, 0, 0);
+add (37133,"Onslow County", "NC", "North Carolina", "2", -5:1, 142358, 1387, 1, 0, 0);
+add (38047,"Logan County", "ND", "North Dakota", "5", -6:1, 2355, 1148, 1, 0, 0);
+add (30061,"Mineral County", "MT", "Montana", "6", -7:1, 3748, 4647, 1, 0, 0);
+add (48077,"Clay County", "TX", "Texas", "7", -6:1, 10567, 1148, 1, 0, 0);
+add (48343,"Morris County", "TX", "Texas", "7", -6:1, 13358, 1148, 1, 0, 0);
+add (13263,"Talbot County", "GA", "Georgia", "3", -5:1, 6935, 1387, 1, 0, 0);
+add (38035,"Grand Forks County", "ND", "North Dakota", "5", -6:1, 66869, 1148, 1, 0, 0);
+add (28109,"Pearl River County", "MS", "Missippi", "5", -6:1, 46862, 1148, 1, 0, 0);
+add (48307,"McCulloch County", "TX", "Texas", "7", -6:1, 8751, 1148, 1, 0, 0);
+add (41023,"Grant County", "OR", "Oregon", "9", -8:1, 8075, 3240, 0, 1, 0);
+add (42005,"Armstrong County", "PA", "Pennsylvania", "1", -5:1, 73181, 1387, 1, 0, 0);
+add (31181,"Webster County", "NE", "Nebraska", "6", -7:1, 4019, 4647, 1, 0, 0);
+add (37171,"Surry County", "NC", "North Carolina", "2", -5:1, 67052, 1387, 1, 0, 0);
+add (31025,"Cass County", "NE", "Nebraska", "6", -6:1, 24486, 1148, 1, 0, 0);
+add (16023,"Butte County", "ID", "Idaho", "8", -7:1, 3033, 4647, 1, 0, 0);
+add (40087,"McClain County", "OK", "Oklahoma", "7", -6:1, 26224, 1148, 1, 0, 0);
+add (21151,"Madison County", "KY", "Kentucky", "4", -5:1, 66502, 1387, 1, 0, 0);
+add (32019,"Lyon County", "NV", "Nevada", "8", -8:1, 30072, 3240, 0, 1, 0);
+add (21197,"Powell County", "KY", "Kentucky", "4", -5:1, 12945, 1387, 1, 0, 0);
+add (13019,"Berrien County", "GA", "Georgia", "3", -5:1, 16353, 1387, 1, 0, 0);
+add (29147,"Nodaway County", "MO", "Mosourri", "6", -6:1, 20777, 1148, 1, 0, 0);
+add (13023,"Bleckley County", "GA", "Georgia", "3", -5:1, 11185, 1387, 1, 0, 0);
+add (42097,"Northumberland County", "PA", "Pennsylvania", "1", -5:1, 94017, 1387, 1, 0, 0);
+add (42123,"Warren County", "PA", "Pennsylvania", "1", -5:1, 43910, 1387, 1, 0, 0);
+add (31107,"Knox County", "NE", "Nebraska", "6", -7:1, 9216, 4647, 1, 0, 0);
+add (48473,"Waller County", "TX", "Texas", "7", -6:1, 27218, 1148, 1, 0, 0);
+add (48403,"Sabine County", "TX", "Texas", "7", -6:1, 10551, 1148, 1, 0, 0);
+add (28113,"Pike County", "MS", "Missippi", "5", -6:1, 37920, 1148, 1, 0, 0);
+add (08103,"Rio Blanco County", "CO", "Colorado", "8", -7:1, 6265, 4647, 1, 0, 0);
+add (39053,"Gallia County", "OH", "Ohio", "4", -5:1, 33422, 1387, 1, 0, 0);
+add (29209,"Stone County", "MO", "Mosourri", "6", -6:1, 26807, 1148, 1, 0, 0);
+add (46087,"McCook County", "SD", "South Dakota", "5", -7:1, 5598, 4647, 1, 0, 0);
+add (13107,"Emanuel County", "GA", "Georgia", "3", -5:1, 21023, 1387, 1, 0, 0);
+add (39125,"Paulding County", "OH", "Ohio", "4", -5:1, 20078, 1387, 1, 0, 0);
+add (06079,"San Luis Obispo County", "CA", "California", "9", -8:1, 234366, 3240, 0, 1, 0);
+add (12129,"Wakulla County", "FL", "Florida", "3", -5:1, 18652, 1387, 1, 0, 0);
+add (53059,"Skamania County", "WA", "Washiington", "9", -8:1, 9805, 3240, 0, 1, 0);
+add (13123,"Gilmer County", "GA", "Georgia", "3", -5:1, 18672, 1387, 1, 0, 0);
+add (45047,"Greenwood County", "SC", "South Carolina", "2", -5:1, 63623, 1387, 1, 0, 0);
+add (32007,"Elko County", "NV", "Nevada", "8", -8:1, 46084, 3240, 0, 1, 0);
+add (55019,"Clark County", "WI", "Wisconnsin", "5", -6:1, 33147, 1148, 1, 0, 0);
+add (13161,"Jeff Davis County", "GA", "Georgia", "3", -5:1, 12751, 1387, 1, 0, 0);
+add (26005,"Allegan County", "MI", "Michigan", "4", -5:1, 101662, 1387, 1, 0, 0);
+add (28161,"Yalobusha County", "MS", "Missippi", "5", -6:1, 12366, 1148, 1, 0, 0);
+add (47047,"Fayette County", "TN", "Tennesee", "3", -5:1, 30457, 1387, 1, 0, 0);
+add (36045,"Jefferson County", "NY", "New York", "1", -5:1, 111050, 1387, 1, 0, 0);
+add (29121,"Macon County", "MO", "Mosourri", "6", -6:1, 15278, 1148, 1, 0, 0);
+add (01043,"Cullman County", "AL", "Alabama", "3", -6:1, 74994, 1148, 1, 0, 0);
+add (17175,"Stark County", "IL", "Illinois", "6", -6:1, 6290, 1148, 1, 0, 0);
+add (47153,"Sequatchie County", "TN", "Tennesee", "3", -6:1, 10367, 1148, 1, 0, 0);
+add (48451,"Tom Green County", "TX", "Texas", "7", -6:1, 102775, 1148, 1, 0, 0);
+add (18139,"Rush County", "IN", "Indiana", "4", -5:1, 18307, 1387, 1, 0, 0);
+add (51680,"Lynchburg city", "VA", "Virginia", "2", -5:1, 65473, 1387, 1, 0, 0);
+add (23001,"Androscoggin County", "ME", "Maine", "0", -5:1, 101280, 1387, 1, 0, 0);
+add (38095,"Towner County", "ND", "North Dakota", "5", -6:1, 3018, 1148, 1, 0, 0);
+add (46019,"Butte County", "SD", "South Dakota", "5", -6:1, 9018, 1148, 1, 0, 0);
+add (32510,"Carson City", "NV", "Nevada", "8", -8:1, 49301, 3240, 0, 1, 0);
+add (46069,"Hyde County", "SD", "South Dakota", "5", -7:1, 1605, 4647, 1, 0, 0);
+add (05001,"Arkansas County", "AR", "Arkansas", "7", -6:1, 20787, 1148, 1, 0, 0);
+add (40015,"Caddo County", "OK", "Oklahoma", "7", -6:1, 30981, 1148, 1, 0, 0);
+add (26035,"Clare County", "MI", "Michigan", "4", -5:1, 29578, 1387, 1, 0, 0);
+add (21155,"Marion County", "KY", "Kentucky", "4", -5:1, 17018, 1387, 1, 0, 0);
+add (48127,"Dimmit County", "TX", "Texas", "7", -6:1, 10364, 1148, 1, 0, 0);
+add (37023,"Burke County", "NC", "North Carolina", "2", -5:1, 82687, 1387, 1, 0, 0);
+add (21187,"Owen County", "KY", "Kentucky", "4", -5:1, 10264, 1387, 1, 0, 0);
+add (42039,"Crawford County", "PA", "Pennsylvania", "1", -5:1, 89415, 1387, 1, 0, 0);
+add (53011,"Clark County", "WA", "Washiington", "9", -8:1, 326943, 3240, 0, 1, 0);
+add (39121,"Noble County", "OH", "Ohio", "4", -5:1, 12343, 1387, 1, 0, 0);
+add (38039,"Griggs County", "ND", "North Dakota", "5", -6:1, 2842, 1148, 1, 0, 0);
+add (20147,"Phillips County", "KS", "Kansas", "6", -6:1, 6080, 1148, 1, 0, 0);
+add (38063,"Nelson County", "ND", "North Dakota", "5", -6:1, 3716, 1148, 1, 0, 0);
+add (50017,"Orange County", "VT", "Vermont", "0", -5:1, 27924, 1387, 1, 0, 0);
+add (13293,"Upson County", "GA", "Georgia", "3", -5:1, 27075, 1387, 1, 0, 0);
+add (30081,"Ravalli County", "MT", "Montana", "6", -7:1, 35156, 4647, 1, 0, 0);
+add (48099,"Coryell County", "TX", "Texas", "7", -6:1, 77981, 1148, 1, 0, 0);
+add (26099,"Macomb County", "MI", "Michigan", "4", -5:1, 787698, 1387, 1, 0, 0);
+add (47013,"Campbell County", "TN", "Tennesee", "3", -5:1, 38241, 1387, 1, 0, 0);
+add (34039,"Union County", "NJ", "New Jersey", "0", -5:1, 500608, 1387, 1, 0, 0);
+add (21079,"Garrard County", "KY", "Kentucky", "4", -6:1, 13916, 1148, 1, 0, 0);
+add (41003,"Benton County", "OR", "Oregon", "9", -8:1, 77755, 3240, 0, 1, 0);
+add (29109,"Lawrence County", "MO", "Mosourri", "6", -6:1, 33122, 1148, 1, 0, 0);
+add (56017,"Hot Springs County", "WY", "Wyoming", "8", -7:1, 4727, 4647, 1, 0, 0);
+add (51161,"Roanoke County", "VA", "Virginia", "2", -5:1, 80839, 1387, 1, 0, 0);
+add (18079,"Jennings County", "IN", "Indiana", "4", -5:1, 27789, 1387, 1, 0, 0);
+add (47071,"Hardin County", "TN", "Tennesee", "3", -5:1, 24961, 1387, 1, 0, 0);
+add (48489,"Willacy County", "TX", "Texas", "7", -6:1, 19622, 1148, 1, 0, 0);
+add (27011,"Big Stone County", "MN", "Minnesota", "5", -6:1, 5654, 1148, 1, 0, 0);
+add (37125,"Moore County", "NC", "North Carolina", "2", -5:1, 71394, 1387, 1, 0, 0);
+add (13045,"Carroll County", "GA", "Georgia", "3", -5:1, 83021, 1387, 1, 0, 0);
+add (36087,"Rockland County", "NY", "New York", "1", -5:1, 281338, 1387, 1, 0, 0);
+add (22073,"Ouachita Parish", "LA", "Louisiana", "7", -6:1, 146979, 1148, 1, 0, 0);
+add (16011,"Bingham County", "ID", "Idaho", "8", -7:1, 41820, 4647, 1, 0, 0);
+add (48053,"Burnet County", "TX", "Texas", "7", -6:1, 32195, 1148, 1, 0, 0);
+add (48095,"Concho County", "TX", "Texas", "7", -6:1, 3119, 1148, 1, 0, 0);
+add (46091,"Marshall County", "SD", "South Dakota", "5", -7:1, 4563, 4647, 1, 0, 0);
+add (30043,"Jefferson County", "MT", "Montana", "6", -7:1, 10087, 4647, 1, 0, 0);
+add (29013,"Bates County", "MO", "Mosourri", "6", -6:1, 15770, 1148, 1, 0, 0);
+add (40003,"Alfalfa County", "OK", "Oklahoma", "7", -6:1, 6044, 1148, 1, 0, 0);
+add (21109,"Jackson County", "KY", "Kentucky", "4", -6:1, 12908, 1148, 1, 0, 0);
+add (40117,"Pawnee County", "OK", "Oklahoma", "7", -6:1, 16438, 1148, 1, 0, 0);
+add (06029,"Kern County", "CA", "California", "9", -8:1, 631459, 3240, 0, 1, 0);
+add (56031,"Platte County", "WY", "Wyoming", "8", -7:1, 8626, 4647, 1, 0, 0);
+add (28021,"Claiborne County", "MS", "Missippi", "5", -6:1, 11662, 1148, 1, 0, 0);
+add (13177,"Lee County", "GA", "Georgia", "3", -5:1, 22767, 1387, 1, 0, 0);
+add (28079,"Leake County", "MS", "Missippi", "5", -6:1, 19372, 1148, 1, 0, 0);
+add (36111,"Ulster County", "NY", "New York", "1", -5:1, 166351, 1387, 1, 0, 0);
+add (31019,"Buffalo County", "NE", "Nebraska", "6", -6:1, 40596, 1148, 1, 0, 0);
+add (54049,"Marion County", "WV", "West Virginia", "2", -5:1, 56318, 1387, 1, 0, 0);
+add (27101,"Murray County", "MN", "Minnesota", "5", -6:1, 9517, 1148, 1, 0, 0);
+add (19149,"Plymouth County", "IA", "Iowa", "5", -6:1, 24825, 1148, 1, 0, 0);
+add (16029,"Caribou County", "ID", "Idaho", "8", -7:1, 7426, 4647, 1, 0, 0);
+add (41053,"Polk County", "OR", "Oregon", "9", -8:1, 61560, 3240, 0, 1, 0);
+add (01059,"Franklin County", "AL", "Alabama", "3", -6:1, 29682, 1148, 1, 0, 0);
+add (16087,"Washington County", "ID", "Idaho", "8", -7:1, 10171, 4647, 1, 0, 0);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.c b/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.c
new file mode 100644
index 000000000000..32d9ff2f66e6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.c
@@ -0,0 +1,730 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#ifdef WIN32
+#include
+#include
+#endif
+#include "config.h"
+#include "porting.h"
+#include "decimal.h"
+#include "date.h"
+#include "genrand.h"
+#include "dist.h"
+#include "r_params.h"
+#include "params.h"
+
+#include "columns.h"
+#include "tables.h"
+#include "streams.h"
+
+static long Mult = 16807; /* the multiplier */
+static long nQ = 127773; /* the quotient MAXINT / Mult */
+static long nR = 2836; /* the remainder MAXINT % Mult */
+void NthElement (HUGE_TYPE N, int nStream);
+
+/*
+ * Routine: next_random(int stream)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+long
+next_random (int stream)
+{
+ long s = Streams[stream].nSeed,
+ div_res,
+ mod_res;
+
+ div_res = s / nQ;
+ mod_res = s - nQ * div_res; /* i.e., mod_res = s % nQ */
+ s = Mult * mod_res - div_res * nR;
+ if (s < 0)
+ s += MAXINT;
+ Streams[stream].nSeed = s;
+ Streams[stream].nUsed += 1;
+#ifdef JMS
+ Streams[stream].nTotal += 1;
+#endif
+ return (s);
+}
+
+/*
+ * Routine: next_random_float(int stream)
+ * Purpose: return random in [0..1]
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+double
+next_random_float (int stream)
+{
+ long res;
+
+ res = next_random (stream);
+
+ return ((double) res / (double) MAXINT);
+}
+
+/*
+ * Routine: skip_random(int stream, int skip_count)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+skip_random (int nStream, ds_key_t N)
+{
+ ds_key_t Z;
+ ds_key_t M;
+
+#ifdef UNDEF
+ fprintf(stderr, "skipping stream %d to %d\n", nStream, N);
+ Streams[nStream].nTotal = N;
+#endif
+ M = Mult;
+ Z = (ds_key_t) Streams[nStream].nInitialSeed;
+ while (N > 0)
+ {
+ if (N % 2 != 0) /* testing for oddness, this seems portable */
+ Z = (M * Z) % MAXINT;
+ N = N / 2; /* integer division, truncates */
+ M = (M * M) % MAXINT;
+ }
+ Streams[nStream].nSeed = (long) Z;
+
+ return;
+}
+
+/*
+ * Routine: genrand_integer(int dist, int min, int max, int mean)
+ * Purpose: generate a random integer given the distribution and limits
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: int
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ */
+int
+genrand_integer (int *dest, int dist, int min, int max, int mean, int stream)
+{
+ int res = 0,
+ i;
+ double fres = 0;
+
+ switch (dist)
+ {
+ case DIST_UNIFORM:
+ res = next_random (stream);
+ res %= max - min + 1;
+ res += min;
+ break;
+ case DIST_EXPONENTIAL:
+ for (i = 0; i < 12; i++)
+ fres += (double) (next_random (stream) / MAXINT) - 0.5;
+ res = min + (int) ((max - min + 1) * fres);
+ break;
+ default:
+ INTERNAL ("Undefined distribution");
+ break;
+ }
+
+ if (dest == NULL)
+ return (res);
+
+ *dest = res;
+
+ return (0);
+}
+
+/*
+ * Routine: genrand_key(ket_t *dest, int dist, ds_key_t min, ds_key_t max, ds_key_t mean, int stream)
+ * Purpose: generate a random integer given the distribution and limits
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: ds_key_t
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: Need to rework to rely on RNG routines that will work for 64 bit return values
+ */
+ds_key_t
+genrand_key (ds_key_t * dest, int dist, ds_key_t min, ds_key_t max,
+ ds_key_t mean, int stream)
+{
+ int res = 0,
+ i;
+ double fres = 0;
+
+ switch (dist)
+ {
+ case DIST_UNIFORM:
+ res = next_random (stream);
+ res %= (int) (max - min + 1);
+ res += (int) min;
+ break;
+ case DIST_EXPONENTIAL:
+ for (i = 0; i < 12; i++)
+ fres += (double) (next_random (stream) / MAXINT) - 0.5;
+ res = (int) min + (int) ((max - min + 1) * fres);
+ break;
+ default:
+ INTERNAL ("Undefined distribution");
+ break;
+ }
+
+ if (dest == NULL)
+ return ((ds_key_t) res);
+
+ *dest = (ds_key_t) res;
+
+ return ((ds_key_t) 0);
+}
+
+/*
+ * Routine:
+ * genrand_decimal(int dist, decimal_t *min, decimal_t *max, decimal_t *mean)
+ * Purpose: create a random decimal_t
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: min/max are char * to allow easy passing of precision
+ * Returns: decimal_t *; NULL on failure
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+genrand_decimal (decimal_t * dest, int dist, decimal_t * min, decimal_t * max,
+ decimal_t * mean, int stream)
+{
+ int i;
+ decimal_t res;
+ double fres = 0.0;
+
+ if (min->precision < max->precision)
+ dest->precision = min->precision;
+ else
+ dest->precision = max->precision;
+
+
+ switch (dist)
+ {
+ case DIST_UNIFORM:
+ res.number = next_random (stream);
+ res.number %= max->number - min->number + 1;
+ res.number += min->number;
+ break;
+ case DIST_EXPONENTIAL:
+ for (i = 0; i < 12; i++)
+ {
+ fres /= 2.0;
+ fres +=
+ (double) ((double) next_random (stream) / (double) MAXINT) -
+ 0.5;
+ }
+ res.number =
+ mean->number + (int) ((max->number - min->number + 1) * fres);
+ break;
+ default:
+ INTERNAL ("Undefined distribution");
+ break;
+ }
+
+ dest->number = res.number;
+ i = 0;
+ while (res.number > 10)
+ {
+ res.number /= 10;
+ i += 1;
+ }
+ dest->scale = i;
+
+ return (0);
+}
+
+
+/* Routine: RNGReset(int tbl)
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+RNGReset (int tbl)
+{
+ int i;
+
+ for (i = 0; Streams[i].nColumn != -1; i++)
+ if (Streams[i].nTable == tbl)
+ Streams[i].nSeed = Streams[i].nInitialSeed;
+
+ return (0);
+}
+
+
+/* WARNING! This routine assumes the existence of 64-bit */
+
+/* integers. The notation used here- "HUGE" is *not* ANSI standard. */
+
+/* Hopefully, you have this extension as well. If not, use whatever */
+
+/* nonstandard trick you need to in order to get 64 bit integers. */
+
+/* The book says that this will work if MAXINT for the type you choose */
+
+/* is at least 2**46 - 1, so 64 bits is more than you *really* need */
+
+static HUGE_TYPE Multiplier = 16807; /* or whatever nonstandard */
+static HUGE_TYPE Modulus = 2147483647; /* trick you use to get 64 bit int */
+
+/* Advances value of Seed after N applications of the random number generator
+ with multiplier Mult and given Modulus.
+ NthElement(Seed[],count);
+
+ Theory: We are using a generator of the form
+ X_n = [Mult * X_(n-1)] mod Modulus. It turns out that
+ X_n = [(Mult ** n) X_0] mod Modulus.
+ This can be computed using a divide-and-conquer technique, see
+ the code below.
+
+ In words, this means that if you want the value of the Seed after n
+ applications of the generator, you multiply the initial value of the
+ Seed by the "super multiplier" which is the basic multiplier raised
+ to the nth power, and then take mod Modulus.
+*/
+
+/* Nth Element of sequence starting with StartSeed */
+void
+NthElement (HUGE_TYPE N, int nStream);
+/*
+{
+ HUGE_TYPE Z;
+ HUGE_TYPE Mult;
+
+ Mult = Multiplier;
+ Z = (HUGE_TYPE) Streams[nStream].nInitialSeed;
+ while (N > 0)
+ {
+ if (N % 2 != 0) testing for oddness, this seems portable
+ {
+#ifdef JMS
+ Streams[nStream].nTotal += 1;
+#endif
+ Z = (Mult * Z) % Modulus;
+ }
+ N = N / 2;
+ Mult = (Mult * Mult) % Modulus;
+#ifdef JMS
+ Streams[nStream].nTotal += 2;
+#endif
+ }
+ Streams[nStream].nSeed = (long) Z;
+
+ return;
+}
+*/
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+dump_seeds (int tbl);
+/*
+{
+ int i;
+
+ for (i = 0; Streams[i].nColumn != -1; i++)
+ if (Streams[i].nTable == tbl)
+ printf ("%04d\t%09d\t%09ld\n", i, Streams[i].nUsed, Streams[i].nSeed);
+ return (0);
+}
+*/
+/*
+ * Routine: gen_charset(char *set, int min, int max)
+ * Purpose: generate random characters from set for a random length [min..max]
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+gen_charset (char *dest, char *set, int min, int max, int stream)
+{
+ int len,
+ i,
+ temp;
+
+ if (set == NULL)
+ {
+ dest = NULL;
+ return (-1);
+ }
+
+ genrand_integer (&len, DIST_UNIFORM, min, max, 0, stream);
+
+ for (i = 0; i < max; i++)
+ {
+ genrand_integer (&temp, DIST_UNIFORM, 0, strlen (set) - 1, 0, stream);
+ if (i < len)
+ dest[i] = *(set + temp);
+ }
+ dest[len] = '\0';
+
+ return (0);
+
+}
+
+/*
+ * Routine: genrand_date(int dist, date_t *min, date_t *max)
+ * Purpose: generate random date within [min..max]
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+genrand_date (date_t * dest, int dist, date_t * min, date_t * max,
+ date_t * mean, int stream)
+{
+ int range,
+ imean = 0,
+ temp,
+ idt,
+ nYear,
+ nTotalWeight = 0,
+ nDayCount;
+
+ idt = dttoj (min);
+ range = dttoj (max);
+ range -= idt;
+ nDayCount = min->day;
+ nYear = min->year;
+
+ switch (dist)
+ {
+ case DIST_SALES:
+ case DIST_RETURNS:
+ /* walk from min to max to "integrate" the distribution */
+ while (range -= 1)
+ {
+ nTotalWeight +=
+ dist_weight (NULL, "calendar", nDayCount,
+ dist + is_leap (nYear));
+ if (nDayCount == 365 + is_leap (nYear))
+ {
+ nYear += 1;
+ nDayCount = 1;
+ }
+ else
+ nDayCount += 1;
+ }
+ /* pick a value in the resulting range */
+ temp = genrand_integer (NULL, DIST_UNIFORM, 1, nTotalWeight, 0, stream);
+ /* and walk it again to translate that back to a date */
+ nDayCount = min->day;
+ idt = min->julian;
+ nYear = min->year;
+ while (temp >= 0)
+ {
+ temp -=
+ dist_weight (NULL, "calendar", nDayCount,
+ dist + is_leap (nYear));
+ nDayCount += 1;
+ idt += 1;
+ if (nDayCount > 365 + is_leap (nYear))
+ {
+ nYear += 1;
+ nDayCount = 1;
+ }
+ }
+ break;
+ case DIST_EXPONENTIAL:
+ imean = dttoj (mean);
+ imean -= idt;
+ case DIST_UNIFORM:
+ genrand_integer (&temp, dist, 0, range, imean, stream);
+ idt += temp;
+ break;
+ default:
+ break;
+ }
+
+ jtodt (dest, idt);
+
+ return (0);
+
+}
+
+/**************
+ **************
+ **
+ ** static routines
+ **
+ **************
+ **************/
+
+/*
+ * Routine: init_rand()
+ * Purpose: Initialize the RNG used throughout the code
+ * Algorithm: To allow two columns to use the same stream of numbers (for joins), pre-sort
+ * the streams list by Duplicate and then assign values. Order by column after initialization
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ */
+void
+init_rand (void)
+{
+ static int bInit = 0;
+ int i,
+ skip,
+ nSeed;
+
+ if (!bInit)
+ {
+ if (is_set("RNGSEED"))
+ nSeed = get_int("RNGSEED");
+ else
+ nSeed = RNG_SEED;
+ skip = MAXINT / MAX_COLUMN;
+ for (i = 0; i < MAX_COLUMN; i++)
+ {
+ Streams[i].nInitialSeed = nSeed + skip * i;
+ Streams[i].nSeed = nSeed + skip * i;
+ Streams[i].nUsed = 0;
+ }
+ bInit = 1;
+ }
+ return;
+}
+
+void
+resetSeeds(int nTable)
+{
+ int i;
+
+ for (i = 0; i < MAX_COLUMN; i++)
+ if (Streams[i].nTable == nTable)
+ Streams[i].nSeed = Streams[i].nInitialSeed;
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+genrand_email (char *pEmail, char *pFirst, char *pLast, int nColumn)
+{
+ char *pDomain;
+ char szCompany[50];
+ int nCompanyLength;
+
+ pick_distribution (&pDomain, "top_domains", 1, 1, nColumn);
+ genrand_integer(&nCompanyLength, DIST_UNIFORM, 10, 20, 0, nColumn);
+ gen_charset (&szCompany[0], ALPHANUM, 1, 20, nColumn);
+ szCompany[nCompanyLength] = '\0';
+
+ sprintf (pEmail, "%s.%s@%s.%s", pFirst, pLast, szCompany, pDomain);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+genrand_ipaddr (char *pDest, int nColumn)
+{
+ int arQuads[4],
+ i;
+
+ for (i = 0; i < 4; i++)
+ genrand_integer (&arQuads[i], DIST_UNIFORM, 1, 255, 0, nColumn);
+ sprintf (pDest, "%03d.%03d.%03d.%03d",
+ arQuads[0], arQuads[1], arQuads[2], arQuads[3]);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+genrand_url (char *pDest, int nColumn)
+{
+ strcpy (pDest, "http://www.foo.com");
+
+ return (0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+setSeed(int nStream, int nValue)
+{
+ int nRetValue;
+
+ nRetValue = Streams[nStream].nSeed;
+ Streams[nStream].nSeed = nValue;
+
+ return(nRetValue);
+}
+
+
+#ifdef TEST
+main ()
+{
+ printf ("r_genrand:No test routine has been defined for this module\n");
+
+ exit (0);
+}
+#endif /* TEST */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.h b/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.h
new file mode 100644
index 000000000000..2032f4c2aa92
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/genrand.h
@@ -0,0 +1,82 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef GENRAND_H
+#define GENRAND_H
+#include "decimal.h"
+#include "date.h"
+#include "dist.h"
+#include "address.h"
+#define JMS 1
+
+typedef struct RNG_T
+{
+int nUsed;
+int nUsedPerRow;
+long nSeed;
+long nInitialSeed; /* used to allow skip_row() to back up */
+int nColumn; /* column where this stream is used */
+int nTable; /* table where this stream is used */
+int nDuplicateOf; /* duplicate streams allow independent tables to share data streams */
+#ifdef JMS
+ds_key_t nTotal;
+#endif
+} rng_t;
+extern rng_t Streams[];
+
+#define FL_SEED_OVERRUN 0x0001
+
+#define ALPHANUM "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789"
+#define DIGITS "0123456789"
+
+#define RNG_SEED 19620718
+
+int genrand_integer(int *dest, int dist, int min, int max, int mean, int stream);
+int genrand_decimal(decimal_t *dest, int dist, decimal_t *min, decimal_t *max, decimal_t *mean, int stream);
+int genrand_date(date_t *dest, int dist, date_t *min, date_t *max, date_t *mean, int stream);
+ds_key_t genrand_key(ds_key_t *dest, int dist, ds_key_t min, ds_key_t max, ds_key_t mean, int stream);
+int gen_charset(char *dest, char *set, int min, int max, int stream);
+int dump_seeds(int tbl);
+void init_rand(void);
+void skip_random(int s, ds_key_t count);
+int RNGReset(int nTable);
+long next_random(int nStream);
+void genrand_email(char *pEmail, char *pFirst, char *pLast, int nColumn);
+void genrand_ipaddr(char *pDest, int nColumn);
+int genrand_url(char *pDest, int nColumn);
+int setSeed(int nStream, int nValue);
+void resetSeeds(int nTable);
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.c b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.c
new file mode 100644
index 000000000000..240b3f570d09
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.c
@@ -0,0 +1,383 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include
+#include
+#include
+#include "config.h"
+#include "porting.h"
+#include "grammar.h"
+#include "error_msg.h"
+#include "StringBuffer.h"
+#include "expr.h"
+#include "decimal.h"
+#include "date.h"
+
+int nLineNumber = 0;
+extern char *CurrentFileName;
+token_t *pTokens;
+int ProcessOther(char *stmt, token_t *pTokens);
+
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+ProcessStr (char *stmt, token_t * tokens)
+{
+ char *cp;
+
+ if ((cp = SafeStrtok (NULL, "\"")) == NULL)
+ ReportError (QERR_BAD_STRING, NULL, 1);
+
+ return (cp);
+}
+
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ProcessComments (char *line)
+{
+ char *cp;
+ int i = 0;
+
+ if (line == NULL)
+ return (-1);
+
+ if ((cp = strchr (line, COMMENT_CHAR)) != NULL)
+ {
+ if (*(cp + 1) == COMMENT_CHAR)
+ *cp = '\0';
+ }
+
+ cp = line;
+ while (*cp && (*cp == ' ' || *cp == '\t' || *cp == '\r'))
+ {
+ i += 1;
+ cp += 1;
+ }
+
+ return (i);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+AddLine (char *line)
+{
+ static int nCharAllocated = 0;
+ static int nCharInUse = 0;
+ static char *szResult;
+ int nCharAvailable,
+ nCharRequested,
+ nCharAdditional;
+
+ if (line == NULL) /* initialization */
+ {
+ nCharInUse = 0;
+ return (NULL);
+ }
+
+ nCharAvailable = nCharAllocated - nCharInUse - 1;
+ nCharRequested = strlen (line);
+
+ if (nCharRequested == 0) /* asked to add a null line */
+ return (szResult);
+ nCharRequested += 1; /* add a space between pieces */
+
+ if (nCharAvailable < nCharRequested) /* need more room */
+ {
+ nCharAdditional = (nCharRequested > 250) ? nCharRequested : 250;
+ szResult =
+ (char *) realloc ((void *) szResult,
+ nCharAllocated + nCharAdditional);
+ nCharAllocated += 250;
+ }
+
+ if (szResult != NULL)
+ {
+ if (nCharInUse == 0)
+ strcpy (szResult, line);
+ else
+ strcat (szResult, line);
+ strcat(szResult, " "); /* and add the space we reserved room for above */
+ nCharInUse += nCharRequested;
+ }
+
+ return (szResult);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+SetTokens (token_t * pToken)
+{
+ pTokens = pToken;
+
+ return;
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+FindToken (char *word)
+{
+ int nRetCode = 0;
+ int i;
+
+ /* Note: linear search should be replaced if the word count gets large */
+ for (i = 1; pTokens[i].index != -1; i++)
+ {
+ if (!strcasecmp (pTokens[i].word, word))
+ nRetCode = pTokens[i].index;
+ }
+
+ return (nRetCode);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+ParseFile (char *szPath)
+{
+ FILE *fp;
+ char szLine[4096]; /* is there a good portable constant for this? */
+ char *stmt,
+ *line_start,
+ *cp;
+ int i,
+ nRetCode = 0;
+ StringBuffer_t *pLineBuffer;
+
+ /* open the template, or return an error */
+
+/* Gosh, I love non-standard extensions to standard functions! */
+#ifdef WIN32
+ if ((fp = fopen (szPath, "rt")) == NULL)
+#else
+ if ((fp = fopen (szPath, "r")) == NULL)
+#endif
+ return (ReportErrorNoLine(QERR_NO_FILE, szPath, 0));
+
+ /* shift current file indicator for error messages */
+ if (CurrentFileName != NULL)
+ free (CurrentFileName);
+ CurrentFileName = strdup (szPath);
+ pLineBuffer = InitBuffer(100, 20);
+ nLineNumber = 0;
+ SetErrorGlobals(szPath, &nLineNumber);
+
+ while ((fgets (szLine, 4096, fp) != NULL) && (nRetCode >= 0))
+ {
+ nLineNumber += 1;
+ if ((cp = strchr (szLine, '\n')))
+ *cp = '\0';
+ else
+ ReportError (QERR_LINE_TOO_LONG, NULL, 1);
+
+ /* build a complete statement */
+ i = ProcessComments (szLine);
+ if (i < 0)
+ return (i);
+ line_start = (szLine + i);
+ if (strlen (line_start) == 0)
+ continue; /* nothing to do with an empty line */
+
+ AddBuffer(pLineBuffer, line_start);
+ if ((cp = strchr (line_start, STMT_END)) == NULL)
+ {
+ AddBuffer(pLineBuffer, " ");
+ continue;
+ }
+ if (*(cp - 1) == '\\')
+ if ((cp = strchr (cp + 1, STMT_END)) == NULL)
+ {
+ AddBuffer(pLineBuffer, " ");
+ continue;
+ }
+
+ /*
+ * NOTE: this assumes that the first word indentifies the statement type
+ */
+ stmt = GetBuffer(pLineBuffer);
+ cp = SafeStrtok (stmt, " \t");
+ i = FindToken (cp);
+ if (i != 0)
+ {
+ if (pTokens[i].handler != NULL)
+ nRetCode = pTokens[i].handler (stmt, pTokens);
+ else
+ nRetCode = -17; /* QERR_SYNTAX; */
+ }
+ else /* other text (i.e., SQL) possibly with subsitution targets) */
+ nRetCode = ProcessOther (stmt, pTokens);
+
+ ResetBuffer(pLineBuffer);
+ }
+
+ if (!feof (fp) && (nRetCode >= 0))
+ ReportError (QERR_READ_FAILED, szPath, 0);
+ if (nRetCode < 0)
+ ReportError(nRetCode, szLine, 0);
+
+
+ fclose (fp);
+/* jms -- need to reintroduce this
+ FreeBuffer(pLineBuffer);
+ */
+
+ return (nRetCode);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+char *
+SafeStrtok (char *string, char *delims)
+{
+ static char *szScratch = NULL;
+ static int nScratchLen = 0;
+
+ if (string != NULL)
+ {
+ if (szScratch == NULL)
+ {
+ szScratch = (char *) malloc (strlen (string) + 1);
+ MALLOC_CHECK(szScratch);
+ if (szScratch == NULL)
+ ReportError (QERR_NO_MEMORY, "SafeStrtok", 1);
+ else
+ nScratchLen = strlen (string);
+ }
+ else
+ {
+ if (nScratchLen < (int)strlen (string))
+ {
+ szScratch = (char *) realloc (szScratch, strlen (string) + 1);
+ if (szScratch == NULL)
+ ReportError (QERR_NO_MEMORY, "SafeStrtok", 1);
+ else
+ nScratchLen = strlen (string);
+ }
+ }
+ strcpy (szScratch, string);
+ return (strtok (szScratch, delims));
+ }
+ return (strtok (NULL, delims));
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.h b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.h
new file mode 100644
index 000000000000..24d0f5126880
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.h
@@ -0,0 +1,54 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef GRAMMAR_H
+#define GRAMMAR_H
+
+typedef struct TOKEN_T {
+ int index;
+ char word[40];
+ int (*handler)(char *s, struct TOKEN_T *t);
+} token_t;
+
+#define COMMENT_CHAR '-'
+#define STMT_END ';'
+int ParseFile(char *szPath);
+int FindToken(char *name);
+void SetTokens(token_t *t);
+char *ProcessStr(char *stmt, token_t *pTokens);
+char *SafeStrtok(char *string, char *delims);
+extern token_t *pTokens;
+
+#endif /* GRAMMAR_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.vcproj b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.vcproj
new file mode 100644
index 000000000000..3eebb83f1e59
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar.vcproj
@@ -0,0 +1,321 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.c b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.c
new file mode 100644
index 000000000000..947e0d08510e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.c
@@ -0,0 +1,217 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#ifdef USE_STRINGS_H
+#include
+#else
+#include
+#endif
+
+#include "StringBuffer.h"
+#include "expr.h"
+#include "grammar_support.h"
+#include "keywords.h"
+#include "error_msg.h"
+#include "qgen_params.h"
+#include "substitution.h"
+
+extern char yytext[];
+extern FILE *yyin;
+file_ref_t *pCurrentFile = NULL;
+file_ref_t CurrentFile;
+
+extern template_t *pCurrentQuery;
+static int nErrcnt = 0;
+static int nWarncnt = 0;
+/*
+ * different scanner handle yywrap differently
+ */
+
+#ifdef MKS
+void *yySaveScan(FILE *fp);
+int yyRestoreScan(void *pState);
+#endif
+#ifdef FLEX
+/* flex has a slightly different way of handling yywrap. See O'Reilly, p. 155 */
+void *yy_create_buffer( FILE *file, int size );
+void yy_switch_to_buffer( void *new_buffer );
+void yy_delete_buffer( void *b );
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+#endif
+
+/*
+ * Routine: include_file()
+ * Purpose: handle #include<> statements
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: char *path, int switch_to (unused?)
+ * Returns: 0 on success, -1 on open failure, -2 on malloc failure
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ */
+int
+include_file(char *fn, void *pC)
+{
+ FILE *fp;
+ file_ref_t *pFileRef;
+ template_t *pContext = (template_t *)pC;
+
+ if (fn == NULL)
+ return(0);
+
+ if ((fp = fopen(fn, "r")) == NULL)
+ return(-1);
+
+ pFileRef = (file_ref_t *)malloc(sizeof(struct FILE_REF_T));
+ MALLOC_CHECK(pFileRef);
+ if (pFileRef == NULL)
+ ReportError(QERR_NO_MEMORY, "include_file()", 1);
+ memset(pFileRef, 0, sizeof(struct FILE_REF_T));
+
+ pFileRef->name = strdup(fn);
+ pFileRef->file = fp;
+ pFileRef->line_number = 1;
+ pFileRef->pContext = pContext;
+ if (pContext)
+ pContext->name = strdup(fn);
+ pFileRef->pNext = pCurrentFile;
+ pCurrentFile = pFileRef;
+ SetErrorGlobals(fn, &pFileRef->line_number);
+
+#ifdef MKS
+ pCurrentFile->pLexState = (void *)yySaveScan(pCurrentFile->file);
+#endif
+#ifdef FLEX
+ pCurrentFile->pLexState = yy_create_buffer(pFileRef->file, YY_BUF_SIZE);
+ yy_switch_to_buffer(pCurrentFile->pLexState);
+#endif
+#if !defined(MKS) && !defined(FLEX)
+ yyin = pCurrentFile->file;
+#endif
+
+ if (is_set("DEBUG"))
+ printf("STATUS: INCLUDE(%s)\n", fn);
+
+ return(0);
+}
+
+/*
+ * Routine: yyerror()
+ * Purpose: standard error message interface
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: (char *) error message
+ * Returns: 0 until 10 errors encountered, then exits
+ * Called By: grammar, assorted support routines
+ * Calls: None
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+yyerror(char *msg, ...)
+{
+
+ printf("ERROR: %s at line %d in file %s\n",
+ msg, pCurrentFile->line_number, pCurrentFile->name);
+ if (++nErrcnt == 10)
+ {
+ printf("Too many errors. Exiting.\n");
+ exit(1);
+ }
+ return;
+}
+
+
+/*
+ * Routine: yywarn()
+ * Purpose: standard error message interface
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params: (char *) error message
+ * Returns: 0 until 10 errors encountered, then exits
+ * Called By: grammar, assorted support routines
+ * Calls: None
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+#ifndef SCANNER_TEST
+int
+yywarn(char *str)
+{
+ fprintf(stderr, "warning: %s in line %d of file %s\n",
+ str, pCurrentFile->line_number, pCurrentFile->name);
+ nWarncnt += 1;
+
+ return(0);
+}
+#endif
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+*/
+void
+GetErrorCounts(int *nError, int *nWarning)
+{
+ *nError = nErrcnt;
+ *nWarning = nWarncnt;
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.h b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.h
new file mode 100644
index 000000000000..c87915a43704
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/grammar_support.h
@@ -0,0 +1,63 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#ifndef GRAMMAR_SUPPORT_H
+#define GRAMMAR_SUPPORT_H
+ /*
+ * entry in the file stack used to manage multiple input file and include files
+ */
+typedef struct FILE_REF_T
+ {
+ FILE *file;
+ char *name;
+ int line_number;
+ void *pContext;
+ struct FILE_REF_T *pNext;
+#if defined(MKS) || defined(FLEX)
+ void *pLexState;
+#endif
+ } file_ref_t;
+
+
+
+extern file_ref_t *pCurrentFile;
+
+int yywarn(char *str);
+void yyerror(char *msg, ...);
+int setup(void);
+int include_file(char *fn, void *pContext);
+void GetErrorCounts(int *nError, int *nWarning);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/items.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/items.dst
new file mode 100644
index 000000000000..7c15fe411509
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/items.dst
@@ -0,0 +1,516 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+------
+-- categories
+-- values weights
+-- -----------------------
+-- 1. name 1. uniform
+-- 2. class dist name
+-- 3. Use Size?
+------
+create categories;
+set types = (varchar, varchar, int);
+set weights = 1;
+add ("Women", "women_class", 1: 1);
+add ("Men", "men_class", 1: 1);
+add ("Children", "children_class", 1: 1);
+add ("Shoes", "shoe_class", 1: 1);
+add ("Music", "music_class", 0: 1);
+add ("Jewelry", "jewelry_class", 0: 1);
+add ("Home", "home_class", 0: 1);
+add ("Sports", "sport_class", 0: 1);
+add ("Books", "book_class", 0: 1);
+add ("Electronics", "electronic_class", 0: 1);
+
+------
+-- women_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create women_class;
+set types = (varchar, int);
+set weights = 1;
+add ("dresses", 2: 1);
+add ("fragrances", 2: 1);
+add ("maternity", 2: 1);
+add ("swimwear", 2: 1);
+
+------
+-- men_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create men_class;
+set types = (varchar, int);
+set weights = 1;
+add ("accessories", 2: 1);
+add ("shirts", 2: 1);
+add ("pants", 2: 1);
+add ("sports-apparel", 2: 1);
+
+------
+-- children_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create children_class;
+set types = (varchar, int);
+set weights = 1;
+add ("newborn", 2: 1);
+add ("infants", 2: 1);
+add ("toddlers", 2: 1);
+add ("school-uniforms", 2: 1);
+
+------
+-- shoe_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create shoe_class;
+set types = (varchar, int);
+set weights = 1;
+add ("womens", 2: 1);
+add ("mens", 2: 1);
+add ("kids", 2: 1);
+add ("athletic", 2: 1);
+
+------
+-- music_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create music_class;
+set types = (varchar, int);
+set weights = 1;
+add ("rock", 2: 1);
+add ("country", 2: 1);
+add ("pop", 2: 1);
+add ("classical", 2: 1);
+
+------
+-- jewelry_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create jewelry_class;
+set types = (varchar, int);
+set weights = 1;
+add ("birdal", 8: 1);
+add ("diamonds", 8: 1);
+add ("gold", 8: 1);
+add ("bracelets", 8: 1);
+add ("earings", 8: 1);
+add ("rings", 8: 1);
+add ("pendants", 8: 1);
+add ("mens watch", 8: 1);
+add ("womens watch", 8: 1);
+add ("jewelry boxes", 8: 1);
+add ("semi-precious", 8: 1);
+add ("costume", 8: 1);
+add ("loose stones", 8: 1);
+add ("estate", 8: 1);
+add ("custom", 8: 1);
+add ("consignment", 8: 1);
+
+------
+-- home_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create home_class;
+set types = (varchar, int);
+set weights = 1;
+add ("bathroom", 10: 1);
+add ("bedding", 10: 1);
+add ("kids", 10: 1);
+add ("curtains/drapes", 10: 1);
+add ("blinds/shades", 10: 1);
+add ("rugs", 10: 1);
+add ("decor", 10: 1);
+add ("lighting", 10: 1);
+add ("mattresses", 10: 1);
+add ("flatware", 10: 1);
+add ("accent", 10: 1);
+add ("paint", 10: 1);
+add ("wallpaper", 10: 1);
+add ("glassware", 10: 1);
+add ("tables", 10: 1);
+add ("furniture", 10: 1);
+
+------
+-- sport_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create sport_class;
+set types = (varchar, int);
+set weights = 1;
+add ("athletic shoes", 10: 1);
+add ("baseball", 10: 1);
+add ("basketball", 10: 1);
+add ("camping", 10: 1);
+add ("fitness", 10: 1);
+add ("football", 10: 1);
+add ("hockey", 10: 1);
+add ("outdoor", 10: 1);
+add ("optics", 10: 1);
+add ("pools", 10: 1);
+add ("archery", 10: 1);
+add ("guns", 10: 1);
+add ("sailing", 10: 1);
+add ("tennis", 10: 1);
+add ("fishing", 10: 1);
+add ("golf", 10: 1);
+
+------
+-- book_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create book_class;
+set types = (varchar, int);
+set weights = 1;
+add ("arts", 12: 1);
+add ("business", 12: 1);
+add ("computers", 12: 1);
+add ("entertainments", 12: 1);
+add ("history", 12: 1);
+add ("parenting", 12: 1);
+add ("reference", 12: 1);
+add ("romance", 12: 1);
+add ("science", 12: 1);
+add ("travel", 12: 1);
+add ("cooking", 12: 1);
+add ("home repair", 12: 1);
+add ("self-help", 12: 1);
+add ("sports", 12: 1);
+add ("fiction", 12: 1);
+add ("mystery", 12: 1);
+
+------
+-- electronic_class
+-- second level used to populate the item hierarchy
+-- values weights
+-- -----------------------
+-- 1. class name 1. uniform
+-- 2. brand count
+------
+create electronic_class;
+set types = (varchar, int);
+set weights = 1;
+add ("cameras", 17: 1);
+add ("camcorders", 17: 1);
+add ("dvd/vcr players", 17: 1);
+add ("audio", 17: 1);
+add ("karoke", 17: 1);
+add ("musical", 17: 1);
+add ("personal", 17: 1);
+add ("scanners", 17: 1);
+add ("televisions", 17: 1);
+add ("memory", 17: 1);
+add ("disk drives", 17: 1);
+add ("monitors", 17: 1);
+add ("stereo", 17: 1);
+add ("automotive", 17: 1);
+add ("portable", 17: 1);
+add ("wireless", 17: 1);
+
+------
+-- sizes
+-- size of a particular item, if applicable (based on category)
+-- values weights
+-- -----------------------
+-- 1. size 1. uniform
+-- 2. for non-sized categories
+-- 3. size distributtion
+------
+create sizes;
+set types = (varchar);
+set weights = 3;
+add ("petite": 1, 0, 17);
+add ("small": 1, 0, 17);
+add ("medium": 1, 0, 35);
+add ("large": 1, 0, 22);
+add ("extra large", 1, 0, 17);
+add ("economy": 1, 0, 5);
+add ("N/A": 1, 1, 4);
+
+------
+-- units
+-- values weights
+-- -----------------------
+-- 1. unit name 1. uniform
+------
+create units;
+set types = (varchar);
+set weights = 1;
+add ("Unknown": 400);
+add ("Each": 400);
+add ("Dozen": 400);
+add ("Case": 400);
+add ("Pallet": 400);
+add ("Gross": 400);
+add ("Carton", 400);
+add ("Box": 400);
+add ("Bunch": 400);
+add ("Bundle": 400);
+add ("Oz": 400);
+add ("Lb": 400);
+add ("Ton": 400);
+add ("Ounce", 400);
+add ("Pound": 400);
+add ("Tsp": 400);
+add ("Tbl": 400);
+add ("Cup": 400);
+add ("Dram": 400);
+add ("Gram": 400);
+add ("N/A", 400);
+
+------
+-- container
+------
+create container;
+set types = (varchar);
+set weights = 1;
+add ("Unknown": 4);
+
+
+------
+-- colors
+-- values weights
+-- -----------------------
+-- 1. color 1. uniform
+-- 2. skewed dist (used by dbgen)
+-- 3. low likelihood (used by qgen)
+-- 4. medium likelihood (used by qgen)
+-- 5. high likelihood (used by qgen)
+------
+create colors;
+set types = (varchar);
+set weights = 5;
+set names = (name:uniform, skewed, low, medium, high);
+add ("almond": 1, 1, 1, 0, 0);
+add ("antique": 1, 1, 1, 0, 0);
+add ("aquamarine": 1, 1, 1, 0, 0);
+add ("azure": 1, 1, 1, 0, 0);
+add ("beige": 1, 1, 1, 0, 0);
+add ("bisque": 1, 1, 1, 0, 0);
+add ("black": 1, 1, 1, 0, 0);
+add ("blanched": 1, 1, 1, 0, 0);
+add ("blue": 1, 1, 1, 0, 0);
+add ("blush": 1, 1, 1, 0, 0);
+add ("brown": 1, 1, 1, 0, 0);
+add ("burlywood": 1, 1, 1, 0, 0);
+add ("burnished": 1, 1, 1, 0, 0);
+add ("chartreuse": 1, 1, 1, 0, 0);
+add ("chiffon": 1, 1, 1, 0, 0);
+add ("chocolate": 1, 1, 1, 0, 0);
+add ("coral": 1, 1, 1, 0, 0);
+add ("cornflower": 1, 1, 1, 0, 0);
+add ("cornsilk": 1, 1, 1, 0, 0);
+add ("cream": 1, 1, 1, 0, 0);
+add ("cyan": 1, 1, 1, 0, 0);
+add ("dark": 1, 1, 1, 0, 0);
+add ("deep": 1, 1, 1, 0, 0);
+add ("dim": 1, 1, 1, 0, 0);
+add ("dodger": 1, 1, 1, 0, 0);
+add ("drab": 1, 1, 1, 0, 0);
+add ("firebrick": 1, 1, 1, 0, 0);
+add ("floral": 1, 1, 1, 0, 0);
+add ("forest": 1, 1, 1, 0, 0);
+add ("frosted": 1, 1, 1, 0, 0);
+add ("gainsboro": 1, 3, 0, 1, 0);
+add ("ghost": 1, 3, 0, 1, 0);
+add ("goldenrod": 1, 3, 0, 1, 0);
+add ("green": 1, 3, 0, 1, 0);
+add ("grey": 1, 3, 0, 1, 0);
+add ("honeydew": 1, 3, 0, 1, 0);
+add ("hot": 1, 3, 0, 1, 0);
+add ("indian": 1, 3, 0, 1, 0);
+add ("ivory": 1, 3, 0, 1, 0);
+add ("khaki": 1, 3, 0, 1, 0);
+add ("lace": 1, 3, 0, 1, 0);
+add ("lavender": 1, 3, 0, 1, 0);
+add ("lawn": 1, 3, 0, 1, 0);
+add ("lemon": 1, 3, 0, 1, 0);
+add ("light": 1, 3, 0, 1, 0);
+add ("lime": 1, 3, 0, 1, 0);
+add ("linen": 1, 3, 0, 1, 0);
+add ("magenta": 1, 3, 0, 1, 0);
+add ("maroon": 1, 3, 0, 1, 0);
+add ("medium": 1, 3, 0, 1, 0);
+add ("metallic": 1, 3, 0, 1, 0);
+add ("midnight": 1, 3, 0, 1, 0);
+add ("mint": 1, 3, 0, 1, 0);
+add ("misty": 1, 3, 0, 1, 0);
+add ("moccasin": 1, 3, 0, 1, 0);
+add ("navajo": 1, 3, 0, 1, 0);
+add ("navy": 1, 3, 0, 1, 0);
+add ("olive": 1, 3, 0, 1, 0);
+add ("orange": 1, 3, 0, 1, 0);
+add ("orchid": 1, 3, 0, 1, 0);
+add ("pale": 1, 9, 0, 0, 1);
+add ("papaya": 1, 9, 0, 0, 1);
+add ("peach": 1, 9, 0, 0, 1);
+add ("peru": 1, 9, 0, 0, 1);
+add ("pink": 1, 9, 0, 0, 1);
+add ("plum": 1, 9, 0, 0, 1);
+add ("powder": 1, 9, 0, 0, 1);
+add ("puff": 1, 9, 0, 0, 1);
+add ("purple": 1, 9, 0, 0, 1);
+add ("red": 1, 9, 0, 0, 1);
+add ("rose": 1, 9, 0, 0, 1);
+add ("rosy": 1, 9, 0, 0, 1);
+add ("royal": 1, 9, 0, 0, 1);
+add ("saddle": 1, 9, 0, 0, 1);
+add ("salmon": 1, 9, 0, 0, 1);
+add ("sandy": 1, 9, 0, 0, 1);
+add ("seashell": 1, 9, 0, 0, 1);
+add ("sienna": 1, 9, 0, 0, 1);
+add ("sky": 1, 9, 0, 0, 1);
+add ("slate": 1, 9, 0, 0, 1);
+add ("smoke": 1, 9, 0, 0, 1);
+add ("snow": 1, 9, 0, 0, 1);
+add ("spring": 1, 9, 0, 0, 1);
+add ("steel": 1, 9, 0, 0, 1);
+add ("tan": 1, 9, 0, 0, 1);
+add ("thistle": 1, 9, 0, 0, 1);
+add ("tomato": 1, 9, 0, 0, 1);
+add ("turquoise": 1, 9, 0, 0, 1);
+add ("violet": 1, 9, 0, 0, 1);
+add ("wheat": 1, 9, 0, 0, 1);
+add ("white": 1, 9, 0, 0, 1);
+add ("yellow": 1, 9, 0, 0, 1);
+
+------
+-- brand_syllables
+-- values weights
+-- -----------------------
+-- 1. syllable 1. uniform
+------
+create brand_syllables;
+set types = (varchar);
+set weights = 1;
+add ("univ": 1);
+add ("amalg": 1);
+add ("importo":1);
+add ("exporti":1);
+add ("edu pack":1);
+add ("scholar":1);
+add ("corp":1);
+add ("brand":1);
+add ("nameless":1);
+add ("maxi":1);
+
+------
+-- i_current_price
+-- values weights
+-- -----------------------
+-- 1. min 1. unified
+-- 2. max 2. low
+-- 3. medium
+-- 4. high
+-- NOTE: distcomp doesn't currently support decimal data type directly
+------
+create i_current_price;
+set types = (int, varchar, varchar);
+set weights = 4;
+set names = (index, low_bound, high_bound: skew, high, medium, low);
+add (1, "0.09", "4.99": 60, 1, 0, 0);
+add (2, "5.00", "9.99": 30, 0, 1, 0);
+add (3, "10.00", "99.99":10, 0, 0, 1);
+
+------
+-- i_manufact_id
+-- values weights
+-- -----------------------
+-- 1. ind 1. unified
+-- 2. min 2. low
+-- 3. max 3. medium
+-- 4. high
+------
+create i_manufact_id;
+set types = (int, int, int);
+set weights = 4;
+add (1, 1, 333: 60, 1, 0, 0);
+add (2, 334, 666: 30, 0, 1, 0);
+add (3, 667, 1000: 10, 0, 0, 1);
+
+------
+-- i_manager_id
+-- values weights
+-- -----------------------
+-- 1. index 1. unified
+-- 2. min 2. low
+-- 3. max 3. medium
+-- 4. high
+------
+create i_manager_id;
+set types = (int, int, int);
+set weights = 4;
+add (1, 1, 33: 60, 1, 0, 0);
+add (2, 34, 66: 30, 0, 1, 0);
+add (3, 67, 100:10, 0, 0, 1);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/join.c b/ydb/library/benchmarks/gen/tpcds-dbgen/join.c
new file mode 100644
index 000000000000..cb3655194a47
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/join.c
@@ -0,0 +1,462 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "date.h"
+#include "decimal.h"
+#include "dist.h"
+#include "constants.h"
+#include "columns.h"
+#include "genrand.h"
+#include "tdefs.h"
+#include "tables.h"
+#include "build_support.h"
+#include "tpcds.idx.h"
+#include "scaling.h"
+#include "w_web_sales.h"
+#include "error_msg.h"
+#include "tdefs.h"
+#include "scd.h"
+#include "r_params.h"
+#include "sparse.h"
+
+static ds_key_t web_join(int col, ds_key_t join_key);
+
+/*
+* Routine: date_join(int from_tbl, int join_count)
+* Purpose: account for the different date-adjusted patterns in the data set
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: Relies on existing RNG code, which isn't really 64bit; will probably requre a rework of the genrand_xx routines
+*/
+static ds_key_t
+date_join(int from_tbl, int from_col, ds_key_t join_count, int nYear)
+{
+ int nDay,
+ nTemp,
+ nMin = -1,
+ nMax = -1,
+ nResult;
+ static int bInit = 0,
+ jToday;
+ date_t TempDate;
+
+ if (bInit == 0)
+ {
+ strtodt(&TempDate, TODAYS_DATE);
+ jToday = dttoj(&TempDate);
+ bInit = 1;
+ }
+
+ switch(from_tbl)
+ {
+ case STORE_SALES:
+ case CATALOG_SALES:
+ case WEB_SALES:
+ pick_distribution(&nDay, "calendar", 1, calendar_sales + is_leap(nYear), from_col);
+ break;
+
+ /*
+ * returns are keyed to the sale date, with the lag between sale and return selected within a known range, based on
+ * sales channel
+ */
+ case STORE_RETURNS:
+ nMin = SS_MIN_SHIP_DELAY;
+ nMax = SS_MAX_SHIP_DELAY;
+ case CATALOG_RETURNS:
+ if (nMin == -1)
+ {
+ nMin = CS_MIN_SHIP_DELAY;
+ nMax = CS_MAX_SHIP_DELAY;
+ }
+ case WEB_RETURNS:
+ if (nMin == -1)
+ {
+ nMin = WS_MIN_SHIP_DELAY;
+ nMax = WS_MAX_SHIP_DELAY;
+ }
+ genrand_integer(&nTemp, DIST_UNIFORM, nMin * 2, nMax * 2, 0, from_col);
+ return(join_count + nTemp);
+ break;
+ case WEB_SITE:
+ case WEB_PAGE:
+ return(web_join(from_col, join_count));
+ default:
+ pick_distribution(&nDay, "calendar", 1, 1 + is_leap(nYear), from_col);
+ break;
+ }
+
+ TempDate.year = nYear;
+ TempDate.month = 1;
+ TempDate.day = 1;
+
+ nResult = dttoj(&TempDate) + nDay;
+
+ return((ds_key_t)(nResult > jToday)?-1:nResult);
+}
+
+/*
+* Routine: time_join(int from_tbl, int join_count)
+* Purpose: create joins that are time-skewed
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: Relies on existing RNG code, which isn't really 64bit; will probably requre a rework of the genrand_xx routines
+*/
+static ds_key_t
+time_join(int to_tbl, int to_col, ds_key_t join_count)
+{
+ int hour,
+ secs;
+
+ switch(to_tbl)
+ {
+ case STORE_SALES:
+ case STORE_RETURNS:
+ pick_distribution(&hour, "hours", 1, 2, to_col);
+ break;
+ case CATALOG_SALES:
+ case WEB_SALES:
+ case CATALOG_RETURNS:
+ case WEB_RETURNS:
+ pick_distribution(&hour, "hours", 1, 3, to_col);
+ break;
+ default:
+ pick_distribution(&hour, "hours", 1, 1, to_col);
+ break;
+ }
+ genrand_integer(&secs, DIST_UNIFORM, 0, 3599, 0, to_col);
+
+
+ return((ds_key_t)(hour * 3600 + secs));
+}
+
+/*
+* Routine: cp_join(int from_tbl, int join_count)
+* Purpose: create joins to catalog_page
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+static ds_key_t
+cp_join(int tbl, int col, ds_key_t jDate)
+{
+ ds_key_t res;
+ static int init = 0,
+ nPagePerCatalog;
+ int nType,
+ nCount,
+ nOffset,
+ nPage;
+ static date_t *dTemp;
+ char *szTemp;
+
+ if (!init)
+ {
+ nPagePerCatalog = ((int)get_rowcount(CATALOG_PAGE) / CP_CATALOGS_PER_YEAR) / (YEAR_MAXIMUM - YEAR_MINIMUM + 2);
+ dTemp = strtodate(DATA_START_DATE);
+ init = 1;
+ }
+
+ nType = pick_distribution(&szTemp, "catalog_page_type", 1, 2, col);
+ genrand_integer(&nPage, DIST_UNIFORM, 1, nPagePerCatalog, 0, col);
+ nOffset = (int)jDate - dTemp->julian - 1;
+ nCount = (nOffset / 365) * CP_CATALOGS_PER_YEAR;
+ nOffset %= 365;
+
+ switch(nType)
+ {
+ case 1: /* bi-annual */
+ if (nOffset > 183)
+ nCount += 1;
+ break;
+ case 2: /* quarterly */
+ nCount += (nOffset / 91);
+ break;
+ case 3: /* monthly */
+ nCount += (nOffset / 31);
+ break;
+ }
+
+ res = CP_SK(nCount, nPagePerCatalog, nPage) ;
+
+ return(res);
+}
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+getCatalogNumberFromPage(ds_key_t kPageNumber)
+{
+ static int bInit = 0;
+ static int nPagePerCatalog;
+
+ if (!bInit)
+ {
+ nPagePerCatalog = ((int)get_rowcount(CATALOG_PAGE) / CP_CATALOGS_PER_YEAR) / (YEAR_MAXIMUM - YEAR_MINIMUM + 2);
+ bInit = 1;
+ }
+
+ return(kPageNumber / nPagePerCatalog);
+
+}
+
+
+/*
+* Routine: web_join(int col, ds_key_t join_key)
+* Purpose: create joins to web_site/web_page. These need to be handled together, since the date of transaction
+* must fit within the lifetime of a particular page, which must fit within the lifetime of a particular site
+* Data Structures:
+*
+* Params:
+* join_key is one of two things:
+* 1. the xxx_sk for a particular row in the dimension for which we need appropriate dates
+* 2. a julian date for which we need to pick a valid xxx_sk value
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+static ds_key_t
+web_join(int col, ds_key_t join_key)
+{
+ ds_key_t res = -1,
+ kSite;
+ static int init = 0,
+ nConcurrentSites,
+ nSiteDuration,
+ nOffset;
+ static date_t *dSiteOpen, /* open/close dates for current web site */
+ *dSiteClose;
+ int nTemp;
+ tdef *pWS = getSimpleTdefsByNumber(WEB_SITE);
+ tdef *pWP = getSimpleTdefsByNumber(WEB_PAGE);
+
+
+ if (!init)
+ {
+ dSiteClose = strtodate(WEB_END_DATE);
+ nSiteDuration = dSiteClose->julian;
+ free(dSiteClose);
+ nConcurrentSites = (int)get_rowcount(CONCURRENT_WEB_SITES);
+ dSiteOpen = strtodate(WEB_START_DATE);
+ nSiteDuration -= dSiteOpen->julian;
+ free(dSiteOpen);
+ nSiteDuration *= nConcurrentSites;
+ nOffset = (dSiteClose->julian - dSiteOpen->julian) / (2 * nSiteDuration) ;
+ init = 1;
+ }
+
+ switch(col)
+ {
+/**************
+ * join_key is the xxx_sk value for a dimension
+ */
+ case WEB_OPEN_DATE:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - ((join_key * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ if (WEB_IS_REPLACED(join_key)) /* this site is completely replaced */
+ {
+ if (WEB_IS_REPLACEMENT(join_key)) /* this is the second site */
+ {
+ /* the open date of the second site needs to align on a revision boundary */
+ res += nOffset * nSiteDuration;
+ }
+ }
+ break;
+ case WEB_CLOSE_DATE:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - ((join_key * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ res += pWS->nParam * nSiteDuration;
+ if (WEB_IS_REPLACED(join_key)) /* this site is completely replaced */
+ {
+ if (!WEB_IS_REPLACEMENT(join_key)) /* this is the first site */
+ {
+ /* the close date of the first site needs to align on a revision boundary */
+ res -= pWS->nParam * nSiteDuration / 2;
+ }
+ }
+ break;
+ case WEB_REC_START_DATE_ID:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - (((join_key - 1) * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ res += (join_key % pWS->nParam) * nSiteDuration;
+ break;
+ case WEB_REC_END_DATE_ID:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - ((join_key * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ res += ((join_key + 1) % pWS->nParam) * nSiteDuration * 5 - 1;
+ break;
+ case WP_REC_START_DATE_ID:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - (((join_key - 1) * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ res += (join_key % pWP->nParam) * nSiteDuration * 5;
+ break;
+ case WP_REC_END_DATE_ID:
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ res = dSiteOpen->julian - ((join_key * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ free(dSiteOpen);
+ res += ((join_key + 1) % pWP->nParam) * nSiteDuration - 1;
+ break;
+ case WP_CREATION_DATE_SK:
+ /* page creation has to happen outside of the page window, to assure a constant number of pages,
+ * so it occurs in the gap between site creation and the site's actual activity. For sites that are replaced
+ * in the time span of the data set, this will depend on whether they are the first version or the second
+ */
+ dSiteOpen = strtodate(DATE_MINIMUM);
+ kSite = join_key / WEB_PAGES_PER_SITE + 1;
+ res = dSiteOpen->julian - (((int)kSite * WEB_DATE_STAGGER) % nSiteDuration / 2);
+ if (((int)kSite % pWP->nParam) == 0) /* this is a site that gets replaced */
+ {
+ genrand_integer(&nTemp, DIST_UNIFORM, (int)res, dSiteOpen->julian, 0, col);
+ res = nTemp;
+ }
+ free(dSiteOpen);
+ break;
+/*****************
+ * join key from here on is a date for which a valid site/page must be found
+ * the sk for a web page is a compound value: and each component
+ * is a combination of the unique site or page and the active revision to it
+ */
+ case WR_WEB_PAGE_SK:
+ case WS_WEB_PAGE_SK:
+ res = genrand_integer(NULL, DIST_UNIFORM, 1, WEB_PAGES_PER_SITE, 0, col);
+ break;
+ }
+
+ return(res);
+}
+
+/*
+* Routine: mk_join(int from_tbl, int to_tbl, int join_count)
+* Purpose: return a primary key for to_tbl, creating a join between from_tbl and to_tbl
+* Algorithm: all joins are currently uniformly distributed. The calling convention allows for each
+* join in the schema to be distributed differently
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: Relies on existing RNG code, which isn't really 64bit; will probably requre a rework of the genrand_xx routines
+*/
+ds_key_t
+mk_join(int from_col, int to_tbl, ds_key_t join_count)
+{
+ ds_key_t res;
+ int nYear,
+ nFromTable = 0,
+ nTableIndex = to_tbl;
+ tdef *pTdef;
+
+ nFromTable = getTableFromColumn(from_col);
+
+ /*
+ * if the table being joined to employs sparse keys, the join gets handled in sparse.c
+ */
+ pTdef = getSimpleTdefsByNumber(to_tbl);
+ if (pTdef->flags & FL_SPARSE)
+ {
+ if (pTdef->arSparseKeys == NULL)
+ initSparseKeys(to_tbl);
+ }
+
+ switch(to_tbl)
+ {
+ /* some tables require special handling */
+ case CATALOG_PAGE:
+ return(cp_join(nFromTable, from_col, join_count));
+ case DATE:
+ genrand_integer(&nYear, DIST_UNIFORM, YEAR_MINIMUM, YEAR_MAXIMUM, 0, from_col);
+ return(date_join(nFromTable, from_col, join_count, nYear));
+ case TIME:
+ return(time_join(nFromTable, from_col, join_count));
+ /* the rest of the tables use standard, uniform joins */
+ default:
+ /*
+ * all TYPE2 tables (i.e., history keeping dimensions) need a special join algorithm
+ */
+ if (pTdef->flags & FL_TYPE_2)
+ return(scd_join(nTableIndex, from_col, join_count));
+
+ if (pTdef->flags & FL_SPARSE)
+ return(randomSparseKey(nTableIndex, from_col));
+
+ genrand_key(&res, DIST_UNIFORM, (ds_key_t)1, get_rowcount(nTableIndex), (ds_key_t)0, from_col);
+ break;
+ }
+
+
+ return((ds_key_t)res);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.c b/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.c
new file mode 100644
index 000000000000..7ceaee2e3143
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.c
@@ -0,0 +1,217 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+#include "keywords.h"
+#include "StringBuffer.h"
+#include "expr.h"
+#include "y.tab.h"
+#include "substitution.h"
+#include "error_msg.h"
+#include "query_handler.h"
+
+extern template_t *g_Template;
+
+/* NOTE: current code requires WORKLOAD to be first entry */
+static keyword_t KeyWords[] =
+{
+ {"ID", 0, 0},
+ {"SQL", 0, 0},
+ {"DEFINE", 0, 0},
+ {"RANDOM", 0, 0},
+ {"UNIFORM", 0, 0},
+ {"RANGE", 0, 0},
+ {"DATE", 0, 0},
+ {"INCLUDE", 0, 0},
+ {"TEXT", 0, 0},
+ {"DIST", 0, 0},
+ {"LIST", 0, 0},
+ {"ROWCOUNT", 0, 0},
+ {"BEGIN", 0, 0},
+ {"END", 0, 0},
+ {"SALES", 0, 0},
+ {"RETURNS", 0, 0},
+ {"DISTMEMBER", 0, 0},
+ {"DISTWEIGHT", 0, 0},
+ {"_QUERY", EXPR_FL_INT, 0},
+ {"_STREAM", EXPR_FL_INT, 0},
+ {"_TEMPLATE", EXPR_FL_CHAR, 0},
+ {"_SEED", EXPR_FL_CHAR, 0},
+ {"SCALE", 0, 0},
+ {"SCALESTEP", 0, 0},
+ {"SET", 0, 0},
+ {"ADD", 0, 0},
+ {"NAMES", 0, 0},
+ {"TYPES", 0, 0},
+ {"WEIGHTS", 0, 0},
+ {"INT", 0, 0},
+ {"VARCHAR", 0, 0},
+ {"DECIMAL", 0, 0},
+ {"_LIMIT", EXPR_FL_INT, 0},
+ {"_LIMITA", EXPR_FL_INT, 0},
+ {"_LIMITB", EXPR_FL_INT, 0},
+ {"_LIMITC", EXPR_FL_INT, 0},
+ {"ULIST", 0, 0},
+ {NULL, 0}
+};
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void InitKeywords()
+{
+ int nIndex = TOK_ID;
+ keyword_t *pKW;
+ expr_t *pExpr;
+
+ g_Template = (template_t *)malloc(sizeof(struct TEMPLATE_T));
+ MALLOC_CHECK(g_Template);
+ if (!g_Template)
+ ReportError(QERR_NO_MEMORY, "InitKeywords()", 1);
+ memset(g_Template, 0, sizeof(struct TEMPLATE_T));
+ g_Template->SubstitutionList = makeList(L_FL_SORT, compareSubstitution);
+
+ for (pKW = &KeyWords[0]; pKW->szName; pKW++)
+ {
+ pKW->nIndex = nIndex++;
+ if (pKW->nFlags)
+ {
+ pExpr = MakeIntConstant(pKW->nIndex);
+ defineSubstitution(g_Template, pKW->szName, pExpr);
+ pExpr->nFlags |= EXPR_FL_KEYWORD;
+ }
+ }
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int FindKeyword(char *szWord)
+{
+ keyword_t *pKW;
+
+ for (pKW = &KeyWords[0]; pKW->szName; pKW++)
+ {
+ if (strcasecmp(pKW->szName, szWord) == 0)
+ return(pKW->nIndex);
+#ifdef DEBUG
+ else fprintf("comparing '%s' and '%s'\n", pKW->szName, szWord);
+#endif /* DEBUG */
+ }
+
+ return(-1);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+char *KeywordText(int nKeyword)
+{
+ if (nKeyword < TOK_ID)
+ return(NULL);
+
+ nKeyword -= TOK_ID;
+
+ if (nKeyword < 0)
+ return(NULL);
+
+ return(KeyWords[nKeyword].szName);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+expr_t *
+getKeywordValue(int nIndex)
+{
+ substitution_t *pSub;
+
+ pSub = findSubstitution(pCurrentQuery, KeywordText(nIndex), 0);
+
+ return((pSub)?pSub->pAssignment:NULL);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.h b/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.h
new file mode 100644
index 000000000000..4917004b5d5c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/keywords.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef KEYWORDS_H
+#define KEYWORDS_H
+#include "expr.h"
+typedef struct KEYWORD_T {
+ char *szName;
+ int nFlags;
+ int nIndex;
+ } keyword_t;
+
+/* flag values for keywords */
+#define KYWD_SUBSTITUION 0x01 /* this is actually a pre-defined substitution */
+
+void InitKeywords();
+int FindKeyword(char *szWord);
+char *KeywordText(int nKeyword);
+expr_t *getKeywordValue(int nIndex);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/list.c b/ydb/library/benchmarks/gen/tpcds-dbgen/list.c
new file mode 100644
index 000000000000..6130b47b8962
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/list.c
@@ -0,0 +1,329 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include "list.h"
+#include "error_msg.h"
+
+list_t *
+makeList(int nFlags, int (*SortFunc)(const void *d1, const void *d2))
+{
+ list_t *pRes;
+
+ pRes = (list_t *)malloc(sizeof(list_t));
+ MALLOC_CHECK(pRes);
+ if (pRes == NULL)
+ ReportError(QERR_NO_MEMORY, "client list", 1);
+ memset(pRes, 0, sizeof(list_t));
+ pRes->nFlags = nFlags;
+ pRes->pSortFunc = SortFunc;
+
+ return(pRes);
+}
+
+list_t *
+addList(list_t *pList, void *pData)
+{
+ node_t *pNode;
+ node_t *pInsertPoint;
+ int bMoveForward = (pList->nFlags & L_FL_HEAD);
+
+ pNode = (node_t *)malloc(sizeof(node_t));
+ MALLOC_CHECK(pNode);
+ if (!pNode)
+ ReportErrorNoLine(QERR_NO_MEMORY, "client node", 1);
+ memset(pNode, 0, sizeof(node_t));
+ pNode->pData = pData;
+
+ if (pList->nMembers == 0) /* first node */
+ {
+ pList->head = pNode;
+ pList->tail = pNode;
+ pList->nMembers = 1;
+ return(pList);
+ }
+
+ if (pList->nFlags & L_FL_SORT)
+ {
+ if (pList->pSortFunc(pData, pList->head->pData) <= 0)
+ {
+ /* new node become list head */
+ pNode->pNext = pList->head;
+ pList->head->pPrev = pNode;
+ pList->head = pNode;
+ pList->nMembers += 1;
+ return(pList);
+ }
+ pInsertPoint = pList->head;
+
+ /* find the correct point to insert new node */
+ while (pInsertPoint)
+ {
+ if (pList->pSortFunc(pInsertPoint->pData, pData) < 0)
+ break;
+ pInsertPoint = (bMoveForward)?pInsertPoint->pNext:pInsertPoint->pPrev;
+ }
+ if (pInsertPoint) /* mid-list insert */
+ {
+ pNode->pNext = pInsertPoint->pNext;
+ pNode->pPrev = pInsertPoint;
+ pInsertPoint->pNext = pNode;
+ }
+ else
+ {
+ if (bMoveForward)
+ {
+ /* new node becomes list tail */
+ pNode->pPrev = pList->tail;
+ pList->tail->pNext = pNode;
+ pList->tail = pNode;
+ }
+ else
+ {
+ /* new node become list head */
+ pNode->pNext = pList->head;
+ pList->head->pPrev = pNode;
+ pList->head = pNode;
+ }
+ }
+
+ pList->nMembers += 1;
+
+ return(pList);
+ }
+
+ if (pList->nFlags & L_FL_HEAD)
+ {
+ pNode->pNext = pList->head;
+ pList->head->pPrev = pNode;
+ pList->head = pNode;
+ pList->nMembers += 1;
+ }
+ else
+ {
+ pNode->pPrev = pList->tail;
+ pList->tail->pNext = pNode;
+ pList->tail = pNode;
+ pList->nMembers += 1;
+ }
+
+ return(pList);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+removeItem(list_t *pList, int bHead)
+{
+ void *pResult;
+
+ if (pList->nMembers == 0)
+ return(NULL);
+
+ if (!bHead)
+ {
+ pResult = pList->tail->pData;
+ pList->tail = pList->tail->pPrev;
+ pList->tail->pNext = NULL;
+ }
+ else
+ {
+ pResult = pList->head->pData;
+ pList->head = pList->head->pNext;
+ pList->head->pPrev = NULL;
+ }
+
+ pList->nMembers -= 1;
+
+ return(pResult);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+getHead(list_t *pList)
+{
+ assert(pList);
+
+ if (!pList->head)
+ return(NULL);
+
+ pList->pCurrent = pList->head;
+
+ return(pList->pCurrent->pData);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+getTail(list_t *pList)
+{
+ assert(pList);
+
+ if (!pList->tail)
+ return(NULL);
+
+ pList->pCurrent = pList->tail;
+
+ return(pList->pCurrent->pData);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+getNext(list_t *pList)
+{
+ assert(pList);
+
+ if (!pList->pCurrent->pNext)
+ return(NULL);
+
+ pList->pCurrent = pList->pCurrent->pNext;
+
+ return(pList->pCurrent->pData);
+}
+
+/*
+* Routine:
+* Purpose: findList(list_t *pList, void *pData)
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+findList(list_t *pList, void *pData)
+{
+ void *pNode;
+ struct LIST_NODE_T *pOldCurrent = pList->pCurrent;
+
+ for (pNode = getHead(pList); pNode; pNode = getNext(pList))
+ if (pList->pSortFunc(pNode, pData) == 0)
+ {
+ pList->pCurrent = pOldCurrent;
+ return(pNode);
+ }
+
+ pList->pCurrent = pOldCurrent;
+ return(NULL);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void *
+getItem(list_t *pList, int nIndex)
+{
+ void *pResult;
+ struct LIST_NODE_T *pOldCurrent = pList->pCurrent;
+
+ if (nIndex > length(pList))
+ return(NULL);
+
+
+ for (pResult = getHead(pList); --nIndex; pResult = getNext(pList));
+
+ pList->pCurrent = pOldCurrent;
+ return(pResult);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/list.h b/ydb/library/benchmarks/gen/tpcds-dbgen/list.h
new file mode 100644
index 000000000000..2daea003fb7d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/list.h
@@ -0,0 +1,74 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef LIST_H
+#define LIST_H
+typedef struct LIST_NODE_T
+{
+ struct LIST_NODE_T *pNext;
+ struct LIST_NODE_T *pPrev;
+ void *pData;
+} node_t;
+
+typedef struct LIST_T
+{
+ struct LIST_NODE_T *head;
+ struct LIST_NODE_T *tail;
+ struct LIST_NODE_T *pCurrent;
+ int (*pSortFunc)(const void *pD1, const void *pD2);
+ int nMembers;
+ int nFlags;
+} list_t;
+
+/* list_t flags */
+#define L_FL_HEAD 0x01 /* add at head */
+#define L_FL_TAIL 0x02 /* add at tail */
+#define L_FL_SORT 0x04 /* create sorted list */
+
+#define length(list) list->nMembers
+
+
+list_t *makeList(int nFlags, int (*pSortFunc)(const void *pD1, const void *pD2));
+list_t *addList(list_t *pList, void *pData);
+void *findList(list_t *pList, void *pData);
+void *removeItem(list_t *pList, int bFromHead);
+void *getHead(list_t *pList);
+void *getTail(list_t *pList);
+void *getNext(list_t *pList);
+void *getItem(list_t *pList, int nIndex);
+#endif
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/load.c b/ydb/library/benchmarks/gen/tpcds-dbgen/load.c
new file mode 100644
index 000000000000..89db18d4dabb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/load.c
@@ -0,0 +1,116 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include "tables.h"
+
+#ifdef SQLSERVER
+// ODBC headers
+#include
+#include
+#include
+SQLHENV henv;
+#endif
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+create_table(int nTable)
+{
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+load_init(void)
+
+{
+#ifdef SQLSERVER
+ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
+ SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
+#endif
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+load_close(void)
+{
+#ifdef SQLSERVER
+ SQLFreeHandle(SQL_HANDLE_ENV, henv);
+#endif
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/load.h b/ydb/library/benchmarks/gen/tpcds-dbgen/load.h
new file mode 100644
index 000000000000..4e7539eae5a8
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/load.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef LOAD_H
+#define LOAD_H
+#include "tables.h"
+void load_init(void);
+void load_close(void);
+int create_table(int nTable);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/mathops.h b/ydb/library/benchmarks/gen/tpcds-dbgen/mathops.h
new file mode 100644
index 000000000000..1615a8b7927b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/mathops.h
@@ -0,0 +1,54 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#define OP_PLUS 0x00001
+#define OP_MINUS 0x00002
+#define OP_MULT 0x00004
+#define OP_DIV 0x00008
+#define OP_MOD 0x00010
+#define OP_XOR 0x00020
+#define OP_PAREN 0x00040
+#define OP_BRACKET 0x00080
+#define OP_NEST 0x00100 /* a --> (a) */
+#define OP_NEG 0x00200
+#define OP_ADDR 0x00400 /* get an address */
+#define OP_PTR 0x00800 /* reference through a pointer */
+#define OP_FUNC 0x01000 /* user function/macro */
+#define OP_UNIQUE 0x02000 /* built in functions start here */
+#define OP_TEXT 0x04000
+#define OP_RANDOM 0x08000
+#define OP_RANGE 0x10000
+#define OP_USER 0x20000 /* user defined function */
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/misc.c b/ydb/library/benchmarks/gen/tpcds-dbgen/misc.c
new file mode 100644
index 000000000000..f605fbe4b2ad
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/misc.c
@@ -0,0 +1,127 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include
+#include
+#ifndef _POSIX_SOURCE
+#include
+#endif /* POSIX_SOURCE */
+#include
+#ifdef AIX
+#include
+#endif /* AIX */
+#include
+#include
+#include "date.h"
+#include "decimal.h"
+#include "dist.h"
+#include "misc.h"
+#include "tdefs.h"
+#include "r_params.h"
+#include "genrand.h"
+
+static char alpha_num[65] =
+ "0123456789abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ,";
+
+
+char *getenv (const char *name);
+int print_separator (int sep);
+
+extern long Seed[];
+
+
+#ifdef WIN32
+#define PATH_SEP '\\'
+#else
+#define PATH_SEP '/'
+#endif
+
+int file_num = -1;
+
+/*
+ *
+ * Various routines that handle distributions, value selections and
+ * seed value management for the DSS benchmark. Current functions:
+ * env_config -- set config vars with optional environment override
+ * a_rnd(min, max) -- random alphanumeric within length range
+ */
+
+/*
+ * env_config: look for a environmental variable setting and return its
+ * value; otherwise return the default supplied
+ */
+char *
+env_config (char *var, char *dflt);
+/*
+{
+ static char *evar;
+
+ if ((evar = getenv (var)) != NULL)
+ return (evar);
+ else
+ return (dflt);
+}
+*/
+/*
+ * generate a random string with length randomly selected in [min, max]
+ * and using the characters in alphanum (currently includes a space
+ * and comma)
+ */
+int
+a_rnd (int min, int max, int column, char *dest);
+/*
+{
+ int i,
+ len,
+ char_int;
+
+ genrand_integer (&len, DIST_UNIFORM, min, max, 0, column);
+ for (i = 0; i < len; i++)
+ {
+ if (i % 5 == 0)
+ genrand_integer (&char_int, DIST_UNIFORM, 0, 1 << 30, 0, column);
+ *(dest + i) = alpha_num[char_int & 077];
+ char_int >>= 6;
+ }
+ *(dest + len) = '\0';
+ return (len);
+}
+*/
\ No newline at end of file
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/misc.h b/ydb/library/benchmarks/gen/tpcds-dbgen/misc.h
new file mode 100644
index 000000000000..2693347be0fa
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/misc.h
@@ -0,0 +1,48 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef MISC_H
+#define MISC_H
+int prep_direct(int dialect);
+int close_direct(int dialect);
+int pick_tbl(char *dname);
+int itostr(char *dest, int i);
+int char_op(char *dest, int op, char *s1, char *s2);
+char *gen_text(char *dest, int min, int max, int stream);
+int int_op(int *dest, int op, int arg1, int arg2);
+
+char *env_config (char *var, char *dflt);
+int a_rnd (int min, int max, int column, char *dest);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.c b/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.c
new file mode 100644
index 000000000000..9f3ae5f7b0be
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.c
@@ -0,0 +1,177 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+
+/*
+* Routine: mkheader()
+* Purpose: keep columns.h and streams.h in sync
+* Algorithm: this should really be a simple shell script, but need to assure that it will
+* port to non-unix (i.e., windows)
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+main(int ac, char **av)
+{
+ FILE *pInputFile,
+ *pColumnsFile,
+ *pStreamsFile,
+ *pTablesFile;
+ char szColumn[80],
+ szTable[80],
+ szLine[1024],
+ szDuplicate[80],
+ szLastTable[80],
+ *cp;
+ int nLineNumber = 0,
+ nColumnCount = 1,
+ bError = 0,
+ nTableCount = 0,
+ nRNGUsage = 1;
+
+ if (ac != 2)
+ bError = 1;
+
+ pInputFile = fopen(av[1], "r");
+ if (pInputFile == NULL)
+ bError = 1;
+
+ pColumnsFile = fopen("columns.h", "w");
+ if (pColumnsFile == NULL)
+ bError = 1;
+
+ pStreamsFile = fopen("streams.h", "w");
+ if (pStreamsFile == NULL)
+ bError = 1;
+
+ pTablesFile = fopen("tables.h", "w");
+ if (pTablesFile == NULL)
+ bError = 1;
+
+ if (bError)
+ {
+ fprintf(stderr, "USAGE:\n\t%s file -- build headers based on file\n", av[0]);
+ fprintf(stderr, "\tcolumns.h and streams.h produced as a result\n");
+ exit(-1);
+ }
+
+ /* set up varaibles */
+ szLastTable[0] = '\0';
+
+ /* put out minimal headers for each file */
+ fprintf(pColumnsFile, "/*\n * THIS IS A GENERATED FILE\n * SEE COLUMNS.LIST\n*/\n");
+ fprintf(pStreamsFile, "/*\n * THIS IS A GENERATED FILE\n * SEE COLUMNS.LIST\n*/\n");
+ fprintf(pTablesFile, "/*\n * THIS IS A GENERATED FILE\n * SEE COLUMNS.LIST\n*/\n");
+ fprintf(pColumnsFile, "#ifndef COLUMNS_H\n#define COLUMNS_H\n");
+ fprintf(pStreamsFile, "#ifndef STREAMS_H\n#define STREAMS_H\n");
+ fprintf(pStreamsFile, "rng_t Streams[] = {\n{0, 0, 0, 0, 0, 0, 0},\n");
+ fprintf(pTablesFile, "#ifndef TABLES_H\n#define TABLES_H\n");
+
+ /* add an entry to each for each column in the list */
+ while (fgets(szLine, 1024, pInputFile) != NULL)
+ {
+ nLineNumber += 1;
+ szColumn[0] = szTable[0] = szDuplicate[0] = '\0';
+ nRNGUsage = 1;
+ if ((cp = strchr(szLine, '#')) != NULL)
+ *cp = '\0';
+ if (!strlen(szLine))
+ continue;
+ if (sscanf(szLine, "%s %s %d %s", szColumn, szTable, &nRNGUsage, szDuplicate) != 4)
+ {
+ strcpy(szDuplicate, szColumn);
+ if (sscanf(szLine, "%s %s %d", szColumn, szTable, &nRNGUsage) != 3)
+ {
+ if (sscanf(szLine, "%s %s", szColumn, szTable) != 2)
+ continue;
+ }
+ }
+
+ fprintf(pStreamsFile, "{0, %d, 0, 0, %s, %s, %s},\n", nRNGUsage, szColumn, szTable, szDuplicate);
+ if (strcmp(szLastTable, szTable))
+ {
+ if (strlen(szLastTable))
+ fprintf(pColumnsFile, "#define %s_END\t%d\n", szLastTable, nColumnCount - 1);
+ fprintf(pColumnsFile, "#define %s_START\t%d\n", szTable, nColumnCount);
+ fprintf(pTablesFile, "#define %s\t%d\n", szTable, nTableCount++);
+ strcpy(szLastTable, szTable);
+ }
+ fprintf(pColumnsFile, "#define %s\t%d\n", szColumn, nColumnCount++);
+ }
+
+ /* close out the files */
+ fprintf(pStreamsFile, "{-1, -1, -1, -1, -1, -1, -1}\n};\n");
+ fprintf(pStreamsFile, "#endif\n");
+ fprintf(pColumnsFile, "#define %s_END\t%d\n", szLastTable, nColumnCount - 1);
+ fprintf(pColumnsFile, "#define MAX_COLUMN\t%d\n", nColumnCount - 1);
+ fprintf(pColumnsFile, "#endif\n");
+ fprintf(pTablesFile, "#define PSEUDO_TABLE_START\t%d\n", nTableCount);
+ fprintf(pTablesFile, "/* PSEUDO TABLES from here on; used in hierarchies */\n");
+ fprintf(pTablesFile, "#define ITEM_BRAND\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define ITEM_CLASS\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define ITEM_CATEGORY\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define DIVISIONS\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define COMPANY\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define CONCURRENT_WEB_SITES\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define ACTIVE_CITIES\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define ACTIVE_COUNTIES\t%d\n", nTableCount++);
+ fprintf(pTablesFile, "#define ACTIVE_STATES\t%d\n", nTableCount);
+ fprintf(pTablesFile, "#define MAX_TABLE\t%d\n", nTableCount);
+ fprintf(pTablesFile, "#endif\n");
+
+ /* close the files */
+ fclose(pStreamsFile);
+ fclose(pColumnsFile);
+ fclose(pInputFile);
+ fclose(pTablesFile);
+
+ exit(0);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.vcproj b/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.vcproj
new file mode 100644
index 000000000000..124a5df67cd0
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/mkheader.vcproj
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/names.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/names.dst
new file mode 100644
index 000000000000..d9ff59ae18cc
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/names.dst
@@ -0,0 +1,10220 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+--
+-- data weights
+-- ==== =======
+-- 1: Name 1: frequency as a male name
+-- 2: frequency as a female name
+-- 3: frequency as name (gender ignored);
+--
+create first_names;
+set types = (varchar);
+set weights = 3 ;
+set names = (name: male, female, unified);
+add ("Aaron": 240, 2, 242);
+add ("Abbey": 0, 4, 4);
+add ("Abbie": 0, 8, 8);
+add ("Abby": 0, 16, 16);
+add ("Abdul": 7, 0, 7);
+add ("Abe": 6, 0, 6);
+add ("Abel": 19, 0, 19);
+add ("Abigail": 0, 25, 25);
+add ("Abraham": 35, 0, 35);
+add ("Abram": 5, 0, 5);
+add ("Ada": 0, 57, 57);
+add ("Adah": 0, 1, 1);
+add ("Adalberto": 5, 0, 5);
+add ("Adaline": 0, 2, 2);
+add ("Adam": 259, 1, 260);
+add ("Adan": 8, 0, 8);
+add ("Addie": 0, 26, 26);
+add ("Adela": 0, 14, 14);
+add ("Adelaida": 0, 4, 4);
+add ("Adelaide": 0, 8, 8);
+add ("Adele": 0, 25, 25);
+add ("Adelia": 0, 3, 3);
+add ("Adelina": 0, 7, 7);
+add ("Adeline": 0, 18, 18);
+add ("Adell": 0, 5, 5);
+add ("Adella": 0, 3, 3);
+add ("Adelle": 0, 3, 3);
+add ("Adena": 0, 1, 1);
+add ("Adina": 0, 3, 3);
+add ("Adolfo": 14, 0, 14);
+add ("Adolph": 11, 0, 11);
+add ("Adria": 0, 3, 3);
+add ("Adrian": 69, 9, 78);
+add ("Adriana": 0, 25, 25);
+add ("Adriane": 0, 4, 4);
+add ("Adrianna": 0, 4, 4);
+add ("Adrianne": 0, 7, 7);
+add ("Adrien": 0, 1, 1);
+add ("Adriene": 0, 2, 2);
+add ("Adrienne": 0, 39, 39);
+add ("Afton": 0, 3, 3);
+add ("Agatha": 0, 7, 7);
+add ("Agnes": 0, 98, 98);
+add ("Agnus": 0, 1, 1);
+add ("Agripina": 0, 1, 1);
+add ("Agueda": 0, 1, 1);
+add ("Agustin": 15, 0, 15);
+add ("Agustina": 0, 3, 3);
+add ("Ahmad": 6, 0, 6);
+add ("Ahmed": 5, 0, 5);
+add ("Ai": 0, 1, 1);
+add ("Aida": 0, 23, 23);
+add ("Aide": 0, 1, 1);
+add ("Aiko": 0, 1, 1);
+add ("Aileen": 0, 16, 16);
+add ("Ailene": 0, 1, 1);
+add ("Aimee": 0, 27, 27);
+add ("Aisha": 0, 9, 9);
+add ("Aja": 0, 3, 3);
+add ("Akiko": 0, 2, 2);
+add ("Akilah": 0, 1, 1);
+add ("Al": 23, 0, 23);
+add ("Alaina": 0, 5, 5);
+add ("Alaine": 0, 1, 1);
+add ("Alan": 204, 0, 204);
+add ("Alana": 0, 12, 12);
+add ("Alane": 0, 1, 1);
+add ("Alanna": 0, 4, 4);
+add ("Alayna": 0, 1, 1);
+add ("Alba": 0, 9, 9);
+add ("Albert": 314, 1, 315);
+add ("Alberta": 0, 52, 52);
+add ("Albertha": 0, 3, 3);
+add ("Albertina": 0, 2, 2);
+add ("Albertine": 0, 3, 3);
+add ("Alberto": 53, 0, 53);
+add ("Albina": 0, 4, 4);
+add ("Alda": 0, 4, 4);
+add ("Alden": 6, 0, 6);
+add ("Aldo": 7, 0, 7);
+add ("Alease": 0, 1, 1);
+add ("Alec": 6, 0, 6);
+add ("Alecia": 0, 7, 7);
+add ("Aleen": 0, 1, 1);
+add ("Aleida": 0, 2, 2);
+add ("Aleisha": 0, 1, 1);
+add ("Alejandra": 0, 12, 12);
+add ("Alejandrina": 0, 2, 2);
+add ("Alejandro": 43, 0, 43);
+add ("Alena": 0, 3, 3);
+add ("Alene": 0, 7, 7);
+add ("Alesha": 0, 4, 4);
+add ("Aleshia": 0, 1, 1);
+add ("Alesia": 0, 4, 4);
+add ("Alessandra": 0, 1, 1);
+add ("Aleta": 0, 4, 4);
+add ("Aletha": 0, 6, 6);
+add ("Alethea": 0, 3, 3);
+add ("Alethia": 0, 2, 2);
+add ("Alex": 115, 2, 117);
+add ("Alexa": 0, 6, 6);
+add ("Alexander": 132, 2, 134);
+add ("Alexandra": 0, 39, 39);
+add ("Alexandria": 0, 14, 14);
+add ("Alexia": 0, 3, 3);
+add ("Alexis": 11, 30, 41);
+add ("Alfonso": 38, 0, 38);
+add ("Alfonzo": 6, 0, 6);
+add ("Alfred": 162, 0, 162);
+add ("Alfreda": 0, 9, 9);
+add ("Alfredia": 0, 1, 1);
+add ("Alfredo": 54, 0, 54);
+add ("Ali": 12, 2, 14);
+add ("Alia": 0, 2, 2);
+add ("Alica": 0, 2, 2);
+add ("Alice": 0, 357, 357);
+add ("Alicia": 0, 146, 146);
+add ("Alida": 0, 3, 3);
+add ("Alina": 0, 6, 6);
+add ("Aline": 0, 11, 11);
+add ("Alisa": 0, 20, 20);
+add ("Alise": 0, 2, 2);
+add ("Alisha": 0, 27, 27);
+add ("Alishia": 0, 2, 2);
+add ("Alisia": 0, 2, 2);
+add ("Alison": 0, 50, 50);
+add ("Alissa": 0, 11, 11);
+add ("Alita": 0, 1, 1);
+add ("Alix": 0, 2, 2);
+add ("Aliza": 0, 2, 2);
+add ("Alla": 0, 2, 2);
+add ("Allan": 61, 0, 61);
+add ("Alleen": 0, 1, 1);
+add ("Allegra": 0, 2, 2);
+add ("Allen": 174, 2, 176);
+add ("Allena": 0, 1, 1);
+add ("Allene": 0, 8, 8);
+add ("Allie": 0, 13, 13);
+add ("Alline": 0, 2, 2);
+add ("Allison": 0, 92, 92);
+add ("Allyn": 0, 1, 1);
+add ("Allyson": 0, 13, 13);
+add ("Alma": 0, 111, 111);
+add ("Almeda": 0, 3, 3);
+add ("Almeta": 0, 2, 2);
+add ("Alona": 0, 1, 1);
+add ("Alonso": 4, 0, 4);
+add ("Alonzo": 22, 0, 22);
+add ("Alpha": 0, 5, 5);
+add ("Alphonse": 7, 0, 7);
+add ("Alphonso": 11, 0, 11);
+add ("Alta": 0, 19, 19);
+add ("Altagracia": 0, 4, 4);
+add ("Altha": 0, 2, 2);
+add ("Althea": 0, 12, 12);
+add ("Alton": 33, 0, 33);
+add ("Alva": 7, 6, 13);
+add ("Alvaro": 12, 0, 12);
+add ("Alvera": 0, 2, 2);
+add ("Alverta": 0, 1, 1);
+add ("Alvin": 105, 0, 105);
+add ("Alvina": 0, 6, 6);
+add ("Alyce": 0, 10, 10);
+add ("Alycia": 0, 3, 3);
+add ("Alysa": 0, 1, 1);
+add ("Alyse": 0, 2, 2);
+add ("Alysha": 0, 2, 2);
+add ("Alysia": 0, 3, 3);
+add ("Alyson": 0, 9, 9);
+add ("Alyssa": 0, 31, 31);
+add ("Amada": 0, 3, 3);
+add ("Amado": 5, 0, 5);
+add ("Amal": 0, 1, 1);
+add ("Amalia": 0, 10, 10);
+add ("Amanda": 0, 404, 404);
+add ("Amber": 0, 160, 160);
+add ("Amberly": 0, 1, 1);
+add ("Ambrose": 4, 0, 4);
+add ("Amee": 0, 1, 1);
+add ("Amelia": 0, 52, 52);
+add ("America": 0, 3, 3);
+add ("Ami": 0, 4, 4);
+add ("Amie": 0, 13, 13);
+add ("Amiee": 0, 1, 1);
+add ("Amina": 0, 2, 2);
+add ("Amira": 0, 1, 1);
+add ("Ammie": 0, 2, 2);
+add ("Amos": 20, 0, 20);
+add ("Amparo": 0, 9, 9);
+add ("Amy": 0, 451, 451);
+add ("An": 0, 1, 1);
+add ("Ana": 0, 120, 120);
+add ("Anabel": 0, 4, 4);
+add ("Analisa": 0, 1, 1);
+add ("Anamaria": 0, 1, 1);
+add ("Anastacia": 0, 3, 3);
+add ("Anastasia": 0, 10, 10);
+add ("Andera": 0, 1, 1);
+add ("Anderson": 7, 0, 7);
+add ("Andra": 0, 5, 5);
+add ("Andre": 76, 2, 78);
+add ("Andrea": 6, 236, 242);
+add ("Andreas": 4, 0, 4);
+add ("Andree": 0, 2, 2);
+add ("Andres": 34, 0, 34);
+add ("Andrew": 537, 2, 539);
+add ("Andria": 0, 5, 5);
+add ("Andy": 49, 0, 49);
+add ("Anette": 0, 2, 2);
+add ("Angel": 82, 35, 117);
+add ("Angela": 0, 468, 468);
+add ("Angele": 0, 2, 2);
+add ("Angelena": 0, 2, 2);
+add ("Angeles": 0, 2, 2);
+add ("Angelia": 0, 17, 17);
+add ("Angelic": 0, 2, 2);
+add ("Angelica": 0, 39, 39);
+add ("Angelika": 0, 2, 2);
+add ("Angelina": 0, 37, 37);
+add ("Angeline": 0, 17, 17);
+add ("Angelique": 0, 9, 9);
+add ("Angelita": 0, 9, 9);
+add ("Angella": 0, 3, 3);
+add ("Angelo": 39, 2, 41);
+add ("Angelyn": 0, 1, 1);
+add ("Angie": 0, 54, 54);
+add ("Angila": 0, 1, 1);
+add ("Angla": 0, 1, 1);
+add ("Angle": 0, 2, 2);
+add ("Anglea": 0, 3, 3);
+add ("Anh": 0, 4, 4);
+add ("Anibal": 5, 0, 5);
+add ("Anika": 0, 3, 3);
+add ("Anisa": 0, 1, 1);
+add ("Anisha": 0, 1, 1);
+add ("Anissa": 0, 5, 5);
+add ("Anita": 0, 162, 162);
+add ("Anitra": 0, 3, 3);
+add ("Anja": 0, 1, 1);
+add ("Anjanette": 0, 2, 2);
+add ("Anjelica": 0, 1, 1);
+add ("Ann": 0, 364, 364);
+add ("Anna": 0, 440, 440);
+add ("Annabel": 0, 3, 3);
+add ("Annabell": 0, 2, 2);
+add ("Annabelle": 0, 12, 12);
+add ("Annalee": 0, 2, 2);
+add ("Annalisa": 0, 2, 2);
+add ("Annamae": 0, 2, 2);
+add ("Annamaria": 0, 1, 1);
+add ("Annamarie": 0, 5, 5);
+add ("Anne": 0, 228, 228);
+add ("Anneliese": 0, 3, 3);
+add ("Annelle": 0, 1, 1);
+add ("Annemarie": 0, 6, 6);
+add ("Annett": 0, 2, 2);
+add ("Annetta": 0, 6, 6);
+add ("Annette": 0, 125, 125);
+add ("Annice": 0, 2, 2);
+add ("Annie": 0, 216, 216);
+add ("Annika": 0, 1, 1);
+add ("Annis": 0, 2, 2);
+add ("Annita": 0, 1, 1);
+add ("Annmarie": 0, 9, 9);
+add ("Anthony": 721, 3, 724);
+add ("Antione": 4, 0, 4);
+add ("Antionette": 0, 8, 8);
+add ("Antoine": 16, 0, 16);
+add ("Antoinette": 0, 48, 48);
+add ("Anton": 13, 0, 13);
+add ("Antone": 5, 0, 5);
+add ("Antonetta": 0, 1, 1);
+add ("Antonette": 0, 5, 5);
+add ("Antonia": 4, 35, 39);
+add ("Antonietta": 0, 2, 2);
+add ("Antonina": 0, 3, 3);
+add ("Antonio": 190, 2, 192);
+add ("Antony": 8, 0, 8);
+add ("Antwan": 6, 0, 6);
+add ("Anya": 0, 2, 2);
+add ("Apolonia": 0, 1, 1);
+add ("April": 0, 154, 154);
+add ("Apryl": 0, 2, 2);
+add ("Ara": 0, 1, 1);
+add ("Araceli": 0, 10, 10);
+add ("Aracelis": 0, 2, 2);
+add ("Aracely": 0, 4, 4);
+add ("Arcelia": 0, 3, 3);
+add ("Archie": 33, 0, 33);
+add ("Ardath": 0, 1, 1);
+add ("Ardelia": 0, 1, 1);
+add ("Ardell": 0, 2, 2);
+add ("Ardella": 0, 2, 2);
+add ("Ardelle": 0, 1, 1);
+add ("Arden": 4, 0, 4);
+add ("Ardis": 0, 4, 4);
+add ("Ardith": 0, 4, 4);
+add ("Aretha": 0, 6, 6);
+add ("Argelia": 0, 1, 1);
+add ("Argentina": 0, 1, 1);
+add ("Ariana": 0, 5, 5);
+add ("Ariane": 0, 2, 2);
+add ("Arianna": 0, 2, 2);
+add ("Arianne": 0, 1, 1);
+add ("Arica": 0, 1, 1);
+add ("Arie": 0, 2, 2);
+add ("Ariel": 7, 7, 14);
+add ("Arielle": 0, 3, 3);
+add ("Arla": 0, 2, 2);
+add ("Arlean": 0, 1, 1);
+add ("Arleen": 0, 7, 7);
+add ("Arlen": 4, 0, 4);
+add ("Arlena": 0, 2, 2);
+add ("Arlene": 0, 94, 94);
+add ("Arletha": 0, 1, 1);
+add ("Arletta": 0, 2, 2);
+add ("Arlette": 0, 3, 3);
+add ("Arlie": 4, 0, 4);
+add ("Arlinda": 0, 1, 1);
+add ("Arline": 0, 10, 10);
+add ("Arlyne": 0, 1, 1);
+add ("Armand": 12, 0, 12);
+add ("Armanda": 0, 2, 2);
+add ("Armandina": 0, 1, 1);
+add ("Armando": 58, 0, 58);
+add ("Armida": 0, 4, 4);
+add ("Arminda": 0, 2, 2);
+add ("Arnetta": 0, 2, 2);
+add ("Arnette": 0, 1, 1);
+add ("Arnita": 0, 2, 2);
+add ("Arnold": 72, 0, 72);
+add ("Arnoldo": 4, 0, 4);
+add ("Arnulfo": 7, 0, 7);
+add ("Aron": 6, 0, 6);
+add ("Arron": 8, 0, 8);
+add ("Art": 9, 0, 9);
+add ("Arthur": 335, 2, 337);
+add ("Artie": 0, 4, 4);
+add ("Arturo": 43, 0, 43);
+add ("Arvilla": 0, 2, 2);
+add ("Asa": 4, 0, 4);
+add ("Asha": 0, 3, 3);
+add ("Ashanti": 0, 1, 1);
+add ("Ashely": 0, 3, 3);
+add ("Ashlea": 0, 1, 1);
+add ("Ashlee": 0, 13, 13);
+add ("Ashleigh": 0, 8, 8);
+add ("Ashley": 14, 303, 317);
+add ("Ashli": 0, 2, 2);
+add ("Ashlie": 0, 3, 3);
+add ("Ashly": 0, 3, 3);
+add ("Ashlyn": 0, 2, 2);
+add ("Ashton": 0, 4, 4);
+add ("Asia": 0, 5, 5);
+add ("Asley": 0, 1, 1);
+add ("Assunta": 0, 2, 2);
+add ("Astrid": 0, 4, 4);
+add ("Asuncion": 0, 2, 2);
+add ("Athena": 0, 7, 7);
+add ("Aubrey": 19, 0, 19);
+add ("Audie": 0, 2, 2);
+add ("Audra": 0, 15, 15);
+add ("Audrea": 0, 2, 2);
+add ("Audrey": 0, 127, 127);
+add ("Audria": 0, 1, 1);
+add ("Audrie": 0, 1, 1);
+add ("Audry": 0, 3, 3);
+add ("August": 15, 0, 15);
+add ("Augusta": 0, 10, 10);
+add ("Augustina": 0, 2, 2);
+add ("Augustine": 7, 0, 7);
+add ("Augustus": 5, 0, 5);
+add ("Aundrea": 0, 2, 2);
+add ("Aura": 0, 5, 5);
+add ("Aurea": 0, 3, 3);
+add ("Aurelia": 0, 10, 10);
+add ("Aurelio": 9, 0, 9);
+add ("Aurora": 0, 24, 24);
+add ("Aurore": 0, 1, 1);
+add ("Austin": 44, 0, 44);
+add ("Autumn": 0, 17, 17);
+add ("Ava": 0, 14, 14);
+add ("Avelina": 0, 2, 2);
+add ("Avery": 11, 0, 11);
+add ("Avis": 0, 13, 13);
+add ("Avril": 0, 1, 1);
+add ("Awilda": 0, 3, 3);
+add ("Ayako": 0, 1, 1);
+add ("Ayana": 0, 2, 2);
+add ("Ayanna": 0, 2, 2);
+add ("Ayesha": 0, 3, 3);
+add ("Azalee": 0, 1, 1);
+add ("Azucena": 0, 2, 2);
+add ("Azzie": 0, 1, 1);
+add ("Babara": 0, 2, 2);
+add ("Babette": 0, 2, 2);
+add ("Bailey": 0, 3, 3);
+add ("Bambi": 0, 4, 4);
+add ("Bao": 0, 1, 1);
+add ("Barabara": 0, 1, 1);
+add ("Barb": 0, 6, 6);
+add ("Barbar": 0, 2, 2);
+add ("Barbara": 0, 980, 980);
+add ("Barbera": 0, 2, 2);
+add ("Barbie": 0, 3, 3);
+add ("Barbra": 0, 15, 15);
+add ("Bari": 0, 1, 1);
+add ("Barney": 9, 0, 9);
+add ("Barrett": 5, 0, 5);
+add ("Barrie": 0, 1, 1);
+add ("Barry": 134, 0, 134);
+add ("Bart": 14, 0, 14);
+add ("Barton": 6, 0, 6);
+add ("Basil": 10, 0, 10);
+add ("Basilia": 0, 1, 1);
+add ("Bea": 0, 3, 3);
+add ("Beata": 0, 1, 1);
+add ("Beatrice": 0, 130, 130);
+add ("Beatris": 0, 1, 1);
+add ("Beatriz": 0, 18, 18);
+add ("Beau": 9, 0, 9);
+add ("Beaulah": 0, 1, 1);
+add ("Bebe": 0, 1, 1);
+add ("Becki": 0, 1, 1);
+add ("Beckie": 0, 2, 2);
+add ("Becky": 0, 66, 66);
+add ("Bee": 0, 1, 1);
+add ("Belen": 0, 5, 5);
+add ("Belia": 0, 2, 2);
+add ("Belinda": 0, 59, 59);
+add ("Belkis": 0, 1, 1);
+add ("Bell": 0, 1, 1);
+add ("Bella": 0, 6, 6);
+add ("Belle": 0, 7, 7);
+add ("Belva": 0, 6, 6);
+add ("Ben": 78, 0, 78);
+add ("Benedict": 4, 0, 4);
+add ("Benita": 0, 13, 13);
+add ("Benito": 15, 0, 15);
+add ("Benjamin": 270, 0, 270);
+add ("Bennett": 8, 0, 8);
+add ("Bennie": 32, 0, 32);
+add ("Benny": 30, 0, 30);
+add ("Benton": 4, 0, 4);
+add ("Berenice": 0, 3, 3);
+add ("Berna": 0, 1, 1);
+add ("Bernadette": 0, 39, 39);
+add ("Bernadine": 0, 14, 14);
+add ("Bernard": 127, 0, 127);
+add ("Bernarda": 0, 1, 1);
+add ("Bernardina": 0, 1, 1);
+add ("Bernardine": 0, 1, 1);
+add ("Bernardo": 10, 0, 10);
+add ("Berneice": 0, 2, 2);
+add ("Bernetta": 0, 2, 2);
+add ("Bernice": 0, 128, 128);
+add ("Bernie": 8, 0, 8);
+add ("Berniece": 0, 6, 6);
+add ("Bernita": 0, 4, 4);
+add ("Berry": 6, 0, 6);
+add ("Bert": 22, 0, 22);
+add ("Berta": 0, 10, 10);
+add ("Bertha": 0, 143, 143);
+add ("Bertie": 0, 9, 9);
+add ("Bertram": 5, 0, 5);
+add ("Beryl": 0, 9, 9);
+add ("Bess": 0, 7, 7);
+add ("Bessie": 0, 96, 96);
+add ("Beth": 0, 110, 110);
+add ("Bethanie": 0, 1, 1);
+add ("Bethann": 0, 2, 2);
+add ("Bethany": 0, 39, 39);
+add ("Bethel": 0, 2, 2);
+add ("Betsey": 0, 2, 2);
+add ("Betsy": 0, 34, 34);
+add ("Bette": 0, 19, 19);
+add ("Bettie": 0, 23, 23);
+add ("Bettina": 0, 6, 6);
+add ("Betty": 0, 666, 666);
+add ("Bettyann": 0, 1, 1);
+add ("Bettye": 0, 15, 15);
+add ("Beula": 0, 1, 1);
+add ("Beulah": 0, 48, 48);
+add ("Bev": 0, 2, 2);
+add ("Beverlee": 0, 2, 2);
+add ("Beverley": 0, 8, 8);
+add ("Beverly": 0, 267, 267);
+add ("Bianca": 0, 15, 15);
+add ("Bibi": 0, 1, 1);
+add ("Bill": 112, 0, 112);
+add ("Billi": 0, 1, 1);
+add ("Billie": 17, 0, 17);
+add ("Billy": 248, 0, 248);
+add ("Billye": 0, 2, 2);
+add ("Birdie": 0, 7, 7);
+add ("Birgit": 0, 2, 2);
+add ("Blaine": 15, 0, 15);
+add ("Blair": 8, 0, 8);
+add ("Blake": 36, 0, 36);
+add ("Blanca": 0, 41, 41);
+add ("Blanch": 0, 4, 4);
+add ("Blanche": 0, 55, 55);
+add ("Blondell": 0, 1, 1);
+add ("Blossom": 0, 1, 1);
+add ("Blythe": 0, 2, 2);
+add ("Bo": 5, 0, 5);
+add ("Bob": 55, 0, 55);
+add ("Bobbi": 0, 16, 16);
+add ("Bobbie": 10, 0, 10);
+add ("Bobby": 223, 0, 223);
+add ("Bobbye": 0, 3, 3);
+add ("Bobette": 0, 1, 1);
+add ("Bok": 0, 1, 1);
+add ("Bong": 0, 1, 1);
+add ("Bonita": 0, 26, 26);
+add ("Bonnie": 0, 223, 223);
+add ("Bonny": 0, 4, 4);
+add ("Booker": 8, 0, 8);
+add ("Boris": 6, 0, 6);
+add ("Boyce": 4, 0, 4);
+add ("Boyd": 19, 0, 19);
+add ("Brad": 73, 0, 73);
+add ("Bradford": 21, 0, 21);
+add ("Bradley": 159, 0, 159);
+add ("Bradly": 5, 0, 5);
+add ("Brady": 14, 0, 14);
+add ("Brain": 13, 0, 13);
+add ("Branda": 0, 2, 2);
+add ("Brande": 0, 1, 1);
+add ("Brandee": 0, 3, 3);
+add ("Branden": 8, 0, 8);
+add ("Brandi": 0, 55, 55);
+add ("Brandie": 0, 8, 8);
+add ("Brandon": 260, 0, 260);
+add ("Brandy": 0, 70, 70);
+add ("Brant": 6, 0, 6);
+add ("Breana": 0, 1, 1);
+add ("Breann": 0, 1, 1);
+add ("Breanna": 0, 6, 6);
+add ("Breanne": 0, 3, 3);
+add ("Bree": 0, 3, 3);
+add ("Brenda": 0, 455, 455);
+add ("Brendan": 19, 0, 19);
+add ("Brendon": 5, 0, 5);
+add ("Brenna": 0, 5, 5);
+add ("Brent": 90, 0, 90);
+add ("Brenton": 6, 0, 6);
+add ("Bret": 18, 0, 18);
+add ("Brett": 82, 0, 82);
+add ("Brian": 736, 0, 736);
+add ("Briana": 0, 10, 10);
+add ("Brianna": 0, 14, 14);
+add ("Brianne": 0, 7, 7);
+add ("Brice": 5, 0, 5);
+add ("Bridget": 0, 45, 45);
+add ("Bridgett": 0, 9, 9);
+add ("Bridgette": 0, 15, 15);
+add ("Brigette": 0, 4, 4);
+add ("Brigid": 0, 2, 2);
+add ("Brigida": 0, 2, 2);
+add ("Brigitte": 0, 9, 9);
+add ("Brinda": 0, 2, 2);
+add ("Britany": 0, 2, 2);
+add ("Britney": 0, 9, 9);
+add ("Britni": 0, 2, 2);
+add ("Britt": 4, 0, 4);
+add ("Britta": 0, 1, 1);
+add ("Brittaney": 0, 1, 1);
+add ("Brittani": 0, 4, 4);
+add ("Brittanie": 0, 1, 1);
+add ("Brittany": 0, 117, 117);
+add ("Britteny": 0, 1, 1);
+add ("Brittney": 0, 24, 24);
+add ("Brittni": 0, 2, 2);
+add ("Brittny": 0, 1, 1);
+add ("Brock": 9, 0, 9);
+add ("Broderick": 4, 0, 4);
+add ("Bronwyn": 0, 2, 2);
+add ("Brook": 0, 4, 4);
+add ("Brooke": 0, 39, 39);
+add ("Brooks": 7, 0, 7);
+add ("Bruce": 263, 0, 263);
+add ("Bruna": 0, 1, 1);
+add ("Brunilda": 0, 2, 2);
+add ("Bruno": 10, 0, 10);
+add ("Bryan": 190, 0, 190);
+add ("Bryanna": 0, 1, 1);
+add ("Bryant": 26, 0, 26);
+add ("Bryce": 16, 0, 16);
+add ("Brynn": 0, 2, 2);
+add ("Bryon": 12, 0, 12);
+add ("Buck": 4, 0, 4);
+add ("Bud": 5, 0, 5);
+add ("Buddy": 14, 0, 14);
+add ("Buena": 0, 1, 1);
+add ("Buffy": 0, 3, 3);
+add ("Buford": 8, 0, 8);
+add ("Bula": 0, 1, 1);
+add ("Bulah": 0, 1, 1);
+add ("Bunny": 0, 1, 1);
+add ("Burl": 5, 0, 5);
+add ("Burma": 0, 1, 1);
+add ("Burt": 6, 0, 6);
+add ("Burton": 14, 0, 14);
+add ("Buster": 4, 0, 4);
+add ("Byron": 52, 0, 52);
+add ("Caitlin": 0, 23, 23);
+add ("Caitlyn": 0, 4, 4);
+add ("Calandra": 0, 1, 1);
+add ("Caleb": 23, 0, 23);
+add ("Calista": 0, 1, 1);
+add ("Callie": 0, 16, 16);
+add ("Calvin": 115, 0, 115);
+add ("Camelia": 0, 2, 2);
+add ("Camellia": 0, 1, 1);
+add ("Cameron": 37, 0, 37);
+add ("Cami": 0, 3, 3);
+add ("Camie": 0, 1, 1);
+add ("Camila": 0, 1, 1);
+add ("Camilla": 0, 8, 8);
+add ("Camille": 0, 28, 28);
+add ("Cammie": 0, 2, 2);
+add ("Cammy": 0, 1, 1);
+add ("Candace": 0, 51, 51);
+add ("Candance": 0, 3, 3);
+add ("Candelaria": 0, 4, 4);
+add ("Candi": 0, 5, 5);
+add ("Candice": 0, 46, 46);
+add ("Candida": 0, 6, 6);
+add ("Candie": 0, 2, 2);
+add ("Candis": 0, 3, 3);
+add ("Candra": 0, 1, 1);
+add ("Candy": 0, 22, 22);
+add ("Candyce": 0, 2, 2);
+add ("Caprice": 0, 2, 2);
+add ("Cara": 0, 25, 25);
+add ("Caren": 0, 7, 7);
+add ("Carey": 13, 0, 13);
+add ("Cari": 0, 7, 7);
+add ("Caridad": 0, 6, 6);
+add ("Carie": 0, 2, 2);
+add ("Carin": 0, 3, 3);
+add ("Carina": 0, 4, 4);
+add ("Carisa": 0, 2, 2);
+add ("Carissa": 0, 9, 9);
+add ("Carita": 0, 1, 1);
+add ("Carl": 346, 0, 346);
+add ("Carla": 0, 107, 107);
+add ("Carlee": 0, 1, 1);
+add ("Carleen": 0, 4, 4);
+add ("Carlena": 0, 1, 1);
+add ("Carlene": 0, 12, 12);
+add ("Carletta": 0, 2, 2);
+add ("Carley": 0, 2, 2);
+add ("Carli": 0, 1, 1);
+add ("Carlie": 0, 2, 2);
+add ("Carline": 0, 2, 2);
+add ("Carlita": 0, 1, 1);
+add ("Carlo": 9, 0, 9);
+add ("Carlos": 229, 0, 229);
+add ("Carlota": 0, 3, 3);
+add ("Carlotta": 0, 4, 4);
+add ("Carlton": 37, 0, 37);
+add ("Carly": 0, 10, 10);
+add ("Carlyn": 0, 3, 3);
+add ("Carma": 0, 3, 3);
+add ("Carman": 0, 4, 4);
+add ("Carmel": 0, 6, 6);
+add ("Carmela": 0, 18, 18);
+add ("Carmelia": 0, 1, 1);
+add ("Carmelina": 0, 2, 2);
+add ("Carmelita": 0, 6, 6);
+add ("Carmella": 0, 12, 12);
+add ("Carmelo": 9, 0, 9);
+add ("Carmen": 11, 0, 11);
+add ("Carmina": 0, 1, 1);
+add ("Carmine": 7, 0, 7);
+add ("Carmon": 0, 2, 2);
+add ("Carol": 6, 0, 6);
+add ("Carola": 0, 1, 1);
+add ("Carolann": 0, 3, 3);
+add ("Carole": 0, 71, 71);
+add ("Carolee": 0, 4, 4);
+add ("Carolin": 0, 1, 1);
+add ("Carolina": 0, 21, 21);
+add ("Caroline": 0, 85, 85);
+add ("Caroll": 0, 1, 1);
+add ("Carolyn": 0, 385, 385);
+add ("Carolyne": 0, 2, 2);
+add ("Carolynn": 0, 3, 3);
+add ("Caron": 0, 3, 3);
+add ("Caroyln": 0, 1, 1);
+add ("Carri": 0, 3, 3);
+add ("Carrie": 0, 171, 171);
+add ("Carrol": 4, 0, 4);
+add ("Carroll": 26, 0, 26);
+add ("Carry": 0, 1, 1);
+add ("Carson": 8, 0, 8);
+add ("Carter": 9, 0, 9);
+add ("Cary": 19, 0, 19);
+add ("Caryl": 0, 4, 4);
+add ("Carylon": 0, 1, 1);
+add ("Caryn": 0, 8, 8);
+add ("Casandra": 0, 9, 9);
+add ("Casey": 54, 0, 54);
+add ("Casie": 0, 2, 2);
+add ("Casimira": 0, 1, 1);
+add ("Cassandra": 0, 72, 72);
+add ("Cassaundra": 0, 1, 1);
+add ("Cassey": 0, 1, 1);
+add ("Cassi": 0, 1, 1);
+add ("Cassidy": 0, 3, 3);
+add ("Cassie": 0, 23, 23);
+add ("Cassondra": 0, 1, 1);
+add ("Cassy": 0, 1, 1);
+add ("Catalina": 0, 14, 14);
+add ("Catarina": 0, 2, 2);
+add ("Caterina": 0, 2, 2);
+add ("Catharine": 0, 6, 6);
+add ("Catherin": 0, 1, 1);
+add ("Catherina": 0, 1, 1);
+add ("Catherine": 0, 373, 373);
+add ("Cathern": 0, 1, 1);
+add ("Catheryn": 0, 1, 1);
+add ("Cathey": 0, 2, 2);
+add ("Cathi": 0, 3, 3);
+add ("Cathie": 0, 4, 4);
+add ("Cathleen": 0, 17, 17);
+add ("Cathrine": 0, 6, 6);
+add ("Cathryn": 0, 9, 9);
+add ("Cathy": 0, 137, 137);
+add ("Catina": 0, 4, 4);
+add ("Catrice": 0, 1, 1);
+add ("Catrina": 0, 7, 7);
+add ("Cayla": 0, 1, 1);
+add ("Cecelia": 0, 32, 32);
+add ("Cecil": 78, 0, 78);
+add ("Cecila": 0, 2, 2);
+add ("Cecile": 0, 19, 19);
+add ("Cecilia": 0, 55, 55);
+add ("Cecille": 0, 1, 1);
+add ("Cecily": 0, 3, 3);
+add ("Cedric": 29, 0, 29);
+add ("Cedrick": 4, 0, 4);
+add ("Celena": 0, 2, 2);
+add ("Celesta": 0, 1, 1);
+add ("Celeste": 0, 25, 25);
+add ("Celestina": 0, 2, 2);
+add ("Celestine": 0, 7, 7);
+add ("Celia": 0, 44, 44);
+add ("Celina": 0, 8, 8);
+add ("Celinda": 0, 1, 1);
+add ("Celine": 0, 2, 2);
+add ("Celsa": 0, 1, 1);
+add ("Ceola": 0, 1, 1);
+add ("Cesar": 34, 0, 34);
+add ("Chad": 165, 0, 165);
+add ("Chadwick": 7, 0, 7);
+add ("Chae": 0, 1, 1);
+add ("Chan": 0, 1, 1);
+add ("Chana": 0, 3, 3);
+add ("Chance": 7, 0, 7);
+add ("Chanda": 0, 4, 4);
+add ("Chandra": 0, 14, 14);
+add ("Chanel": 0, 5, 5);
+add ("Chanell": 0, 1, 1);
+add ("Chanelle": 0, 1, 1);
+add ("Chang": 5, 0, 5);
+add ("Chantal": 0, 5, 5);
+add ("Chantay": 0, 1, 1);
+add ("Chante": 0, 2, 2);
+add ("Chantel": 0, 7, 7);
+add ("Chantell": 0, 2, 2);
+add ("Chantelle": 0, 3, 3);
+add ("Chara": 0, 1, 1);
+add ("Charis": 0, 1, 1);
+add ("Charise": 0, 2, 2);
+add ("Charissa": 0, 3, 3);
+add ("Charisse": 0, 4, 4);
+add ("Charita": 0, 1, 1);
+add ("Charity": 0, 18, 18);
+add ("Charla": 0, 6, 6);
+add ("Charleen": 0, 5, 5);
+add ("Charlena": 0, 1, 1);
+add ("Charlene": 0, 97, 97);
+add ("Charles": 1523, 0, 1523);
+add ("Charlesetta": 0, 1, 1);
+add ("Charlette": 0, 3, 3);
+add ("Charley": 9, 0, 9);
+add ("Charlie": 90, 0, 90);
+add ("Charline": 0, 5, 5);
+add ("Charlott": 0, 1, 1);
+add ("Charlotte": 0, 169, 169);
+add ("Charlsie": 0, 1, 1);
+add ("Charlyn": 0, 1, 1);
+add ("Charmain": 0, 1, 1);
+add ("Charmaine": 0, 11, 11);
+add ("Charolette": 0, 3, 3);
+add ("Chas": 4, 0, 4);
+add ("Chase": 16, 0, 16);
+add ("Chasidy": 0, 1, 1);
+add ("Chasity": 0, 10, 10);
+add ("Chassidy": 0, 1, 1);
+add ("Chastity": 0, 5, 5);
+add ("Chau": 0, 2, 2);
+add ("Chauncey": 5, 0, 5);
+add ("Chaya": 0, 2, 2);
+add ("Chelsea": 0, 38, 38);
+add ("Chelsey": 0, 8, 8);
+add ("Chelsie": 0, 4, 4);
+add ("Cher": 0, 1, 1);
+add ("Chere": 0, 1, 1);
+add ("Cheree": 0, 1, 1);
+add ("Cherelle": 0, 1, 1);
+add ("Cheri": 0, 25, 25);
+add ("Cherie": 0, 22, 22);
+add ("Cherilyn": 0, 1, 1);
+add ("Cherise": 0, 3, 3);
+add ("Cherish": 0, 2, 2);
+add ("Cherly": 0, 4, 4);
+add ("Cherlyn": 0, 1, 1);
+add ("Cherri": 0, 3, 3);
+add ("Cherrie": 0, 3, 3);
+add ("Cherry": 0, 9, 9);
+add ("Cherryl": 0, 2, 2);
+add ("Chery": 0, 1, 1);
+add ("Cheryl": 0, 315, 315);
+add ("Cheryle": 0, 4, 4);
+add ("Cheryll": 0, 2, 2);
+add ("Chester": 78, 0, 78);
+add ("Chet": 5, 0, 5);
+add ("Cheyenne": 0, 3, 3);
+add ("Chi": 5, 0, 5);
+add ("Chia": 0, 1, 1);
+add ("Chieko": 0, 1, 1);
+add ("Chin": 0, 2, 2);
+add ("China": 0, 1, 1);
+add ("Ching": 0, 1, 1);
+add ("Chiquita": 0, 5, 5);
+add ("Chloe": 0, 7, 7);
+add ("Chong": 4, 0, 4);
+add ("Chris": 197, 0, 197);
+add ("Chrissy": 0, 4, 4);
+add ("Christa": 0, 23, 23);
+add ("Christal": 0, 6, 6);
+add ("Christeen": 0, 2, 2);
+add ("Christel": 0, 3, 3);
+add ("Christen": 0, 7, 7);
+add ("Christena": 0, 2, 2);
+add ("Christene": 0, 3, 3);
+add ("Christi": 0, 17, 17);
+add ("Christia": 0, 1, 1);
+add ("Christian": 65, 0, 65);
+add ("Christiana": 0, 3, 3);
+add ("Christiane": 0, 3, 3);
+add ("Christie": 0, 34, 34);
+add ("Christin": 0, 7, 7);
+add ("Christina": 0, 275, 275);
+add ("Christine": 0, 382, 382);
+add ("Christinia": 0, 1, 1);
+add ("Christoper": 6, 0, 6);
+add ("Christopher": 1035, 0, 1035);
+add ("Christy": 0, 77, 77);
+add ("Chrystal": 0, 11, 11);
+add ("Chu": 0, 1, 1);
+add ("Chuck": 16, 0, 16);
+add ("Chun": 0, 3, 3);
+add ("Chung": 5, 0, 5);
+add ("Ciara": 0, 3, 3);
+add ("Cicely": 0, 2, 2);
+add ("Ciera": 0, 2, 2);
+add ("Cierra": 0, 3, 3);
+add ("Cinda": 0, 3, 3);
+add ("Cinderella": 0, 1, 1);
+add ("Cindi": 0, 7, 7);
+add ("Cindie": 0, 1, 1);
+add ("Cindy": 0, 192, 192);
+add ("Cinthia": 0, 4, 4);
+add ("Cira": 0, 1, 1);
+add ("Clair": 8, 0, 8);
+add ("Claire": 0, 61, 61);
+add ("Clara": 0, 153, 153);
+add ("Clare": 0, 12, 12);
+add ("Clarence": 197, 0, 197);
+add ("Claretha": 0, 1, 1);
+add ("Claretta": 0, 1, 1);
+add ("Claribel": 0, 3, 3);
+add ("Clarice": 0, 18, 18);
+add ("Clarinda": 0, 1, 1);
+add ("Clarine": 0, 2, 2);
+add ("Claris": 0, 1, 1);
+add ("Clarisa": 0, 1, 1);
+add ("Clarissa": 0, 14, 14);
+add ("Clarita": 0, 2, 2);
+add ("Clark": 26, 0, 26);
+add ("Classie": 0, 1, 1);
+add ("Claud": 4, 0, 4);
+add ("Claude": 68, 0, 68);
+add ("Claudette": 0, 17, 17);
+add ("Claudia": 0, 90, 90);
+add ("Claudie": 0, 1, 1);
+add ("Claudine": 0, 11, 11);
+add ("Claudio": 6, 0, 6);
+add ("Clay": 21, 0, 21);
+add ("Clayton": 60, 0, 60);
+add ("Clelia": 0, 1, 1);
+add ("Clemencia": 0, 1, 1);
+add ("Clement": 10, 0, 10);
+add ("Clemente": 4, 0, 4);
+add ("Clementina": 0, 2, 2);
+add ("Clementine": 0, 5, 5);
+add ("Clemmie": 0, 2, 2);
+add ("Cleo": 9, 0, 9);
+add ("Cleopatra": 0, 2, 2);
+add ("Cleora": 0, 2, 2);
+add ("Cleotilde": 0, 1, 1);
+add ("Cleta": 0, 3, 3);
+add ("Cletus": 5, 0, 5);
+add ("Cleveland": 16, 0, 16);
+add ("Cliff": 12, 0, 12);
+add ("Clifford": 123, 0, 123);
+add ("Clifton": 50, 0, 50);
+add ("Clint": 24, 0, 24);
+add ("Clinton": 65, 0, 65);
+add ("Clora": 0, 1, 1);
+add ("Clorinda": 0, 1, 1);
+add ("Clotilde": 0, 2, 2);
+add ("Clyde": 95, 0, 95);
+add ("Codi": 0, 1, 1);
+add ("Cody": 63, 0, 63);
+add ("Colby": 9, 0, 9);
+add ("Cole": 10, 0, 10);
+add ("Coleen": 0, 9, 9);
+add ("Coleman": 6, 0, 6);
+add ("Colene": 0, 1, 1);
+add ("Coletta": 0, 2, 2);
+add ("Colette": 0, 11, 11);
+add ("Colin": 31, 0, 31);
+add ("Colleen": 0, 92, 92);
+add ("Collen": 0, 2, 2);
+add ("Collene": 0, 1, 1);
+add ("Collette": 0, 5, 5);
+add ("Collin": 9, 0, 9);
+add ("Colton": 4, 0, 4);
+add ("Columbus": 5, 0, 5);
+add ("Concepcion": 0, 14, 14);
+add ("Conception": 0, 1, 1);
+add ("Concetta": 0, 9, 9);
+add ("Concha": 0, 1, 1);
+add ("Conchita": 0, 2, 2);
+add ("Connie": 5, 0, 5);
+add ("Conrad": 22, 0, 22);
+add ("Constance": 0, 91, 91);
+add ("Consuela": 0, 2, 2);
+add ("Consuelo": 0, 22, 22);
+add ("Contessa": 0, 1, 1);
+add ("Cora": 0, 58, 58);
+add ("Coral": 0, 4, 4);
+add ("Coralee": 0, 1, 1);
+add ("Coralie": 0, 1, 1);
+add ("Corazon": 0, 3, 3);
+add ("Cordelia": 0, 5, 5);
+add ("Cordell": 4, 0, 4);
+add ("Cordia": 0, 1, 1);
+add ("Cordie": 0, 2, 2);
+add ("Coreen": 0, 2, 2);
+add ("Corene": 0, 3, 3);
+add ("Coretta": 0, 2, 2);
+add ("Corey": 98, 0, 98);
+add ("Cori": 0, 6, 6);
+add ("Corie": 0, 2, 2);
+add ("Corina": 0, 10, 10);
+add ("Corine": 0, 11, 11);
+add ("Corinna": 0, 4, 4);
+add ("Corinne": 0, 24, 24);
+add ("Corliss": 0, 2, 2);
+add ("Cornelia": 0, 15, 15);
+add ("Cornelius": 21, 0, 21);
+add ("Cornell": 8, 0, 8);
+add ("Corrie": 0, 5, 5);
+add ("Corrin": 0, 1, 1);
+add ("Corrina": 0, 3, 3);
+add ("Corrine": 0, 14, 14);
+add ("Corrinne": 0, 1, 1);
+add ("Cortez": 4, 0, 4);
+add ("Cortney": 0, 8, 8);
+add ("Cory": 68, 0, 68);
+add ("Courtney": 19, 0, 19);
+add ("Coy": 10, 0, 10);
+add ("Craig": 206, 0, 206);
+add ("Creola": 0, 1, 1);
+add ("Cris": 0, 1, 1);
+add ("Criselda": 0, 2, 2);
+add ("Crissy": 0, 2, 2);
+add ("Crista": 0, 2, 2);
+add ("Cristal": 0, 5, 5);
+add ("Cristen": 0, 2, 2);
+add ("Cristi": 0, 3, 3);
+add ("Cristie": 0, 2, 2);
+add ("Cristin": 0, 3, 3);
+add ("Cristina": 0, 33, 33);
+add ("Cristine": 0, 4, 4);
+add ("Cristobal": 4, 0, 4);
+add ("Cristopher": 4, 0, 4);
+add ("Cristy": 0, 6, 6);
+add ("Cruz": 9, 0, 9);
+add ("Crysta": 0, 1, 1);
+add ("Crystal": 0, 207, 207);
+add ("Crystle": 0, 1, 1);
+add ("Cuc": 0, 1, 1);
+add ("Curt": 15, 0, 15);
+add ("Curtis": 180, 0, 180);
+add ("Cyndi": 0, 3, 3);
+add ("Cyndy": 0, 1, 1);
+add ("Cynthia": 0, 469, 469);
+add ("Cyril": 7, 0, 7);
+add ("Cyrstal": 0, 1, 1);
+add ("Cyrus": 7, 0, 7);
+add ("Cythia": 0, 3, 3);
+add ("Dacia": 0, 1, 1);
+add ("Dagmar": 0, 2, 2);
+add ("Dagny": 0, 1, 1);
+add ("Dahlia": 0, 2, 2);
+add ("Daina": 0, 1, 1);
+add ("Daine": 0, 1, 1);
+add ("Daisey": 0, 2, 2);
+add ("Daisy": 0, 62, 62);
+add ("Dakota": 0, 1, 1);
+add ("Dale": 184, 0, 184);
+add ("Dalene": 0, 1, 1);
+add ("Dalia": 0, 6, 6);
+add ("Dalila": 0, 2, 2);
+add ("Dallas": 24, 0, 24);
+add ("Dalton": 8, 0, 8);
+add ("Damaris": 0, 6, 6);
+add ("Damian": 16, 0, 16);
+add ("Damien": 14, 0, 14);
+add ("Damion": 5, 0, 5);
+add ("Damon": 34, 0, 34);
+add ("Dan": 101, 0, 101);
+add ("Dana": 42, 0, 42);
+add ("Danae": 0, 2, 2);
+add ("Dane": 12, 0, 12);
+add ("Danelle": 0, 5, 5);
+add ("Danette": 0, 7, 7);
+add ("Dani": 0, 3, 3);
+add ("Dania": 0, 2, 2);
+add ("Danial": 8, 0, 8);
+add ("Danica": 0, 3, 3);
+add ("Daniel": 974, 0, 974);
+add ("Daniela": 0, 7, 7);
+add ("Daniele": 0, 3, 3);
+add ("Daniell": 0, 1, 1);
+add ("Daniella": 0, 4, 4);
+add ("Danielle": 0, 149, 149);
+add ("Danika": 0, 2, 2);
+add ("Danille": 0, 1, 1);
+add ("Danilo": 4, 0, 4);
+add ("Danita": 0, 5, 5);
+add ("Dann": 0, 1, 1);
+add ("Danna": 0, 7, 7);
+add ("Dannette": 0, 2, 2);
+add ("Dannie": 5, 0, 5);
+add ("Dannielle": 0, 3, 3);
+add ("Danny": 190, 0, 190);
+add ("Dante": 10, 0, 10);
+add ("Danuta": 0, 2, 2);
+add ("Danyel": 0, 1, 1);
+add ("Danyell": 0, 1, 1);
+add ("Danyelle": 0, 3, 3);
+add ("Daphine": 0, 2, 2);
+add ("Daphne": 0, 19, 19);
+add ("Dara": 0, 7, 7);
+add ("Darby": 0, 2, 2);
+add ("Darcel": 0, 1, 1);
+add ("Darcey": 0, 1, 1);
+add ("Darci": 0, 4, 4);
+add ("Darcie": 0, 3, 3);
+add ("Darcy": 0, 12, 12);
+add ("Darell": 4, 0, 4);
+add ("Daren": 8, 0, 8);
+add ("Daria": 0, 4, 4);
+add ("Darin": 20, 0, 20);
+add ("Dario": 5, 0, 5);
+add ("Darius": 13, 0, 13);
+add ("Darla": 0, 29, 29);
+add ("Darleen": 0, 5, 5);
+add ("Darlena": 0, 1, 1);
+add ("Darlene": 0, 142, 142);
+add ("Darline": 0, 3, 3);
+add ("Darnell": 20, 0, 20);
+add ("Daron": 4, 0, 4);
+add ("Darrel": 22, 0, 22);
+add ("Darrell": 108, 0, 108);
+add ("Darren": 64, 0, 64);
+add ("Darrick": 5, 0, 5);
+add ("Darrin": 19, 0, 19);
+add ("Darron": 4, 0, 4);
+add ("Darryl": 67, 0, 67);
+add ("Darwin": 14, 0, 14);
+add ("Daryl": 50, 0, 50);
+add ("Dave": 53, 0, 53);
+add ("David": 2363, 0, 2363);
+add ("Davida": 0, 3, 3);
+add ("Davina": 0, 3, 3);
+add ("Davis": 10, 0, 10);
+add ("Dawn": 0, 202, 202);
+add ("Dawna": 0, 4, 4);
+add ("Dawne": 0, 2, 2);
+add ("Dayle": 0, 2, 2);
+add ("Dayna": 0, 8, 8);
+add ("Daysi": 0, 1, 1);
+add ("Deadra": 0, 1, 1);
+add ("Dean": 104, 0, 104);
+add ("Deana": 0, 16, 16);
+add ("Deandra": 0, 2, 2);
+add ("Deandre": 6, 0, 6);
+add ("Deandrea": 0, 1, 1);
+add ("Deane": 0, 2, 2);
+add ("Deangelo": 4, 0, 4);
+add ("Deann": 0, 8, 8);
+add ("Deanna": 0, 76, 76);
+add ("Deanne": 0, 11, 11);
+add ("Deb": 0, 3, 3);
+add ("Debbi": 0, 2, 2);
+add ("Debbie": 0, 157, 157);
+add ("Debbra": 0, 3, 3);
+add ("Debby": 0, 7, 7);
+add ("Debera": 0, 1, 1);
+add ("Debi": 0, 5, 5);
+add ("Debora": 0, 22, 22);
+add ("Deborah": 0, 494, 494);
+add ("Debra": 0, 408, 408);
+add ("Debrah": 0, 5, 5);
+add ("Debroah": 0, 2, 2);
+add ("Dede": 0, 1, 1);
+add ("Dedra": 0, 3, 3);
+add ("Dee": 5, 0, 5);
+add ("Deeann": 0, 2, 2);
+add ("Deeanna": 0, 1, 1);
+add ("Deedee": 0, 1, 1);
+add ("Deedra": 0, 1, 1);
+add ("Deena": 0, 10, 10);
+add ("Deetta": 0, 1, 1);
+add ("Deidra": 0, 8, 8);
+add ("Deidre": 0, 10, 10);
+add ("Deirdre": 0, 10, 10);
+add ("Deja": 0, 1, 1);
+add ("Del": 4, 0, 4);
+add ("Delaine": 0, 1, 1);
+add ("Delana": 0, 2, 2);
+add ("Delbert": 31, 0, 31);
+add ("Delcie": 0, 1, 1);
+add ("Delena": 0, 2, 2);
+add ("Delfina": 0, 5, 5);
+add ("Delia": 0, 29, 29);
+add ("Delicia": 0, 2, 2);
+add ("Delila": 0, 1, 1);
+add ("Delilah": 0, 7, 7);
+add ("Delinda": 0, 2, 2);
+add ("Delisa": 0, 2, 2);
+add ("Dell": 0, 2, 2);
+add ("Della": 0, 43, 43);
+add ("Delma": 0, 7, 7);
+add ("Delmar": 9, 0, 9);
+add ("Delmer": 5, 0, 5);
+add ("Delmy": 0, 1, 1);
+add ("Delois": 0, 6, 6);
+add ("Deloise": 0, 1, 1);
+add ("Delora": 0, 3, 3);
+add ("Deloras": 0, 1, 1);
+add ("Delores": 0, 95, 95);
+add ("Deloris": 0, 25, 25);
+add ("Delorse": 0, 1, 1);
+add ("Delpha": 0, 2, 2);
+add ("Delphia": 0, 3, 3);
+add ("Delphine": 0, 7, 7);
+add ("Delsie": 0, 1, 1);
+add ("Delta": 0, 2, 2);
+add ("Demarcus": 5, 0, 5);
+add ("Demetra": 0, 3, 3);
+add ("Demetria": 0, 7, 7);
+add ("Demetrice": 0, 2, 2);
+add ("Demetrius": 17, 0, 17);
+add ("Dena": 0, 22, 22);
+add ("Denae": 0, 1, 1);
+add ("Deneen": 0, 3, 3);
+add ("Denese": 0, 2, 2);
+add ("Denice": 0, 8, 8);
+add ("Denis": 14, 0, 14);
+add ("Denise": 0, 264, 264);
+add ("Denisha": 0, 2, 2);
+add ("Denisse": 0, 1, 1);
+add ("Denita": 0, 2, 2);
+add ("Denna": 0, 3, 3);
+add ("Dennis": 415, 0, 415);
+add ("Dennise": 0, 2, 2);
+add ("Denny": 10, 0, 10);
+add ("Denver": 9, 0, 9);
+add ("Denyse": 0, 1, 1);
+add ("Deon": 6, 0, 6);
+add ("Deonna": 0, 1, 1);
+add ("Derek": 112, 0, 112);
+add ("Derick": 11, 0, 11);
+add ("Derrick": 103, 0, 103);
+add ("Deshawn": 4, 0, 4);
+add ("Desirae": 0, 3, 3);
+add ("Desire": 0, 2, 2);
+add ("Desiree": 0, 35, 35);
+add ("Desmond": 14, 0, 14);
+add ("Despina": 0, 1, 1);
+add ("Dessie": 0, 8, 8);
+add ("Destiny": 0, 7, 7);
+add ("Detra": 0, 2, 2);
+add ("Devin": 28, 0, 28);
+add ("Devon": 14, 0, 14);
+add ("Devona": 0, 2, 2);
+add ("Devora": 0, 2, 2);
+add ("Devorah": 0, 2, 2);
+add ("Dewayne": 18, 0, 18);
+add ("Dewey": 23, 0, 23);
+add ("Dewitt": 6, 0, 6);
+add ("Dexter": 21, 0, 21);
+add ("Dia": 0, 1, 1);
+add ("Diamond": 0, 2, 2);
+add ("Dian": 0, 4, 4);
+add ("Diana": 0, 216, 216);
+add ("Diane": 0, 359, 359);
+add ("Diann": 0, 9, 9);
+add ("Dianna": 0, 36, 36);
+add ("Dianne": 0, 69, 69);
+add ("Dick": 9, 0, 9);
+add ("Diedra": 0, 2, 2);
+add ("Diedre": 0, 2, 2);
+add ("Diego": 11, 0, 11);
+add ("Dierdre": 0, 1, 1);
+add ("Digna": 0, 2, 2);
+add ("Dillon": 5, 0, 5);
+add ("Dimple": 0, 2, 2);
+add ("Dina": 0, 22, 22);
+add ("Dinah": 0, 7, 7);
+add ("Dino": 6, 0, 6);
+add ("Dinorah": 0, 1, 1);
+add ("Dion": 10, 0, 10);
+add ("Dione": 0, 2, 2);
+add ("Dionna": 0, 2, 2);
+add ("Dionne": 0, 9, 9);
+add ("Dirk": 8, 0, 8);
+add ("Divina": 0, 1, 1);
+add ("Dixie": 0, 28, 28);
+add ("Dodie": 0, 1, 1);
+add ("Dollie": 0, 11, 11);
+add ("Dolly": 0, 16, 16);
+add ("Dolores": 0, 129, 129);
+add ("Doloris": 0, 2, 2);
+add ("Domenic": 4, 0, 4);
+add ("Domenica": 0, 3, 3);
+add ("Dominga": 0, 6, 6);
+add ("Domingo": 19, 0, 19);
+add ("Dominic": 32, 0, 32);
+add ("Dominica": 0, 1, 1);
+add ("Dominick": 19, 0, 19);
+add ("Dominique": 8, 0, 8);
+add ("Dominque": 0, 2, 2);
+add ("Domitila": 0, 1, 1);
+add ("Domonique": 0, 2, 2);
+add ("Don": 145, 0, 145);
+add ("Dona": 0, 14, 14);
+add ("Donald": 931, 0, 931);
+add ("Donella": 0, 1, 1);
+add ("Donetta": 0, 2, 2);
+add ("Donette": 0, 1, 1);
+add ("Dong": 4, 0, 4);
+add ("Donita": 0, 4, 4);
+add ("Donn": 6, 0, 6);
+add ("Donna": 0, 583, 583);
+add ("Donnell": 10, 0, 10);
+add ("Donnetta": 0, 1, 1);
+add ("Donnette": 0, 1, 1);
+add ("Donnie": 41, 0, 41);
+add ("Donny": 9, 0, 9);
+add ("Donovan": 10, 0, 10);
+add ("Donte": 5, 0, 5);
+add ("Donya": 0, 2, 2);
+add ("Dora": 0, 84, 84);
+add ("Dorathy": 0, 2, 2);
+add ("Dorcas": 0, 5, 5);
+add ("Doreatha": 0, 1, 1);
+add ("Doreen": 0, 35, 35);
+add ("Dorene": 0, 5, 5);
+add ("Doretha": 0, 8, 8);
+add ("Dorethea": 0, 1, 1);
+add ("Doretta": 0, 1, 1);
+add ("Dori": 0, 4, 4);
+add ("Doria": 0, 1, 1);
+add ("Dorian": 6, 0, 6);
+add ("Dorie": 0, 2, 2);
+add ("Dorinda": 0, 4, 4);
+add ("Dorine": 0, 2, 2);
+add ("Doris": 0, 335, 335);
+add ("Dorla": 0, 1, 1);
+add ("Dorotha": 0, 3, 3);
+add ("Dorothea": 0, 21, 21);
+add ("Dorothy": 0, 727, 727);
+add ("Dorris": 0, 6, 6);
+add ("Dorsey": 4, 0, 4);
+add ("Dortha": 0, 5, 5);
+add ("Dorthea": 0, 3, 3);
+add ("Dorthey": 0, 1, 1);
+add ("Dorthy": 0, 25, 25);
+add ("Dot": 0, 2, 2);
+add ("Dottie": 0, 7, 7);
+add ("Dotty": 0, 1, 1);
+add ("Doug": 40, 0, 40);
+add ("Douglas": 367, 0, 367);
+add ("Douglass": 4, 0, 4);
+add ("Dovie": 0, 5, 5);
+add ("Doyle": 22, 0, 22);
+add ("Dreama": 0, 2, 2);
+add ("Drema": 0, 2, 2);
+add ("Drew": 24, 0, 24);
+add ("Drucilla": 0, 2, 2);
+add ("Drusilla": 0, 2, 2);
+add ("Duane": 77, 0, 77);
+add ("Dudley": 9, 0, 9);
+add ("Dulce": 0, 5, 5);
+add ("Dulcie": 0, 1, 1);
+add ("Duncan": 7, 0, 7);
+add ("Dung": 0, 2, 2);
+add ("Dusti": 0, 1, 1);
+add ("Dustin": 103, 0, 103);
+add ("Dusty": 7, 0, 7);
+add ("Dwain": 5, 0, 5);
+add ("Dwana": 0, 1, 1);
+add ("Dwayne": 59, 0, 59);
+add ("Dwight": 58, 0, 58);
+add ("Dyan": 0, 2, 2);
+add ("Dylan": 16, 0, 16);
+add ("Earl": 193, 0, 193);
+add ("Earle": 6, 0, 6);
+add ("Earlean": 0, 2, 2);
+add ("Earleen": 0, 2, 2);
+add ("Earlene": 0, 12, 12);
+add ("Earlie": 0, 1, 1);
+add ("Earline": 0, 14, 14);
+add ("Earnest": 31, 0, 31);
+add ("Earnestine": 0, 12, 12);
+add ("Eartha": 0, 3, 3);
+add ("Easter": 0, 5, 5);
+add ("Eboni": 0, 3, 3);
+add ("Ebonie": 0, 1, 1);
+add ("Ebony": 0, 27, 27);
+add ("Echo": 0, 2, 2);
+add ("Ed": 32, 0, 32);
+add ("Eda": 0, 3, 3);
+add ("Edda": 0, 2, 2);
+add ("Eddie": 144, 0, 144);
+add ("Eddy": 10, 0, 10);
+add ("Edelmira": 0, 3, 3);
+add ("Eden": 0, 3, 3);
+add ("Edgar": 80, 0, 80);
+add ("Edgardo": 6, 0, 6);
+add ("Edie": 0, 4, 4);
+add ("Edison": 4, 0, 4);
+add ("Edith": 0, 179, 179);
+add ("Edmond": 19, 0, 19);
+add ("Edmund": 30, 0, 30);
+add ("Edmundo": 4, 0, 4);
+add ("Edna": 0, 197, 197);
+add ("Edra": 0, 1, 1);
+add ("Edris": 0, 1, 1);
+add ("Eduardo": 47, 0, 47);
+add ("Edward": 779, 0, 779);
+add ("Edwardo": 8, 0, 8);
+add ("Edwin": 148, 0, 148);
+add ("Edwina": 0, 11, 11);
+add ("Edyth": 0, 1, 1);
+add ("Edythe": 0, 8, 8);
+add ("Effie": 0, 24, 24);
+add ("Efrain": 17, 0, 17);
+add ("Efren": 6, 0, 6);
+add ("Ehtel": 0, 1, 1);
+add ("Eileen": 0, 105, 105);
+add ("Eilene": 0, 1, 1);
+add ("Ela": 0, 1, 1);
+add ("Eladia": 0, 1, 1);
+add ("Elaina": 0, 4, 4);
+add ("Elaine": 0, 173, 173);
+add ("Elana": 0, 3, 3);
+add ("Elane": 0, 1, 1);
+add ("Elanor": 0, 2, 2);
+add ("Elayne": 0, 2, 2);
+add ("Elba": 0, 8, 8);
+add ("Elbert": 22, 0, 22);
+add ("Elda": 0, 8, 8);
+add ("Elden": 4, 0, 4);
+add ("Eldon": 17, 0, 17);
+add ("Eldora": 0, 3, 3);
+add ("Eldridge": 4, 0, 4);
+add ("Eleanor": 0, 150, 150);
+add ("Eleanora": 0, 3, 3);
+add ("Eleanore": 0, 7, 7);
+add ("Elease": 0, 2, 2);
+add ("Elena": 0, 37, 37);
+add ("Elene": 0, 1, 1);
+add ("Eleni": 0, 2, 2);
+add ("Elenor": 0, 4, 4);
+add ("Elenora": 0, 2, 2);
+add ("Elenore": 0, 1, 1);
+add ("Eleonor": 0, 1, 1);
+add ("Eleonora": 0, 1, 1);
+add ("Eleonore": 0, 1, 1);
+add ("Elfreda": 0, 1, 1);
+add ("Elfrieda": 0, 1, 1);
+add ("Elfriede": 0, 3, 3);
+add ("Eli": 16, 0, 16);
+add ("Elia": 0, 7, 7);
+add ("Eliana": 0, 2, 2);
+add ("Elias": 22, 0, 22);
+add ("Elicia": 0, 2, 2);
+add ("Elida": 0, 7, 7);
+add ("Elidia": 0, 1, 1);
+add ("Elijah": 19, 0, 19);
+add ("Elin": 0, 1, 1);
+add ("Elina": 0, 1, 1);
+add ("Elinor": 0, 12, 12);
+add ("Elinore": 0, 1, 1);
+add ("Elisa": 0, 27, 27);
+add ("Elisabeth": 0, 23, 23);
+add ("Elise": 0, 19, 19);
+add ("Eliseo": 6, 0, 6);
+add ("Elisha": 4, 0, 4);
+add ("Elissa": 0, 6, 6);
+add ("Eliz": 0, 1, 1);
+add ("Eliza": 0, 15, 15);
+add ("Elizabet": 0, 1, 1);
+add ("Elizabeth": 0, 937, 937);
+add ("Elizbeth": 0, 2, 2);
+add ("Elizebeth": 0, 4, 4);
+add ("Elke": 0, 2, 2);
+add ("Ella": 0, 101, 101);
+add ("Ellamae": 0, 1, 1);
+add ("Ellan": 0, 1, 1);
+add ("Ellen": 0, 173, 173);
+add ("Ellena": 0, 1, 1);
+add ("Elli": 0, 1, 1);
+add ("Ellie": 0, 6, 6);
+add ("Elliot": 14, 0, 14);
+add ("Elliott": 14, 0, 14);
+add ("Ellis": 24, 0, 24);
+add ("Ellsworth": 4, 0, 4);
+add ("Elly": 0, 2, 2);
+add ("Ellyn": 0, 2, 2);
+add ("Elma": 0, 17, 17);
+add ("Elmer": 74, 0, 74);
+add ("Elmira": 0, 3, 3);
+add ("Elmo": 6, 0, 6);
+add ("Elna": 0, 3, 3);
+add ("Elnora": 0, 14, 14);
+add ("Elodia": 0, 2, 2);
+add ("Elois": 0, 2, 2);
+add ("Eloisa": 0, 7, 7);
+add ("Eloise": 0, 32, 32);
+add ("Elouise": 0, 6, 6);
+add ("Eloy": 6, 0, 6);
+add ("Elroy": 4, 0, 4);
+add ("Elsa": 0, 28, 28);
+add ("Else": 0, 2, 2);
+add ("Elsie": 0, 110, 110);
+add ("Elsy": 0, 1, 1);
+add ("Elton": 16, 0, 16);
+add ("Elva": 0, 24, 24);
+add ("Elvera": 0, 3, 3);
+add ("Elvia": 0, 10, 10);
+add ("Elvie": 0, 2, 2);
+add ("Elvin": 13, 0, 13);
+add ("Elvina": 0, 2, 2);
+add ("Elvira": 0, 29, 29);
+add ("Elvis": 10, 0, 10);
+add ("Elwanda": 0, 1, 1);
+add ("Elwood": 13, 0, 13);
+add ("Elyse": 0, 6, 6);
+add ("Elza": 0, 1, 1);
+add ("Ema": 0, 2, 2);
+add ("Emanuel": 19, 0, 19);
+add ("Emelda": 0, 2, 2);
+add ("Emelia": 0, 3, 3);
+add ("Emelina": 0, 1, 1);
+add ("Emeline": 0, 1, 1);
+add ("Emely": 0, 1, 1);
+add ("Emerald": 0, 1, 1);
+add ("Emerita": 0, 1, 1);
+add ("Emerson": 8, 0, 8);
+add ("Emery": 10, 0, 10);
+add ("Emiko": 0, 2, 2);
+add ("Emil": 19, 0, 19);
+add ("Emile": 6, 0, 6);
+add ("Emilee": 0, 2, 2);
+add ("Emilia": 0, 13, 13);
+add ("Emilie": 0, 8, 8);
+add ("Emilio": 19, 0, 19);
+add ("Emily": 0, 208, 208);
+add ("Emma": 0, 165, 165);
+add ("Emmaline": 0, 1, 1);
+add ("Emmanuel": 18, 0, 18);
+add ("Emmett": 19, 0, 19);
+add ("Emmie": 0, 2, 2);
+add ("Emmitt": 4, 0, 4);
+add ("Emmy": 0, 2, 2);
+add ("Emogene": 0, 3, 3);
+add ("Emory": 8, 0, 8);
+add ("Ena": 0, 4, 4);
+add ("Enda": 0, 1, 1);
+add ("Enedina": 0, 3, 3);
+add ("Eneida": 0, 2, 2);
+add ("Enid": 0, 9, 9);
+add ("Enoch": 5, 0, 5);
+add ("Enola": 0, 2, 2);
+add ("Enrique": 46, 0, 46);
+add ("Enriqueta": 0, 4, 4);
+add ("Epifania": 0, 2, 2);
+add ("Era": 0, 4, 4);
+add ("Erasmo": 4, 0, 4);
+add ("Eric": 544, 0, 544);
+add ("Erica": 0, 130, 130);
+add ("Erich": 7, 0, 7);
+add ("Erick": 23, 0, 23);
+add ("Ericka": 0, 14, 14);
+add ("Erik": 68, 0, 68);
+add ("Erika": 0, 61, 61);
+add ("Erin": 7, 0, 7);
+add ("Erinn": 0, 2, 2);
+add ("Erlene": 0, 2, 2);
+add ("Erlinda": 0, 6, 6);
+add ("Erline": 0, 2, 2);
+add ("Erma": 0, 41, 41);
+add ("Ermelinda": 0, 2, 2);
+add ("Erminia": 0, 2, 2);
+add ("Erna": 0, 9, 9);
+add ("Ernest": 215, 0, 215);
+add ("Ernestina": 0, 7, 7);
+add ("Ernestine": 0, 38, 38);
+add ("Ernesto": 37, 0, 37);
+add ("Ernie": 15, 0, 15);
+add ("Errol": 8, 0, 8);
+add ("Ervin": 23, 0, 23);
+add ("Erwin": 15, 0, 15);
+add ("Eryn": 0, 1, 1);
+add ("Esmeralda": 0, 13, 13);
+add ("Esperanza": 0, 21, 21);
+add ("Essie": 0, 29, 29);
+add ("Esta": 0, 2, 2);
+add ("Esteban": 13, 0, 13);
+add ("Estefana": 0, 1, 1);
+add ("Estela": 0, 14, 14);
+add ("Estell": 0, 2, 2);
+add ("Estella": 0, 24, 24);
+add ("Estelle": 0, 36, 36);
+add ("Ester": 0, 19, 19);
+add ("Esther": 0, 166, 166);
+add ("Estrella": 0, 3, 3);
+add ("Etha": 0, 1, 1);
+add ("Ethan": 17, 0, 17);
+add ("Ethel": 0, 174, 174);
+add ("Ethelene": 0, 2, 2);
+add ("Ethelyn": 0, 3, 3);
+add ("Ethyl": 0, 2, 2);
+add ("Etsuko": 0, 1, 1);
+add ("Etta": 0, 24, 24);
+add ("Ettie": 0, 1, 1);
+add ("Eufemia": 0, 1, 1);
+add ("Eugena": 0, 1, 1);
+add ("Eugene": 230, 0, 230);
+add ("Eugenia": 0, 23, 23);
+add ("Eugenie": 0, 3, 3);
+add ("Eugenio": 7, 0, 7);
+add ("Eula": 0, 33, 33);
+add ("Eulah": 0, 1, 1);
+add ("Eulalia": 0, 5, 5);
+add ("Eun": 0, 3, 3);
+add ("Euna": 0, 1, 1);
+add ("Eunice": 0, 54, 54);
+add ("Eura": 0, 1, 1);
+add ("Eusebia": 0, 1, 1);
+add ("Eusebio": 4, 0, 4);
+add ("Eustolia": 0, 1, 1);
+add ("Eva": 0, 159, 159);
+add ("Evalyn": 0, 3, 3);
+add ("Evan": 42, 0, 42);
+add ("Evangelina": 0, 9, 9);
+add ("Evangeline": 0, 11, 11);
+add ("Eve": 0, 13, 13);
+add ("Evelia": 0, 3, 3);
+add ("Evelin": 0, 2, 2);
+add ("Evelina": 0, 2, 2);
+add ("Eveline": 0, 2, 2);
+add ("Evelyn": 0, 322, 322);
+add ("Evelyne": 0, 2, 2);
+add ("Evelynn": 0, 1, 1);
+add ("Everett": 57, 0, 57);
+add ("Everette": 6, 0, 6);
+add ("Evette": 0, 6, 6);
+add ("Evia": 0, 1, 1);
+add ("Evie": 0, 4, 4);
+add ("Evita": 0, 1, 1);
+add ("Evon": 0, 3, 3);
+add ("Evonne": 0, 4, 4);
+add ("Ewa": 0, 1, 1);
+add ("Exie": 0, 2, 2);
+add ("Ezekiel": 4, 0, 4);
+add ("Ezequiel": 4, 0, 4);
+add ("Ezra": 7, 0, 7);
+add ("Fabian": 12, 0, 12);
+add ("Fabiola": 0, 5, 5);
+add ("Fae": 0, 2, 2);
+add ("Fairy": 0, 1, 1);
+add ("Faith": 0, 28, 28);
+add ("Fallon": 0, 3, 3);
+add ("Fannie": 0, 50, 50);
+add ("Fanny": 0, 9, 9);
+add ("Farah": 0, 2, 2);
+add ("Farrah": 0, 4, 4);
+add ("Fatima": 0, 7, 7);
+add ("Fatimah": 0, 1, 1);
+add ("Faustina": 0, 2, 2);
+add ("Faustino": 6, 0, 6);
+add ("Fausto": 4, 0, 4);
+add ("Faviola": 0, 1, 1);
+add ("Fawn": 0, 4, 4);
+add ("Fay": 0, 21, 21);
+add ("Faye": 0, 58, 58);
+add ("Fe": 0, 2, 2);
+add ("Federico": 10, 0, 10);
+add ("Felecia": 0, 8, 8);
+add ("Felica": 0, 3, 3);
+add ("Felice": 0, 3, 3);
+add ("Felicia": 0, 68, 68);
+add ("Felicidad": 0, 1, 1);
+add ("Felicita": 0, 6, 6);
+add ("Felicitas": 0, 4, 4);
+add ("Felipa": 0, 4, 4);
+add ("Felipe": 32, 0, 32);
+add ("Felisa": 0, 3, 3);
+add ("Felisha": 0, 4, 4);
+add ("Felix": 58, 0, 58);
+add ("Felton": 4, 0, 4);
+add ("Ferdinand": 7, 0, 7);
+add ("Fermin": 5, 0, 5);
+add ("Fermina": 0, 1, 1);
+add ("Fern": 0, 24, 24);
+add ("Fernanda": 0, 2, 2);
+add ("Fernande": 0, 1, 1);
+add ("Fernando": 65, 0, 65);
+add ("Ferne": 0, 3, 3);
+add ("Fidel": 12, 0, 12);
+add ("Fidela": 0, 1, 1);
+add ("Fidelia": 0, 1, 1);
+add ("Filiberto": 4, 0, 4);
+add ("Filomena": 0, 6, 6);
+add ("Fiona": 0, 3, 3);
+add ("Flavia": 0, 2, 2);
+add ("Fleta": 0, 1, 1);
+add ("Fletcher": 8, 0, 8);
+add ("Flo": 0, 2, 2);
+add ("Flor": 0, 6, 6);
+add ("Flora": 0, 49, 49);
+add ("Florance": 0, 2, 2);
+add ("Florence": 0, 200, 200);
+add ("Florencia": 0, 2, 2);
+add ("Florencio": 5, 0, 5);
+add ("Florene": 0, 3, 3);
+add ("Florentina": 0, 2, 2);
+add ("Florentino": 4, 0, 4);
+add ("Floretta": 0, 2, 2);
+add ("Floria": 0, 1, 1);
+add ("Florida": 0, 4, 4);
+add ("Florinda": 0, 2, 2);
+add ("Florine": 0, 9, 9);
+add ("Florrie": 0, 1, 1);
+add ("Flossie": 0, 14, 14);
+add ("Floy": 0, 5, 5);
+add ("Floyd": 107, 0, 107);
+add ("Fonda": 0, 3, 3);
+add ("Forest": 7, 0, 7);
+add ("Forrest": 27, 0, 27);
+add ("Foster": 6, 0, 6);
+add ("Fran": 0, 11, 11);
+add ("France": 0, 2, 2);
+add ("Francene": 0, 1, 1);
+add ("Frances": 5, 0, 5);
+add ("Francesca": 0, 9, 9);
+add ("Francesco": 4, 0, 4);
+add ("Franchesca": 0, 1, 1);
+add ("Francie": 0, 2, 2);
+add ("Francina": 0, 2, 2);
+add ("Francine": 0, 25, 25);
+add ("Francis": 160, 0, 160);
+add ("Francisca": 0, 24, 24);
+add ("Francisco": 124, 0, 124);
+add ("Francoise": 0, 2, 2);
+add ("Frank": 581, 0, 581);
+add ("Frankie": 23, 0, 23);
+add ("Franklin": 77, 0, 77);
+add ("Franklyn": 4, 0, 4);
+add ("Fransisca": 0, 1, 1);
+add ("Fred": 251, 0, 251);
+add ("Freda": 0, 34, 34);
+add ("Fredda": 0, 1, 1);
+add ("Freddie": 46, 0, 46);
+add ("Freddy": 16, 0, 16);
+add ("Frederic": 9, 0, 9);
+add ("Frederica": 0, 2, 2);
+add ("Frederick": 154, 0, 154);
+add ("Fredericka": 0, 2, 2);
+add ("Fredia": 0, 2, 2);
+add ("Fredric": 5, 0, 5);
+add ("Fredrick": 43, 0, 43);
+add ("Fredricka": 0, 1, 1);
+add ("Freeda": 0, 2, 2);
+add ("Freeman": 7, 0, 7);
+add ("Freida": 0, 9, 9);
+add ("Frida": 0, 1, 1);
+add ("Frieda": 0, 17, 17);
+add ("Fritz": 6, 0, 6);
+add ("Fumiko": 0, 2, 2);
+add ("Gabriel": 73, 0, 73);
+add ("Gabriela": 0, 18, 18);
+add ("Gabriele": 0, 2, 2);
+add ("Gabriella": 0, 5, 5);
+add ("Gabrielle": 0, 17, 17);
+add ("Gail": 6, 0, 6);
+add ("Gala": 0, 1, 1);
+add ("Gale": 8, 0, 8);
+add ("Galen": 9, 0, 9);
+add ("Galina": 0, 1, 1);
+add ("Garfield": 5, 0, 5);
+add ("Garland": 17, 0, 17);
+add ("Garnet": 0, 4, 4);
+add ("Garnett": 0, 2, 2);
+add ("Garret": 4, 0, 4);
+add ("Garrett": 29, 0, 29);
+add ("Garry": 32, 0, 32);
+add ("Garth": 7, 0, 7);
+add ("Gary": 650, 0, 650);
+add ("Gaston": 4, 0, 4);
+add ("Gavin": 10, 0, 10);
+add ("Gay": 0, 12, 12);
+add ("Gaye": 0, 5, 5);
+add ("Gayla": 0, 8, 8);
+add ("Gayle": 4, 0, 4);
+add ("Gaylene": 0, 2, 2);
+add ("Gaylord": 4, 0, 4);
+add ("Gaynell": 0, 3, 3);
+add ("Gaynelle": 0, 1, 1);
+add ("Gearldine": 0, 2, 2);
+add ("Gema": 0, 1, 1);
+add ("Gemma": 0, 3, 3);
+add ("Gena": 0, 10, 10);
+add ("Genaro": 8, 0, 8);
+add ("Gene": 87, 0, 87);
+add ("Genesis": 0, 1, 1);
+add ("Geneva": 0, 59, 59);
+add ("Genevie": 0, 1, 1);
+add ("Genevieve": 0, 51, 51);
+add ("Genevive": 0, 1, 1);
+add ("Genia": 0, 2, 2);
+add ("Genie": 0, 2, 2);
+add ("Genna": 0, 1, 1);
+add ("Gennie": 0, 2, 2);
+add ("Genny": 0, 1, 1);
+add ("Genoveva": 0, 5, 5);
+add ("Geoffrey": 32, 0, 32);
+add ("Georgann": 0, 1, 1);
+add ("George": 927, 0, 927);
+add ("Georgeann": 0, 1, 1);
+add ("Georgeanna": 0, 1, 1);
+add ("Georgene": 0, 2, 2);
+add ("Georgetta": 0, 3, 3);
+add ("Georgette": 0, 11, 11);
+add ("Georgia": 0, 91, 91);
+add ("Georgiana": 0, 5, 5);
+add ("Georgiann": 0, 1, 1);
+add ("Georgianna": 0, 5, 5);
+add ("Georgianne": 0, 1, 1);
+add ("Georgie": 0, 4, 4);
+add ("Georgina": 0, 15, 15);
+add ("Georgine": 0, 2, 2);
+add ("Gerald": 309, 0, 309);
+add ("Geraldine": 0, 141, 141);
+add ("Geraldo": 5, 0, 5);
+add ("Geralyn": 0, 3, 3);
+add ("Gerard": 40, 0, 40);
+add ("Gerardo": 32, 0, 32);
+add ("Gerda": 0, 4, 4);
+add ("Geri": 0, 8, 8);
+add ("Germaine": 0, 8, 8);
+add ("German": 8, 0, 8);
+add ("Gerri": 0, 5, 5);
+add ("Gerry": 11, 0, 11);
+add ("Gertha": 0, 2, 2);
+add ("Gertie": 0, 5, 5);
+add ("Gertrud": 0, 2, 2);
+add ("Gertrude": 0, 103, 103);
+add ("Gertrudis": 0, 1, 1);
+add ("Gertude": 0, 1, 1);
+add ("Ghislaine": 0, 1, 1);
+add ("Gia": 0, 2, 2);
+add ("Gianna": 0, 1, 1);
+add ("Gidget": 0, 1, 1);
+add ("Gigi": 0, 2, 2);
+add ("Gil": 6, 0, 6);
+add ("Gilbert": 89, 0, 89);
+add ("Gilberte": 0, 1, 1);
+add ("Gilberto": 24, 0, 24);
+add ("Gilda": 0, 9, 9);
+add ("Gillian": 0, 6, 6);
+add ("Gilma": 0, 1, 1);
+add ("Gina": 0, 99, 99);
+add ("Ginette": 0, 1, 1);
+add ("Ginger": 0, 34, 34);
+add ("Ginny": 0, 5, 5);
+add ("Gino": 6, 0, 6);
+add ("Giovanna": 0, 3, 3);
+add ("Giovanni": 7, 0, 7);
+add ("Gisela": 0, 6, 6);
+add ("Gisele": 0, 3, 3);
+add ("Giselle": 0, 4, 4);
+add ("Gita": 0, 1, 1);
+add ("Giuseppe": 5, 0, 5);
+add ("Giuseppina": 0, 1, 1);
+add ("Gladis": 0, 3, 3);
+add ("Glady": 0, 2, 2);
+add ("Gladys": 0, 205, 205);
+add ("Glayds": 0, 1, 1);
+add ("Glen": 94, 0, 94);
+add ("Glenda": 0, 88, 88);
+add ("Glendora": 0, 2, 2);
+add ("Glenn": 167, 0, 167);
+add ("Glenna": 0, 18, 18);
+add ("Glennie": 0, 2, 2);
+add ("Glennis": 0, 2, 2);
+add ("Glinda": 0, 2, 2);
+add ("Gloria": 0, 335, 335);
+add ("Glory": 0, 3, 3);
+add ("Glynda": 0, 2, 2);
+add ("Glynis": 0, 1, 1);
+add ("Golda": 0, 3, 3);
+add ("Golden": 0, 1, 1);
+add ("Goldie": 0, 23, 23);
+add ("Gonzalo": 11, 0, 11);
+add ("Gordon": 104, 0, 104);
+add ("Grace": 0, 189, 189);
+add ("Gracia": 0, 2, 2);
+add ("Gracie": 0, 18, 18);
+add ("Graciela": 0, 19, 19);
+add ("Grady": 21, 0, 21);
+add ("Graham": 12, 0, 12);
+add ("Graig": 4, 0, 4);
+add ("Grant": 36, 0, 36);
+add ("Granville": 4, 0, 4);
+add ("Grayce": 0, 1, 1);
+add ("Grazyna": 0, 1, 1);
+add ("Greg": 104, 0, 104);
+add ("Gregg": 29, 0, 29);
+add ("Gregoria": 0, 5, 5);
+add ("Gregorio": 14, 0, 14);
+add ("Gregory": 441, 0, 441);
+add ("Greta": 0, 14, 14);
+add ("Gretchen": 0, 32, 32);
+add ("Gretta": 0, 3, 3);
+add ("Gricelda": 0, 1, 1);
+add ("Grisel": 0, 1, 1);
+add ("Griselda": 0, 7, 7);
+add ("Grover": 16, 0, 16);
+add ("Guadalupe": 26, 0, 26);
+add ("Gudrun": 0, 2, 2);
+add ("Guillermina": 0, 7, 7);
+add ("Guillermo": 31, 0, 31);
+add ("Gus": 11, 0, 11);
+add ("Gussie": 0, 8, 8);
+add ("Gustavo": 25, 0, 25);
+add ("Guy": 60, 0, 60);
+add ("Gwen": 0, 31, 31);
+add ("Gwenda": 0, 2, 2);
+add ("Gwendolyn": 0, 74, 74);
+add ("Gwenn": 0, 2, 2);
+add ("Gwyn": 0, 2, 2);
+add ("Gwyneth": 0, 1, 1);
+add ("Ha": 0, 2, 2);
+add ("Hae": 0, 2, 2);
+add ("Hai": 4, 0, 4);
+add ("Hailey": 0, 4, 4);
+add ("Hal": 13, 0, 13);
+add ("Haley": 0, 14, 14);
+add ("Halina": 0, 2, 2);
+add ("Halley": 0, 1, 1);
+add ("Hallie": 0, 9, 9);
+add ("Han": 0, 1, 1);
+add ("Hana": 0, 2, 2);
+add ("Hang": 0, 1, 1);
+add ("Hanh": 0, 2, 2);
+add ("Hank": 5, 0, 5);
+add ("Hanna": 0, 7, 7);
+add ("Hannah": 0, 45, 45);
+add ("Hannelore": 0, 2, 2);
+add ("Hans": 15, 0, 15);
+add ("Harlan": 14, 0, 14);
+add ("Harland": 4, 0, 4);
+add ("Harley": 17, 0, 17);
+add ("Harmony": 0, 2, 2);
+add ("Harold": 371, 0, 371);
+add ("Harriet": 0, 56, 56);
+add ("Harriett": 0, 13, 13);
+add ("Harriette": 0, 6, 6);
+add ("Harris": 9, 0, 9);
+add ("Harrison": 14, 0, 14);
+add ("Harry": 251, 0, 251);
+add ("Harvey": 72, 0, 72);
+add ("Hassan": 5, 0, 5);
+add ("Hassie": 0, 1, 1);
+add ("Hattie": 0, 56, 56);
+add ("Haydee": 0, 6, 6);
+add ("Hayden": 4, 0, 4);
+add ("Hayley": 0, 5, 5);
+add ("Haywood": 4, 0, 4);
+add ("Hazel": 0, 161, 161);
+add ("Heath": 17, 0, 17);
+add ("Heather": 0, 337, 337);
+add ("Hector": 94, 0, 94);
+add ("Hedwig": 0, 3, 3);
+add ("Hedy": 0, 2, 2);
+add ("Hee": 0, 2, 2);
+add ("Heide": 0, 2, 2);
+add ("Heidi": 0, 88, 88);
+add ("Heidy": 0, 1, 1);
+add ("Heike": 0, 1, 1);
+add ("Helaine": 0, 1, 1);
+add ("Helen": 0, 663, 663);
+add ("Helena": 0, 21, 21);
+add ("Helene": 0, 24, 24);
+add ("Helga": 0, 9, 9);
+add ("Hellen": 0, 5, 5);
+add ("Henrietta": 0, 31, 31);
+add ("Henriette": 0, 2, 2);
+add ("Henry": 365, 0, 365);
+add ("Herb": 4, 0, 4);
+add ("Herbert": 155, 0, 155);
+add ("Heriberto": 10, 0, 10);
+add ("Herlinda": 0, 5, 5);
+add ("Herma": 0, 1, 1);
+add ("Herman": 97, 0, 97);
+add ("Hermelinda": 0, 4, 4);
+add ("Hermila": 0, 1, 1);
+add ("Hermina": 0, 2, 2);
+add ("Hermine": 0, 2, 2);
+add ("Herminia": 0, 8, 8);
+add ("Herschel": 7, 0, 7);
+add ("Hershel": 6, 0, 6);
+add ("Herta": 0, 1, 1);
+add ("Hertha": 0, 1, 1);
+add ("Hester": 0, 9, 9);
+add ("Hettie": 0, 3, 3);
+add ("Hiedi": 0, 1, 1);
+add ("Hien": 0, 1, 1);
+add ("Hilaria": 0, 2, 2);
+add ("Hilario": 5, 0, 5);
+add ("Hilary": 0, 14, 14);
+add ("Hilda": 0, 75, 75);
+add ("Hilde": 0, 2, 2);
+add ("Hildegard": 0, 5, 5);
+add ("Hildegarde": 0, 2, 2);
+add ("Hildred": 0, 2, 2);
+add ("Hillary": 0, 13, 13);
+add ("Hilma": 0, 2, 2);
+add ("Hilton": 5, 0, 5);
+add ("Hipolito": 5, 0, 5);
+add ("Hiram": 10, 0, 10);
+add ("Hiroko": 0, 2, 2);
+add ("Hisako": 0, 1, 1);
+add ("Hoa": 0, 3, 3);
+add ("Hobert": 4, 0, 4);
+add ("Holley": 0, 2, 2);
+add ("Holli": 0, 4, 4);
+add ("Hollie": 0, 9, 9);
+add ("Hollis": 9, 0, 9);
+add ("Holly": 0, 117, 117);
+add ("Homer": 40, 0, 40);
+add ("Honey": 0, 2, 2);
+add ("Hong": 4, 0, 4);
+add ("Hope": 0, 34, 34);
+add ("Horace": 36, 0, 36);
+add ("Horacio": 5, 0, 5);
+add ("Hortencia": 0, 7, 7);
+add ("Hortense": 0, 4, 4);
+add ("Hortensia": 0, 3, 3);
+add ("Hosea": 4, 0, 4);
+add ("Houston": 8, 0, 8);
+add ("Howard": 230, 0, 230);
+add ("Hoyt": 4, 0, 4);
+add ("Hsiu": 0, 1, 1);
+add ("Hubert": 39, 0, 39);
+add ("Hue": 0, 1, 1);
+add ("Huey": 5, 0, 5);
+add ("Hugh": 60, 0, 60);
+add ("Hugo": 23, 0, 23);
+add ("Hui": 0, 3, 3);
+add ("Hulda": 0, 3, 3);
+add ("Humberto": 18, 0, 18);
+add ("Hung": 8, 0, 8);
+add ("Hunter": 9, 0, 9);
+add ("Huong": 0, 3, 3);
+add ("Hwa": 0, 1, 1);
+add ("Hyacinth": 0, 2, 2);
+add ("Hye": 0, 2, 2);
+add ("Hyman": 4, 0, 4);
+add ("Hyo": 0, 1, 1);
+add ("Hyon": 0, 2, 2);
+add ("Hyun": 0, 2, 2);
+add ("Ian": 56, 0, 56);
+add ("Ida": 0, 118, 118);
+add ("Idalia": 0, 3, 3);
+add ("Idell": 0, 2, 2);
+add ("Idella": 0, 5, 5);
+add ("Iesha": 0, 2, 2);
+add ("Ignacia": 0, 2, 2);
+add ("Ignacio": 23, 0, 23);
+add ("Ike": 4, 0, 4);
+add ("Ila": 0, 14, 14);
+add ("Ilana": 0, 2, 2);
+add ("Ilda": 0, 2, 2);
+add ("Ileana": 0, 4, 4);
+add ("Ileen": 0, 1, 1);
+add ("Ilene": 0, 11, 11);
+add ("Iliana": 0, 3, 3);
+add ("Illa": 0, 1, 1);
+add ("Ilona": 0, 3, 3);
+add ("Ilse": 0, 4, 4);
+add ("Iluminada": 0, 2, 2);
+add ("Ima": 0, 5, 5);
+add ("Imelda": 0, 10, 10);
+add ("Imogene": 0, 19, 19);
+add ("In": 0, 3, 3);
+add ("Ina": 0, 23, 23);
+add ("India": 0, 6, 6);
+add ("Indira": 0, 2, 2);
+add ("Inell": 0, 2, 2);
+add ("Ines": 0, 9, 9);
+add ("Inez": 0, 53, 53);
+add ("Inga": 0, 3, 3);
+add ("Inge": 0, 4, 4);
+add ("Ingeborg": 0, 3, 3);
+add ("Inger": 0, 2, 2);
+add ("Ingrid": 0, 23, 23);
+add ("Inocencia": 0, 2, 2);
+add ("Iola": 0, 7, 7);
+add ("Iona": 0, 7, 7);
+add ("Ione": 0, 6, 6);
+add ("Ira": 35, 0, 35);
+add ("Iraida": 0, 1, 1);
+add ("Irena": 0, 3, 3);
+add ("Irene": 0, 252, 252);
+add ("Irina": 0, 2, 2);
+add ("Iris": 0, 55, 55);
+add ("Irish": 0, 2, 2);
+add ("Irma": 0, 79, 79);
+add ("Irmgard": 0, 2, 2);
+add ("Irvin": 20, 0, 20);
+add ("Irving": 26, 0, 26);
+add ("Irwin": 9, 0, 9);
+add ("Isa": 0, 2, 2);
+add ("Isaac": 51, 0, 51);
+add ("Isabel": 0, 57, 57);
+add ("Isabell": 0, 6, 6);
+add ("Isabella": 0, 8, 8);
+add ("Isabelle": 0, 19, 19);
+add ("Isadora": 0, 1, 1);
+add ("Isaiah": 11, 0, 11);
+add ("Isaias": 5, 0, 5);
+add ("Isaura": 0, 2, 2);
+add ("Isela": 0, 3, 3);
+add ("Isiah": 6, 0, 6);
+add ("Isidra": 0, 2, 2);
+add ("Isidro": 9, 0, 9);
+add ("Isis": 0, 2, 2);
+add ("Ismael": 24, 0, 24);
+add ("Isobel": 0, 1, 1);
+add ("Israel": 28, 0, 28);
+add ("Isreal": 4, 0, 4);
+add ("Issac": 10, 0, 10);
+add ("Iva": 0, 23, 23);
+add ("Ivan": 53, 0, 53);
+add ("Ivana": 0, 2, 2);
+add ("Ivelisse": 0, 1, 1);
+add ("Ivette": 0, 7, 7);
+add ("Ivey": 0, 1, 1);
+add ("Ivonne": 0, 5, 5);
+add ("Ivory": 6, 0, 6);
+add ("Ivy": 0, 16, 16);
+add ("Izetta": 0, 1, 1);
+add ("Izola": 0, 1, 1);
+add ("Ja": 0, 1, 1);
+add ("Jacalyn": 0, 3, 3);
+add ("Jacelyn": 0, 1, 1);
+add ("Jacinda": 0, 1, 1);
+add ("Jacinta": 0, 3, 3);
+add ("Jacinto": 4, 0, 4);
+add ("Jack": 315, 0, 315);
+add ("Jackeline": 0, 3, 3);
+add ("Jackelyn": 0, 1, 1);
+add ("Jacki": 0, 2, 2);
+add ("Jackie": 43, 0, 43);
+add ("Jacklyn": 0, 9, 9);
+add ("Jackqueline": 0, 1, 1);
+add ("Jackson": 12, 0, 12);
+add ("Jaclyn": 0, 18, 18);
+add ("Jacob": 165, 0, 165);
+add ("Jacqualine": 0, 2, 2);
+add ("Jacque": 0, 5, 5);
+add ("Jacquelin": 0, 5, 5);
+add ("Jacqueline": 0, 228, 228);
+add ("Jacquelyn": 0, 41, 41);
+add ("Jacquelyne": 0, 2, 2);
+add ("Jacquelynn": 0, 2, 2);
+add ("Jacques": 8, 0, 8);
+add ("Jacquetta": 0, 1, 1);
+add ("Jacqui": 0, 1, 1);
+add ("Jacquie": 0, 1, 1);
+add ("Jacquiline": 0, 2, 2);
+add ("Jacquline": 0, 7, 7);
+add ("Jacqulyn": 0, 2, 2);
+add ("Jada": 0, 4, 4);
+add ("Jade": 0, 8, 8);
+add ("Jadwiga": 0, 2, 2);
+add ("Jae": 4, 0, 4);
+add ("Jaime": 55, 0, 55);
+add ("Jaimee": 0, 1, 1);
+add ("Jaimie": 0, 4, 4);
+add ("Jake": 25, 0, 25);
+add ("Jaleesa": 0, 2, 2);
+add ("Jalisa": 0, 1, 1);
+add ("Jama": 0, 1, 1);
+add ("Jamaal": 6, 0, 6);
+add ("Jamal": 14, 0, 14);
+add ("Jamar": 6, 0, 6);
+add ("Jame": 8, 0, 8);
+add ("Jamee": 0, 1, 1);
+add ("Jamel": 7, 0, 7);
+add ("James": 3318, 0, 3318);
+add ("Jamey": 5, 0, 5);
+add ("Jami": 0, 14, 14);
+add ("Jamie": 66, 0, 66);
+add ("Jamika": 0, 1, 1);
+add ("Jamila": 0, 4, 4);
+add ("Jamison": 5, 0, 5);
+add ("Jammie": 0, 3, 3);
+add ("Jan": 19, 0, 19);
+add ("Jana": 0, 31, 31);
+add ("Janae": 0, 3, 3);
+add ("Janay": 0, 2, 2);
+add ("Jane": 0, 250, 250);
+add ("Janean": 0, 1, 1);
+add ("Janee": 0, 1, 1);
+add ("Janeen": 0, 4, 4);
+add ("Janel": 0, 7, 7);
+add ("Janell": 0, 9, 9);
+add ("Janella": 0, 1, 1);
+add ("Janelle": 0, 24, 24);
+add ("Janene": 0, 3, 3);
+add ("Janessa": 0, 2, 2);
+add ("Janet": 0, 379, 379);
+add ("Janeth": 0, 2, 2);
+add ("Janett": 0, 2, 2);
+add ("Janetta": 0, 2, 2);
+add ("Janette": 0, 22, 22);
+add ("Janey": 0, 3, 3);
+add ("Jani": 0, 1, 1);
+add ("Janice": 0, 285, 285);
+add ("Janie": 0, 51, 51);
+add ("Janiece": 0, 1, 1);
+add ("Janina": 0, 4, 4);
+add ("Janine": 0, 20, 20);
+add ("Janis": 0, 34, 34);
+add ("Janise": 0, 1, 1);
+add ("Janita": 0, 2, 2);
+add ("Jann": 0, 2, 2);
+add ("Janna": 0, 10, 10);
+add ("Jannet": 0, 1, 1);
+add ("Jannette": 0, 5, 5);
+add ("Jannie": 0, 9, 9);
+add ("January": 0, 1, 1);
+add ("Janyce": 0, 1, 1);
+add ("Jaqueline": 0, 7, 7);
+add ("Jaquelyn": 0, 1, 1);
+add ("Jared": 71, 0, 71);
+add ("Jarod": 4, 0, 4);
+add ("Jarred": 6, 0, 6);
+add ("Jarrett": 7, 0, 7);
+add ("Jarrod": 14, 0, 14);
+add ("Jarvis": 10, 0, 10);
+add ("Jasmin": 0, 8, 8);
+add ("Jasmine": 0, 38, 38);
+add ("Jason": 660, 0, 660);
+add ("Jasper": 15, 0, 15);
+add ("Jaunita": 0, 3, 3);
+add ("Javier": 65, 0, 65);
+add ("Jay": 118, 0, 118);
+add ("Jaye": 0, 1, 1);
+add ("Jayme": 0, 6, 6);
+add ("Jaymie": 0, 1, 1);
+add ("Jayna": 0, 1, 1);
+add ("Jayne": 0, 18, 18);
+add ("Jayson": 10, 0, 10);
+add ("Jazmin": 0, 3, 3);
+add ("Jazmine": 0, 2, 2);
+add ("Jc": 4, 0, 4);
+add ("Jean": 35, 0, 35);
+add ("Jeana": 0, 5, 5);
+add ("Jeane": 0, 4, 4);
+add ("Jeanelle": 0, 1, 1);
+add ("Jeanene": 0, 2, 2);
+add ("Jeanett": 0, 1, 1);
+add ("Jeanetta": 0, 4, 4);
+add ("Jeanette": 0, 115, 115);
+add ("Jeanice": 0, 1, 1);
+add ("Jeanie": 0, 13, 13);
+add ("Jeanine": 0, 17, 17);
+add ("Jeanmarie": 0, 1, 1);
+add ("Jeanna": 0, 7, 7);
+add ("Jeanne": 0, 109, 109);
+add ("Jeannetta": 0, 1, 1);
+add ("Jeannette": 0, 46, 46);
+add ("Jeannie": 0, 28, 28);
+add ("Jeannine": 0, 16, 16);
+add ("Jed": 5, 0, 5);
+add ("Jeff": 166, 0, 166);
+add ("Jefferey": 5, 0, 5);
+add ("Jefferson": 10, 0, 10);
+add ("Jeffery": 166, 0, 166);
+add ("Jeffie": 0, 1, 1);
+add ("Jeffrey": 591, 0, 591);
+add ("Jeffry": 12, 0, 12);
+add ("Jen": 0, 2, 2);
+add ("Jena": 0, 7, 7);
+add ("Jenae": 0, 1, 1);
+add ("Jene": 0, 1, 1);
+add ("Jenee": 0, 1, 1);
+add ("Jenell": 0, 2, 2);
+add ("Jenelle": 0, 4, 4);
+add ("Jenette": 0, 2, 2);
+add ("Jeneva": 0, 1, 1);
+add ("Jeni": 0, 2, 2);
+add ("Jenice": 0, 2, 2);
+add ("Jenifer": 0, 23, 23);
+add ("Jeniffer": 0, 4, 4);
+add ("Jenine": 0, 2, 2);
+add ("Jenise": 0, 2, 2);
+add ("Jenna": 0, 30, 30);
+add ("Jennefer": 0, 2, 2);
+add ("Jennell": 0, 1, 1);
+add ("Jennette": 0, 4, 4);
+add ("Jenni": 0, 4, 4);
+add ("Jennie": 0, 73, 73);
+add ("Jennifer": 0, 932, 932);
+add ("Jenniffer": 0, 3, 3);
+add ("Jennine": 0, 1, 1);
+add ("Jenny": 0, 68, 68);
+add ("Jerald": 19, 0, 19);
+add ("Jeraldine": 0, 3, 3);
+add ("Jeramy": 4, 0, 4);
+add ("Jere": 4, 0, 4);
+add ("Jeremiah": 42, 0, 42);
+add ("Jeremy": 242, 0, 242);
+add ("Jeri": 0, 15, 15);
+add ("Jerica": 0, 1, 1);
+add ("Jerilyn": 0, 3, 3);
+add ("Jerlene": 0, 1, 1);
+add ("Jermaine": 28, 0, 28);
+add ("Jerold": 6, 0, 6);
+add ("Jerome": 108, 0, 108);
+add ("Jeromy": 4, 0, 4);
+add ("Jerrell": 4, 0, 4);
+add ("Jerri": 0, 12, 12);
+add ("Jerrica": 0, 1, 1);
+add ("Jerrie": 0, 4, 4);
+add ("Jerrod": 6, 0, 6);
+add ("Jerrold": 5, 0, 5);
+add ("Jerry": 432, 0, 432);
+add ("Jesenia": 0, 2, 2);
+add ("Jesica": 0, 5, 5);
+add ("Jess": 18, 0, 18);
+add ("Jesse": 209, 0, 209);
+add ("Jessenia": 0, 2, 2);
+add ("Jessi": 0, 2, 2);
+add ("Jessia": 0, 1, 1);
+add ("Jessica": 0, 490, 490);
+add ("Jessie": 65, 0, 65);
+add ("Jessika": 0, 1, 1);
+add ("Jestine": 0, 1, 1);
+add ("Jesus": 155, 0, 155);
+add ("Jesusa": 0, 2, 2);
+add ("Jesusita": 0, 1, 1);
+add ("Jetta": 0, 1, 1);
+add ("Jettie": 0, 3, 3);
+add ("Jewel": 4, 0, 4);
+add ("Jewell": 4, 0, 4);
+add ("Ji": 0, 1, 1);
+add ("Jill": 0, 142, 142);
+add ("Jillian": 0, 21, 21);
+add ("Jim": 118, 0, 118);
+add ("Jimmie": 58, 0, 58);
+add ("Jimmy": 191, 0, 191);
+add ("Jin": 0, 2, 2);
+add ("Jina": 0, 2, 2);
+add ("Jinny": 0, 1, 1);
+add ("Jo": 0, 83, 83);
+add ("Joan": 8, 0, 8);
+add ("Joana": 0, 3, 3);
+add ("Joane": 0, 1, 1);
+add ("Joanie": 0, 4, 4);
+add ("Joann": 0, 136, 136);
+add ("Joanna": 0, 55, 55);
+add ("Joanne": 0, 150, 150);
+add ("Joannie": 0, 1, 1);
+add ("Joaquin": 14, 0, 14);
+add ("Joaquina": 0, 1, 1);
+add ("Jocelyn": 0, 19, 19);
+add ("Jodee": 0, 2, 2);
+add ("Jodi": 0, 51, 51);
+add ("Jodie": 0, 17, 17);
+add ("Jody": 24, 0, 24);
+add ("Joe": 321, 0, 321);
+add ("Joeann": 0, 2, 2);
+add ("Joel": 152, 0, 152);
+add ("Joella": 0, 2, 2);
+add ("Joelle": 0, 5, 5);
+add ("Joellen": 0, 4, 4);
+add ("Joesph": 12, 0, 12);
+add ("Joetta": 0, 3, 3);
+add ("Joette": 0, 1, 1);
+add ("Joey": 43, 0, 43);
+add ("Johana": 0, 2, 2);
+add ("Johanna": 0, 28, 28);
+add ("Johanne": 0, 1, 1);
+add ("John": 3271, 0, 3271);
+add ("Johna": 0, 1, 1);
+add ("Johnathan": 34, 0, 34);
+add ("Johnathon": 9, 0, 9);
+add ("Johnetta": 0, 3, 3);
+add ("Johnette": 0, 1, 1);
+add ("Johnie": 7, 0, 7);
+add ("Johnna": 0, 5, 5);
+add ("Johnnie": 52, 0, 52);
+add ("Johnny": 195, 0, 195);
+add ("Johnsie": 0, 1, 1);
+add ("Johnson": 4, 0, 4);
+add ("Joi": 0, 3, 3);
+add ("Joie": 0, 1, 1);
+add ("Jolanda": 0, 2, 2);
+add ("Joleen": 0, 4, 4);
+add ("Jolene": 0, 19, 19);
+add ("Jolie": 0, 2, 2);
+add ("Joline": 0, 1, 1);
+add ("Jolyn": 0, 1, 1);
+add ("Jolynn": 0, 3, 3);
+add ("Jon": 115, 0, 115);
+add ("Jona": 0, 2, 2);
+add ("Jonah": 5, 0, 5);
+add ("Jonas": 7, 0, 7);
+add ("Jonathan": 313, 0, 313);
+add ("Jonathon": 32, 0, 32);
+add ("Jone": 0, 1, 1);
+add ("Jonell": 0, 2, 2);
+add ("Jonelle": 0, 2, 2);
+add ("Jong": 0, 1, 1);
+add ("Joni": 0, 19, 19);
+add ("Jonie": 0, 1, 1);
+add ("Jonna": 0, 3, 3);
+add ("Jonnie": 0, 4, 4);
+add ("Jordan": 56, 0, 56);
+add ("Jordon": 4, 0, 4);
+add ("Jorge": 104, 0, 104);
+add ("Jose": 613, 0, 613);
+add ("Josef": 6, 0, 6);
+add ("Josefa": 0, 10, 10);
+add ("Josefina": 0, 28, 28);
+add ("Josefine": 0, 1, 1);
+add ("Joselyn": 0, 2, 2);
+add ("Joseph": 1404, 0, 1404);
+add ("Josephina": 0, 4, 4);
+add ("Josephine": 0, 177, 177);
+add ("Josette": 0, 5, 5);
+add ("Josh": 23, 0, 23);
+add ("Joshua": 435, 0, 435);
+add ("Josiah": 6, 0, 6);
+add ("Josie": 0, 24, 24);
+add ("Joslyn": 0, 2, 2);
+add ("Jospeh": 4, 0, 4);
+add ("Josphine": 0, 1, 1);
+add ("Josue": 8, 0, 8);
+add ("Jovan": 0, 1, 1);
+add ("Jovita": 0, 5, 5);
+add ("Joy": 0, 91, 91);
+add ("Joya": 0, 1, 1);
+add ("Joyce": 0, 364, 364);
+add ("Joycelyn": 0, 4, 4);
+add ("Joye": 0, 2, 2);
+add ("Juan": 316, 0, 316);
+add ("Juana": 0, 46, 46);
+add ("Juanita": 0, 164, 164);
+add ("Jude": 4, 0, 4);
+add ("Judi": 0, 8, 8);
+add ("Judie": 0, 3, 3);
+add ("Judith": 0, 297, 297);
+add ("Judson": 6, 0, 6);
+add ("Judy": 0, 276, 276);
+add ("Jule": 0, 1, 1);
+add ("Julee": 0, 2, 2);
+add ("Julene": 0, 1, 1);
+add ("Jules": 6, 0, 6);
+add ("Juli": 0, 5, 5);
+add ("Julia": 0, 223, 223);
+add ("Julian": 52, 0, 52);
+add ("Juliana": 0, 11, 11);
+add ("Juliane": 0, 2, 2);
+add ("Juliann": 0, 3, 3);
+add ("Julianna": 0, 5, 5);
+add ("Julianne": 0, 12, 12);
+add ("Julie": 0, 348, 348);
+add ("Julieann": 0, 1, 1);
+add ("Julienne": 0, 2, 2);
+add ("Juliet": 0, 9, 9);
+add ("Julieta": 0, 3, 3);
+add ("Julietta": 0, 1, 1);
+add ("Juliette": 0, 10, 10);
+add ("Julio": 63, 0, 63);
+add ("Julissa": 0, 3, 3);
+add ("Julius": 42, 0, 42);
+add ("June": 0, 125, 125);
+add ("Jung": 0, 6, 6);
+add ("Junie": 0, 1, 1);
+add ("Junior": 16, 0, 16);
+add ("Junita": 0, 2, 2);
+add ("Junko": 0, 1, 1);
+add ("Justa": 0, 1, 1);
+add ("Justin": 311, 0, 311);
+add ("Justina": 0, 8, 8);
+add ("Justine": 0, 17, 17);
+add ("Jutta": 0, 2, 2);
+add ("Ka": 0, 1, 1);
+add ("Kacey": 0, 3, 3);
+add ("Kaci": 0, 3, 3);
+add ("Kacie": 0, 3, 3);
+add ("Kacy": 0, 2, 2);
+add ("Kai": 0, 1, 1);
+add ("Kaila": 0, 1, 1);
+add ("Kaitlin": 0, 9, 9);
+add ("Kaitlyn": 0, 8, 8);
+add ("Kala": 0, 4, 4);
+add ("Kaleigh": 0, 1, 1);
+add ("Kaley": 0, 2, 2);
+add ("Kali": 0, 2, 2);
+add ("Kallie": 0, 1, 1);
+add ("Kalyn": 0, 1, 1);
+add ("Kam": 0, 2, 2);
+add ("Kamala": 0, 1, 1);
+add ("Kami": 0, 4, 4);
+add ("Kamilah": 0, 1, 1);
+add ("Kandace": 0, 3, 3);
+add ("Kandi": 0, 3, 3);
+add ("Kandice": 0, 3, 3);
+add ("Kandis": 0, 1, 1);
+add ("Kandra": 0, 1, 1);
+add ("Kandy": 0, 3, 3);
+add ("Kanesha": 0, 1, 1);
+add ("Kanisha": 0, 1, 1);
+add ("Kara": 0, 41, 41);
+add ("Karan": 0, 3, 3);
+add ("Kareem": 6, 0, 6);
+add ("Kareen": 0, 1, 1);
+add ("Karen": 0, 667, 667);
+add ("Karena": 0, 1, 1);
+add ("Karey": 0, 2, 2);
+add ("Kari": 0, 36, 36);
+add ("Karie": 0, 3, 3);
+add ("Karima": 0, 1, 1);
+add ("Karin": 0, 24, 24);
+add ("Karina": 0, 13, 13);
+add ("Karine": 0, 2, 2);
+add ("Karisa": 0, 1, 1);
+add ("Karissa": 0, 4, 4);
+add ("Karl": 69, 0, 69);
+add ("Karla": 0, 44, 44);
+add ("Karleen": 0, 2, 2);
+add ("Karlene": 0, 3, 3);
+add ("Karly": 0, 1, 1);
+add ("Karlyn": 0, 1, 1);
+add ("Karma": 0, 2, 2);
+add ("Karmen": 0, 2, 2);
+add ("Karol": 0, 5, 5);
+add ("Karole": 0, 1, 1);
+add ("Karoline": 0, 1, 1);
+add ("Karolyn": 0, 4, 4);
+add ("Karon": 0, 5, 5);
+add ("Karren": 0, 2, 2);
+add ("Karri": 0, 3, 3);
+add ("Karrie": 0, 7, 7);
+add ("Karry": 0, 1, 1);
+add ("Kary": 0, 1, 1);
+add ("Karyl": 0, 2, 2);
+add ("Karyn": 0, 9, 9);
+add ("Kasandra": 0, 3, 3);
+add ("Kasey": 4, 0, 4);
+add ("Kasha": 0, 1, 1);
+add ("Kasi": 0, 1, 1);
+add ("Kasie": 0, 2, 2);
+add ("Kassandra": 0, 4, 4);
+add ("Kassie": 0, 2, 2);
+add ("Kate": 0, 29, 29);
+add ("Katelin": 0, 1, 1);
+add ("Katelyn": 0, 10, 10);
+add ("Katelynn": 0, 1, 1);
+add ("Katerine": 0, 1, 1);
+add ("Kathaleen": 0, 2, 2);
+add ("Katharina": 0, 2, 2);
+add ("Katharine": 0, 17, 17);
+add ("Katharyn": 0, 1, 1);
+add ("Kathe": 0, 2, 2);
+add ("Katheleen": 0, 1, 1);
+add ("Katherin": 0, 2, 2);
+add ("Katherina": 0, 1, 1);
+add ("Katherine": 0, 313, 313);
+add ("Kathern": 0, 2, 2);
+add ("Katheryn": 0, 9, 9);
+add ("Kathey": 0, 2, 2);
+add ("Kathi": 0, 8, 8);
+add ("Kathie": 0, 11, 11);
+add ("Kathleen": 0, 424, 424);
+add ("Kathlene": 0, 3, 3);
+add ("Kathline": 0, 1, 1);
+add ("Kathlyn": 0, 3, 3);
+add ("Kathrin": 0, 1, 1);
+add ("Kathrine": 0, 11, 11);
+add ("Kathryn": 0, 234, 234);
+add ("Kathryne": 0, 3, 3);
+add ("Kathy": 0, 272, 272);
+add ("Kathyrn": 0, 3, 3);
+add ("Kati": 0, 2, 2);
+add ("Katia": 0, 2, 2);
+add ("Katie": 0, 113, 113);
+add ("Katina": 0, 9, 9);
+add ("Katlyn": 0, 2, 2);
+add ("Katrice": 0, 2, 2);
+add ("Katrina": 0, 61, 61);
+add ("Kattie": 0, 2, 2);
+add ("Katy": 0, 12, 12);
+add ("Kay": 0, 71, 71);
+add ("Kayce": 0, 1, 1);
+add ("Kaycee": 0, 1, 1);
+add ("Kaye": 0, 11, 11);
+add ("Kayla": 0, 51, 51);
+add ("Kaylee": 0, 3, 3);
+add ("Kayleen": 0, 2, 2);
+add ("Kayleigh": 0, 2, 2);
+add ("Kaylene": 0, 2, 2);
+add ("Kazuko": 0, 2, 2);
+add ("Kecia": 0, 3, 3);
+add ("Keeley": 0, 1, 1);
+add ("Keely": 0, 4, 4);
+add ("Keena": 0, 2, 2);
+add ("Keenan": 5, 0, 5);
+add ("Keesha": 0, 2, 2);
+add ("Keiko": 0, 3, 3);
+add ("Keila": 0, 1, 1);
+add ("Keira": 0, 1, 1);
+add ("Keisha": 0, 19, 19);
+add ("Keith": 308, 0, 308);
+add ("Keitha": 0, 1, 1);
+add ("Keli": 0, 3, 3);
+add ("Kelle": 0, 2, 2);
+add ("Kellee": 0, 2, 2);
+add ("Kelley": 4, 0, 4);
+add ("Kelli": 0, 46, 46);
+add ("Kellie": 0, 29, 29);
+add ("Kelly": 63, 0, 63);
+add ("Kellye": 0, 2, 2);
+add ("Kelsey": 0, 24, 24);
+add ("Kelsi": 0, 1, 1);
+add ("Kelsie": 0, 3, 3);
+add ("Kelvin": 34, 0, 34);
+add ("Kemberly": 0, 1, 1);
+add ("Ken": 55, 0, 55);
+add ("Kena": 0, 2, 2);
+add ("Kenda": 0, 1, 1);
+add ("Kendal": 0, 1, 1);
+add ("Kendall": 16, 0, 16);
+add ("Kendra": 0, 38, 38);
+add ("Kendrick": 13, 0, 13);
+add ("Keneth": 4, 0, 4);
+add ("Kenia": 0, 1, 1);
+add ("Kenisha": 0, 2, 2);
+add ("Kenna": 0, 3, 3);
+add ("Kenneth": 826, 0, 826);
+add ("Kennith": 7, 0, 7);
+add ("Kenny": 39, 0, 39);
+add ("Kent": 48, 0, 48);
+add ("Kenton": 5, 0, 5);
+add ("Kenya": 0, 11, 11);
+add ("Kenyatta": 0, 3, 3);
+add ("Kenyetta": 0, 2, 2);
+add ("Kera": 0, 1, 1);
+add ("Keren": 0, 1, 1);
+add ("Keri": 0, 18, 18);
+add ("Kermit": 13, 0, 13);
+add ("Kerri": 0, 24, 24);
+add ("Kerrie": 0, 6, 6);
+add ("Kerry": 36, 0, 36);
+add ("Kerstin": 0, 1, 1);
+add ("Kesha": 0, 5, 5);
+add ("Keshia": 0, 5, 5);
+add ("Keturah": 0, 1, 1);
+add ("Keva": 0, 1, 1);
+add ("Keven": 5, 0, 5);
+add ("Kevin": 671, 0, 671);
+add ("Khadijah": 0, 1, 1);
+add ("Khalilah": 0, 1, 1);
+add ("Kia": 0, 5, 5);
+add ("Kiana": 0, 2, 2);
+add ("Kiara": 0, 3, 3);
+add ("Kiera": 0, 2, 2);
+add ("Kiersten": 0, 1, 1);
+add ("Kiesha": 0, 2, 2);
+add ("Kieth": 6, 0, 6);
+add ("Kiley": 0, 2, 2);
+add ("Kim": 28, 0, 28);
+add ("Kimber": 0, 2, 2);
+add ("Kimberely": 0, 3, 3);
+add ("Kimberlee": 0, 8, 8);
+add ("Kimberley": 0, 21, 21);
+add ("Kimberli": 0, 2, 2);
+add ("Kimberlie": 0, 2, 2);
+add ("Kimberly": 0, 504, 504);
+add ("Kimbery": 0, 2, 2);
+add ("Kimbra": 0, 1, 1);
+add ("Kimi": 0, 1, 1);
+add ("Kimiko": 0, 2, 2);
+add ("Kina": 0, 1, 1);
+add ("Kindra": 0, 2, 2);
+add ("King": 4, 0, 4);
+add ("Kip": 5, 0, 5);
+add ("Kira": 0, 6, 6);
+add ("Kirby": 9, 0, 9);
+add ("Kirk": 49, 0, 49);
+add ("Kirsten": 0, 18, 18);
+add ("Kirstie": 0, 1, 1);
+add ("Kirstin": 0, 3, 3);
+add ("Kisha": 0, 6, 6);
+add ("Kit": 0, 1, 1);
+add ("Kittie": 0, 1, 1);
+add ("Kitty": 0, 8, 8);
+add ("Kiyoko": 0, 1, 1);
+add ("Kizzie": 0, 1, 1);
+add ("Kizzy": 0, 3, 3);
+add ("Klara": 0, 1, 1);
+add ("Korey": 4, 0, 4);
+add ("Kori": 0, 4, 4);
+add ("Kortney": 0, 1, 1);
+add ("Kory": 5, 0, 5);
+add ("Kourtney": 0, 2, 2);
+add ("Kraig": 4, 0, 4);
+add ("Kris": 11, 0, 11);
+add ("Krishna": 0, 1, 1);
+add ("Krissy": 0, 1, 1);
+add ("Krista": 0, 40, 40);
+add ("Kristal": 0, 6, 6);
+add ("Kristan": 0, 3, 3);
+add ("Kristeen": 0, 1, 1);
+add ("Kristel": 0, 2, 2);
+add ("Kristen": 0, 111, 111);
+add ("Kristi": 0, 55, 55);
+add ("Kristian": 0, 3, 3);
+add ("Kristie": 0, 27, 27);
+add ("Kristin": 0, 99, 99);
+add ("Kristina": 0, 65, 65);
+add ("Kristine": 0, 51, 51);
+add ("Kristle": 0, 1, 1);
+add ("Kristofer": 4, 0, 4);
+add ("Kristopher": 25, 0, 25);
+add ("Kristy": 0, 48, 48);
+add ("Kristyn": 0, 3, 3);
+add ("Krysta": 0, 2, 2);
+add ("Krystal": 0, 37, 37);
+add ("Krysten": 0, 1, 1);
+add ("Krystin": 0, 1, 1);
+add ("Krystina": 0, 1, 1);
+add ("Krystle": 0, 7, 7);
+add ("Krystyna": 0, 3, 3);
+add ("Kum": 0, 3, 3);
+add ("Kurt": 62, 0, 62);
+add ("Kurtis": 9, 0, 9);
+add ("Kyla": 0, 5, 5);
+add ("Kyle": 160, 0, 160);
+add ("Kylee": 0, 3, 3);
+add ("Kylie": 0, 6, 6);
+add ("Kym": 0, 2, 2);
+add ("Kymberly": 0, 2, 2);
+add ("Kyoko": 0, 1, 1);
+add ("Kyong": 0, 4, 4);
+add ("Kyra": 0, 4, 4);
+add ("Kyung": 0, 4, 4);
+add ("Lacey": 0, 18, 18);
+add ("Lachelle": 0, 1, 1);
+add ("Laci": 0, 3, 3);
+add ("Lacie": 0, 4, 4);
+add ("Lacresha": 0, 1, 1);
+add ("Lacy": 4, 0, 4);
+add ("Ladawn": 0, 1, 1);
+add ("Ladonna": 0, 16, 16);
+add ("Lady": 0, 2, 2);
+add ("Lael": 0, 1, 1);
+add ("Lahoma": 0, 1, 1);
+add ("Lai": 0, 3, 3);
+add ("Laila": 0, 2, 2);
+add ("Laine": 0, 1, 1);
+add ("Lajuana": 0, 1, 1);
+add ("Lakeesha": 0, 1, 1);
+add ("Lakeisha": 0, 10, 10);
+add ("Lakendra": 0, 1, 1);
+add ("Lakenya": 0, 1, 1);
+add ("Lakesha": 0, 8, 8);
+add ("Lakeshia": 0, 4, 4);
+add ("Lakia": 0, 1, 1);
+add ("Lakiesha": 0, 1, 1);
+add ("Lakisha": 0, 11, 11);
+add ("Lakita": 0, 1, 1);
+add ("Lala": 0, 1, 1);
+add ("Lamar": 21, 0, 21);
+add ("Lamonica": 0, 1, 1);
+add ("Lamont": 17, 0, 17);
+add ("Lan": 0, 5, 5);
+add ("Lana": 0, 29, 29);
+add ("Lance": 63, 0, 63);
+add ("Landon": 8, 0, 8);
+add ("Lane": 9, 0, 9);
+add ("Lanell": 0, 2, 2);
+add ("Lanelle": 0, 1, 1);
+add ("Lanette": 0, 3, 3);
+add ("Lang": 0, 1, 1);
+add ("Lani": 0, 3, 3);
+add ("Lanie": 0, 1, 1);
+add ("Lanita": 0, 3, 3);
+add ("Lannie": 0, 1, 1);
+add ("Lanny": 6, 0, 6);
+add ("Lanora": 0, 1, 1);
+add ("Laquanda": 0, 1, 1);
+add ("Laquita": 0, 5, 5);
+add ("Lara": 0, 16, 16);
+add ("Larae": 0, 2, 2);
+add ("Laraine": 0, 2, 2);
+add ("Laree": 0, 1, 1);
+add ("Larhonda": 0, 2, 2);
+add ("Larisa": 0, 2, 2);
+add ("Larissa": 0, 6, 6);
+add ("Larita": 0, 1, 1);
+add ("Laronda": 0, 2, 2);
+add ("Larraine": 0, 1, 1);
+add ("Larry": 598, 0, 598);
+add ("Larue": 0, 3, 3);
+add ("Lasandra": 0, 2, 2);
+add ("Lashanda": 0, 4, 4);
+add ("Lashandra": 0, 1, 1);
+add ("Lashaun": 0, 1, 1);
+add ("Lashaunda": 0, 1, 1);
+add ("Lashawn": 0, 7, 7);
+add ("Lashawna": 0, 1, 1);
+add ("Lashawnda": 0, 1, 1);
+add ("Lashay": 0, 1, 1);
+add ("Lashell": 0, 1, 1);
+add ("Lashon": 0, 1, 1);
+add ("Lashonda": 0, 8, 8);
+add ("Lashunda": 0, 2, 2);
+add ("Lasonya": 0, 1, 1);
+add ("Latanya": 0, 8, 8);
+add ("Latarsha": 0, 1, 1);
+add ("Latasha": 0, 26, 26);
+add ("Latashia": 0, 2, 2);
+add ("Latesha": 0, 2, 2);
+add ("Latia": 0, 2, 2);
+add ("Laticia": 0, 2, 2);
+add ("Latina": 0, 1, 1);
+add ("Latisha": 0, 15, 15);
+add ("Latonia": 0, 5, 5);
+add ("Latonya": 0, 22, 22);
+add ("Latoria": 0, 2, 2);
+add ("Latosha": 0, 4, 4);
+add ("Latoya": 0, 43, 43);
+add ("Latoyia": 0, 1, 1);
+add ("Latrice": 0, 7, 7);
+add ("Latricia": 0, 5, 5);
+add ("Latrina": 0, 2, 2);
+add ("Latrisha": 0, 1, 1);
+add ("Launa": 0, 2, 2);
+add ("Laura": 0, 510, 510);
+add ("Lauralee": 0, 1, 1);
+add ("Lauran": 0, 1, 1);
+add ("Laure": 0, 2, 2);
+add ("Laureen": 0, 4, 4);
+add ("Laurel": 0, 24, 24);
+add ("Lauren": 4, 0, 4);
+add ("Laurena": 0, 1, 1);
+add ("Laurence": 24, 0, 24);
+add ("Laurene": 0, 3, 3);
+add ("Lauretta": 0, 6, 6);
+add ("Laurette": 0, 4, 4);
+add ("Lauri": 0, 9, 9);
+add ("Laurice": 0, 2, 2);
+add ("Laurie": 0, 114, 114);
+add ("Laurinda": 0, 1, 1);
+add ("Laurine": 0, 2, 2);
+add ("Lauryn": 0, 1, 1);
+add ("Lavada": 0, 3, 3);
+add ("Lavelle": 0, 1, 1);
+add ("Lavenia": 0, 1, 1);
+add ("Lavera": 0, 2, 2);
+add ("Lavern": 6, 0, 6);
+add ("Laverna": 0, 2, 2);
+add ("Laverne": 8, 0, 8);
+add ("Laveta": 0, 1, 1);
+add ("Lavette": 0, 1, 1);
+add ("Lavina": 0, 4, 4);
+add ("Lavinia": 0, 3, 3);
+add ("Lavon": 0, 4, 4);
+add ("Lavona": 0, 1, 1);
+add ("Lavonda": 0, 3, 3);
+add ("Lavone": 0, 1, 1);
+add ("Lavonia": 0, 2, 2);
+add ("Lavonna": 0, 1, 1);
+add ("Lavonne": 0, 11, 11);
+add ("Lawana": 0, 2, 2);
+add ("Lawanda": 0, 11, 11);
+add ("Lawanna": 0, 2, 2);
+add ("Lawerence": 5, 0, 5);
+add ("Lawrence": 282, 0, 282);
+add ("Layla": 0, 2, 2);
+add ("Layne": 0, 1, 1);
+add ("Lazaro": 7, 0, 7);
+add ("Le": 0, 2, 2);
+add ("Lea": 0, 17, 17);
+add ("Leah": 0, 72, 72);
+add ("Lean": 0, 1, 1);
+add ("Leana": 0, 2, 2);
+add ("Leandra": 0, 3, 3);
+add ("Leandro": 4, 0, 4);
+add ("Leann": 0, 15, 15);
+add ("Leanna": 0, 9, 9);
+add ("Leanne": 0, 16, 16);
+add ("Leanora": 0, 1, 1);
+add ("Leatha": 0, 3, 3);
+add ("Leatrice": 0, 4, 4);
+add ("Lecia": 0, 1, 1);
+add ("Leda": 0, 3, 3);
+add ("Lee": 162, 0, 162);
+add ("Leeann": 0, 8, 8);
+add ("Leeanna": 0, 2, 2);
+add ("Leeanne": 0, 2, 2);
+add ("Leena": 0, 1, 1);
+add ("Leesa": 0, 3, 3);
+add ("Leia": 0, 1, 1);
+add ("Leida": 0, 1, 1);
+add ("Leif": 4, 0, 4);
+add ("Leigh": 4, 0, 4);
+add ("Leigha": 0, 1, 1);
+add ("Leighann": 0, 2, 2);
+add ("Leila": 0, 15, 15);
+add ("Leilani": 0, 5, 5);
+add ("Leisa": 0, 4, 4);
+add ("Leisha": 0, 1, 1);
+add ("Lekisha": 0, 1, 1);
+add ("Lela": 0, 28, 28);
+add ("Lelah": 0, 1, 1);
+add ("Leland": 27, 0, 27);
+add ("Lelia": 0, 9, 9);
+add ("Lemuel": 6, 0, 6);
+add ("Len": 4, 0, 4);
+add ("Lena": 0, 77, 77);
+add ("Lenard": 5, 0, 5);
+add ("Lenita": 0, 1, 1);
+add ("Lenna": 0, 2, 2);
+add ("Lennie": 0, 3, 3);
+add ("Lenny": 5, 0, 5);
+add ("Lenora": 0, 24, 24);
+add ("Lenore": 0, 14, 14);
+add ("Leo": 106, 0, 106);
+add ("Leola": 0, 19, 19);
+add ("Leoma": 0, 1, 1);
+add ("Leon": 112, 0, 112);
+add ("Leona": 0, 69, 69);
+add ("Leonard": 186, 0, 186);
+add ("Leonarda": 0, 2, 2);
+add ("Leonardo": 15, 0, 15);
+add ("Leone": 0, 5, 5);
+add ("Leonel": 8, 0, 8);
+add ("Leonia": 0, 1, 1);
+add ("Leonida": 0, 1, 1);
+add ("Leonie": 0, 2, 2);
+add ("Leonila": 0, 2, 2);
+add ("Leonor": 0, 10, 10);
+add ("Leonora": 0, 5, 5);
+add ("Leonore": 0, 2, 2);
+add ("Leontine": 0, 1, 1);
+add ("Leopoldo": 6, 0, 6);
+add ("Leora": 0, 7, 7);
+add ("Leota": 0, 6, 6);
+add ("Lera": 0, 2, 2);
+add ("Leroy": 125, 0, 125);
+add ("Les": 6, 0, 6);
+add ("Lesa": 0, 8, 8);
+add ("Lesha": 0, 1, 1);
+add ("Lesia": 0, 2, 2);
+add ("Leslee": 0, 3, 3);
+add ("Lesley": 4, 0, 4);
+add ("Lesli": 0, 3, 3);
+add ("Leslie": 81, 0, 81);
+add ("Lessie": 0, 10, 10);
+add ("Lester": 91, 0, 91);
+add ("Leta": 0, 8, 8);
+add ("Letha": 0, 14, 14);
+add ("Leticia": 0, 40, 40);
+add ("Letisha": 0, 1, 1);
+add ("Letitia": 0, 8, 8);
+add ("Lettie": 0, 6, 6);
+add ("Letty": 0, 2, 2);
+add ("Levi": 25, 0, 25);
+add ("Lewis": 99, 0, 99);
+add ("Lexie": 0, 2, 2);
+add ("Lezlie": 0, 2, 2);
+add ("Li": 0, 3, 3);
+add ("Lia": 0, 5, 5);
+add ("Liana": 0, 3, 3);
+add ("Liane": 0, 3, 3);
+add ("Lianne": 0, 1, 1);
+add ("Libbie": 0, 1, 1);
+add ("Libby": 0, 8, 8);
+add ("Liberty": 0, 2, 2);
+add ("Librada": 0, 2, 2);
+add ("Lida": 0, 4, 4);
+add ("Lidia": 0, 14, 14);
+add ("Lien": 0, 2, 2);
+add ("Lieselotte": 0, 1, 1);
+add ("Ligia": 0, 2, 2);
+add ("Lila": 0, 29, 29);
+add ("Lili": 0, 2, 2);
+add ("Lilia": 0, 12, 12);
+add ("Lilian": 0, 11, 11);
+add ("Liliana": 0, 10, 10);
+add ("Lilla": 0, 2, 2);
+add ("Lilli": 0, 1, 1);
+add ("Lillia": 0, 1, 1);
+add ("Lilliam": 0, 1, 1);
+add ("Lillian": 0, 211, 211);
+add ("Lilliana": 0, 1, 1);
+add ("Lillie": 0, 90, 90);
+add ("Lilly": 0, 14, 14);
+add ("Lily": 0, 17, 17);
+add ("Lin": 0, 3, 3);
+add ("Lina": 0, 11, 11);
+add ("Lincoln": 8, 0, 8);
+add ("Linda": 0, 1035, 1035);
+add ("Lindsay": 4, 0, 4);
+add ("Lindsey": 7, 0, 7);
+add ("Lindsy": 0, 1, 1);
+add ("Lindy": 0, 5, 5);
+add ("Linette": 0, 3, 3);
+add ("Ling": 0, 2, 2);
+add ("Linh": 0, 3, 3);
+add ("Linn": 0, 1, 1);
+add ("Linnea": 0, 4, 4);
+add ("Linnie": 0, 4, 4);
+add ("Lino": 4, 0, 4);
+add ("Linsey": 0, 3, 3);
+add ("Linwood": 9, 0, 9);
+add ("Lionel": 24, 0, 24);
+add ("Lisa": 0, 704, 704);
+add ("Lisabeth": 0, 1, 1);
+add ("Lisandra": 0, 1, 1);
+add ("Lisbeth": 0, 2, 2);
+add ("Lise": 0, 4, 4);
+add ("Lisette": 0, 4, 4);
+add ("Lisha": 0, 2, 2);
+add ("Lissa": 0, 3, 3);
+add ("Lissette": 0, 4, 4);
+add ("Lita": 0, 3, 3);
+add ("Livia": 0, 2, 2);
+add ("Liz": 0, 9, 9);
+add ("Liza": 0, 12, 12);
+add ("Lizabeth": 0, 4, 4);
+add ("Lizbeth": 0, 4, 4);
+add ("Lizeth": 0, 1, 1);
+add ("Lizette": 0, 5, 5);
+add ("Lizzette": 0, 1, 1);
+add ("Lizzie": 0, 18, 18);
+add ("Lloyd": 112, 0, 112);
+add ("Loan": 0, 2, 2);
+add ("Logan": 17, 0, 17);
+add ("Loida": 0, 2, 2);
+add ("Lois": 0, 220, 220);
+add ("Loise": 0, 1, 1);
+add ("Lola": 0, 48, 48);
+add ("Lolita": 0, 9, 9);
+add ("Loma": 0, 2, 2);
+add ("Lon": 7, 0, 7);
+add ("Lona": 0, 7, 7);
+add ("Londa": 0, 1, 1);
+add ("Long": 4, 0, 4);
+add ("Loni": 0, 2, 2);
+add ("Lonna": 0, 2, 2);
+add ("Lonnie": 64, 0, 64);
+add ("Lonny": 4, 0, 4);
+add ("Lora": 0, 36, 36);
+add ("Loraine": 0, 13, 13);
+add ("Loralee": 0, 1, 1);
+add ("Lore": 0, 2, 2);
+add ("Lorean": 0, 1, 1);
+add ("Loree": 0, 2, 2);
+add ("Loreen": 0, 3, 3);
+add ("Lorelei": 0, 3, 3);
+add ("Loren": 32, 0, 32);
+add ("Lorena": 0, 29, 29);
+add ("Lorene": 0, 28, 28);
+add ("Lorenza": 0, 4, 4);
+add ("Lorenzo": 36, 0, 36);
+add ("Loreta": 0, 1, 1);
+add ("Loretta": 0, 115, 115);
+add ("Lorette": 0, 1, 1);
+add ("Lori": 0, 248, 248);
+add ("Loria": 0, 1, 1);
+add ("Loriann": 0, 2, 2);
+add ("Lorie": 0, 16, 16);
+add ("Lorilee": 0, 1, 1);
+add ("Lorina": 0, 1, 1);
+add ("Lorinda": 0, 3, 3);
+add ("Lorine": 0, 5, 5);
+add ("Loris": 0, 1, 1);
+add ("Lorita": 0, 1, 1);
+add ("Lorna": 0, 22, 22);
+add ("Lorraine": 0, 135, 135);
+add ("Lorretta": 0, 3, 3);
+add ("Lorri": 0, 6, 6);
+add ("Lorriane": 0, 1, 1);
+add ("Lorrie": 0, 12, 12);
+add ("Lorrine": 0, 1, 1);
+add ("Lory": 0, 2, 2);
+add ("Lottie": 0, 24, 24);
+add ("Lou": 5, 0, 5);
+add ("Louann": 0, 5, 5);
+add ("Louanne": 0, 2, 2);
+add ("Louella": 0, 8, 8);
+add ("Louetta": 0, 1, 1);
+add ("Louie": 18, 0, 18);
+add ("Louis": 243, 0, 243);
+add ("Louisa": 0, 12, 12);
+add ("Louise": 0, 229, 229);
+add ("Loura": 0, 1, 1);
+add ("Lourdes": 0, 24, 24);
+add ("Lourie": 0, 1, 1);
+add ("Louvenia": 0, 2, 2);
+add ("Love": 0, 1, 1);
+add ("Lovella": 0, 2, 2);
+add ("Lovetta": 0, 1, 1);
+add ("Lovie": 0, 4, 4);
+add ("Lowell": 29, 0, 29);
+add ("Loyce": 0, 2, 2);
+add ("Loyd": 11, 0, 11);
+add ("Lu": 0, 3, 3);
+add ("Luana": 0, 3, 3);
+add ("Luann": 0, 11, 11);
+add ("Luanna": 0, 1, 1);
+add ("Luanne": 0, 5, 5);
+add ("Luba": 0, 1, 1);
+add ("Lucas": 31, 0, 31);
+add ("Luci": 0, 1, 1);
+add ("Lucia": 0, 28, 28);
+add ("Luciana": 0, 3, 3);
+add ("Luciano": 7, 0, 7);
+add ("Lucie": 0, 4, 4);
+add ("Lucien": 7, 0, 7);
+add ("Lucienne": 0, 3, 3);
+add ("Lucila": 0, 5, 5);
+add ("Lucile": 0, 16, 16);
+add ("Lucilla": 0, 1, 1);
+add ("Lucille": 0, 153, 153);
+add ("Lucina": 0, 2, 2);
+add ("Lucinda": 0, 25, 25);
+add ("Lucio": 6, 0, 6);
+add ("Lucius": 4, 0, 4);
+add ("Lucrecia": 0, 2, 2);
+add ("Lucretia": 0, 7, 7);
+add ("Lucy": 0, 103, 103);
+add ("Ludie": 0, 2, 2);
+add ("Ludivina": 0, 1, 1);
+add ("Lue": 0, 3, 3);
+add ("Luella": 0, 17, 17);
+add ("Luetta": 0, 1, 1);
+add ("Luigi": 4, 0, 4);
+add ("Luis": 189, 0, 189);
+add ("Luisa": 0, 16, 16);
+add ("Luise": 0, 2, 2);
+add ("Luke": 40, 0, 40);
+add ("Lula": 0, 48, 48);
+add ("Lulu": 0, 4, 4);
+add ("Luna": 0, 2, 2);
+add ("Lupe": 5, 0, 5);
+add ("Lupita": 0, 3, 3);
+add ("Lura": 0, 6, 6);
+add ("Lurlene": 0, 1, 1);
+add ("Lurline": 0, 2, 2);
+add ("Luther": 43, 0, 43);
+add ("Luvenia": 0, 2, 2);
+add ("Luz": 0, 49, 49);
+add ("Lyda": 0, 3, 3);
+add ("Lydia": 0, 86, 86);
+add ("Lyla": 0, 3, 3);
+add ("Lyle": 38, 0, 38);
+add ("Lyman": 6, 0, 6);
+add ("Lyn": 0, 6, 6);
+add ("Lynda": 0, 53, 53);
+add ("Lyndia": 0, 1, 1);
+add ("Lyndon": 5, 0, 5);
+add ("Lyndsay": 0, 3, 3);
+add ("Lyndsey": 0, 4, 4);
+add ("Lynell": 0, 2, 2);
+add ("Lynelle": 0, 2, 2);
+add ("Lynetta": 0, 1, 1);
+add ("Lynette": 0, 33, 33);
+add ("Lynn": 38, 0, 38);
+add ("Lynna": 0, 1, 1);
+add ("Lynne": 0, 43, 43);
+add ("Lynnette": 0, 10, 10);
+add ("Lynsey": 0, 2, 2);
+add ("Lynwood": 4, 0, 4);
+add ("Ma": 0, 8, 8);
+add ("Mabel": 0, 78, 78);
+add ("Mabelle": 0, 1, 1);
+add ("Mable": 0, 38, 38);
+add ("Mac": 5, 0, 5);
+add ("Machelle": 0, 3, 3);
+add ("Macie": 0, 2, 2);
+add ("Mack": 25, 0, 25);
+add ("Mackenzie": 0, 4, 4);
+add ("Macy": 0, 2, 2);
+add ("Madalene": 0, 1, 1);
+add ("Madaline": 0, 2, 2);
+add ("Madalyn": 0, 2, 2);
+add ("Maddie": 0, 1, 1);
+add ("Madelaine": 0, 1, 1);
+add ("Madeleine": 0, 9, 9);
+add ("Madelene": 0, 1, 1);
+add ("Madeline": 0, 52, 52);
+add ("Madelyn": 0, 10, 10);
+add ("Madge": 0, 11, 11);
+add ("Madie": 0, 2, 2);
+add ("Madison": 0, 3, 3);
+add ("Madlyn": 0, 2, 2);
+add ("Madonna": 0, 6, 6);
+add ("Mae": 0, 63, 63);
+add ("Maegan": 0, 3, 3);
+add ("Mafalda": 0, 1, 1);
+add ("Magali": 0, 1, 1);
+add ("Magaly": 0, 2, 2);
+add ("Magan": 0, 2, 2);
+add ("Magaret": 0, 2, 2);
+add ("Magda": 0, 5, 5);
+add ("Magdalen": 0, 2, 2);
+add ("Magdalena": 0, 15, 15);
+add ("Magdalene": 0, 4, 4);
+add ("Magen": 0, 2, 2);
+add ("Maggie": 0, 51, 51);
+add ("Magnolia": 0, 4, 4);
+add ("Mahalia": 0, 1, 1);
+add ("Mai": 0, 9, 9);
+add ("Maia": 0, 2, 2);
+add ("Maida": 0, 2, 2);
+add ("Maile": 0, 1, 1);
+add ("Maira": 0, 3, 3);
+add ("Maire": 0, 1, 1);
+add ("Maisha": 0, 1, 1);
+add ("Maisie": 0, 1, 1);
+add ("Major": 7, 0, 7);
+add ("Majorie": 0, 5, 5);
+add ("Makeda": 0, 1, 1);
+add ("Malcolm": 34, 0, 34);
+add ("Malcom": 4, 0, 4);
+add ("Malena": 0, 1, 1);
+add ("Malia": 0, 3, 3);
+add ("Malik": 4, 0, 4);
+add ("Malika": 0, 2, 2);
+add ("Malinda": 0, 13, 13);
+add ("Malisa": 0, 2, 2);
+add ("Malissa": 0, 7, 7);
+add ("Malka": 0, 1, 1);
+add ("Mallie": 0, 1, 1);
+add ("Mallory": 0, 12, 12);
+add ("Malorie": 0, 1, 1);
+add ("Malvina": 0, 1, 1);
+add ("Mamie": 0, 48, 48);
+add ("Mammie": 0, 2, 2);
+add ("Man": 4, 0, 4);
+add ("Mana": 0, 2, 2);
+add ("Manda": 0, 2, 2);
+add ("Mandi": 0, 6, 6);
+add ("Mandie": 0, 1, 1);
+add ("Mandy": 0, 29, 29);
+add ("Manie": 0, 1, 1);
+add ("Manual": 4, 0, 4);
+add ("Manuel": 181, 0, 181);
+add ("Manuela": 0, 16, 16);
+add ("Many": 0, 1, 1);
+add ("Mao": 0, 1, 1);
+add ("Maple": 0, 2, 2);
+add ("Mara": 0, 9, 9);
+add ("Maragaret": 0, 1, 1);
+add ("Maragret": 0, 1, 1);
+add ("Maranda": 0, 4, 4);
+add ("Marc": 87, 0, 87);
+add ("Marcel": 12, 0, 12);
+add ("Marcela": 0, 6, 6);
+add ("Marcelene": 0, 1, 1);
+add ("Marcelina": 0, 4, 4);
+add ("Marceline": 0, 2, 2);
+add ("Marcelino": 9, 0, 9);
+add ("Marcell": 0, 1, 1);
+add ("Marcella": 0, 37, 37);
+add ("Marcelle": 0, 5, 5);
+add ("Marcellus": 4, 0, 4);
+add ("Marcelo": 5, 0, 5);
+add ("Marcene": 0, 1, 1);
+add ("Marchelle": 0, 1, 1);
+add ("Marci": 0, 10, 10);
+add ("Marcia": 0, 90, 90);
+add ("Marcie": 0, 12, 12);
+add ("Marco": 33, 0, 33);
+add ("Marcos": 25, 0, 25);
+add ("Marcus": 124, 0, 124);
+add ("Marcy": 0, 16, 16);
+add ("Mardell": 0, 1, 1);
+add ("Maren": 0, 2, 2);
+add ("Marg": 0, 1, 1);
+add ("Margaret": 0, 768, 768);
+add ("Margareta": 0, 2, 2);
+add ("Margarete": 0, 3, 3);
+add ("Margarett": 0, 2, 2);
+add ("Margaretta": 0, 2, 2);
+add ("Margarette": 0, 4, 4);
+add ("Margarita": 0, 59, 59);
+add ("Margarite": 0, 2, 2);
+add ("Margarito": 6, 0, 6);
+add ("Margart": 0, 2, 2);
+add ("Marge": 0, 6, 6);
+add ("Margene": 0, 1, 1);
+add ("Margeret": 0, 2, 2);
+add ("Margert": 0, 1, 1);
+add ("Margery": 0, 11, 11);
+add ("Marget": 0, 2, 2);
+add ("Margherita": 0, 1, 1);
+add ("Margie": 0, 72, 72);
+add ("Margit": 0, 2, 2);
+add ("Margo": 0, 16, 16);
+add ("Margorie": 0, 2, 2);
+add ("Margot": 0, 8, 8);
+add ("Margret": 0, 17, 17);
+add ("Margrett": 0, 1, 1);
+add ("Marguerita": 0, 2, 2);
+add ("Marguerite": 0, 56, 56);
+add ("Margurite": 0, 2, 2);
+add ("Margy": 0, 1, 1);
+add ("Marhta": 0, 1, 1);
+add ("Mari": 0, 11, 11);
+add ("Maria": 5, 0, 5);
+add ("Mariah": 0, 5, 5);
+add ("Mariam": 0, 5, 5);
+add ("Marian": 0, 86, 86);
+add ("Mariana": 0, 9, 9);
+add ("Marianela": 0, 1, 1);
+add ("Mariann": 0, 4, 4);
+add ("Marianna": 0, 7, 7);
+add ("Marianne": 0, 42, 42);
+add ("Mariano": 8, 0, 8);
+add ("Maribel": 0, 20, 20);
+add ("Maribeth": 0, 3, 3);
+add ("Marica": 0, 1, 1);
+add ("Maricela": 0, 11, 11);
+add ("Maricruz": 0, 1, 1);
+add ("Marie": 0, 379, 379);
+add ("Mariel": 0, 2, 2);
+add ("Mariela": 0, 3, 3);
+add ("Mariella": 0, 1, 1);
+add ("Marielle": 0, 1, 1);
+add ("Marietta": 0, 10, 10);
+add ("Mariette": 0, 1, 1);
+add ("Mariko": 0, 1, 1);
+add ("Marilee": 0, 4, 4);
+add ("Marilou": 0, 3, 3);
+add ("Marilu": 0, 2, 2);
+add ("Marilyn": 0, 241, 241);
+add ("Marilynn": 0, 7, 7);
+add ("Marin": 0, 1, 1);
+add ("Marina": 0, 27, 27);
+add ("Marinda": 0, 1, 1);
+add ("Marine": 0, 1, 1);
+add ("Mario": 125, 0, 125);
+add ("Marion": 48, 0, 48);
+add ("Maris": 0, 1, 1);
+add ("Marisa": 0, 18, 18);
+add ("Marisela": 0, 7, 7);
+add ("Marisha": 0, 1, 1);
+add ("Marisol": 0, 18, 18);
+add ("Marissa": 0, 24, 24);
+add ("Marita": 0, 4, 4);
+add ("Maritza": 0, 16, 16);
+add ("Marivel": 0, 1, 1);
+add ("Marjorie": 0, 173, 173);
+add ("Marjory": 0, 6, 6);
+add ("Mark": 938, 0, 938);
+add ("Marketta": 0, 1, 1);
+add ("Markita": 0, 2, 2);
+add ("Markus": 5, 0, 5);
+add ("Marla": 0, 26, 26);
+add ("Marlana": 0, 2, 2);
+add ("Marleen": 0, 2, 2);
+add ("Marlen": 0, 2, 2);
+add ("Marlena": 0, 5, 5);
+add ("Marlene": 0, 88, 88);
+add ("Marlin": 12, 0, 12);
+add ("Marline": 0, 1, 1);
+add ("Marlo": 0, 3, 3);
+add ("Marlon": 19, 0, 19);
+add ("Marlyn": 0, 5, 5);
+add ("Marlys": 0, 5, 5);
+add ("Marna": 0, 2, 2);
+add ("Marni": 0, 2, 2);
+add ("Marnie": 0, 4, 4);
+add ("Marquerite": 0, 4, 4);
+add ("Marquetta": 0, 2, 2);
+add ("Marquis": 6, 0, 6);
+add ("Marquita": 0, 9, 9);
+add ("Marquitta": 0, 1, 1);
+add ("Marry": 0, 3, 3);
+add ("Marsha": 0, 78, 78);
+add ("Marshall": 49, 0, 49);
+add ("Marta": 0, 28, 28);
+add ("Marth": 0, 1, 1);
+add ("Martha": 0, 412, 412);
+add ("Marti": 0, 4, 4);
+add ("Martin": 216, 0, 216);
+add ("Martina": 0, 16, 16);
+add ("Martine": 0, 3, 3);
+add ("Marty": 24, 0, 24);
+add ("Marva": 0, 10, 10);
+add ("Marvel": 0, 4, 4);
+add ("Marvella": 0, 1, 1);
+add ("Marvin": 171, 0, 171);
+add ("Marvis": 0, 1, 1);
+add ("Marx": 0, 1, 1);
+add ("Mary": 9, 0, 9);
+add ("Marya": 0, 2, 2);
+add ("Maryalice": 0, 2, 2);
+add ("Maryam": 0, 2, 2);
+add ("Maryann": 0, 50, 50);
+add ("Maryanna": 0, 1, 1);
+add ("Maryanne": 0, 11, 11);
+add ("Marybelle": 0, 1, 1);
+add ("Marybeth": 0, 7, 7);
+add ("Maryellen": 0, 9, 9);
+add ("Maryetta": 0, 1, 1);
+add ("Maryjane": 0, 7, 7);
+add ("Maryjo": 0, 3, 3);
+add ("Maryland": 0, 1, 1);
+add ("Marylee": 0, 3, 3);
+add ("Marylin": 0, 4, 4);
+add ("Maryln": 0, 1, 1);
+add ("Marylou": 0, 13, 13);
+add ("Marylouise": 0, 1, 1);
+add ("Marylyn": 0, 3, 3);
+add ("Marylynn": 0, 1, 1);
+add ("Maryrose": 0, 1, 1);
+add ("Masako": 0, 2, 2);
+add ("Mason": 12, 0, 12);
+add ("Matha": 0, 1, 1);
+add ("Mathew": 64, 0, 64);
+add ("Mathilda": 0, 3, 3);
+add ("Mathilde": 0, 2, 2);
+add ("Matilda": 0, 15, 15);
+add ("Matilde": 0, 6, 6);
+add ("Matt": 38, 0, 38);
+add ("Matthew": 657, 0, 657);
+add ("Mattie": 0, 81, 81);
+add ("Maud": 0, 5, 5);
+add ("Maude": 0, 23, 23);
+add ("Maudie": 0, 7, 7);
+add ("Maura": 0, 9, 9);
+add ("Maureen": 0, 92, 92);
+add ("Maurice": 97, 0, 97);
+add ("Mauricio": 10, 0, 10);
+add ("Maurine": 0, 7, 7);
+add ("Maurita": 0, 1, 1);
+add ("Mauro": 5, 0, 5);
+add ("Mavis": 0, 16, 16);
+add ("Max": 59, 0, 59);
+add ("Maxie": 0, 4, 4);
+add ("Maxima": 0, 1, 1);
+add ("Maximina": 0, 1, 1);
+add ("Maximo": 5, 0, 5);
+add ("Maxine": 0, 79, 79);
+add ("Maxwell": 10, 0, 10);
+add ("May": 0, 29, 29);
+add ("Maya": 0, 6, 6);
+add ("Maybell": 0, 2, 2);
+add ("Maybelle": 0, 4, 4);
+add ("Maye": 0, 2, 2);
+add ("Mayme": 0, 6, 6);
+add ("Maynard": 10, 0, 10);
+add ("Mayola": 0, 1, 1);
+add ("Mayra": 0, 18, 18);
+add ("Mazie": 0, 3, 3);
+add ("Mckenzie": 0, 2, 2);
+add ("Mckinley": 5, 0, 5);
+add ("Meagan": 0, 15, 15);
+add ("Meaghan": 0, 4, 4);
+add ("Mechelle": 0, 3, 3);
+add ("Meda": 0, 1, 1);
+add ("Mee": 0, 3, 3);
+add ("Meg": 0, 3, 3);
+add ("Megan": 0, 147, 147);
+add ("Meggan": 0, 2, 2);
+add ("Meghan": 0, 32, 32);
+add ("Meghann": 0, 2, 2);
+add ("Mei": 0, 5, 5);
+add ("Mel": 5, 0, 5);
+add ("Melaine": 0, 2, 2);
+add ("Melani": 0, 1, 1);
+add ("Melania": 0, 1, 1);
+add ("Melanie": 0, 116, 116);
+add ("Melany": 0, 2, 2);
+add ("Melba": 0, 27, 27);
+add ("Melda": 0, 1, 1);
+add ("Melia": 0, 1, 1);
+add ("Melida": 0, 1, 1);
+add ("Melina": 0, 4, 4);
+add ("Melinda": 0, 94, 94);
+add ("Melisa": 0, 13, 13);
+add ("Melissa": 0, 462, 462);
+add ("Melissia": 0, 2, 2);
+add ("Melita": 0, 1, 1);
+add ("Mellie": 0, 2, 2);
+add ("Mellisa": 0, 8, 8);
+add ("Mellissa": 0, 6, 6);
+add ("Melodee": 0, 1, 1);
+add ("Melodi": 0, 1, 1);
+add ("Melodie": 0, 6, 6);
+add ("Melody": 0, 50, 50);
+add ("Melonie": 0, 3, 3);
+add ("Melony": 0, 4, 4);
+add ("Melva": 0, 11, 11);
+add ("Melvin": 162, 0, 162);
+add ("Melvina": 0, 5, 5);
+add ("Melynda": 0, 2, 2);
+add ("Mendy": 0, 1, 1);
+add ("Mercedes": 0, 33, 33);
+add ("Mercedez": 0, 1, 1);
+add ("Mercy": 0, 3, 3);
+add ("Meredith": 0, 33, 33);
+add ("Meri": 0, 2, 2);
+add ("Merideth": 0, 1, 1);
+add ("Meridith": 0, 2, 2);
+add ("Merilyn": 0, 2, 2);
+add ("Merissa": 0, 1, 1);
+add ("Merle": 21, 0, 21);
+add ("Merlene": 0, 2, 2);
+add ("Merlin": 9, 0, 9);
+add ("Merlyn": 0, 1, 1);
+add ("Merna": 0, 2, 2);
+add ("Merri": 0, 2, 2);
+add ("Merrie": 0, 1, 1);
+add ("Merrilee": 0, 1, 1);
+add ("Merrill": 9, 0, 9);
+add ("Merry": 0, 7, 7);
+add ("Mertie": 0, 1, 1);
+add ("Mervin": 7, 0, 7);
+add ("Meryl": 0, 3, 3);
+add ("Meta": 0, 4, 4);
+add ("Mi": 0, 5, 5);
+add ("Mia": 0, 14, 14);
+add ("Mica": 0, 1, 1);
+add ("Micaela": 0, 5, 5);
+add ("Micah": 17, 0, 17);
+add ("Micha": 0, 1, 1);
+add ("Michael": 2629, 0, 2629);
+add ("Michaela": 0, 8, 8);
+add ("Michaele": 0, 1, 1);
+add ("Michal": 4, 0, 4);
+add ("Michale": 4, 0, 4);
+add ("Micheal": 123, 0, 123);
+add ("Michel": 12, 0, 12);
+add ("Michele": 0, 145, 145);
+add ("Michelina": 0, 1, 1);
+add ("Micheline": 0, 2, 2);
+add ("Michell": 0, 8, 8);
+add ("Michelle": 0, 519, 519);
+add ("Michiko": 0, 2, 2);
+add ("Mickey": 16, 0, 16);
+add ("Micki": 0, 2, 2);
+add ("Mickie": 0, 3, 3);
+add ("Miesha": 0, 1, 1);
+add ("Migdalia": 0, 7, 7);
+add ("Mignon": 0, 1, 1);
+add ("Miguel": 122, 0, 122);
+add ("Miguelina": 0, 2, 2);
+add ("Mika": 0, 2, 2);
+add ("Mikaela": 0, 1, 1);
+add ("Mike": 189, 0, 189);
+add ("Mikel": 5, 0, 5);
+add ("Miki": 0, 1, 1);
+add ("Mikki": 0, 2, 2);
+add ("Mila": 0, 2, 2);
+add ("Milagro": 0, 2, 2);
+add ("Milagros": 0, 13, 13);
+add ("Milan": 4, 0, 4);
+add ("Milda": 0, 1, 1);
+add ("Mildred": 0, 313, 313);
+add ("Miles": 17, 0, 17);
+add ("Milford": 6, 0, 6);
+add ("Milissa": 0, 3, 3);
+add ("Millard": 11, 0, 11);
+add ("Millicent": 0, 9, 9);
+add ("Millie": 0, 17, 17);
+add ("Milly": 0, 1, 1);
+add ("Milo": 5, 0, 5);
+add ("Milton": 80, 0, 80);
+add ("Mimi": 0, 5, 5);
+add ("Min": 0, 2, 2);
+add ("Mina": 0, 8, 8);
+add ("Minda": 0, 1, 1);
+add ("Mindi": 0, 3, 3);
+add ("Mindy": 0, 29, 29);
+add ("Minerva": 0, 14, 14);
+add ("Ming": 0, 1, 1);
+add ("Minh": 5, 0, 5);
+add ("Minna": 0, 2, 2);
+add ("Minnie": 0, 89, 89);
+add ("Minta": 0, 1, 1);
+add ("Miquel": 4, 0, 4);
+add ("Mira": 0, 3, 3);
+add ("Miranda": 0, 28, 28);
+add ("Mireille": 0, 2, 2);
+add ("Mirella": 0, 1, 1);
+add ("Mireya": 0, 4, 4);
+add ("Miriam": 0, 66, 66);
+add ("Mirian": 0, 4, 4);
+add ("Mirna": 0, 6, 6);
+add ("Mirta": 0, 3, 3);
+add ("Mirtha": 0, 2, 2);
+add ("Misha": 0, 1, 1);
+add ("Miss": 0, 1, 1);
+add ("Missy": 0, 6, 6);
+add ("Misti": 0, 5, 5);
+add ("Mistie": 0, 1, 1);
+add ("Misty": 0, 63, 63);
+add ("Mitch": 6, 0, 6);
+add ("Mitchel": 7, 0, 7);
+add ("Mitchell": 72, 0, 72);
+add ("Mitsue": 0, 1, 1);
+add ("Mitsuko": 0, 1, 1);
+add ("Mittie": 0, 4, 4);
+add ("Mitzi": 0, 11, 11);
+add ("Mitzie": 0, 1, 1);
+add ("Miyoko": 0, 1, 1);
+add ("Modesta": 0, 3, 3);
+add ("Modesto": 4, 0, 4);
+add ("Mohamed": 5, 0, 5);
+add ("Mohammad": 8, 0, 8);
+add ("Mohammed": 7, 0, 7);
+add ("Moira": 0, 3, 3);
+add ("Moises": 13, 0, 13);
+add ("Mollie": 0, 20, 20);
+add ("Molly": 0, 55, 55);
+add ("Mona": 0, 35, 35);
+add ("Monet": 0, 1, 1);
+add ("Monica": 0, 166, 166);
+add ("Monika": 0, 8, 8);
+add ("Monique": 0, 51, 51);
+add ("Monnie": 0, 1, 1);
+add ("Monroe": 8, 0, 8);
+add ("Monserrate": 0, 2, 2);
+add ("Monte": 15, 0, 15);
+add ("Monty": 12, 0, 12);
+add ("Moon": 0, 1, 1);
+add ("Mora": 0, 1, 1);
+add ("Morgan": 18, 0, 18);
+add ("Moriah": 0, 1, 1);
+add ("Morris": 51, 0, 51);
+add ("Morton": 7, 0, 7);
+add ("Mose": 4, 0, 4);
+add ("Moses": 20, 0, 20);
+add ("Moshe": 5, 0, 5);
+add ("Mozell": 0, 3, 3);
+add ("Mozella": 0, 2, 2);
+add ("Mozelle": 0, 5, 5);
+add ("Mui": 0, 2, 2);
+add ("Muoi": 0, 1, 1);
+add ("Muriel": 0, 38, 38);
+add ("Murray": 15, 0, 15);
+add ("My": 0, 3, 3);
+add ("Myesha": 0, 1, 1);
+add ("Myles": 7, 0, 7);
+add ("Myong": 0, 3, 3);
+add ("Myra": 0, 40, 40);
+add ("Myriam": 0, 4, 4);
+add ("Myrl": 0, 1, 1);
+add ("Myrle": 0, 2, 2);
+add ("Myrna": 0, 26, 26);
+add ("Myron": 30, 0, 30);
+add ("Myrta": 0, 1, 1);
+add ("Myrtice": 0, 3, 3);
+add ("Myrtie": 0, 2, 2);
+add ("Myrtis": 0, 5, 5);
+add ("Myrtle": 0, 78, 78);
+add ("Myung": 0, 2, 2);
+add ("Na": 0, 1, 1);
+add ("Nada": 0, 3, 3);
+add ("Nadene": 0, 1, 1);
+add ("Nadia": 0, 11, 11);
+add ("Nadine": 0, 36, 36);
+add ("Naida": 0, 1, 1);
+add ("Nakesha": 0, 1, 1);
+add ("Nakia": 0, 5, 5);
+add ("Nakisha": 0, 3, 3);
+add ("Nakita": 0, 2, 2);
+add ("Nam": 0, 1, 1);
+add ("Nan": 0, 8, 8);
+add ("Nana": 0, 2, 2);
+add ("Nancee": 0, 1, 1);
+add ("Nancey": 0, 1, 1);
+add ("Nanci": 0, 4, 4);
+add ("Nancie": 0, 2, 2);
+add ("Nancy": 0, 669, 669);
+add ("Nanette": 0, 11, 11);
+add ("Nannette": 0, 4, 4);
+add ("Nannie": 0, 13, 13);
+add ("Naoma": 0, 2, 2);
+add ("Naomi": 0, 71, 71);
+add ("Napoleon": 6, 0, 6);
+add ("Narcisa": 0, 2, 2);
+add ("Natacha": 0, 1, 1);
+add ("Natalia": 0, 10, 10);
+add ("Natalie": 0, 98, 98);
+add ("Natalya": 0, 1, 1);
+add ("Natasha": 0, 57, 57);
+add ("Natashia": 0, 1, 1);
+add ("Nathalie": 0, 5, 5);
+add ("Nathan": 185, 0, 185);
+add ("Nathanael": 4, 0, 4);
+add ("Nathanial": 4, 0, 4);
+add ("Nathaniel": 81, 0, 81);
+add ("Natisha": 0, 1, 1);
+add ("Natividad": 0, 4, 4);
+add ("Natosha": 0, 2, 2);
+add ("Neal": 37, 0, 37);
+add ("Necole": 0, 1, 1);
+add ("Ned": 12, 0, 12);
+add ("Neda": 0, 1, 1);
+add ("Nedra": 0, 5, 5);
+add ("Neely": 0, 1, 1);
+add ("Neida": 0, 1, 1);
+add ("Neil": 66, 0, 66);
+add ("Nelda": 0, 14, 14);
+add ("Nelia": 0, 2, 2);
+add ("Nelida": 0, 3, 3);
+add ("Nell": 0, 21, 21);
+add ("Nella": 0, 3, 3);
+add ("Nelle": 0, 3, 3);
+add ("Nellie": 0, 89, 89);
+add ("Nelly": 0, 8, 8);
+add ("Nelson": 61, 0, 61);
+add ("Nena": 0, 4, 4);
+add ("Nenita": 0, 1, 1);
+add ("Neoma": 0, 2, 2);
+add ("Neomi": 0, 1, 1);
+add ("Nereida": 0, 5, 5);
+add ("Nerissa": 0, 2, 2);
+add ("Nery": 0, 1, 1);
+add ("Nestor": 9, 0, 9);
+add ("Neta": 0, 2, 2);
+add ("Nettie": 0, 27, 27);
+add ("Neva": 0, 13, 13);
+add ("Nevada": 0, 1, 1);
+add ("Neville": 4, 0, 4);
+add ("Newton": 5, 0, 5);
+add ("Nga": 0, 2, 2);
+add ("Ngan": 0, 1, 1);
+add ("Ngoc": 0, 2, 2);
+add ("Nguyet": 0, 1, 1);
+add ("Nia": 0, 3, 3);
+add ("Nichelle": 0, 3, 3);
+add ("Nichol": 0, 3, 3);
+add ("Nicholas": 275, 0, 275);
+add ("Nichole": 0, 38, 38);
+add ("Nicholle": 0, 1, 1);
+add ("Nick": 43, 0, 43);
+add ("Nicki": 0, 5, 5);
+add ("Nickie": 0, 2, 2);
+add ("Nickolas": 10, 0, 10);
+add ("Nickole": 0, 2, 2);
+add ("Nicky": 4, 0, 4);
+add ("Nicol": 0, 2, 2);
+add ("Nicola": 0, 4, 4);
+add ("Nicolas": 24, 0, 24);
+add ("Nicolasa": 0, 3, 3);
+add ("Nicole": 0, 281, 281);
+add ("Nicolette": 0, 3, 3);
+add ("Nicolle": 0, 2, 2);
+add ("Nida": 0, 1, 1);
+add ("Nidia": 0, 3, 3);
+add ("Niesha": 0, 1, 1);
+add ("Nieves": 0, 2, 2);
+add ("Nigel": 6, 0, 6);
+add ("Niki": 0, 5, 5);
+add ("Nikia": 0, 2, 2);
+add ("Nikita": 0, 5, 5);
+add ("Nikki": 0, 24, 24);
+add ("Nikole": 0, 2, 2);
+add ("Nila": 0, 4, 4);
+add ("Nilda": 0, 7, 7);
+add ("Nilsa": 0, 3, 3);
+add ("Nina": 0, 72, 72);
+add ("Ninfa": 0, 3, 3);
+add ("Nisha": 0, 1, 1);
+add ("Nita": 0, 12, 12);
+add ("Noah": 22, 0, 22);
+add ("Noble": 5, 0, 5);
+add ("Nobuko": 0, 1, 1);
+add ("Noe": 11, 0, 11);
+add ("Noel": 30, 0, 30);
+add ("Noelia": 0, 3, 3);
+add ("Noella": 0, 2, 2);
+add ("Noelle": 0, 8, 8);
+add ("Noemi": 0, 12, 12);
+add ("Nohemi": 0, 1, 1);
+add ("Nola": 0, 14, 14);
+add ("Nolan": 13, 0, 13);
+add ("Noma": 0, 2, 2);
+add ("Nona": 0, 11, 11);
+add ("Nora": 0, 73, 73);
+add ("Norah": 0, 2, 2);
+add ("Norbert": 13, 0, 13);
+add ("Norberto": 6, 0, 6);
+add ("Noreen": 0, 13, 13);
+add ("Norene": 0, 3, 3);
+add ("Noriko": 0, 1, 1);
+add ("Norine": 0, 3, 3);
+add ("Norma": 0, 218, 218);
+add ("Norman": 177, 0, 177);
+add ("Normand": 6, 0, 6);
+add ("Norris": 11, 0, 11);
+add ("Nova": 0, 4, 4);
+add ("Novella": 0, 4, 4);
+add ("Nu": 0, 1, 1);
+add ("Nubia": 0, 1, 1);
+add ("Numbers": 8, 0, 8);
+add ("Nydia": 0, 4, 4);
+add ("Nyla": 0, 2, 2);
+add ("Obdulia": 0, 2, 2);
+add ("Ocie": 0, 3, 3);
+add ("Octavia": 0, 8, 8);
+add ("Octavio": 8, 0, 8);
+add ("Oda": 0, 1, 1);
+add ("Odelia": 0, 1, 1);
+add ("Odell": 10, 0, 10);
+add ("Odessa": 0, 13, 13);
+add ("Odette": 0, 3, 3);
+add ("Odilia": 0, 2, 2);
+add ("Odis": 5, 0, 5);
+add ("Ofelia": 0, 15, 15);
+add ("Ok": 0, 4, 4);
+add ("Ola": 0, 20, 20);
+add ("Olen": 5, 0, 5);
+add ("Olene": 0, 1, 1);
+add ("Oleta": 0, 5, 5);
+add ("Olevia": 0, 1, 1);
+add ("Olga": 0, 70, 70);
+add ("Olimpia": 0, 1, 1);
+add ("Olin": 6, 0, 6);
+add ("Olinda": 0, 1, 1);
+add ("Oliva": 0, 3, 3);
+add ("Olive": 0, 30, 30);
+add ("Oliver": 40, 0, 40);
+add ("Olivia": 0, 49, 49);
+add ("Ollie": 10, 0, 10);
+add ("Olympia": 0, 2, 2);
+add ("Oma": 0, 7, 7);
+add ("Omar": 36, 0, 36);
+add ("Omega": 0, 2, 2);
+add ("Omer": 5, 0, 5);
+add ("Ona": 0, 5, 5);
+add ("Oneida": 0, 2, 2);
+add ("Onie": 0, 1, 1);
+add ("Onita": 0, 1, 1);
+add ("Opal": 0, 50, 50);
+add ("Ophelia": 0, 11, 11);
+add ("Ora": 0, 27, 27);
+add ("Oralee": 0, 1, 1);
+add ("Oralia": 0, 6, 6);
+add ("Oren": 5, 0, 5);
+add ("Oretha": 0, 1, 1);
+add ("Orlando": 37, 0, 37);
+add ("Orpha": 0, 4, 4);
+add ("Orval": 5, 0, 5);
+add ("Orville": 24, 0, 24);
+add ("Oscar": 122, 0, 122);
+add ("Ossie": 0, 2, 2);
+add ("Osvaldo": 6, 0, 6);
+add ("Oswaldo": 4, 0, 4);
+add ("Otelia": 0, 1, 1);
+add ("Otha": 4, 0, 4);
+add ("Otilia": 0, 3, 3);
+add ("Otis": 41, 0, 41);
+add ("Otto": 18, 0, 18);
+add ("Ouida": 0, 3, 3);
+add ("Owen": 26, 0, 26);
+add ("Ozell": 0, 1, 1);
+add ("Ozella": 0, 2, 2);
+add ("Ozie": 0, 1, 1);
+add ("Pa": 0, 1, 1);
+add ("Pablo": 36, 0, 36);
+add ("Page": 0, 3, 3);
+add ("Paige": 0, 19, 19);
+add ("Palma": 0, 3, 3);
+add ("Palmer": 4, 0, 4);
+add ("Palmira": 0, 1, 1);
+add ("Pam": 0, 46, 46);
+add ("Pamala": 0, 8, 8);
+add ("Pamela": 0, 416, 416);
+add ("Pamelia": 0, 2, 2);
+add ("Pamella": 0, 2, 2);
+add ("Pamila": 0, 1, 1);
+add ("Pamula": 0, 1, 1);
+add ("Pandora": 0, 2, 2);
+add ("Pansy": 0, 8, 8);
+add ("Paola": 0, 3, 3);
+add ("Paris": 4, 0, 4);
+add ("Parker": 6, 0, 6);
+add ("Parthenia": 0, 1, 1);
+add ("Particia": 0, 2, 2);
+add ("Pasquale": 8, 0, 8);
+add ("Pasty": 0, 1, 1);
+add ("Pat": 22, 0, 22);
+add ("Patience": 0, 2, 2);
+add ("Patria": 0, 1, 1);
+add ("Patrica": 0, 21, 21);
+add ("Patrice": 0, 26, 26);
+add ("Patricia": 4, 0, 4);
+add ("Patrick": 389, 0, 389);
+add ("Patrina": 0, 2, 2);
+add ("Patsy": 0, 76, 76);
+add ("Patti": 0, 29, 29);
+add ("Pattie": 0, 7, 7);
+add ("Patty": 0, 43, 43);
+add ("Paul": 948, 0, 948);
+add ("Paula": 0, 217, 217);
+add ("Paulene": 0, 1, 1);
+add ("Pauletta": 0, 2, 2);
+add ("Paulette": 0, 36, 36);
+add ("Paulina": 0, 6, 6);
+add ("Pauline": 0, 165, 165);
+add ("Paulita": 0, 1, 1);
+add ("Paz": 0, 1, 1);
+add ("Pearl": 0, 94, 94);
+add ("Pearle": 0, 2, 2);
+add ("Pearlene": 0, 2, 2);
+add ("Pearlie": 0, 13, 13);
+add ("Pearline": 0, 6, 6);
+add ("Pearly": 0, 1, 1);
+add ("Pedro": 103, 0, 103);
+add ("Peg": 0, 1, 1);
+add ("Peggie": 0, 4, 4);
+add ("Peggy": 0, 208, 208);
+add ("Pei": 0, 1, 1);
+add ("Penelope": 0, 13, 13);
+add ("Penney": 0, 2, 2);
+add ("Penni": 0, 2, 2);
+add ("Pennie": 0, 4, 4);
+add ("Penny": 0, 71, 71);
+add ("Percy": 21, 0, 21);
+add ("Perla": 0, 5, 5);
+add ("Perry": 49, 0, 49);
+add ("Pete": 32, 0, 32);
+add ("Peter": 381, 0, 381);
+add ("Petra": 0, 19, 19);
+add ("Petrina": 0, 2, 2);
+add ("Petronila": 0, 1, 1);
+add ("Phebe": 0, 1, 1);
+add ("Phil": 21, 0, 21);
+add ("Philip": 197, 0, 197);
+add ("Phillip": 213, 0, 213);
+add ("Phillis": 0, 6, 6);
+add ("Philomena": 0, 5, 5);
+add ("Phoebe": 0, 9, 9);
+add ("Phung": 0, 1, 1);
+add ("Phuong": 0, 4, 4);
+add ("Phylicia": 0, 1, 1);
+add ("Phylis": 0, 4, 4);
+add ("Phyliss": 0, 4, 4);
+add ("Phyllis": 0, 219, 219);
+add ("Pia": 0, 2, 2);
+add ("Piedad": 0, 2, 2);
+add ("Pierre": 16, 0, 16);
+add ("Pilar": 0, 6, 6);
+add ("Ping": 0, 1, 1);
+add ("Pinkie": 0, 3, 3);
+add ("Piper": 0, 2, 2);
+add ("Pok": 0, 1, 1);
+add ("Polly": 0, 22, 22);
+add ("Porfirio": 5, 0, 5);
+add ("Porsche": 0, 1, 1);
+add ("Porsha": 0, 2, 2);
+add ("Porter": 4, 0, 4);
+add ("Portia": 0, 7, 7);
+add ("Precious": 0, 5, 5);
+add ("Preston": 34, 0, 34);
+add ("Pricilla": 0, 6, 6);
+add ("Prince": 5, 0, 5);
+add ("Princess": 0, 5, 5);
+add ("Priscila": 0, 1, 1);
+add ("Priscilla": 0, 71, 71);
+add ("Providencia": 0, 1, 1);
+add ("Prudence": 0, 4, 4);
+add ("Pura": 0, 1, 1);
+add ("Qiana": 0, 2, 2);
+add ("Queen": 0, 9, 9);
+add ("Queenie": 0, 2, 2);
+add ("Quentin": 15, 0, 15);
+add ("Quiana": 0, 2, 2);
+add ("Quincy": 10, 0, 10);
+add ("Quinn": 5, 0, 5);
+add ("Quintin": 5, 0, 5);
+add ("Quinton": 13, 0, 13);
+add ("Quyen": 0, 1, 1);
+add ("Rachael": 0, 38, 38);
+add ("Rachal": 0, 1, 1);
+add ("Racheal": 0, 7, 7);
+add ("Rachel": 0, 242, 242);
+add ("Rachele": 0, 2, 2);
+add ("Rachell": 0, 2, 2);
+add ("Rachelle": 0, 19, 19);
+add ("Racquel": 0, 3, 3);
+add ("Rae": 0, 14, 14);
+add ("Raeann": 0, 2, 2);
+add ("Raelene": 0, 1, 1);
+add ("Rafael": 81, 0, 81);
+add ("Rafaela": 0, 6, 6);
+add ("Raguel": 0, 1, 1);
+add ("Raina": 0, 2, 2);
+add ("Raisa": 0, 1, 1);
+add ("Raleigh": 5, 0, 5);
+add ("Ralph": 282, 0, 282);
+add ("Ramiro": 22, 0, 22);
+add ("Ramon": 90, 0, 90);
+add ("Ramona": 0, 62, 62);
+add ("Ramonita": 0, 2, 2);
+add ("Rana": 0, 2, 2);
+add ("Ranae": 0, 2, 2);
+add ("Randa": 0, 3, 3);
+add ("Randal": 20, 0, 20);
+add ("Randall": 138, 0, 138);
+add ("Randee": 0, 2, 2);
+add ("Randell": 7, 0, 7);
+add ("Randi": 0, 15, 15);
+add ("Randolph": 32, 0, 32);
+add ("Randy": 232, 0, 232);
+add ("Ranee": 0, 1, 1);
+add ("Raphael": 12, 0, 12);
+add ("Raquel": 0, 31, 31);
+add ("Rashad": 4, 0, 4);
+add ("Rasheeda": 0, 2, 2);
+add ("Rashida": 0, 3, 3);
+add ("Raul": 79, 0, 79);
+add ("Raven": 0, 5, 5);
+add ("Ray": 153, 0, 153);
+add ("Raye": 0, 2, 2);
+add ("Rayford": 4, 0, 4);
+add ("Raylene": 0, 2, 2);
+add ("Raymon": 4, 0, 4);
+add ("Raymond": 488, 0, 488);
+add ("Raymonde": 0, 1, 1);
+add ("Raymundo": 8, 0, 8);
+add ("Rayna": 0, 2, 2);
+add ("Rea": 0, 1, 1);
+add ("Reagan": 0, 1, 1);
+add ("Reanna": 0, 1, 1);
+add ("Reatha": 0, 2, 2);
+add ("Reba": 0, 24, 24);
+add ("Rebbeca": 0, 2, 2);
+add ("Rebbecca": 0, 2, 2);
+add ("Rebeca": 0, 7, 7);
+add ("Rebecca": 0, 430, 430);
+add ("Rebecka": 0, 1, 1);
+add ("Rebekah": 0, 25, 25);
+add ("Reda": 0, 2, 2);
+add ("Reed": 10, 0, 10);
+add ("Reena": 0, 1, 1);
+add ("Refugia": 0, 1, 1);
+add ("Refugio": 6, 0, 6);
+add ("Regan": 0, 3, 3);
+add ("Regena": 0, 2, 2);
+add ("Regenia": 0, 2, 2);
+add ("Reggie": 12, 0, 12);
+add ("Regina": 0, 133, 133);
+add ("Reginald": 84, 0, 84);
+add ("Regine": 0, 1, 1);
+add ("Reginia": 0, 1, 1);
+add ("Reid": 7, 0, 7);
+add ("Reiko": 0, 2, 2);
+add ("Reina": 0, 6, 6);
+add ("Reinaldo": 6, 0, 6);
+add ("Reita": 0, 1, 1);
+add ("Rema": 0, 1, 1);
+add ("Remedios": 0, 2, 2);
+add ("Remona": 0, 1, 1);
+add ("Rena": 0, 27, 27);
+add ("Renae": 0, 8, 8);
+add ("Renaldo": 4, 0, 4);
+add ("Renata": 0, 5, 5);
+add ("Renate": 0, 5, 5);
+add ("Renato": 4, 0, 4);
+add ("Renay": 0, 1, 1);
+add ("Renda": 0, 1, 1);
+add ("Rene": 48, 0, 48);
+add ("Renea": 0, 3, 3);
+add ("Renee": 0, 120, 120);
+add ("Renetta": 0, 2, 2);
+add ("Renita": 0, 6, 6);
+add ("Renna": 0, 1, 1);
+add ("Ressie": 0, 1, 1);
+add ("Reta": 0, 6, 6);
+add ("Retha": 0, 7, 7);
+add ("Retta": 0, 2, 2);
+add ("Reuben": 15, 0, 15);
+add ("Reva": 0, 10, 10);
+add ("Rex": 37, 0, 37);
+add ("Rey": 4, 0, 4);
+add ("Reyes": 5, 0, 5);
+add ("Reyna": 0, 9, 9);
+add ("Reynalda": 0, 1, 1);
+add ("Reynaldo": 18, 0, 18);
+add ("Rhea": 0, 9, 9);
+add ("Rheba": 0, 1, 1);
+add ("Rhett": 4, 0, 4);
+add ("Rhiannon": 0, 4, 4);
+add ("Rhoda": 0, 14, 14);
+add ("Rhona": 0, 1, 1);
+add ("Rhonda": 0, 162, 162);
+add ("Ria": 0, 1, 1);
+add ("Ricarda": 0, 1, 1);
+add ("Ricardo": 93, 0, 93);
+add ("Rich": 7, 0, 7);
+add ("Richard": 1703, 0, 1703);
+add ("Richelle": 0, 5, 5);
+add ("Richie": 5, 0, 5);
+add ("Rick": 91, 0, 91);
+add ("Rickey": 35, 0, 35);
+add ("Ricki": 0, 1, 1);
+add ("Rickie": 11, 0, 11);
+add ("Ricky": 141, 0, 141);
+add ("Rico": 6, 0, 6);
+add ("Rigoberto": 11, 0, 11);
+add ("Rikki": 0, 2, 2);
+add ("Riley": 10, 0, 10);
+add ("Rima": 0, 1, 1);
+add ("Rina": 0, 3, 3);
+add ("Risa": 0, 2, 2);
+add ("Rita": 0, 204, 204);
+add ("Riva": 0, 1, 1);
+add ("Rivka": 0, 1, 1);
+add ("Rob": 13, 0, 13);
+add ("Robbi": 0, 1, 1);
+add ("Robbie": 16, 0, 16);
+add ("Robbin": 0, 7, 7);
+add ("Robby": 8, 0, 8);
+add ("Robbyn": 0, 1, 1);
+add ("Robena": 0, 1, 1);
+add ("Robert": 3143, 0, 3143);
+add ("Roberta": 0, 117, 117);
+add ("Roberto": 97, 0, 97);
+add ("Robin": 32, 0, 32);
+add ("Robt": 5, 0, 5);
+add ("Robyn": 0, 39, 39);
+add ("Rocco": 11, 0, 11);
+add ("Rochel": 0, 1, 1);
+add ("Rochell": 0, 2, 2);
+add ("Rochelle": 0, 32, 32);
+add ("Rocio": 0, 8, 8);
+add ("Rocky": 16, 0, 16);
+add ("Rod": 13, 0, 13);
+add ("Roderick": 36, 0, 36);
+add ("Rodger": 17, 0, 17);
+add ("Rodney": 180, 0, 180);
+add ("Rodolfo": 30, 0, 30);
+add ("Rodrick": 6, 0, 6);
+add ("Rodrigo": 11, 0, 11);
+add ("Rogelio": 22, 0, 22);
+add ("Roger": 322, 0, 322);
+add ("Roland": 72, 0, 72);
+add ("Rolanda": 0, 3, 3);
+add ("Rolande": 0, 1, 1);
+add ("Rolando": 21, 0, 21);
+add ("Rolf": 4, 0, 4);
+add ("Rolland": 5, 0, 5);
+add ("Roma": 0, 5, 5);
+add ("Romaine": 0, 2, 2);
+add ("Roman": 20, 0, 20);
+add ("Romana": 0, 3, 3);
+add ("Romelia": 0, 2, 2);
+add ("Romeo": 10, 0, 10);
+add ("Romona": 0, 5, 5);
+add ("Ron": 72, 0, 72);
+add ("Rona": 0, 4, 4);
+add ("Ronald": 725, 0, 725);
+add ("Ronda": 0, 26, 26);
+add ("Roni": 0, 2, 2);
+add ("Ronna": 0, 3, 3);
+add ("Ronni": 0, 2, 2);
+add ("Ronnie": 113, 0, 113);
+add ("Ronny": 7, 0, 7);
+add ("Roosevelt": 28, 0, 28);
+add ("Rory": 12, 0, 12);
+add ("Rosa": 0, 194, 194);
+add ("Rosalba": 0, 5, 5);
+add ("Rosalee": 0, 7, 7);
+add ("Rosalia": 0, 8, 8);
+add ("Rosalie": 0, 39, 39);
+add ("Rosalina": 0, 5, 5);
+add ("Rosalind": 0, 18, 18);
+add ("Rosalinda": 0, 12, 12);
+add ("Rosaline": 0, 3, 3);
+add ("Rosalva": 0, 3, 3);
+add ("Rosalyn": 0, 14, 14);
+add ("Rosamaria": 0, 1, 1);
+add ("Rosamond": 0, 2, 2);
+add ("Rosana": 0, 2, 2);
+add ("Rosann": 0, 2, 2);
+add ("Rosanna": 0, 9, 9);
+add ("Rosanne": 0, 10, 10);
+add ("Rosaria": 0, 3, 3);
+add ("Rosario": 5, 0, 5);
+add ("Rosaura": 0, 3, 3);
+add ("Roscoe": 13, 0, 13);
+add ("Rose": 0, 296, 296);
+add ("Roseann": 0, 10, 10);
+add ("Roseanna": 0, 4, 4);
+add ("Roseanne": 0, 6, 6);
+add ("Roselee": 0, 1, 1);
+add ("Roselia": 0, 1, 1);
+add ("Roseline": 0, 1, 1);
+add ("Rosella": 0, 10, 10);
+add ("Roselle": 0, 1, 1);
+add ("Roselyn": 0, 5, 5);
+add ("Rosemarie": 0, 35, 35);
+add ("Rosemary": 0, 107, 107);
+add ("Rosena": 0, 1, 1);
+add ("Rosenda": 0, 1, 1);
+add ("Rosendo": 6, 0, 6);
+add ("Rosetta": 0, 22, 22);
+add ("Rosette": 0, 1, 1);
+add ("Rosia": 0, 2, 2);
+add ("Rosie": 0, 55, 55);
+add ("Rosina": 0, 4, 4);
+add ("Rosio": 0, 1, 1);
+add ("Rosita": 0, 7, 7);
+add ("Roslyn": 0, 11, 11);
+add ("Ross": 50, 0, 50);
+add ("Rossana": 0, 1, 1);
+add ("Rossie": 0, 1, 1);
+add ("Rosy": 0, 1, 1);
+add ("Rowena": 0, 9, 9);
+add ("Roxana": 0, 6, 6);
+add ("Roxane": 0, 4, 4);
+add ("Roxann": 0, 5, 5);
+add ("Roxanna": 0, 6, 6);
+add ("Roxanne": 0, 40, 40);
+add ("Roxie": 0, 11, 11);
+add ("Roxy": 0, 1, 1);
+add ("Roy": 273, 0, 273);
+add ("Royal": 6, 0, 6);
+add ("Royce": 16, 0, 16);
+add ("Rozanne": 0, 1, 1);
+add ("Rozella": 0, 2, 2);
+add ("Ruben": 82, 0, 82);
+add ("Rubi": 0, 1, 1);
+add ("Rubie": 0, 2, 2);
+add ("Rubin": 6, 0, 6);
+add ("Ruby": 0, 221, 221);
+add ("Rubye": 0, 4, 4);
+add ("Rudolf": 4, 0, 4);
+add ("Rudolph": 34, 0, 34);
+add ("Rudy": 34, 0, 34);
+add ("Rueben": 4, 0, 4);
+add ("Rufina": 0, 3, 3);
+add ("Rufus": 25, 0, 25);
+add ("Rupert": 5, 0, 5);
+add ("Russ": 7, 0, 7);
+add ("Russel": 15, 0, 15);
+add ("Russell": 224, 0, 224);
+add ("Rusty": 12, 0, 12);
+add ("Ruth": 0, 562, 562);
+add ("Rutha": 0, 1, 1);
+add ("Ruthann": 0, 4, 4);
+add ("Ruthanne": 0, 1, 1);
+add ("Ruthe": 0, 1, 1);
+add ("Ruthie": 0, 14, 14);
+add ("Ryan": 328, 0, 328);
+add ("Ryann": 0, 1, 1);
+add ("Sabina": 0, 5, 5);
+add ("Sabine": 0, 3, 3);
+add ("Sabra": 0, 3, 3);
+add ("Sabrina": 0, 57, 57);
+add ("Sacha": 0, 1, 1);
+add ("Sachiko": 0, 2, 2);
+add ("Sade": 0, 3, 3);
+add ("Sadie": 0, 39, 39);
+add ("Sadye": 0, 1, 1);
+add ("Sage": 0, 1, 1);
+add ("Sal": 5, 0, 5);
+add ("Salena": 0, 2, 2);
+add ("Salina": 0, 4, 4);
+add ("Salley": 0, 1, 1);
+add ("Sallie": 0, 24, 24);
+add ("Sally": 0, 135, 135);
+add ("Salome": 0, 2, 2);
+add ("Salvador": 49, 0, 49);
+add ("Salvatore": 29, 0, 29);
+add ("Sam": 92, 0, 92);
+add ("Samantha": 0, 124, 124);
+add ("Samara": 0, 2, 2);
+add ("Samatha": 0, 6, 6);
+add ("Samella": 0, 1, 1);
+add ("Samira": 0, 2, 2);
+add ("Sammie": 12, 0, 12);
+add ("Sammy": 25, 0, 25);
+add ("Samual": 4, 0, 4);
+add ("Samuel": 306, 0, 306);
+add ("Sana": 0, 1, 1);
+add ("Sanda": 0, 1, 1);
+add ("Sandee": 0, 1, 1);
+add ("Sandi": 0, 6, 6);
+add ("Sandie": 0, 1, 1);
+add ("Sandra": 0, 629, 629);
+add ("Sandy": 7, 0, 7);
+add ("Sanford": 9, 0, 9);
+add ("Sang": 6, 0, 6);
+add ("Sanjuana": 0, 4, 4);
+add ("Sanjuanita": 0, 4, 4);
+add ("Sanora": 0, 2, 2);
+add ("Santa": 0, 6, 6);
+add ("Santana": 0, 2, 2);
+add ("Santiago": 22, 0, 22);
+add ("Santina": 0, 2, 2);
+add ("Santo": 4, 0, 4);
+add ("Santos": 19, 0, 19);
+add ("Sara": 0, 229, 229);
+add ("Sarah": 0, 508, 508);
+add ("Sarai": 0, 1, 1);
+add ("Saran": 0, 1, 1);
+add ("Sari": 0, 2, 2);
+add ("Sarina": 0, 2, 2);
+add ("Sarita": 0, 3, 3);
+add ("Sasha": 0, 10, 10);
+add ("Saturnina": 0, 1, 1);
+add ("Sau": 0, 1, 1);
+add ("Saul": 20, 0, 20);
+add ("Saundra": 0, 13, 13);
+add ("Savanna": 0, 2, 2);
+add ("Savannah": 0, 10, 10);
+add ("Scarlet": 0, 2, 2);
+add ("Scarlett": 0, 4, 4);
+add ("Scot": 10, 0, 10);
+add ("Scott": 546, 0, 546);
+add ("Scottie": 7, 0, 7);
+add ("Scotty": 13, 0, 13);
+add ("Sean": 197, 0, 197);
+add ("Season": 0, 1, 1);
+add ("Sebastian": 10, 0, 10);
+add ("Sebrina": 0, 2, 2);
+add ("See": 0, 1, 1);
+add ("Seema": 0, 1, 1);
+add ("Selena": 0, 12, 12);
+add ("Selene": 0, 2, 2);
+add ("Selina": 0, 8, 8);
+add ("Selma": 0, 16, 16);
+add ("Sena": 0, 1, 1);
+add ("Senaida": 0, 1, 1);
+add ("September": 0, 1, 1);
+add ("Serafina": 0, 1, 1);
+add ("Serena": 0, 13, 13);
+add ("Sergio": 49, 0, 49);
+add ("Serina": 0, 2, 2);
+add ("Serita": 0, 1, 1);
+add ("Seth": 48, 0, 48);
+add ("Setsuko": 0, 1, 1);
+add ("Seymour": 7, 0, 7);
+add ("Sha": 0, 2, 2);
+add ("Shad": 4, 0, 4);
+add ("Shae": 0, 1, 1);
+add ("Shaina": 0, 4, 4);
+add ("Shakia": 0, 1, 1);
+add ("Shakira": 0, 2, 2);
+add ("Shakita": 0, 1, 1);
+add ("Shala": 0, 1, 1);
+add ("Shalanda": 0, 1, 1);
+add ("Shalon": 0, 1, 1);
+add ("Shalonda": 0, 4, 4);
+add ("Shameka": 0, 4, 4);
+add ("Shamika": 0, 4, 4);
+add ("Shan": 0, 1, 1);
+add ("Shana": 0, 18, 18);
+add ("Shanae": 0, 1, 1);
+add ("Shanda": 0, 6, 6);
+add ("Shandi": 0, 1, 1);
+add ("Shandra": 0, 3, 3);
+add ("Shane": 93, 0, 93);
+add ("Shaneka": 0, 2, 2);
+add ("Shanel": 0, 1, 1);
+add ("Shanell": 0, 3, 3);
+add ("Shanelle": 0, 2, 2);
+add ("Shani": 0, 3, 3);
+add ("Shanice": 0, 2, 2);
+add ("Shanika": 0, 3, 3);
+add ("Shaniqua": 0, 1, 1);
+add ("Shanita": 0, 3, 3);
+add ("Shanna": 0, 21, 21);
+add ("Shannan": 0, 3, 3);
+add ("Shannon": 40, 0, 40);
+add ("Shanon": 0, 5, 5);
+add ("Shanta": 0, 4, 4);
+add ("Shantae": 0, 1, 1);
+add ("Shantay": 0, 1, 1);
+add ("Shante": 0, 4, 4);
+add ("Shantel": 0, 5, 5);
+add ("Shantell": 0, 3, 3);
+add ("Shantelle": 0, 1, 1);
+add ("Shanti": 0, 1, 1);
+add ("Shaquana": 0, 1, 1);
+add ("Shaquita": 0, 1, 1);
+add ("Shara": 0, 4, 4);
+add ("Sharan": 0, 1, 1);
+add ("Sharda": 0, 1, 1);
+add ("Sharee": 0, 3, 3);
+add ("Sharell": 0, 1, 1);
+add ("Sharen": 0, 3, 3);
+add ("Shari": 0, 28, 28);
+add ("Sharice": 0, 1, 1);
+add ("Sharie": 0, 1, 1);
+add ("Sharika": 0, 1, 1);
+add ("Sharilyn": 0, 1, 1);
+add ("Sharita": 0, 2, 2);
+add ("Sharla": 0, 4, 4);
+add ("Sharleen": 0, 2, 2);
+add ("Sharlene": 0, 8, 8);
+add ("Sharmaine": 0, 1, 1);
+add ("Sharolyn": 0, 1, 1);
+add ("Sharon": 0, 522, 522);
+add ("Sharonda": 0, 5, 5);
+add ("Sharri": 0, 1, 1);
+add ("Sharron": 0, 14, 14);
+add ("Sharyl": 0, 2, 2);
+add ("Sharyn": 0, 5, 5);
+add ("Shasta": 0, 3, 3);
+add ("Shaun": 39, 0, 39);
+add ("Shauna": 0, 17, 17);
+add ("Shaunda": 0, 1, 1);
+add ("Shaunna": 0, 2, 2);
+add ("Shaunta": 0, 1, 1);
+add ("Shaunte": 0, 1, 1);
+add ("Shavon": 0, 2, 2);
+add ("Shavonda": 0, 1, 1);
+add ("Shavonne": 0, 2, 2);
+add ("Shawana": 0, 2, 2);
+add ("Shawanda": 0, 3, 3);
+add ("Shawanna": 0, 1, 1);
+add ("Shawn": 200, 0, 200);
+add ("Shawna": 0, 27, 27);
+add ("Shawnda": 0, 2, 2);
+add ("Shawnee": 0, 2, 2);
+add ("Shawnna": 0, 2, 2);
+add ("Shawnta": 0, 1, 1);
+add ("Shay": 0, 3, 3);
+add ("Shayla": 0, 6, 6);
+add ("Shayna": 0, 4, 4);
+add ("Shayne": 4, 0, 4);
+add ("Shea": 0, 2, 2);
+add ("Sheba": 0, 1, 1);
+add ("Sheena": 0, 17, 17);
+add ("Sheila": 0, 175, 175);
+add ("Sheilah": 0, 2, 2);
+add ("Shela": 0, 2, 2);
+add ("Shelba": 0, 2, 2);
+add ("Shelby": 11, 0, 11);
+add ("Sheldon": 23, 0, 23);
+add ("Shelia": 0, 43, 43);
+add ("Shella": 0, 1, 1);
+add ("Shelley": 0, 49, 49);
+add ("Shelli": 0, 5, 5);
+add ("Shellie": 0, 7, 7);
+add ("Shelly": 0, 62, 62);
+add ("Shelton": 8, 0, 8);
+add ("Shemeka": 0, 1, 1);
+add ("Shemika": 0, 2, 2);
+add ("Shena": 0, 3, 3);
+add ("Shenika": 0, 1, 1);
+add ("Shenita": 0, 2, 2);
+add ("Shenna": 0, 1, 1);
+add ("Shera": 0, 1, 1);
+add ("Sheree": 0, 10, 10);
+add ("Sherell": 0, 1, 1);
+add ("Sheri": 0, 42, 42);
+add ("Sherice": 0, 1, 1);
+add ("Sheridan": 0, 1, 1);
+add ("Sherie": 0, 4, 4);
+add ("Sherika": 0, 1, 1);
+add ("Sherill": 0, 1, 1);
+add ("Sherilyn": 0, 3, 3);
+add ("Sherise": 0, 1, 1);
+add ("Sherita": 0, 4, 4);
+add ("Sherlene": 0, 1, 1);
+add ("Sherley": 0, 2, 2);
+add ("Sherly": 0, 2, 2);
+add ("Sherlyn": 0, 2, 2);
+add ("Sherman": 28, 0, 28);
+add ("Sheron": 0, 3, 3);
+add ("Sherrell": 0, 2, 2);
+add ("Sherri": 0, 62, 62);
+add ("Sherrie": 0, 26, 26);
+add ("Sherril": 0, 1, 1);
+add ("Sherrill": 0, 4, 4);
+add ("Sherron": 0, 3, 3);
+add ("Sherry": 0, 178, 178);
+add ("Sherryl": 0, 3, 3);
+add ("Sherwood": 4, 0, 4);
+add ("Shery": 0, 2, 2);
+add ("Sheryl": 0, 59, 59);
+add ("Sheryll": 0, 1, 1);
+add ("Shiela": 0, 7, 7);
+add ("Shila": 0, 1, 1);
+add ("Shiloh": 0, 1, 1);
+add ("Shin": 0, 1, 1);
+add ("Shira": 0, 2, 2);
+add ("Shirely": 0, 1, 1);
+add ("Shirl": 0, 1, 1);
+add ("Shirlee": 0, 3, 3);
+add ("Shirleen": 0, 2, 2);
+add ("Shirlene": 0, 4, 4);
+add ("Shirley": 5, 0, 5);
+add ("Shirly": 0, 3, 3);
+add ("Shizue": 0, 1, 1);
+add ("Shizuko": 0, 1, 1);
+add ("Shon": 4, 0, 4);
+add ("Shona": 0, 2, 2);
+add ("Shonda": 0, 7, 7);
+add ("Shondra": 0, 1, 1);
+add ("Shonna": 0, 2, 2);
+add ("Shonta": 0, 1, 1);
+add ("Shoshana": 0, 2, 2);
+add ("Shu": 0, 2, 2);
+add ("Shyla": 0, 1, 1);
+add ("Sibyl": 0, 3, 3);
+add ("Sid": 4, 0, 4);
+add ("Sidney": 52, 0, 52);
+add ("Sierra": 0, 8, 8);
+add ("Signe": 0, 2, 2);
+add ("Sigrid": 0, 3, 3);
+add ("Silas": 9, 0, 9);
+add ("Silva": 0, 2, 2);
+add ("Silvana": 0, 2, 2);
+add ("Silvia": 0, 29, 29);
+add ("Sima": 0, 1, 1);
+add ("Simon": 26, 0, 26);
+add ("Simona": 0, 3, 3);
+add ("Simone": 0, 15, 15);
+add ("Simonne": 0, 1, 1);
+add ("Sina": 0, 1, 1);
+add ("Sindy": 0, 2, 2);
+add ("Siobhan": 0, 3, 3);
+add ("Sirena": 0, 1, 1);
+add ("Siu": 0, 1, 1);
+add ("Sixta": 0, 1, 1);
+add ("Skye": 0, 2, 2);
+add ("Slyvia": 0, 2, 2);
+add ("So": 0, 2, 2);
+add ("Socorro": 0, 16, 16);
+add ("Sofia": 0, 13, 13);
+add ("Soila": 0, 1, 1);
+add ("Sol": 5, 0, 5);
+add ("Solange": 0, 2, 2);
+add ("Soledad": 0, 7, 7);
+add ("Solomon": 13, 0, 13);
+add ("Somer": 0, 1, 1);
+add ("Sommer": 0, 2, 2);
+add ("Son": 12, 0, 12);
+add ("Sona": 0, 1, 1);
+add ("Sondra": 0, 18, 18);
+add ("Song": 0, 2, 2);
+add ("Sonia": 0, 68, 68);
+add ("Sonja": 0, 29, 29);
+add ("Sonny": 8, 0, 8);
+add ("Sonya": 0, 51, 51);
+add ("Soo": 0, 2, 2);
+add ("Sook": 0, 2, 2);
+add ("Soon": 0, 4, 4);
+add ("Sophia": 0, 32, 32);
+add ("Sophie": 0, 29, 29);
+add ("Soraya": 0, 2, 2);
+add ("Sparkle": 0, 1, 1);
+add ("Spencer": 30, 0, 30);
+add ("Spring": 0, 2, 2);
+add ("Stacee": 0, 1, 1);
+add ("Stacey": 11, 0, 11);
+add ("Staci": 0, 17, 17);
+add ("Stacia": 0, 5, 5);
+add ("Stacie": 0, 25, 25);
+add ("Stacy": 17, 0, 17);
+add ("Stan": 15, 0, 15);
+add ("Stanford": 5, 0, 5);
+add ("Stanley": 186, 0, 186);
+add ("Stanton": 4, 0, 4);
+add ("Star": 0, 3, 3);
+add ("Starla": 0, 4, 4);
+add ("Starr": 0, 4, 4);
+add ("Stasia": 0, 1, 1);
+add ("Stefan": 9, 0, 9);
+add ("Stefani": 0, 3, 3);
+add ("Stefania": 0, 2, 2);
+add ("Stefanie": 0, 21, 21);
+add ("Stefany": 0, 1, 1);
+add ("Steffanie": 0, 2, 2);
+add ("Stella": 0, 85, 85);
+add ("Stepanie": 0, 1, 1);
+add ("Stephaine": 0, 3, 3);
+add ("Stephan": 18, 0, 18);
+add ("Stephane": 0, 2, 2);
+add ("Stephani": 0, 3, 3);
+add ("Stephania": 0, 1, 1);
+add ("Stephanie": 0, 400, 400);
+add ("Stephany": 0, 5, 5);
+add ("Stephen": 540, 0, 540);
+add ("Stephenie": 0, 5, 5);
+add ("Stephine": 0, 3, 3);
+add ("Stephnie": 0, 1, 1);
+add ("Sterling": 16, 0, 16);
+add ("Steve": 246, 0, 246);
+add ("Steven": 780, 0, 780);
+add ("Stevie": 7, 0, 7);
+add ("Stewart": 22, 0, 22);
+add ("Stormy": 0, 3, 3);
+add ("Stuart": 44, 0, 44);
+add ("Su": 0, 3, 3);
+add ("Suanne": 0, 1, 1);
+add ("Sudie": 0, 2, 2);
+add ("Sue": 0, 111, 111);
+add ("Sueann": 0, 2, 2);
+add ("Suellen": 0, 2, 2);
+add ("Suk": 0, 2, 2);
+add ("Sulema": 0, 1, 1);
+add ("Sumiko": 0, 1, 1);
+add ("Summer": 0, 17, 17);
+add ("Sun": 0, 7, 7);
+add ("Sunday": 0, 1, 1);
+add ("Sung": 5, 0, 5);
+add ("Sunni": 0, 1, 1);
+add ("Sunny": 0, 5, 5);
+add ("Sunshine": 0, 3, 3);
+add ("Susan": 0, 794, 794);
+add ("Susana": 0, 19, 19);
+add ("Susann": 0, 3, 3);
+add ("Susanna": 0, 10, 10);
+add ("Susannah": 0, 4, 4);
+add ("Susanne": 0, 20, 20);
+add ("Susie": 0, 49, 49);
+add ("Susy": 0, 1, 1);
+add ("Suzan": 0, 6, 6);
+add ("Suzann": 0, 2, 2);
+add ("Suzanna": 0, 5, 5);
+add ("Suzanne": 0, 145, 145);
+add ("Suzette": 0, 11, 11);
+add ("Suzi": 0, 1, 1);
+add ("Suzie": 0, 3, 3);
+add ("Suzy": 0, 3, 3);
+add ("Svetlana": 0, 1, 1);
+add ("Sybil": 0, 16, 16);
+add ("Syble": 0, 3, 3);
+add ("Sydney": 7, 0, 7);
+add ("Sylvester": 28, 0, 28);
+add ("Sylvia": 0, 177, 177);
+add ("Sylvie": 0, 1, 1);
+add ("Synthia": 0, 2, 2);
+add ("Syreeta": 0, 2, 2);
+add ("Ta": 0, 1, 1);
+add ("Tabatha": 0, 13, 13);
+add ("Tabetha": 0, 2, 2);
+add ("Tabitha": 0, 27, 27);
+add ("Tad": 5, 0, 5);
+add ("Tai": 0, 1, 1);
+add ("Taina": 0, 1, 1);
+add ("Taisha": 0, 1, 1);
+add ("Tajuana": 0, 1, 1);
+add ("Takako": 0, 1, 1);
+add ("Takisha": 0, 2, 2);
+add ("Talia": 0, 3, 3);
+add ("Talisha": 0, 2, 2);
+add ("Talitha": 0, 2, 2);
+add ("Tam": 0, 2, 2);
+add ("Tama": 0, 1, 1);
+add ("Tamala": 0, 2, 2);
+add ("Tamar": 0, 3, 3);
+add ("Tamara": 0, 92, 92);
+add ("Tamatha": 0, 3, 3);
+add ("Tambra": 0, 1, 1);
+add ("Tameika": 0, 2, 2);
+add ("Tameka": 0, 13, 13);
+add ("Tamekia": 0, 2, 2);
+add ("Tamela": 0, 6, 6);
+add ("Tamera": 0, 9, 9);
+add ("Tamesha": 0, 2, 2);
+add ("Tami": 0, 27, 27);
+add ("Tamica": 0, 2, 2);
+add ("Tamie": 0, 3, 3);
+add ("Tamika": 0, 22, 22);
+add ("Tamiko": 0, 3, 3);
+add ("Tamisha": 0, 1, 1);
+add ("Tammara": 0, 2, 2);
+add ("Tammera": 0, 1, 1);
+add ("Tammi": 0, 11, 11);
+add ("Tammie": 0, 26, 26);
+add ("Tammy": 0, 259, 259);
+add ("Tamra": 0, 9, 9);
+add ("Tana": 0, 6, 6);
+add ("Tandra": 0, 1, 1);
+add ("Tandy": 0, 1, 1);
+add ("Taneka": 0, 1, 1);
+add ("Tanesha": 0, 3, 3);
+add ("Tangela": 0, 3, 3);
+add ("Tania": 0, 13, 13);
+add ("Tanika": 0, 3, 3);
+add ("Tanisha": 0, 12, 12);
+add ("Tanja": 0, 2, 2);
+add ("Tanna": 0, 2, 2);
+add ("Tanner": 6, 0, 6);
+add ("Tanya": 0, 89, 89);
+add ("Tara": 0, 107, 107);
+add ("Tarah": 0, 2, 2);
+add ("Taren": 0, 1, 1);
+add ("Tari": 0, 1, 1);
+add ("Tarra": 0, 1, 1);
+add ("Tarsha": 0, 3, 3);
+add ("Taryn": 0, 7, 7);
+add ("Tasha": 0, 30, 30);
+add ("Tashia": 0, 2, 2);
+add ("Tashina": 0, 1, 1);
+add ("Tasia": 0, 1, 1);
+add ("Tatiana": 0, 5, 5);
+add ("Tatum": 0, 1, 1);
+add ("Tatyana": 0, 1, 1);
+add ("Taunya": 0, 1, 1);
+add ("Tawana": 0, 7, 7);
+add ("Tawanda": 0, 4, 4);
+add ("Tawanna": 0, 3, 3);
+add ("Tawna": 0, 1, 1);
+add ("Tawny": 0, 2, 2);
+add ("Tawnya": 0, 4, 4);
+add ("Taylor": 24, 0, 24);
+add ("Tayna": 0, 1, 1);
+add ("Ted": 64, 0, 64);
+add ("Teddy": 18, 0, 18);
+add ("Teena": 0, 4, 4);
+add ("Tegan": 0, 1, 1);
+add ("Teisha": 0, 1, 1);
+add ("Telma": 0, 1, 1);
+add ("Temeka": 0, 2, 2);
+add ("Temika": 0, 1, 1);
+add ("Tempie": 0, 1, 1);
+add ("Temple": 0, 1, 1);
+add ("Tena": 0, 5, 5);
+add ("Tenesha": 0, 1, 1);
+add ("Tenisha": 0, 3, 3);
+add ("Tennie": 0, 2, 2);
+add ("Tennille": 0, 2, 2);
+add ("Teodora": 0, 3, 3);
+add ("Teodoro": 5, 0, 5);
+add ("Teofila": 0, 1, 1);
+add ("Tequila": 0, 2, 2);
+add ("Tera": 0, 7, 7);
+add ("Tereasa": 0, 2, 2);
+add ("Terence": 22, 0, 22);
+add ("Teresa": 0, 336, 336);
+add ("Terese": 0, 4, 4);
+add ("Teresia": 0, 1, 1);
+add ("Teresita": 0, 7, 7);
+add ("Teressa": 0, 4, 4);
+add ("Teri": 0, 33, 33);
+add ("Terica": 0, 1, 1);
+add ("Terina": 0, 1, 1);
+add ("Terisa": 0, 1, 1);
+add ("Terra": 0, 8, 8);
+add ("Terrance": 48, 0, 48);
+add ("Terrell": 20, 0, 20);
+add ("Terrence": 47, 0, 47);
+add ("Terresa": 0, 2, 2);
+add ("Terri": 0, 105, 105);
+add ("Terrie": 0, 14, 14);
+add ("Terrilyn": 0, 1, 1);
+add ("Terry": 311, 0, 311);
+add ("Tesha": 0, 2, 2);
+add ("Tess": 0, 3, 3);
+add ("Tessa": 0, 10, 10);
+add ("Tessie": 0, 7, 7);
+add ("Thad": 7, 0, 7);
+add ("Thaddeus": 12, 0, 12);
+add ("Thalia": 0, 2, 2);
+add ("Thanh": 5, 0, 5);
+add ("Thao": 0, 2, 2);
+add ("Thea": 0, 5, 5);
+add ("Theda": 0, 5, 5);
+add ("Thelma": 0, 175, 175);
+add ("Theo": 5, 0, 5);
+add ("Theodora": 0, 7, 7);
+add ("Theodore": 123, 0, 123);
+add ("Theola": 0, 2, 2);
+add ("Theresa": 0, 271, 271);
+add ("Therese": 0, 22, 22);
+add ("Theresia": 0, 2, 2);
+add ("Theressa": 0, 1, 1);
+add ("Theron": 8, 0, 8);
+add ("Thersa": 0, 3, 3);
+add ("Thi": 0, 1, 1);
+add ("Thomas": 1380, 0, 1380);
+add ("Thomasena": 0, 1, 1);
+add ("Thomasina": 0, 3, 3);
+add ("Thomasine": 0, 2, 2);
+add ("Thora": 0, 1, 1);
+add ("Thresa": 0, 2, 2);
+add ("Thu": 0, 2, 2);
+add ("Thurman": 12, 0, 12);
+add ("Thuy": 0, 4, 4);
+add ("Tia": 0, 14, 14);
+add ("Tiana": 0, 5, 5);
+add ("Tianna": 0, 2, 2);
+add ("Tiara": 0, 6, 6);
+add ("Tien": 0, 1, 1);
+add ("Tiera": 0, 1, 1);
+add ("Tierra": 0, 4, 4);
+add ("Tiesha": 0, 2, 2);
+add ("Tifany": 0, 1, 1);
+add ("Tiffaney": 0, 1, 1);
+add ("Tiffani": 0, 6, 6);
+add ("Tiffanie": 0, 4, 4);
+add ("Tiffany": 0, 195, 195);
+add ("Tiffiny": 0, 3, 3);
+add ("Tijuana": 0, 1, 1);
+add ("Tilda": 0, 1, 1);
+add ("Tillie": 0, 7, 7);
+add ("Tim": 104, 0, 104);
+add ("Timika": 0, 1, 1);
+add ("Timmy": 19, 0, 19);
+add ("Timothy": 640, 0, 640);
+add ("Tina": 0, 220, 220);
+add ("Tinisha": 0, 1, 1);
+add ("Tiny": 0, 2, 2);
+add ("Tisa": 0, 1, 1);
+add ("Tish": 0, 1, 1);
+add ("Tisha": 0, 9, 9);
+add ("Titus": 4, 0, 4);
+add ("Tobi": 0, 1, 1);
+add ("Tobias": 5, 0, 5);
+add ("Tobie": 0, 1, 1);
+add ("Toby": 19, 0, 19);
+add ("Toccara": 0, 1, 1);
+add ("Tod": 5, 0, 5);
+add ("Todd": 213, 0, 213);
+add ("Toi": 0, 1, 1);
+add ("Tom": 117, 0, 117);
+add ("Tomas": 23, 0, 23);
+add ("Tomasa": 0, 6, 6);
+add ("Tomeka": 0, 4, 4);
+add ("Tomi": 0, 1, 1);
+add ("Tomika": 0, 2, 2);
+add ("Tomiko": 0, 1, 1);
+add ("Tommie": 20, 0, 20);
+add ("Tommy": 112, 0, 112);
+add ("Tommye": 0, 1, 1);
+add ("Tomoko": 0, 2, 2);
+add ("Tona": 0, 1, 1);
+add ("Tonda": 0, 2, 2);
+add ("Tonette": 0, 1, 1);
+add ("Toney": 4, 0, 4);
+add ("Toni": 0, 64, 64);
+add ("Tonia": 0, 18, 18);
+add ("Tonie": 0, 2, 2);
+add ("Tonisha": 0, 1, 1);
+add ("Tonita": 0, 1, 1);
+add ("Tonja": 0, 5, 5);
+add ("Tony": 190, 0, 190);
+add ("Tonya": 0, 102, 102);
+add ("Tora": 0, 1, 1);
+add ("Tori": 0, 8, 8);
+add ("Torie": 0, 1, 1);
+add ("Torri": 0, 1, 1);
+add ("Torrie": 0, 1, 1);
+add ("Tory": 5, 0, 5);
+add ("Tosha": 0, 5, 5);
+add ("Toshia": 0, 1, 1);
+add ("Toshiko": 0, 2, 2);
+add ("Tova": 0, 1, 1);
+add ("Towanda": 0, 2, 2);
+add ("Toya": 0, 4, 4);
+add ("Tracee": 0, 3, 3);
+add ("Tracey": 7, 0, 7);
+add ("Traci": 0, 38, 38);
+add ("Tracie": 0, 24, 24);
+add ("Tracy": 48, 0, 48);
+add ("Tran": 0, 1, 1);
+add ("Trang": 0, 2, 2);
+add ("Travis": 166, 0, 166);
+add ("Treasa": 0, 1, 1);
+add ("Treena": 0, 1, 1);
+add ("Trena": 0, 4, 4);
+add ("Trent": 18, 0, 18);
+add ("Trenton": 9, 0, 9);
+add ("Tresa": 0, 4, 4);
+add ("Tressa": 0, 4, 4);
+add ("Tressie": 0, 3, 3);
+add ("Treva": 0, 7, 7);
+add ("Trevor": 40, 0, 40);
+add ("Trey": 6, 0, 6);
+add ("Tricia": 0, 30, 30);
+add ("Trina": 0, 24, 24);
+add ("Trinh": 0, 1, 1);
+add ("Trinidad": 5, 0, 5);
+add ("Trinity": 0, 2, 2);
+add ("Trish": 0, 3, 3);
+add ("Trisha": 0, 24, 24);
+add ("Trista": 0, 5, 5);
+add ("Tristan": 8, 0, 8);
+add ("Troy": 138, 0, 138);
+add ("Trudi": 0, 2, 2);
+add ("Trudie": 0, 2, 2);
+add ("Trudy": 0, 21, 21);
+add ("Trula": 0, 2, 2);
+add ("Truman": 9, 0, 9);
+add ("Tu": 0, 1, 1);
+add ("Tuan": 4, 0, 4);
+add ("Tula": 0, 1, 1);
+add ("Tuyet": 0, 2, 2);
+add ("Twana": 0, 2, 2);
+add ("Twanda": 0, 1, 1);
+add ("Twanna": 0, 1, 1);
+add ("Twila": 0, 9, 9);
+add ("Twyla": 0, 5, 5);
+add ("Ty": 11, 0, 11);
+add ("Tyesha": 0, 2, 2);
+add ("Tyisha": 0, 1, 1);
+add ("Tyler": 89, 0, 89);
+add ("Tynisha": 0, 1, 1);
+add ("Tyra": 0, 5, 5);
+add ("Tyree": 5, 0, 5);
+add ("Tyrell": 5, 0, 5);
+add ("Tyron": 5, 0, 5);
+add ("Tyrone": 64, 0, 64);
+add ("Tyson": 14, 0, 14);
+add ("Ula": 0, 1, 1);
+add ("Ulrike": 0, 1, 1);
+add ("Ulysses": 10, 0, 10);
+add ("Un": 0, 1, 1);
+add ("Una": 0, 6, 6);
+add ("Ursula": 0, 18, 18);
+add ("Usha": 0, 2, 2);
+add ("Ute": 0, 1, 1);
+add ("Vada": 0, 6, 6);
+add ("Val": 4, 0, 4);
+add ("Valarie": 0, 14, 14);
+add ("Valda": 0, 2, 2);
+add ("Valencia": 0, 6, 6);
+add ("Valene": 0, 1, 1);
+add ("Valentin": 7, 0, 7);
+add ("Valentina": 0, 5, 5);
+add ("Valentine": 5, 0, 5);
+add ("Valeri": 0, 1, 1);
+add ("Valeria": 0, 11, 11);
+add ("Valerie": 0, 149, 149);
+add ("Valery": 0, 2, 2);
+add ("Vallie": 0, 2, 2);
+add ("Valorie": 0, 5, 5);
+add ("Valrie": 0, 1, 1);
+add ("Van": 19, 0, 19);
+add ("Vance": 14, 0, 14);
+add ("Vanda": 0, 2, 2);
+add ("Vanesa": 0, 2, 2);
+add ("Vanessa": 0, 111, 111);
+add ("Vanetta": 0, 1, 1);
+add ("Vania": 0, 1, 1);
+add ("Vanita": 0, 2, 2);
+add ("Vanna": 0, 1, 1);
+add ("Vannesa": 0, 1, 1);
+add ("Vannessa": 0, 2, 2);
+add ("Vashti": 0, 1, 1);
+add ("Vasiliki": 0, 1, 1);
+add ("Vaughn": 11, 0, 11);
+add ("Veda": 0, 7, 7);
+add ("Velda": 0, 5, 5);
+add ("Velia": 0, 3, 3);
+add ("Vella": 0, 2, 2);
+add ("Velma": 0, 66, 66);
+add ("Velva": 0, 3, 3);
+add ("Velvet": 0, 2, 2);
+add ("Vena": 0, 2, 2);
+add ("Venessa": 0, 5, 5);
+add ("Venetta": 0, 1, 1);
+add ("Venice": 0, 2, 2);
+add ("Venita": 0, 4, 4);
+add ("Vennie": 0, 1, 1);
+add ("Venus": 0, 6, 6);
+add ("Veola": 0, 2, 2);
+add ("Vera": 0, 98, 98);
+add ("Verda": 0, 7, 7);
+add ("Verdell": 0, 2, 2);
+add ("Verdie": 0, 2, 2);
+add ("Verena": 0, 2, 2);
+add ("Vergie": 0, 4, 4);
+add ("Verla": 0, 5, 5);
+add ("Verlene": 0, 2, 2);
+add ("Verlie": 0, 2, 2);
+add ("Verline": 0, 1, 1);
+add ("Vern": 10, 0, 10);
+add ("Verna": 0, 48, 48);
+add ("Vernell": 0, 6, 6);
+add ("Vernetta": 0, 2, 2);
+add ("Vernia": 0, 1, 1);
+add ("Vernice": 0, 7, 7);
+add ("Vernie": 0, 3, 3);
+add ("Vernita": 0, 3, 3);
+add ("Vernon": 97, 0, 97);
+add ("Verona": 0, 3, 3);
+add ("Veronica": 0, 142, 142);
+add ("Veronika": 0, 1, 1);
+add ("Veronique": 0, 1, 1);
+add ("Versie": 0, 2, 2);
+add ("Vertie": 0, 1, 1);
+add ("Vesta": 0, 6, 6);
+add ("Veta": 0, 2, 2);
+add ("Vi": 0, 1, 1);
+add ("Vicenta": 0, 3, 3);
+add ("Vicente": 17, 0, 17);
+add ("Vickey": 0, 4, 4);
+add ("Vicki": 0, 109, 109);
+add ("Vickie": 0, 82, 82);
+add ("Vicky": 0, 43, 43);
+add ("Victor": 222, 0, 222);
+add ("Victoria": 0, 180, 180);
+add ("Victorina": 0, 1, 1);
+add ("Vida": 0, 7, 7);
+add ("Viki": 0, 1, 1);
+add ("Vikki": 0, 5, 5);
+add ("Vilma": 0, 10, 10);
+add ("Vina": 0, 3, 3);
+add ("Vince": 10, 0, 10);
+add ("Vincent": 168, 0, 168);
+add ("Vincenza": 0, 2, 2);
+add ("Vincenzo": 4, 0, 4);
+add ("Vinita": 0, 1, 1);
+add ("Vinnie": 0, 2, 2);
+add ("Viola": 0, 86, 86);
+add ("Violet": 0, 65, 65);
+add ("Violeta": 0, 5, 5);
+add ("Violette": 0, 2, 2);
+add ("Virgen": 0, 1, 1);
+add ("Virgie": 0, 15, 15);
+add ("Virgil": 49, 0, 49);
+add ("Virgilio": 4, 0, 4);
+add ("Virgina": 0, 7, 7);
+add ("Virginia": 0, 430, 430);
+add ("Vita": 0, 3, 3);
+add ("Vito": 9, 0, 9);
+add ("Viva": 0, 3, 3);
+add ("Vivan": 0, 2, 2);
+add ("Vivian": 0, 118, 118);
+add ("Viviana": 0, 5, 5);
+add ("Vivien": 0, 2, 2);
+add ("Vivienne": 0, 2, 2);
+add ("Von": 4, 0, 4);
+add ("Voncile": 0, 1, 1);
+add ("Vonda": 0, 8, 8);
+add ("Vonnie": 0, 3, 3);
+add ("Wade": 45, 0, 45);
+add ("Wai": 0, 2, 2);
+add ("Waldo": 5, 0, 5);
+add ("Walker": 5, 0, 5);
+add ("Wallace": 56, 0, 56);
+add ("Wally": 4, 0, 4);
+add ("Walter": 399, 0, 399);
+add ("Walton": 4, 0, 4);
+add ("Waltraud": 0, 2, 2);
+add ("Wan": 0, 1, 1);
+add ("Wanda": 0, 226, 226);
+add ("Waneta": 0, 1, 1);
+add ("Wanetta": 0, 1, 1);
+add ("Wanita": 0, 3, 3);
+add ("Ward": 10, 0, 10);
+add ("Warner": 4, 0, 4);
+add ("Warren": 110, 0, 110);
+add ("Wava": 0, 1, 1);
+add ("Waylon": 4, 0, 4);
+add ("Wayne": 249, 0, 249);
+add ("Wei": 0, 2, 2);
+add ("Weldon": 9, 0, 9);
+add ("Wen": 0, 1, 1);
+add ("Wendell": 42, 0, 42);
+add ("Wendi": 0, 10, 10);
+add ("Wendie": 0, 1, 1);
+add ("Wendolyn": 0, 1, 1);
+add ("Wendy": 0, 185, 185);
+add ("Wenona": 0, 1, 1);
+add ("Werner": 5, 0, 5);
+add ("Wes": 4, 0, 4);
+add ("Wesley": 104, 0, 104);
+add ("Weston": 6, 0, 6);
+add ("Whitley": 0, 1, 1);
+add ("Whitney": 5, 0, 5);
+add ("Wilber": 4, 0, 4);
+add ("Wilbert": 27, 0, 27);
+add ("Wilbur": 36, 0, 36);
+add ("Wilburn": 7, 0, 7);
+add ("Wilda": 0, 9, 9);
+add ("Wiley": 11, 0, 11);
+add ("Wilford": 8, 0, 8);
+add ("Wilfred": 23, 0, 23);
+add ("Wilfredo": 14, 0, 14);
+add ("Wilhelmina": 0, 7, 7);
+add ("Wilhemina": 0, 1, 1);
+add ("Will": 18, 0, 18);
+add ("Willa": 0, 16, 16);
+add ("Willard": 50, 0, 50);
+add ("Willena": 0, 1, 1);
+add ("Willene": 0, 3, 3);
+add ("Willetta": 0, 1, 1);
+add ("Willette": 0, 2, 2);
+add ("Willia": 0, 2, 2);
+add ("William": 2451, 0, 2451);
+add ("Williams": 13, 0, 13);
+add ("Willian": 4, 0, 4);
+add ("Willie": 302, 0, 302);
+add ("Williemae": 0, 1, 1);
+add ("Willis": 35, 0, 35);
+add ("Willodean": 0, 1, 1);
+add ("Willow": 0, 1, 1);
+add ("Willy": 5, 0, 5);
+add ("Wilma": 0, 99, 99);
+add ("Wilmer": 8, 0, 8);
+add ("Wilson": 28, 0, 28);
+add ("Wilton": 6, 0, 6);
+add ("Windy": 0, 4, 4);
+add ("Winford": 4, 0, 4);
+add ("Winfred": 9, 0, 9);
+add ("Winifred": 0, 27, 27);
+add ("Winnie": 0, 16, 16);
+add ("Winnifred": 0, 4, 4);
+add ("Winona": 0, 7, 7);
+add ("Winston": 19, 0, 19);
+add ("Winter": 0, 1, 1);
+add ("Wm": 33, 0, 33);
+add ("Wonda": 0, 2, 2);
+add ("Woodrow": 25, 0, 25);
+add ("Wyatt": 6, 0, 6);
+add ("Wynell": 0, 1, 1);
+add ("Wynona": 0, 3, 3);
+add ("Xavier": 13, 0, 13);
+add ("Xenia": 0, 1, 1);
+add ("Xiao": 0, 1, 1);
+add ("Xiomara": 0, 4, 4);
+add ("Xochitl": 0, 1, 1);
+add ("Xuan": 0, 1, 1);
+add ("Yadira": 0, 5, 5);
+add ("Yaeko": 0, 1, 1);
+add ("Yael": 0, 1, 1);
+add ("Yahaira": 0, 1, 1);
+add ("Yajaira": 0, 1, 1);
+add ("Yan": 0, 2, 2);
+add ("Yang": 0, 2, 2);
+add ("Yanira": 0, 2, 2);
+add ("Yasmin": 0, 4, 4);
+add ("Yasmine": 0, 1, 1);
+add ("Yasuko": 0, 1, 1);
+add ("Yee": 0, 2, 2);
+add ("Yelena": 0, 1, 1);
+add ("Yen": 0, 2, 2);
+add ("Yer": 0, 1, 1);
+add ("Yesenia": 0, 11, 11);
+add ("Yessenia": 0, 1, 1);
+add ("Yetta": 0, 3, 3);
+add ("Yevette": 0, 1, 1);
+add ("Yi": 0, 2, 2);
+add ("Ying": 0, 2, 2);
+add ("Yoko": 0, 3, 3);
+add ("Yolanda": 0, 115, 115);
+add ("Yolande": 0, 2, 2);
+add ("Yolando": 0, 2, 2);
+add ("Yolonda": 0, 4, 4);
+add ("Yon": 0, 1, 1);
+add ("Yong": 6, 0, 6);
+add ("Yoshie": 0, 1, 1);
+add ("Yoshiko": 0, 4, 4);
+add ("Youlanda": 0, 1, 1);
+add ("Young": 7, 0, 7);
+add ("Yu": 0, 3, 3);
+add ("Yuette": 0, 1, 1);
+add ("Yuk": 0, 1, 1);
+add ("Yuki": 0, 1, 1);
+add ("Yukiko": 0, 2, 2);
+add ("Yuko": 0, 2, 2);
+add ("Yulanda": 0, 1, 1);
+add ("Yun": 0, 2, 2);
+add ("Yung": 0, 1, 1);
+add ("Yuonne": 0, 1, 1);
+add ("Yuri": 0, 1, 1);
+add ("Yuriko": 0, 1, 1);
+add ("Yvette": 0, 50, 50);
+add ("Yvone": 0, 1, 1);
+add ("Yvonne": 0, 126, 126);
+add ("Zachariah": 5, 0, 5);
+add ("Zachary": 99, 0, 99);
+add ("Zachery": 8, 0, 8);
+add ("Zack": 4, 0, 4);
+add ("Zackary": 4, 0, 4);
+add ("Zada": 0, 1, 1);
+add ("Zaida": 0, 3, 3);
+add ("Zana": 0, 1, 1);
+add ("Zandra": 0, 3, 3);
+add ("Zane": 7, 0, 7);
+add ("Zelda": 0, 8, 8);
+add ("Zella": 0, 6, 6);
+add ("Zelma": 0, 13, 13);
+add ("Zena": 0, 3, 3);
+add ("Zenaida": 0, 6, 6);
+add ("Zenia": 0, 1, 1);
+add ("Zenobia": 0, 3, 3);
+add ("Zetta": 0, 1, 1);
+add ("Zina": 0, 3, 3);
+add ("Zita": 0, 2, 2);
+add ("Zoe": 0, 6, 6);
+add ("Zofia": 0, 2, 2);
+add ("Zoila": 0, 6, 6);
+add ("Zola": 0, 4, 4);
+add ("Zona": 0, 3, 3);
+add ("Zonia": 0, 1, 1);
+add ("Zora": 0, 3, 3);
+add ("Zoraida": 0, 4, 4);
+add ("Zula": 0, 3, 3);
+add ("Zulema": 0, 2, 2);
+add ("Zulma": 0, 3, 3);
+--
+-- Census-based last name frequency
+-- data weights
+-- ==== =======
+-- 1: Name 1: frequency
+--
+create last_names;
+set types = (varchar);
+set weights = 1;
+add ("Smith": 1006);
+add ("Johnson": 810);
+add ("Williams": 699);
+add ("Jones": 621);
+add ("Brown": 621);
+add ("Davis": 480);
+add ("Miller": 424);
+add ("Wilson": 339);
+add ("Moore": 312);
+add ("Taylor": 311);
+add ("Anderson": 311);
+add ("Thomas": 311);
+add ("Jackson": 310);
+add ("White": 279);
+add ("Harris": 275);
+add ("Martin": 273);
+add ("Thompson": 269);
+add ("Garcia": 254);
+add ("Martinez": 234);
+add ("Robinson": 233);
+add ("Clark": 231);
+add ("Rodriguez": 229);
+add ("Lewis": 226);
+add ("Lee": 220);
+add ("Walker": 219);
+add ("Hall": 200);
+add ("Allen": 199);
+add ("Young": 193);
+add ("Hernandez": 192);
+add ("King": 190);
+add ("Wright": 189);
+add ("Lopez": 187);
+add ("Hill": 187);
+add ("Scott": 185);
+add ("Green": 183);
+add ("Adams": 174);
+add ("Baker": 171);
+add ("Gonzalez": 166);
+add ("Nelson": 162);
+add ("Carter": 162);
+add ("Mitchell": 160);
+add ("Perez": 155);
+add ("Roberts": 153);
+add ("Turner": 152);
+add ("Phillips": 149);
+add ("Campbell": 149);
+add ("Parker": 146);
+add ("Evans": 141);
+add ("Edwards": 137);
+add ("Collins": 134);
+add ("Stewart": 133);
+add ("Sanchez": 130);
+add ("Morris": 125);
+add ("Rogers": 123);
+add ("Reed": 122);
+add ("Cook": 120);
+add ("Morgan": 118);
+add ("Bell": 117);
+add ("Murphy": 117);
+add ("Bailey": 115);
+add ("Rivera": 113);
+add ("Cooper": 113);
+add ("Richardson": 112);
+add ("Cox": 110);
+add ("Howard": 110);
+add ("Ward": 108);
+add ("Torres": 108);
+add ("Peterson": 107);
+add ("Gray": 106);
+add ("Ramirez": 105);
+add ("James": 105);
+add ("Watson": 103);
+add ("Brooks": 103);
+add ("Kelly": 102);
+add ("Sanders": 100);
+add ("Price": 99);
+add ("Bennett": 99);
+add ("Wood": 98);
+add ("Barnes": 97);
+add ("Ross": 96);
+add ("Henderson": 95);
+add ("Coleman": 95);
+add ("Jenkins": 95);
+add ("Perry": 94);
+add ("Powell": 93);
+add ("Long": 92);
+add ("Patterson": 92);
+add ("Hughes": 92);
+add ("Flores": 92);
+add ("Washington": 92);
+add ("Butler": 91);
+add ("Simmons": 91);
+add ("Foster": 91);
+add ("Gonzales": 87);
+add ("Bryant": 87);
+add ("Alexander": 85);
+add ("Russell": 85);
+add ("Griffin": 84);
+add ("Diaz": 84);
+add ("Hayes": 83);
+add ("Myers": 83);
+add ("Ford": 82);
+add ("Hamilton": 82);
+add ("Graham": 82);
+add ("Sullivan": 81);
+add ("Wallace": 81);
+add ("Woods": 80);
+add ("Cole": 80);
+add ("West": 80);
+add ("Jordan": 78);
+add ("Owens": 78);
+add ("Reynolds": 78);
+add ("Fisher": 77);
+add ("Ellis": 77);
+add ("Harrison": 76);
+add ("Gibson": 75);
+add ("Mcdonald": 75);
+add ("Cruz": 75);
+add ("Marshall": 75);
+add ("Ortiz": 75);
+add ("Gomez": 75);
+add ("Murray": 74);
+add ("Freeman": 74);
+add ("Wells": 73);
+add ("Webb": 72);
+add ("Simpson": 70);
+add ("Stevens": 70);
+add ("Tucker": 70);
+add ("Porter": 69);
+add ("Hunter": 69);
+add ("Hicks": 69);
+add ("Crawford": 68);
+add ("Henry": 68);
+add ("Boyd": 68);
+add ("Mason": 68);
+add ("Morales": 67);
+add ("Kennedy": 67);
+add ("Warren": 67);
+add ("Dixon": 66);
+add ("Ramos": 66);
+add ("Reyes": 66);
+add ("Burns": 65);
+add ("Gordon": 65);
+add ("Shaw": 65);
+add ("Holmes": 65);
+add ("Rice": 64);
+add ("Robertson": 64);
+add ("Hunt": 63);
+add ("Black": 63);
+add ("Daniels": 62);
+add ("Palmer": 62);
+add ("Mills": 61);
+add ("Nichols": 60);
+add ("Grant": 60);
+add ("Knight": 60);
+add ("Ferguson": 59);
+add ("Rose": 59);
+add ("Stone": 59);
+add ("Hawkins": 59);
+add ("Dunn": 58);
+add ("Perkins": 58);
+add ("Hudson": 58);
+add ("Spencer": 57);
+add ("Gardner": 57);
+add ("Stephens": 57);
+add ("Payne": 57);
+add ("Pierce": 56);
+add ("Berry": 56);
+add ("Matthews": 56);
+add ("Arnold": 56);
+add ("Wagner": 55);
+add ("Willis": 55);
+add ("Ray": 55);
+add ("Watkins": 55);
+add ("Olson": 55);
+add ("Carroll": 55);
+add ("Duncan": 55);
+add ("Snyder": 55);
+add ("Hart": 54);
+add ("Cunningham": 54);
+add ("Bradley": 54);
+add ("Lane": 54);
+add ("Andrews": 54);
+add ("Ruiz": 54);
+add ("Harper": 54);
+add ("Fox": 53);
+add ("Riley": 53);
+add ("Armstrong": 53);
+add ("Carpenter": 53);
+add ("Weaver": 53);
+add ("Greene": 53);
+add ("Lawrence": 52);
+add ("Elliott": 52);
+add ("Chavez": 52);
+add ("Sims": 52);
+add ("Austin": 52);
+add ("Peters": 52);
+add ("Kelley": 52);
+add ("Franklin": 51);
+add ("Lawson": 51);
+add ("Fields": 51);
+add ("Gutierrez": 51);
+add ("Ryan": 51);
+add ("Schmidt": 51);
+add ("Carr": 51);
+add ("Vasquez": 51);
+add ("Castillo": 51);
+add ("Wheeler": 51);
+add ("Chapman": 50);
+add ("Oliver": 50);
+add ("Montgomery": 49);
+add ("Richards": 49);
+add ("Williamson": 49);
+add ("Johnston": 49);
+add ("Banks": 48);
+add ("Meyer": 48);
+add ("Bishop": 48);
+add ("Mccoy": 48);
+add ("Howell": 48);
+add ("Alvarez": 48);
+add ("Morrison": 48);
+add ("Hansen": 47);
+add ("Fernandez": 47);
+add ("Garza": 47);
+add ("Harvey": 47);
+add ("Little": 46);
+add ("Burton": 46);
+add ("Stanley": 46);
+add ("Nguyen": 46);
+add ("George": 46);
+add ("Jacobs": 46);
+add ("Reid": 46);
+add ("Kim": 45);
+add ("Fuller": 45);
+add ("Lynch": 45);
+add ("Dean": 45);
+add ("Gilbert": 45);
+add ("Garrett": 45);
+add ("Romero": 45);
+add ("Welch": 44);
+add ("Larson": 44);
+add ("Frazier": 44);
+add ("Burke": 44);
+add ("Hanson": 43);
+add ("Day": 43);
+add ("Mendoza": 43);
+add ("Moreno": 43);
+add ("Bowman": 43);
+add ("Medina": 42);
+add ("Fowler": 42);
+add ("Brewer": 42);
+add ("Hoffman": 42);
+add ("Carlson": 42);
+add ("Silva": 42);
+add ("Pearson": 42);
+add ("Holland": 42);
+add ("Douglas": 41);
+add ("Fleming": 41);
+add ("Jensen": 41);
+add ("Vargas": 41);
+add ("Byrd": 41);
+add ("Davidson": 41);
+add ("Hopkins": 41);
+add ("May": 40);
+add ("Terry": 40);
+add ("Herrera": 40);
+add ("Wade": 40);
+add ("Soto": 40);
+add ("Walters": 40);
+add ("Curtis": 40);
+add ("Neal": 39);
+add ("Caldwell": 39);
+add ("Lowe": 39);
+add ("Jennings": 39);
+add ("Barnett": 39);
+add ("Graves": 39);
+add ("Jimenez": 39);
+add ("Horton": 39);
+add ("Shelton": 39);
+add ("Barrett": 39);
+add ("Obrien": 39);
+add ("Castro": 39);
+add ("Sutton": 38);
+add ("Gregory": 38);
+add ("Mckinney": 38);
+add ("Lucas": 38);
+add ("Miles": 38);
+add ("Craig": 38);
+add ("Rodriquez": 37);
+add ("Chambers": 37);
+add ("Holt": 37);
+add ("Lambert": 37);
+add ("Fletcher": 37);
+add ("Watts": 37);
+add ("Bates": 37);
+add ("Hale": 37);
+add ("Rhodes": 37);
+add ("Pena": 37);
+add ("Beck": 37);
+add ("Newman": 36);
+add ("Haynes": 36);
+add ("Mcdaniel": 36);
+add ("Mendez": 36);
+add ("Bush": 36);
+add ("Vaughn": 36);
+add ("Parks": 35);
+add ("Dawson": 35);
+add ("Santiago": 35);
+add ("Norris": 35);
+add ("Hardy": 35);
+add ("Love": 35);
+add ("Steele": 35);
+add ("Curry": 35);
+add ("Powers": 35);
+add ("Schultz": 35);
+add ("Barker": 35);
+add ("Guzman": 34);
+add ("Page": 34);
+add ("Munoz": 34);
+add ("Ball": 34);
+add ("Keller": 34);
+add ("Chandler": 34);
+add ("Weber": 34);
+add ("Leonard": 34);
+add ("Walsh": 33);
+add ("Lyons": 33);
+add ("Ramsey": 33);
+add ("Wolfe": 33);
+add ("Schneider": 33);
+add ("Mullins": 33);
+add ("Benson": 33);
+add ("Sharp": 33);
+add ("Bowen": 33);
+add ("Daniel": 33);
+add ("Barber": 32);
+add ("Cummings": 32);
+add ("Hines": 32);
+add ("Baldwin": 32);
+add ("Griffith": 32);
+add ("Valdez": 32);
+add ("Hubbard": 32);
+add ("Salazar": 32);
+add ("Reeves": 32);
+add ("Warner": 31);
+add ("Stevenson": 31);
+add ("Burgess": 31);
+add ("Santos": 31);
+add ("Tate": 31);
+add ("Cross": 31);
+add ("Garner": 31);
+add ("Mann": 31);
+add ("Mack": 31);
+add ("Moss": 31);
+add ("Thornton": 31);
+add ("Dennis": 31);
+add ("Mcgee": 31);
+add ("Farmer": 30);
+add ("Delgado": 30);
+add ("Aguilar": 30);
+add ("Vega": 30);
+add ("Glover": 30);
+add ("Manning": 30);
+add ("Cohen": 30);
+add ("Harmon": 30);
+add ("Rodgers": 30);
+add ("Robbins": 30);
+add ("Newton": 30);
+add ("Todd": 30);
+add ("Blair": 30);
+add ("Higgins": 30);
+add ("Ingram": 30);
+add ("Reese": 30);
+add ("Cannon": 30);
+add ("Strickland": 30);
+add ("Townsend": 30);
+add ("Potter": 30);
+add ("Goodwin": 30);
+add ("Walton": 30);
+add ("Rowe": 29);
+add ("Hampton": 29);
+add ("Ortega": 29);
+add ("Patton": 29);
+add ("Swanson": 29);
+add ("Joseph": 29);
+add ("Francis": 29);
+add ("Goodman": 29);
+add ("Maldonado": 29);
+add ("Yates": 29);
+add ("Becker": 29);
+add ("Erickson": 29);
+add ("Hodges": 29);
+add ("Rios": 29);
+add ("Conner": 29);
+add ("Adkins": 29);
+add ("Webster": 28);
+add ("Norman": 28);
+add ("Malone": 28);
+add ("Hammond": 28);
+add ("Flowers": 28);
+add ("Cobb": 28);
+add ("Moody": 28);
+add ("Quinn": 28);
+add ("Blake": 28);
+add ("Maxwell": 28);
+add ("Pope": 28);
+add ("Floyd": 27);
+add ("Osborne": 27);
+add ("Paul": 27);
+add ("Mccarthy": 27);
+add ("Guerrero": 27);
+add ("Lindsey": 27);
+add ("Estrada": 27);
+add ("Sandoval": 27);
+add ("Gibbs": 27);
+add ("Tyler": 27);
+add ("Gross": 27);
+add ("Fitzgerald": 27);
+add ("Stokes": 27);
+add ("Doyle": 27);
+add ("Sherman": 27);
+add ("Saunders": 27);
+add ("Wise": 27);
+add ("Colon": 27);
+add ("Gill": 27);
+add ("Alvarado": 27);
+add ("Greer": 26);
+add ("Padilla": 26);
+add ("Simon": 26);
+add ("Waters": 26);
+add ("Nunez": 26);
+add ("Ballard": 26);
+add ("Schwartz": 26);
+add ("Mcbride": 26);
+add ("Houston": 26);
+add ("Christensen": 26);
+add ("Klein": 26);
+add ("Pratt": 26);
+add ("Briggs": 26);
+add ("Parsons": 26);
+add ("Mclaughlin": 26);
+add ("Zimmerman": 26);
+add ("French": 26);
+add ("Buchanan": 26);
+add ("Moran": 26);
+add ("Copeland": 25);
+add ("Roy": 25);
+add ("Pittman": 25);
+add ("Brady": 25);
+add ("Mccormick": 25);
+add ("Holloway": 25);
+add ("Brock": 25);
+add ("Poole": 25);
+add ("Frank": 25);
+add ("Logan": 25);
+add ("Owen": 25);
+add ("Bass": 25);
+add ("Marsh": 25);
+add ("Drake": 25);
+add ("Wong": 25);
+add ("Jefferson": 25);
+add ("Park": 25);
+add ("Morton": 25);
+add ("Abbott": 25);
+add ("Sparks": 25);
+add ("Patrick": 24);
+add ("Norton": 24);
+add ("Huff": 24);
+add ("Clayton": 24);
+add ("Massey": 24);
+add ("Lloyd": 24);
+add ("Figueroa": 24);
+add ("Carson": 24);
+add ("Bowers": 24);
+add ("Roberson": 24);
+add ("Barton": 24);
+add ("Tran": 24);
+add ("Lamb": 24);
+add ("Harrington": 24);
+add ("Casey": 24);
+add ("Boone": 24);
+add ("Cortez": 24);
+add ("Clarke": 24);
+add ("Mathis": 24);
+add ("Singleton": 24);
+add ("Wilkins": 24);
+add ("Cain": 24);
+add ("Bryan": 24);
+add ("Underwood": 24);
+add ("Hogan": 24);
+add ("Mckenzie": 23);
+add ("Collier": 23);
+add ("Luna": 23);
+add ("Phelps": 23);
+add ("Mcguire": 23);
+add ("Allison": 23);
+add ("Bridges": 23);
+add ("Wilkerson": 23);
+add ("Nash": 23);
+add ("Summers": 23);
+add ("Atkins": 23);
+add ("Wilcox": 23);
+add ("Pitts": 23);
+add ("Conley": 23);
+add ("Marquez": 23);
+add ("Burnett": 23);
+add ("Richard": 23);
+add ("Cochran": 23);
+add ("Chase": 23);
+add ("Davenport": 23);
+add ("Hood": 23);
+add ("Gates": 23);
+add ("Clay": 23);
+add ("Ayala": 23);
+add ("Sawyer": 23);
+add ("Roman": 23);
+add ("Vazquez": 23);
+add ("Dickerson": 23);
+add ("Hodge": 22);
+add ("Acosta": 22);
+add ("Flynn": 22);
+add ("Espinoza": 22);
+add ("Nicholson": 22);
+add ("Monroe": 22);
+add ("Wolf": 22);
+add ("Morrow": 22);
+add ("Kirk": 22);
+add ("Randall": 22);
+add ("Anthony": 22);
+add ("Whitaker": 22);
+add ("Oconnor": 22);
+add ("Skinner": 22);
+add ("Ware": 22);
+add ("Molina": 22);
+add ("Kirby": 22);
+add ("Huffman": 22);
+add ("Bradford": 22);
+add ("Charles": 22);
+add ("Gilmore": 22);
+add ("Dominguez": 22);
+add ("Oneal": 22);
+add ("Bruce": 22);
+add ("Lang": 21);
+add ("Combs": 21);
+add ("Kramer": 21);
+add ("Heath": 21);
+add ("Hancock": 21);
+add ("Gallagher": 21);
+add ("Gaines": 21);
+add ("Shaffer": 21);
+add ("Short": 21);
+add ("Wiggins": 21);
+add ("Mathews": 21);
+add ("Mcclain": 21);
+add ("Fischer": 21);
+add ("Wall": 21);
+add ("Small": 21);
+add ("Melton": 21);
+add ("Hensley": 21);
+add ("Bond": 21);
+add ("Dyer": 21);
+add ("Cameron": 21);
+add ("Grimes": 21);
+add ("Contreras": 21);
+add ("Christian": 21);
+add ("Wyatt": 21);
+add ("Baxter": 21);
+add ("Snow": 21);
+add ("Mosley": 21);
+add ("Shepherd": 21);
+add ("Larsen": 21);
+add ("Hoover": 21);
+add ("Beasley": 20);
+add ("Glenn": 20);
+add ("Petersen": 20);
+add ("Whitehead": 20);
+add ("Meyers": 20);
+add ("Keith": 20);
+add ("Garrison": 20);
+add ("Vincent": 20);
+add ("Shields": 20);
+add ("Horn": 20);
+add ("Savage": 20);
+add ("Olsen": 20);
+add ("Schroeder": 20);
+add ("Hartman": 20);
+add ("Woodard": 20);
+add ("Mueller": 20);
+add ("Kemp": 20);
+add ("Deleon": 20);
+add ("Booth": 20);
+add ("Patel": 20);
+add ("Calhoun": 20);
+add ("Wiley": 20);
+add ("Eaton": 20);
+add ("Cline": 20);
+add ("Navarro": 20);
+add ("Harrell": 20);
+add ("Lester": 20);
+add ("Humphrey": 20);
+add ("Parrish": 20);
+add ("Duran": 20);
+add ("Hutchinson": 20);
+add ("Hess": 20);
+add ("Dorsey": 20);
+add ("Bullock": 20);
+add ("Robles": 20);
+add ("Beard": 19);
+add ("Dalton": 19);
+add ("Avila": 19);
+add ("Vance": 19);
+add ("Rich": 19);
+add ("Blackwell": 19);
+add ("York": 19);
+add ("Johns": 19);
+add ("Blankenship": 19);
+add ("Trevino": 19);
+add ("Salinas": 19);
+add ("Campos": 19);
+add ("Pruitt": 19);
+add ("Moses": 19);
+add ("Callahan": 19);
+add ("Golden": 19);
+add ("Montoya": 19);
+add ("Hardin": 19);
+add ("Guerra": 19);
+add ("Mcdowell": 19);
+add ("Carey": 19);
+add ("Stafford": 19);
+add ("Gallegos": 19);
+add ("Henson": 19);
+add ("Wilkinson": 19);
+add ("Booker": 19);
+add ("Merritt": 19);
+add ("Miranda": 19);
+add ("Atkinson": 19);
+add ("Orr": 19);
+add ("Decker": 19);
+add ("Hobbs": 19);
+add ("Preston": 19);
+add ("Tanner": 19);
+add ("Knox": 19);
+add ("Pacheco": 19);
+add ("Stephenson": 18);
+add ("Glass": 18);
+add ("Rojas": 18);
+add ("Serrano": 18);
+add ("Marks": 18);
+add ("Hickman": 18);
+add ("English": 18);
+add ("Sweeney": 18);
+add ("Strong": 18);
+add ("Prince": 18);
+add ("Mcclure": 18);
+add ("Conway": 18);
+add ("Walter": 18);
+add ("Roth": 18);
+add ("Maynard": 18);
+add ("Farrell": 18);
+add ("Lowery": 18);
+add ("Hurst": 18);
+add ("Nixon": 18);
+add ("Weiss": 18);
+add ("Trujillo": 18);
+add ("Ellison": 18);
+add ("Sloan": 18);
+add ("Juarez": 18);
+add ("Winters": 18);
+add ("Mclean": 18);
+add ("Randolph": 18);
+add ("Leon": 18);
+add ("Boyer": 18);
+add ("Villarreal": 18);
+add ("Mccall": 18);
+add ("Gentry": 18);
+add ("Carrillo": 17);
+add ("Kent": 17);
+add ("Ayers": 17);
+add ("Lara": 17);
+add ("Shannon": 17);
+add ("Sexton": 17);
+add ("Pace": 17);
+add ("Hull": 17);
+add ("Leblanc": 17);
+add ("Browning": 17);
+add ("Velasquez": 17);
+add ("Leach": 17);
+add ("Chang": 17);
+add ("House": 17);
+add ("Sellers": 17);
+add ("Herring": 17);
+add ("Noble": 17);
+add ("Foley": 17);
+add ("Bartlett": 17);
+add ("Mercado": 17);
+add ("Landry": 17);
+add ("Durham": 17);
+add ("Walls": 17);
+add ("Barr": 17);
+add ("Mckee": 17);
+add ("Bauer": 17);
+add ("Rivers": 17);
+add ("Everett": 17);
+add ("Bradshaw": 17);
+add ("Pugh": 17);
+add ("Velez": 17);
+add ("Rush": 17);
+add ("Estes": 17);
+add ("Dodson": 17);
+add ("Morse": 17);
+add ("Sheppard": 17);
+add ("Weeks": 17);
+add ("Camacho": 17);
+add ("Bean": 17);
+add ("Barron": 17);
+add ("Livingston": 17);
+add ("Middleton": 16);
+add ("Spears": 16);
+add ("Branch": 16);
+add ("Blevins": 16);
+add ("Chen": 16);
+add ("Kerr": 16);
+add ("Mcconnell": 16);
+add ("Hatfield": 16);
+add ("Harding": 16);
+add ("Ashley": 16);
+add ("Solis": 16);
+add ("Herman": 16);
+add ("Frost": 16);
+add ("Giles": 16);
+add ("Blackburn": 16);
+add ("William": 16);
+add ("Pennington": 16);
+add ("Woodward": 16);
+add ("Finley": 16);
+add ("Mcintosh": 16);
+add ("Koch": 16);
+add ("Best": 16);
+add ("Solomon": 16);
+add ("Mccullough": 16);
+add ("Dudley": 16);
+add ("Nolan": 16);
+add ("Blanchard": 16);
+add ("Rivas": 16);
+add ("Brennan": 16);
+add ("Mejia": 16);
+add ("Kane": 16);
+add ("Benton": 16);
+add ("Joyce": 16);
+add ("Buckley": 16);
+add ("Haley": 16);
+add ("Valentine": 16);
+add ("Maddox": 16);
+add ("Russo": 16);
+add ("Mcknight": 16);
+add ("Buck": 16);
+add ("Moon": 16);
+add ("Mcmillan": 16);
+add ("Crosby": 16);
+add ("Berg": 16);
+add ("Dotson": 16);
+add ("Mays": 16);
+add ("Roach": 16);
+add ("Church": 16);
+add ("Chan": 16);
+add ("Richmond": 16);
+add ("Meadows": 16);
+add ("Faulkner": 16);
+add ("Oneill": 16);
+add ("Knapp": 16);
+add ("Kline": 15);
+add ("Barry": 15);
+add ("Ochoa": 15);
+add ("Jacobson": 15);
+add ("Gay": 15);
+add ("Avery": 15);
+add ("Hendricks": 15);
+add ("Horne": 15);
+add ("Shepard": 15);
+add ("Hebert": 15);
+add ("Cherry": 15);
+add ("Cardenas": 15);
+add ("Mcintyre": 15);
+add ("Whitney": 15);
+add ("Waller": 15);
+add ("Holman": 15);
+add ("Donaldson": 15);
+add ("Cantu": 15);
+add ("Terrell": 15);
+add ("Morin": 15);
+add ("Gillespie": 15);
+add ("Fuentes": 15);
+add ("Tillman": 15);
+add ("Sanford": 15);
+add ("Bentley": 15);
+add ("Peck": 15);
+add ("Key": 15);
+add ("Salas": 15);
+add ("Rollins": 15);
+add ("Gamble": 15);
+add ("Dickson": 15);
+add ("Battle": 15);
+add ("Santana": 15);
+add ("Cabrera": 15);
+add ("Cervantes": 15);
+add ("Howe": 15);
+add ("Hinton": 15);
+add ("Hurley": 15);
+add ("Spence": 15);
+add ("Zamora": 15);
+add ("Yang": 15);
+add ("Mcneil": 15);
+add ("Suarez": 15);
+add ("Case": 15);
+add ("Petty": 15);
+add ("Gould": 15);
+add ("Mcfarland": 15);
+add ("Sampson": 15);
+add ("Carver": 15);
+add ("Bray": 15);
+add ("Rosario": 15);
+add ("Macdonald": 15);
+add ("Stout": 15);
+add ("Hester": 15);
+add ("Melendez": 15);
+add ("Dillon": 15);
+add ("Farley": 15);
+add ("Hopper": 15);
+add ("Galloway": 15);
+add ("Potts": 15);
+add ("Bernard": 15);
+add ("Joyner": 14);
+add ("Stein": 14);
+add ("Aguirre": 14);
+add ("Osborn": 14);
+add ("Mercer": 14);
+add ("Bender": 14);
+add ("Franco": 14);
+add ("Rowland": 14);
+add ("Sykes": 14);
+add ("Benjamin": 14);
+add ("Travis": 14);
+add ("Pickett": 14);
+add ("Crane": 14);
+add ("Sears": 14);
+add ("Mayo": 14);
+add ("Dunlap": 14);
+add ("Hayden": 14);
+add ("Wilder": 14);
+add ("Mckay": 14);
+add ("Coffey": 14);
+add ("Mccarty": 14);
+add ("Ewing": 14);
+add ("Cooley": 14);
+add ("Vaughan": 14);
+add ("Bonner": 14);
+add ("Cotton": 14);
+add ("Holder": 14);
+add ("Stark": 14);
+add ("Ferrell": 14);
+add ("Cantrell": 14);
+add ("Fulton": 14);
+add ("Lynn": 14);
+add ("Lott": 14);
+add ("Calderon": 14);
+add ("Rosa": 14);
+add ("Pollard": 14);
+add ("Hooper": 14);
+add ("Burch": 14);
+add ("Mullen": 14);
+add ("Fry": 14);
+add ("Riddle": 14);
+add ("Levy": 14);
+add ("David": 14);
+add ("Duke": 14);
+add ("Odonnell": 14);
+add ("Guy": 14);
+add ("Michael": 14);
+add ("Britt": 14);
+add ("Frederick": 14);
+add ("Daugherty": 14);
+add ("Berger": 14);
+add ("Dillard": 14);
+add ("Alston": 14);
+add ("Jarvis": 14);
+add ("Frye": 14);
+add ("Riggs": 14);
+add ("Chaney": 14);
+add ("Odom": 13);
+add ("Duffy": 13);
+add ("Fitzpatrick": 13);
+add ("Valenzuela": 13);
+add ("Merrill": 13);
+add ("Mayer": 13);
+add ("Alford": 13);
+add ("Mcpherson": 13);
+add ("Acevedo": 13);
+add ("Donovan": 13);
+add ("Barrera": 13);
+add ("Albert": 13);
+add ("Cote": 13);
+add ("Reilly": 13);
+add ("Compton": 13);
+add ("Raymond": 13);
+add ("Mooney": 13);
+add ("Mcgowan": 13);
+add ("Craft": 13);
+add ("Cleveland": 13);
+add ("Clemons": 13);
+add ("Wynn": 13);
+add ("Nielsen": 13);
+add ("Baird": 13);
+add ("Stanton": 13);
+add ("Snider": 13);
+add ("Rosales": 13);
+add ("Bright": 13);
+add ("Witt": 13);
+add ("Stuart": 13);
+add ("Hays": 13);
+add ("Holden": 13);
+add ("Rutledge": 13);
+add ("Kinney": 13);
+add ("Clements": 13);
+add ("Castaneda": 13);
+add ("Slater": 13);
+add ("Hahn": 13);
+add ("Emerson": 13);
+add ("Conrad": 13);
+add ("Burks": 13);
+add ("Delaney": 13);
+add ("Pate": 13);
+add ("Lancaster": 13);
+add ("Sweet": 13);
+add ("Justice": 13);
+add ("Tyson": 13);
+add ("Sharpe": 13);
+add ("Whitfield": 13);
+add ("Talley": 13);
+add ("Macias": 13);
+add ("Irwin": 13);
+add ("Burris": 13);
+add ("Ratliff": 13);
+add ("Mccray": 13);
+add ("Madden": 13);
+add ("Kaufman": 13);
+add ("Beach": 13);
+add ("Goff": 13);
+add ("Cash": 13);
+add ("Bolton": 13);
+add ("Mcfadden": 13);
+add ("Levine": 13);
+add ("Good": 13);
+add ("Byers": 13);
+add ("Kirkland": 13);
+add ("Kidd": 13);
+add ("Workman": 13);
+add ("Carney": 13);
+add ("Dale": 13);
+add ("Mcleod": 13);
+add ("Holcomb": 13);
+add ("England": 13);
+add ("Finch": 13);
+add ("Head": 12);
+add ("Burt": 12);
+add ("Hendrix": 12);
+add ("Sosa": 12);
+add ("Haney": 12);
+add ("Franks": 12);
+add ("Sargent": 12);
+add ("Nieves": 12);
+add ("Downs": 12);
+add ("Rasmussen": 12);
+add ("Bird": 12);
+add ("Hewitt": 12);
+add ("Lindsay": 12);
+add ("Le": 12);
+add ("Foreman": 12);
+add ("Valencia": 12);
+add ("Oneil": 12);
+add ("Delacruz": 12);
+add ("Vinson": 12);
+add ("Dejesus": 12);
+add ("Hyde": 12);
+add ("Forbes": 12);
+add ("Gilliam": 12);
+add ("Guthrie": 12);
+add ("Wooten": 12);
+add ("Huber": 12);
+add ("Barlow": 12);
+add ("Boyle": 12);
+add ("Mcmahon": 12);
+add ("Buckner": 12);
+add ("Rocha": 12);
+add ("Puckett": 12);
+add ("Langley": 12);
+add ("Knowles": 12);
+add ("Cooke": 12);
+add ("Velazquez": 12);
+add ("Whitley": 12);
+add ("Noel": 12);
+add ("Vang": 12);
+add ("Shea": 12);
+add ("Rouse": 12);
+add ("Hartley": 12);
+add ("Mayfield": 12);
+add ("Elder": 12);
+add ("Rankin": 12);
+add ("Hanna": 12);
+add ("Cowan": 12);
+add ("Lucero": 12);
+add ("Arroyo": 12);
+add ("Slaughter": 12);
+add ("Haas": 12);
+add ("Oconnell": 12);
+add ("Minor": 12);
+add ("Kendrick": 12);
+add ("Shirley": 12);
+add ("Kendall": 12);
+add ("Boucher": 12);
+add ("Archer": 12);
+add ("Boggs": 12);
+add ("Odell": 12);
+add ("Dougherty": 12);
+add ("Andersen": 12);
+add ("Newell": 12);
+add ("Crowe": 12);
+add ("Wang": 12);
+add ("Friedman": 12);
+add ("Bland": 12);
+add ("Swain": 12);
+add ("Holley": 12);
+add ("Felix": 12);
+add ("Pearce": 12);
+add ("Childs": 12);
+add ("Yarbrough": 12);
+add ("Galvan": 12);
+add ("Proctor": 12);
+add ("Meeks": 12);
+add ("Lozano": 12);
+add ("Mora": 12);
+add ("Rangel": 12);
+add ("Bacon": 12);
+add ("Villanueva": 12);
+add ("Schaefer": 12);
+add ("Rosado": 12);
+add ("Helms": 12);
+add ("Boyce": 12);
+add ("Goss": 12);
+add ("Stinson": 11);
+add ("Smart": 11);
+add ("Lake": 11);
+add ("Ibarra": 11);
+add ("Hutchins": 11);
+add ("Covington": 11);
+add ("Reyna": 11);
+add ("Gregg": 11);
+add ("Werner": 11);
+add ("Crowley": 11);
+add ("Hatcher": 11);
+add ("Mackey": 11);
+add ("Bunch": 11);
+add ("Womack": 11);
+add ("Polk": 11);
+add ("Jamison": 11);
+add ("Dodd": 11);
+add ("Childress": 11);
+add ("Childers": 11);
+add ("Camp": 11);
+add ("Villa": 11);
+add ("Dye": 11);
+add ("Springer": 11);
+add ("Mahoney": 11);
+add ("Dailey": 11);
+add ("Belcher": 11);
+add ("Lockhart": 11);
+add ("Griggs": 11);
+add ("Costa": 11);
+add ("Connor": 11);
+add ("Brandt": 11);
+add ("Winter": 11);
+add ("Walden": 11);
+add ("Moser": 11);
+add ("Tracy": 11);
+add ("Tatum": 11);
+add ("Mccann": 11);
+add ("Akers": 11);
+add ("Lutz": 11);
+add ("Pryor": 11);
+add ("Law": 11);
+add ("Orozco": 11);
+add ("Mcallister": 11);
+add ("Lugo": 11);
+add ("Davies": 11);
+add ("Shoemaker": 11);
+add ("Madison": 11);
+add ("Rutherford": 11);
+add ("Newsome": 11);
+add ("Magee": 11);
+add ("Chamberlain": 11);
+add ("Blanton": 11);
+add ("Simms": 11);
+add ("Godfrey": 11);
+add ("Flanagan": 11);
+add ("Crum": 11);
+add ("Cordova": 11);
+add ("Escobar": 11);
+add ("Downing": 11);
+add ("Sinclair": 11);
+add ("Donahue": 11);
+add ("Krueger": 11);
+add ("Mcginnis": 11);
+add ("Gore": 11);
+add ("Farris": 11);
+add ("Webber": 11);
+add ("Corbett": 11);
+add ("Andrade": 11);
+add ("Starr": 11);
+add ("Lyon": 11);
+add ("Yoder": 11);
+add ("Hastings": 11);
+add ("Mcgrath": 11);
+add ("Spivey": 11);
+add ("Krause": 11);
+add ("Harden": 11);
+add ("Crabtree": 11);
+add ("Kirkpatrick": 11);
+add ("Hollis": 11);
+add ("Brandon": 11);
+add ("Arrington": 11);
+add ("Ervin": 11);
+add ("Clifton": 11);
+add ("Ritter": 11);
+add ("Mcghee": 11);
+add ("Bolden": 11);
+add ("Maloney": 11);
+add ("Gagnon": 11);
+add ("Dunbar": 11);
+add ("Ponce": 11);
+add ("Pike": 11);
+add ("Mayes": 11);
+add ("Heard": 11);
+add ("Beatty": 11);
+add ("Mobley": 11);
+add ("Kimball": 11);
+add ("Butts": 11);
+add ("Montes": 11);
+add ("Herbert": 11);
+add ("Grady": 11);
+add ("Eldridge": 11);
+add ("Braun": 11);
+add ("Hamm": 11);
+add ("Gibbons": 11);
+add ("Seymour": 11);
+add ("Moyer": 11);
+add ("Manley": 11);
+add ("Herron": 11);
+add ("Plummer": 11);
+add ("Elmore": 11);
+add ("Cramer": 11);
+add ("Gary": 11);
+add ("Rucker": 11);
+add ("Hilton": 11);
+add ("Blue": 11);
+add ("Pierson": 11);
+add ("Fontenot": 11);
+add ("Field": 11);
+add ("Rubio": 11);
+add ("Grace": 11);
+add ("Goldstein": 11);
+add ("Elkins": 11);
+add ("Wills": 10);
+add ("Novak": 10);
+add ("John": 10);
+add ("Hickey": 10);
+add ("Worley": 10);
+add ("Gorman": 10);
+add ("Katz": 10);
+add ("Dickinson": 10);
+add ("Broussard": 10);
+add ("Fritz": 10);
+add ("Woodruff": 10);
+add ("Crow": 10);
+add ("Christopher": 10);
+add ("Britton": 10);
+add ("Forrest": 10);
+add ("Nance": 10);
+add ("Lehman": 10);
+add ("Bingham": 10);
+add ("Zuniga": 10);
+add ("Whaley": 10);
+add ("Shafer": 10);
+add ("Coffman": 10);
+add ("Steward": 10);
+add ("Delarosa": 10);
+add ("Nix": 10);
+add ("Neely": 10);
+add ("Numbers": 10);
+add ("Mata": 10);
+add ("Manuel": 10);
+add ("Davila": 10);
+add ("Mccabe": 10);
+add ("Kessler": 10);
+add ("Emery": 10);
+add ("Bowling": 10);
+add ("Hinkle": 10);
+add ("Welsh": 10);
+add ("Pagan": 10);
+add ("Goldberg": 10);
+add ("Goins": 10);
+add ("Crouch": 10);
+add ("Cuevas": 10);
+add ("Quinones": 10);
+add ("Mcdermott": 10);
+add ("Hendrickson": 10);
+add ("Samuels": 10);
+add ("Denton": 10);
+add ("Bergeron": 10);
+add ("Lam": 10);
+add ("Ivey": 10);
+add ("Locke": 10);
+add ("Haines": 10);
+add ("Thurman": 10);
+add ("Snell": 10);
+add ("Hoskins": 10);
+add ("Byrne": 10);
+add ("Milton": 10);
+add ("Winston": 10);
+add ("Arthur": 10);
+add ("Arias": 10);
+add ("Stanford": 10);
+add ("Roe": 10);
+add ("Corbin": 10);
+add ("Beltran": 10);
+add ("Chappell": 10);
+add ("Hurt": 10);
+add ("Downey": 10);
+add ("Dooley": 10);
+add ("Tuttle": 10);
+add ("Couch": 10);
+add ("Payton": 10);
+add ("Mcelroy": 10);
+add ("Crockett": 10);
+add ("Groves": 10);
+add ("Clement": 10);
+add ("Leslie": 10);
+add ("Cartwright": 10);
+add ("Dickey": 10);
+add ("Mcgill": 10);
+add ("Dubois": 10);
+add ("Muniz": 10);
+add ("Erwin": 10);
+add ("Self": 10);
+add ("Tolbert": 10);
+add ("Dempsey": 10);
+add ("Cisneros": 10);
+add ("Sewell": 10);
+add ("Latham": 10);
+add ("Garland": 10);
+add ("Vigil": 10);
+add ("Tapia": 10);
+add ("Sterling": 10);
+add ("Rainey": 10);
+add ("Norwood": 10);
+add ("Lacy": 10);
+add ("Stroud": 10);
+add ("Meade": 10);
+add ("Amos": 10);
+add ("Tipton": 10);
+add ("Lord": 10);
+add ("Kuhn": 10);
+add ("Hilliard": 10);
+add ("Bonilla": 10);
+add ("Teague": 10);
+add ("Courtney": 10);
+add ("Gunn": 10);
+add ("Ho": 10);
+add ("Greenwood": 10);
+add ("Correa": 10);
+add ("Reece": 10);
+add ("Weston": 10);
+add ("Poe": 10);
+add ("Trent": 10);
+add ("Pineda": 10);
+add ("Phipps": 10);
+add ("Frey": 10);
+add ("Kaiser": 10);
+add ("Ames": 10);
+add ("Paige": 10);
+add ("Gunter": 10);
+add ("Schmitt": 10);
+add ("Milligan": 10);
+add ("Espinosa": 10);
+add ("Carlton": 10);
+add ("Bowden": 10);
+add ("Vickers": 10);
+add ("Lowry": 10);
+add ("Pritchard": 10);
+add ("Costello": 10);
+add ("Piper": 9);
+add ("Mcclellan": 9);
+add ("Lovell": 9);
+add ("Drew": 9);
+add ("Sheehan": 9);
+add ("Quick": 9);
+add ("Hatch": 9);
+add ("Dobson": 9);
+add ("Singh": 9);
+add ("Jeffries": 9);
+add ("Hollingsworth": 9);
+add ("Sorensen": 9);
+add ("Meza": 9);
+add ("Fink": 9);
+add ("Donnelly": 9);
+add ("Burrell": 9);
+add ("Bruno": 9);
+add ("Tomlinson": 9);
+add ("Colbert": 9);
+add ("Billings": 9);
+add ("Ritchie": 9);
+add ("Helton": 9);
+add ("Sutherland": 9);
+add ("Peoples": 9);
+add ("Mcqueen": 9);
+add ("Gaston": 9);
+add ("Thomason": 9);
+add ("Mckinley": 9);
+add ("Givens": 9);
+add ("Crocker": 9);
+add ("Vogel": 9);
+add ("Robison": 9);
+add ("Dunham": 9);
+add ("Coker": 9);
+add ("Swartz": 9);
+add ("Keys": 9);
+add ("Lilly": 9);
+add ("Ladner": 9);
+add ("Hannah": 9);
+add ("Willard": 9);
+add ("Richter": 9);
+add ("Hargrove": 9);
+add ("Edmonds": 9);
+add ("Brantley": 9);
+add ("Albright": 9);
+add ("Murdock": 9);
+add ("Boswell": 9);
+add ("Muller": 9);
+add ("Quintero": 9);
+add ("Padgett": 9);
+add ("Kenney": 9);
+add ("Daly": 9);
+add ("Connolly": 9);
+add ("Pierre": 9);
+add ("Inman": 9);
+add ("Quintana": 9);
+add ("Lund": 9);
+add ("Barnard": 9);
+add ("Villegas": 9);
+add ("Simons": 9);
+add ("Land": 9);
+add ("Huggins": 9);
+add ("Tidwell": 9);
+add ("Sanderson": 9);
+add ("Bullard": 9);
+add ("Mcclendon": 9);
+add ("Duarte": 9);
+add ("Draper": 9);
+add ("Meredith": 9);
+add ("Marrero": 9);
+add ("Dwyer": 9);
+add ("Abrams": 9);
+add ("Stover": 9);
+add ("Goode": 9);
+add ("Fraser": 9);
+add ("Crews": 9);
+add ("Bernal": 9);
+add ("Smiley": 9);
+add ("Godwin": 9);
+add ("Fish": 9);
+add ("Conklin": 9);
+add ("Mcneal": 9);
+add ("Baca": 9);
+add ("Esparza": 9);
+add ("Crowder": 9);
+add ("Bower": 9);
+add ("Nicholas": 9);
+add ("Chung": 9);
+add ("Brewster": 9);
+add ("Mcneill": 9);
+add ("Dick": 9);
+add ("Rodrigues": 9);
+add ("Leal": 9);
+add ("Coates": 9);
+add ("Raines": 9);
+add ("Mccain": 9);
+add ("Mccord": 9);
+add ("Miner": 9);
+add ("Holbrook": 9);
+add ("Swift": 9);
+add ("Dukes": 9);
+add ("Carlisle": 9);
+add ("Aldridge": 9);
+add ("Ackerman": 9);
+add ("Starks": 9);
+add ("Ricks": 9);
+add ("Holliday": 9);
+add ("Ferris": 9);
+add ("Hairston": 9);
+add ("Sheffield": 9);
+add ("Lange": 9);
+add ("Fountain": 9);
+add ("Marino": 9);
+add ("Doss": 9);
+add ("Betts": 9);
+add ("Kaplan": 9);
+add ("Carmichael": 9);
+add ("Bloom": 9);
+add ("Ruffin": 9);
+add ("Penn": 9);
+add ("Kern": 9);
+add ("Bowles": 9);
+add ("Sizemore": 9);
+add ("Larkin": 9);
+add ("Dupree": 9);
+add ("Jewell": 9);
+add ("Silver": 9);
+add ("Seals": 9);
+add ("Metcalf": 9);
+add ("Hutchison": 9);
+add ("Henley": 9);
+add ("Farr": 9);
+add ("Castle": 9);
+add ("Mccauley": 9);
+add ("Hankins": 9);
+add ("Gustafson": 9);
+add ("Deal": 9);
+add ("Curran": 9);
+add ("Ash": 9);
+add ("Waddell": 9);
+add ("Ramey": 9);
+add ("Cates": 9);
+add ("Pollock": 9);
+add ("Major": 9);
+add ("Irvin": 9);
+add ("Cummins": 9);
+add ("Messer": 9);
+add ("Heller": 9);
+add ("Dewitt": 9);
+add ("Lin": 9);
+add ("Funk": 9);
+add ("Cornett": 9);
+add ("Palacios": 9);
+add ("Galindo": 9);
+add ("Cano": 9);
+add ("Hathaway": 9);
+add ("Singer": 8);
+add ("Pham": 8);
+add ("Enriquez": 8);
+add ("Aaron": 8);
+add ("Salgado": 8);
+add ("Pelletier": 8);
+add ("Painter": 8);
+add ("Wiseman": 8);
+add ("Blount": 8);
+add ("Hand": 8);
+add ("Feliciano": 8);
+add ("Temple": 8);
+add ("Houser": 8);
+add ("Doherty": 8);
+add ("Mead": 8);
+add ("Mcgraw": 8);
+add ("Toney": 8);
+add ("Swan": 8);
+add ("Melvin": 8);
+add ("Capps": 8);
+add ("Blanco": 8);
+add ("Blackmon": 8);
+add ("Wesley": 8);
+add ("Thomson": 8);
+add ("Mcmanus": 8);
+add ("Fair": 8);
+add ("Burkett": 8);
+add ("Post": 8);
+add ("Gleason": 8);
+add ("Rudolph": 8);
+add ("Ott": 8);
+add ("Dickens": 8);
+add ("Cormier": 8);
+add ("Voss": 8);
+add ("Rushing": 8);
+add ("Rosenberg": 8);
+add ("Hurd": 8);
+add ("Dumas": 8);
+add ("Benitez": 8);
+add ("Arellano": 8);
+add ("Story": 8);
+add ("Marin": 8);
+add ("Caudill": 8);
+add ("Bragg": 8);
+add ("Jaramillo": 8);
+add ("Huerta": 8);
+add ("Gipson": 8);
+add ("Colvin": 8);
+add ("Biggs": 8);
+add ("Vela": 8);
+add ("Platt": 8);
+add ("Cassidy": 8);
+add ("Tompkins": 8);
+add ("Mccollum": 8);
+add ("Kay": 8);
+add ("Gabriel": 8);
+add ("Dolan": 8);
+add ("Daley": 8);
+add ("Crump": 8);
+add ("Street": 8);
+add ("Sneed": 8);
+add ("Kilgore": 8);
+add ("Grove": 8);
+add ("Grimm": 8);
+add ("Davison": 8);
+add ("Brunson": 8);
+add ("Prater": 8);
+add ("Marcum": 8);
+add ("Devine": 8);
+add ("Kyle": 8);
+add ("Dodge": 8);
+add ("Stratton": 8);
+add ("Rosas": 8);
+add ("Choi": 8);
+add ("Tripp": 8);
+add ("Ledbetter": 8);
+add ("Lay": 8);
+add ("Hightower": 8);
+add ("Haywood": 8);
+add ("Feldman": 8);
+add ("Epps": 8);
+add ("Yeager": 8);
+add ("Posey": 8);
+add ("Sylvester": 8);
+add ("Scruggs": 8);
+add ("Cope": 8);
+add ("Stubbs": 8);
+add ("Richey": 8);
+add ("Overton": 8);
+add ("Trotter": 8);
+add ("Sprague": 8);
+add ("Cordero": 8);
+add ("Butcher": 8);
+add ("Burger": 8);
+add ("Stiles": 8);
+add ("Burgos": 8);
+add ("Woodson": 8);
+add ("Horner": 8);
+add ("Bassett": 8);
+add ("Purcell": 8);
+add ("Haskins": 8);
+add ("Gee": 8);
+add ("Akins": 8);
+add ("Abraham": 8);
+add ("Hoyt": 8);
+add ("Ziegler": 8);
+add ("Spaulding": 8);
+add ("Hadley": 8);
+add ("Grubbs": 8);
+add ("Sumner": 8);
+add ("Murillo": 8);
+add ("Zavala": 8);
+add ("Shook": 8);
+add ("Lockwood": 8);
+add ("Jarrett": 8);
+add ("Driscoll": 8);
+add ("Dahl": 8);
+add ("Thorpe": 8);
+add ("Sheridan": 8);
+add ("Redmond": 8);
+add ("Putnam": 8);
+add ("Mcwilliams": 8);
+add ("Mcrae": 8);
+add ("Cornell": 8);
+add ("Felton": 8);
+add ("Romano": 8);
+add ("Joiner": 8);
+add ("Sadler": 8);
+add ("Hedrick": 8);
+add ("Hager": 8);
+add ("Hagen": 8);
+add ("Fitch": 8);
+add ("Coulter": 8);
+add ("Thacker": 8);
+add ("Mansfield": 8);
+add ("Langston": 8);
+add ("Guidry": 8);
+add ("Ferreira": 8);
+add ("Corley": 8);
+add ("Conn": 8);
+add ("Rossi": 8);
+add ("Lackey": 8);
+add ("Cody": 8);
+add ("Baez": 8);
+add ("Saenz": 8);
+add ("Mcnamara": 8);
+add ("Darnell": 8);
+add ("Michel": 8);
+add ("Mcmullen": 8);
+add ("Mckenna": 8);
+add ("Mcdonough": 8);
+add ("Link": 8);
+add ("Engel": 8);
+add ("Browne": 8);
+add ("Roper": 8);
+add ("Peacock": 8);
+add ("Eubanks": 8);
+add ("Drummond": 8);
+add ("Stringer": 8);
+add ("Pritchett": 8);
+add ("Parham": 8);
+add ("Mims": 8);
+add ("Landers": 8);
+add ("Ham": 8);
+add ("Grayson": 8);
+add ("Stacy": 8);
+add ("Schafer": 8);
+add ("Egan": 8);
+add ("Timmons": 8);
+add ("Ohara": 8);
+add ("Keen": 8);
+add ("Hamlin": 8);
+add ("Finn": 8);
+add ("Cortes": 8);
+add ("Mcnair": 8);
+add ("Louis": 8);
+add ("Clifford": 8);
+add ("Nadeau": 8);
+add ("Moseley": 8);
+add ("Michaud": 8);
+add ("Rosen": 8);
+add ("Oakes": 8);
+add ("Kurtz": 8);
+add ("Jeffers": 8);
+add ("Calloway": 8);
+add ("Beal": 8);
+add ("Bautista": 8);
+add ("Winn": 8);
+add ("Suggs": 8);
+add ("Stern": 8);
+add ("Stapleton": 8);
+add ("Lyles": 8);
+add ("Laird": 8);
+add ("Montano": 8);
+add ("Diamond": 8);
+add ("Dawkins": 8);
+add ("Roland": 8);
+add ("Hagan": 8);
+add ("Goldman": 8);
+add ("Bryson": 8);
+add ("Barajas": 8);
+add ("Lovett": 8);
+add ("Segura": 8);
+add ("Metz": 8);
+add ("Lockett": 8);
+add ("Langford": 8);
+add ("Hinson": 8);
+add ("Eastman": 8);
+add ("Rock": 8);
+add ("Hooks": 8);
+add ("Woody": 7);
+add ("Smallwood": 7);
+add ("Shapiro": 7);
+add ("Crowell": 7);
+add ("Whalen": 7);
+add ("Triplett": 7);
+add ("Hooker": 7);
+add ("Chatman": 7);
+add ("Aldrich": 7);
+add ("Cahill": 7);
+add ("Youngblood": 7);
+add ("Ybarra": 7);
+add ("Stallings": 7);
+add ("Sheets": 7);
+add ("Samuel": 7);
+add ("Reeder": 7);
+add ("Person": 7);
+add ("Pack": 7);
+add ("Lacey": 7);
+add ("Connelly": 7);
+add ("Bateman": 7);
+add ("Abernathy": 7);
+add ("Winkler": 7);
+add ("Wilkes": 7);
+add ("Masters": 7);
+add ("Hackett": 7);
+add ("Granger": 7);
+add ("Gillis": 7);
+add ("Schmitz": 7);
+add ("Sapp": 7);
+add ("Napier": 7);
+add ("Souza": 7);
+add ("Lanier": 7);
+add ("Gomes": 7);
+add ("Weir": 7);
+add ("Otero": 7);
+add ("Ledford": 7);
+add ("Burroughs": 7);
+add ("Babcock": 7);
+add ("Ventura": 7);
+add ("Siegel": 7);
+add ("Dugan": 7);
+add ("Clinton": 7);
+add ("Christie": 7);
+add ("Bledsoe": 7);
+add ("Atwood": 7);
+add ("Wray": 7);
+add ("Varner": 7);
+add ("Spangler": 7);
+add ("Otto": 7);
+add ("Anaya": 7);
+add ("Staley": 7);
+add ("Kraft": 7);
+add ("Fournier": 7);
+add ("Eddy": 7);
+add ("Belanger": 7);
+add ("Wolff": 7);
+add ("Thorne": 7);
+add ("Bynum": 7);
+add ("Burnette": 7);
+add ("Boykin": 7);
+add ("Swenson": 7);
+add ("Purvis": 7);
+add ("Pina": 7);
+add ("Khan": 7);
+add ("Duvall": 7);
+add ("Darby": 7);
+add ("Xiong": 7);
+add ("Kauffman": 7);
+add ("Ali": 7);
+add ("Yu": 7);
+add ("Healy": 7);
+add ("Engle": 7);
+add ("Corona": 7);
+add ("Benoit": 7);
+add ("Valle": 7);
+add ("Steiner": 7);
+add ("Spicer": 7);
+add ("Shaver": 7);
+add ("Randle": 7);
+add ("Lundy": 7);
+add ("Dow": 7);
+add ("Chin": 7);
+add ("Calvert": 7);
+add ("Staton": 7);
+add ("Neff": 7);
+add ("Kearney": 7);
+add ("Darden": 7);
+add ("Oakley": 7);
+add ("Medeiros": 7);
+add ("Mccracken": 7);
+add ("Crenshaw": 7);
+add ("Block": 7);
+add ("Beaver": 7);
+add ("Perdue": 7);
+add ("Dill": 7);
+add ("Whittaker": 7);
+add ("Tobin": 7);
+add ("Cornelius": 7);
+add ("Washburn": 7);
+add ("Hogue": 7);
+add ("Goodrich": 7);
+add ("Easley": 7);
+add ("Bravo": 7);
+add ("Dennison": 7);
+add ("Vera": 7);
+add ("Shipley": 7);
+add ("Kerns": 7);
+add ("Jorgensen": 7);
+add ("Crain": 7);
+add ("Abel": 7);
+add ("Villalobos": 7);
+add ("Maurer": 7);
+add ("Longoria": 7);
+add ("Keene": 7);
+add ("Coon": 7);
+add ("Sierra": 7);
+add ("Witherspoon": 7);
+add ("Staples": 7);
+add ("Pettit": 7);
+add ("Kincaid": 7);
+add ("Eason": 7);
+add ("Madrid": 7);
+add ("Echols": 7);
+add ("Lusk": 7);
+add ("Wu": 7);
+add ("Stahl": 7);
+add ("Currie": 7);
+add ("Thayer": 7);
+add ("Shultz": 7);
+add ("Sherwood": 7);
+add ("Mcnally": 7);
+add ("Seay": 7);
+add ("North": 7);
+add ("Maher": 7);
+add ("Kenny": 7);
+add ("Hope": 7);
+add ("Gagne": 7);
+add ("Barrow": 7);
+add ("Nava": 7);
+add ("Myles": 7);
+add ("Moreland": 7);
+add ("Honeycutt": 7);
+add ("Hearn": 7);
+add ("Diggs": 7);
+add ("Caron": 7);
+add ("Whitten": 7);
+add ("Westbrook": 7);
+add ("Stovall": 7);
+add ("Ragland": 7);
+add ("Queen": 7);
+add ("Munson": 7);
+add ("Meier": 7);
+add ("Looney": 7);
+add ("Kimble": 7);
+add ("Jolly": 7);
+add ("Hobson": 7);
+add ("London": 7);
+add ("Goddard": 7);
+add ("Culver": 7);
+add ("Burr": 7);
+add ("Presley": 7);
+add ("Negron": 7);
+add ("Connell": 7);
+add ("Tovar": 7);
+add ("Marcus": 7);
+add ("Huddleston": 7);
+add ("Hammer": 7);
+add ("Ashby": 7);
+add ("Salter": 7);
+add ("Root": 7);
+add ("Pendleton": 7);
+add ("Oleary": 7);
+add ("Nickerson": 7);
+add ("Myrick": 7);
+add ("Judd": 7);
+add ("Jacobsen": 7);
+add ("Elliot": 7);
+add ("Bain": 7);
+add ("Adair": 7);
+add ("Starnes": 7);
+add ("Sheldon": 7);
+add ("Matos": 7);
+add ("Light": 7);
+add ("Busby": 7);
+add ("Herndon": 7);
+add ("Hanley": 7);
+add ("Bellamy": 7);
+add ("Jack": 7);
+add ("Doty": 7);
+add ("Bartley": 7);
+add ("Yazzie": 7);
+add ("Rowell": 7);
+add ("Parson": 7);
+add ("Gifford": 7);
+add ("Cullen": 7);
+add ("Christiansen": 7);
+add ("Benavides": 7);
+add ("Barnhart": 7);
+add ("Talbot": 7);
+add ("Mock": 7);
+add ("Crandall": 7);
+add ("Connors": 7);
+add ("Bonds": 7);
+add ("Whitt": 7);
+add ("Gage": 7);
+add ("Bergman": 7);
+add ("Arredondo": 7);
+add ("Addison": 7);
+add ("Marion": 7);
+add ("Lujan": 7);
+add ("Dowdy": 7);
+add ("Jernigan": 7);
+add ("Huynh": 7);
+add ("Bouchard": 7);
+add ("Dutton": 7);
+add ("Rhoades": 7);
+add ("Ouellette": 7);
+add ("Kiser": 7);
+add ("Rubin": 7);
+add ("Herrington": 7);
+add ("Hare": 7);
+add ("Denny": 7);
+add ("Blackman": 7);
+add ("Babb": 7);
+add ("Allred": 7);
+add ("Rudd": 7);
+add ("Paulson": 7);
+add ("Ogden": 7);
+add ("Koenig": 7);
+add ("Jacob": 7);
+add ("Irving": 7);
+add ("Geiger": 7);
+add ("Begay": 7);
+add ("Parra": 7);
+add ("Champion": 7);
+add ("Lassiter": 7);
+add ("Hawk": 7);
+add ("Esposito": 7);
+add ("Cho": 7);
+add ("Waldron": 7);
+add ("Vernon": 7);
+add ("Ransom": 7);
+add ("Prather": 7);
+add ("Keenan": 7);
+add ("Jean": 7);
+add ("Grover": 7);
+add ("Chacon": 7);
+add ("Vick": 7);
+add ("Sands": 7);
+add ("Roark": 7);
+add ("Parr": 7);
+add ("Mayberry": 7);
+add ("Greenberg": 7);
+add ("Coley": 7);
+add ("Bruner": 7);
+add ("Whitman": 7);
+add ("Skaggs": 7);
+add ("Shipman": 7);
+add ("Means": 7);
+add ("Leary": 7);
+add ("Hutton": 7);
+add ("Romo": 7);
+add ("Medrano": 7);
+add ("Ladd": 7);
+add ("Kruse": 7);
+add ("Friend": 7);
+add ("Darling": 7);
+add ("Askew": 7);
+add ("Valentin": 7);
+add ("Schulz": 7);
+add ("Alfaro": 7);
+add ("Tabor": 7);
+add ("Mohr": 7);
+add ("Gallo": 7);
+add ("Bermudez": 7);
+add ("Pereira": 7);
+add ("Isaac": 7);
+add ("Bliss": 7);
+add ("Reaves": 6);
+add ("Flint": 6);
+add ("Comer": 6);
+add ("Boston": 6);
+add ("Woodall": 6);
+add ("Naquin": 6);
+add ("Guevara": 6);
+add ("Earl": 6);
+add ("Delong": 6);
+add ("Carrier": 6);
+add ("Pickens": 6);
+add ("Brand": 6);
+add ("Tilley": 6);
+add ("Schaffer": 6);
+add ("Read": 6);
+add ("Lim": 6);
+add ("Knutson": 6);
+add ("Fenton": 6);
+add ("Doran": 6);
+add ("Chu": 6);
+add ("Vogt": 6);
+add ("Vann": 6);
+add ("Prescott": 6);
+add ("Mclain": 6);
+add ("Landis": 6);
+add ("Corcoran": 6);
+add ("Ambrose": 6);
+add ("Zapata": 6);
+add ("Hyatt": 6);
+add ("Hemphill": 6);
+add ("Faulk": 6);
+add ("Call": 6);
+add ("Dove": 6);
+add ("Boudreaux": 6);
+add ("Aragon": 6);
+add ("Whitlock": 6);
+add ("Trejo": 6);
+add ("Tackett": 6);
+add ("Shearer": 6);
+add ("Saldana": 6);
+add ("Hanks": 6);
+add ("Gold": 6);
+add ("Driver": 6);
+add ("Mckinnon": 6);
+add ("Koehler": 6);
+add ("Champagne": 6);
+add ("Bourgeois": 6);
+add ("Pool": 6);
+add ("Keyes": 6);
+add ("Goodson": 6);
+add ("Foote": 6);
+add ("Early": 6);
+add ("Lunsford": 6);
+add ("Goldsmith": 6);
+add ("Flood": 6);
+add ("Winslow": 6);
+add ("Sams": 6);
+add ("Reagan": 6);
+add ("Mccloud": 6);
+add ("Hough": 6);
+add ("Esquivel": 6);
+add ("Naylor": 6);
+add ("Loomis": 6);
+add ("Coronado": 6);
+add ("Ludwig": 6);
+add ("Braswell": 6);
+add ("Bearden": 6);
+add ("Sherrill": 6);
+add ("Huang": 6);
+add ("Fagan": 6);
+add ("Ezell": 6);
+add ("Edmondson": 6);
+add ("Cyr": 6);
+add ("Cronin": 6);
+add ("Nunn": 6);
+add ("Lemon": 6);
+add ("Guillory": 6);
+add ("Grier": 6);
+add ("Dubose": 6);
+add ("Traylor": 6);
+add ("Ryder": 6);
+add ("Dobbins": 6);
+add ("Coyle": 6);
+add ("Aponte": 6);
+add ("Whitmore": 6);
+add ("Smalls": 6);
+add ("Rowan": 6);
+add ("Malloy": 6);
+add ("Cardona": 6);
+add ("Braxton": 6);
+add ("Borden": 6);
+add ("Humphries": 6);
+add ("Carrasco": 6);
+add ("Ruff": 6);
+add ("Metzger": 6);
+add ("Huntley": 6);
+add ("Hinojosa": 6);
+add ("Finney": 6);
+add ("Madsen": 6);
+add ("Hong": 6);
+add ("Hills": 6);
+add ("Ernst": 6);
+add ("Dozier": 6);
+add ("Burkhart": 6);
+add ("Bowser": 6);
+add ("Peralta": 6);
+add ("Daigle": 6);
+add ("Whittington": 6);
+add ("Sorenson": 6);
+add ("Saucedo": 6);
+add ("Roche": 6);
+add ("Redding": 6);
+add ("Loyd": 6);
+add ("Fugate": 6);
+add ("Avalos": 6);
+add ("Waite": 6);
+add ("Lind": 6);
+add ("Huston": 6);
+add ("Hay": 6);
+add ("Benedict": 6);
+add ("Hawthorne": 6);
+add ("Hamby": 6);
+add ("Boyles": 6);
+add ("Boles": 6);
+add ("Regan": 6);
+add ("Faust": 6);
+add ("Crook": 6);
+add ("Beam": 6);
+add ("Barger": 6);
+add ("Hinds": 6);
+add ("Gallardo": 6);
+add ("Elias": 6);
+add ("Willoughby": 6);
+add ("Willingham": 6);
+add ("Wilburn": 6);
+add ("Eckert": 6);
+add ("Busch": 6);
+add ("Zepeda": 6);
+add ("Worthington": 6);
+add ("Tinsley": 6);
+add ("Russ": 6);
+add ("Li": 6);
+add ("Hoff": 6);
+add ("Hawley": 6);
+add ("Carmona": 6);
+add ("Varela": 6);
+add ("Rector": 6);
+add ("Newcomb": 6);
+add ("Mallory": 6);
+add ("Kinsey": 6);
+add ("Dube": 6);
+add ("Whatley": 6);
+add ("Strange": 6);
+add ("Ragsdale": 6);
+add ("Ivy": 6);
+add ("Bernstein": 6);
+add ("Becerra": 6);
+add ("Yost": 6);
+add ("Mattson": 6);
+add ("Ly": 6);
+add ("Felder": 6);
+add ("Cheek": 6);
+add ("Luke": 6);
+add ("Handy": 6);
+add ("Grossman": 6);
+add ("Gauthier": 6);
+add ("Escobedo": 6);
+add ("Braden": 6);
+add ("Beckman": 6);
+add ("Mott": 6);
+add ("Hillman": 6);
+add ("Gil": 6);
+add ("Flaherty": 6);
+add ("Dykes": 6);
+add ("Doe": 6);
+add ("Stockton": 6);
+add ("Stearns": 6);
+add ("Lofton": 6);
+add ("Kitchen": 6);
+add ("Coats": 6);
+add ("Cavazos": 6);
+add ("Beavers": 6);
+add ("Barrios": 6);
+add ("Tang": 6);
+add ("Parish": 6);
+add ("Mosher": 6);
+add ("Lincoln": 6);
+add ("Cardwell": 6);
+add ("Coles": 6);
+add ("Burnham": 6);
+add ("Weller": 6);
+add ("Lemons": 6);
+add ("Beebe": 6);
+add ("Aguilera": 6);
+add ("Ring": 6);
+add ("Parnell": 6);
+add ("Harman": 6);
+add ("Couture": 6);
+add ("Alley": 6);
+add ("Schumacher": 6);
+add ("Redd": 6);
+add ("Dobbs": 6);
+add ("Blum": 6);
+add ("Blalock": 6);
+add ("Merchant": 6);
+add ("Ennis": 6);
+add ("Denson": 6);
+add ("Cottrell": 6);
+add ("Chester": 6);
+add ("Brannon": 6);
+add ("Bagley": 6);
+add ("Aviles": 6);
+add ("Watt": 6);
+add ("Sousa": 6);
+add ("Rosenthal": 6);
+add ("Rooney": 6);
+add ("Dietz": 6);
+add ("Blank": 6);
+add ("Paquette": 6);
+add ("Mcclelland": 6);
+add ("Duff": 6);
+add ("Velasco": 6);
+add ("Lentz": 6);
+add ("Grubb": 6);
+add ("Burrows": 6);
+add ("Barbour": 6);
+add ("Ulrich": 6);
+add ("Shockley": 6);
+add ("Rader": 6);
+add ("German": 6);
+add ("Beyer": 6);
+add ("Mixon": 6);
+add ("Layton": 6);
+add ("Altman": 6);
+add ("Alonzo": 6);
+add ("Weathers": 6);
+add ("Titus": 6);
+add ("Stoner": 6);
+add ("Squires": 6);
+add ("Shipp": 6);
+add ("Priest": 6);
+add ("Lipscomb": 6);
+add ("Cutler": 6);
+add ("Caballero": 6);
+add ("Zimmer": 6);
+add ("Willett": 6);
+add ("Thurston": 6);
+add ("Storey": 6);
+add ("Medley": 6);
+add ("Lyle": 6);
+add ("Epperson": 6);
+add ("Shah": 6);
+add ("Mcmillian": 6);
+add ("Baggett": 6);
+add ("Torrez": 6);
+add ("Laws": 6);
+add ("Hirsch": 6);
+add ("Dent": 6);
+add ("Corey": 6);
+add ("Poirier": 6);
+add ("Peachey": 6);
+add ("Jacques": 6);
+add ("Farrar": 6);
+add ("Creech": 6);
+add ("Barth": 6);
+add ("Trimble": 6);
+add ("France": 6);
+add ("Dupre": 6);
+add ("Albrecht": 6);
+add ("Sample": 6);
+add ("Lawler": 6);
+add ("Crisp": 6);
+add ("Conroy": 6);
+add ("Chadwick": 6);
+add ("Wetzel": 6);
+add ("Nesbitt": 6);
+add ("Murry": 6);
+add ("Jameson": 6);
+add ("Wilhelm": 6);
+add ("Patten": 6);
+add ("Minton": 6);
+add ("Matson": 6);
+add ("Kimbrough": 6);
+add ("Iverson": 6);
+add ("Guinn": 6);
+add ("Gale": 6);
+add ("Fortune": 6);
+add ("Croft": 6);
+add ("Toth": 6);
+add ("Pulliam": 6);
+add ("Nugent": 6);
+add ("Newby": 6);
+add ("Littlejohn": 6);
+add ("Dias": 6);
+add ("Canales": 6);
+add ("Bernier": 6);
+add ("Baron": 6);
+add ("Barney": 6);
+add ("Singletary": 6);
+add ("Renteria": 6);
+add ("Pruett": 6);
+add ("Mchugh": 6);
+add ("Mabry": 6);
+add ("Landrum": 6);
+add ("Brower": 6);
+add ("Weldon": 6);
+add ("Stoddard": 6);
+add ("Ruth": 6);
+add ("Cagle": 6);
+add ("Stjohn": 6);
+add ("Scales": 6);
+add ("Kohler": 6);
+add ("Kellogg": 6);
+add ("Hopson": 6);
+add ("Gant": 6);
+add ("Tharp": 6);
+add ("Gann": 6);
+add ("Zeigler": 6);
+add ("Pringle": 6);
+add ("Hammons": 6);
+add ("Fairchild": 6);
+add ("Deaton": 6);
+add ("Chavis": 6);
+add ("Carnes": 6);
+add ("Rowley": 6);
+add ("Matlock": 6);
+add ("Libby": 6);
+add ("Kearns": 6);
+add ("Irizarry": 6);
+add ("Carrington": 6);
+add ("Starkey": 6);
+add ("Pepper": 6);
+add ("Lopes": 6);
+add ("Jarrell": 6);
+add ("Fay": 6);
+add ("Craven": 6);
+add ("Beverly": 6);
+add ("Baum": 6);
+add ("Spain": 5);
+add ("Littlefield": 5);
+add ("Linn": 5);
+add ("Humphreys": 5);
+add ("Hook": 5);
+add ("High": 5);
+add ("Etheridge": 5);
+add ("Cuellar": 5);
+add ("Chastain": 5);
+add ("Chance": 5);
+add ("Bundy": 5);
+add ("Speer": 5);
+add ("Skelton": 5);
+add ("Quiroz": 5);
+add ("Pyle": 5);
+add ("Portillo": 5);
+add ("Ponder": 5);
+add ("Moulton": 5);
+add ("Machado": 5);
+add ("Liu": 5);
+add ("Killian": 5);
+add ("Hutson": 5);
+add ("Hitchcock": 5);
+add ("Ellsworth": 5);
+add ("Dowling": 5);
+add ("Cloud": 5);
+add ("Burdick": 5);
+add ("Spann": 5);
+add ("Pedersen": 5);
+add ("Levin": 5);
+add ("Leggett": 5);
+add ("Hayward": 5);
+add ("Hacker": 5);
+add ("Dietrich": 5);
+add ("Beaulieu": 5);
+add ("Barksdale": 5);
+add ("Wakefield": 5);
+add ("Snowden": 5);
+add ("Paris": 5);
+add ("Briscoe": 5);
+add ("Bowie": 5);
+add ("Berman": 5);
+add ("Ogle": 5);
+add ("Mcgregor": 5);
+add ("Laughlin": 5);
+add ("Helm": 5);
+add ("Burden": 5);
+add ("Wheatley": 5);
+add ("Schreiber": 5);
+add ("Pressley": 5);
+add ("Parris": 5);
+add ("Ng": 5);
+add ("Alaniz": 5);
+add ("Agee": 5);
+add ("Urban": 5);
+add ("Swann": 5);
+add ("Snodgrass": 5);
+add ("Schuster": 5);
+add ("Radford": 5);
+add ("Monk": 5);
+add ("Mattingly": 5);
+add ("Main": 5);
+add ("Lamar": 5);
+add ("Harp": 5);
+add ("Girard": 5);
+add ("Cheney": 5);
+add ("Yancey": 5);
+add ("Wagoner": 5);
+add ("Ridley": 5);
+add ("Lombardo": 5);
+add ("Lau": 5);
+add ("Hudgins": 5);
+add ("Gaskins": 5);
+add ("Duckworth": 5);
+add ("Coe": 5);
+add ("Coburn": 5);
+add ("Willey": 5);
+add ("Prado": 5);
+add ("Newberry": 5);
+add ("Magana": 5);
+add ("Hammonds": 5);
+add ("Elam": 5);
+add ("Whipple": 5);
+add ("Slade": 5);
+add ("Serna": 5);
+add ("Ojeda": 5);
+add ("Liles": 5);
+add ("Dorman": 5);
+add ("Diehl": 5);
+add ("Angel": 5);
+add ("Upton": 5);
+add ("Reardon": 5);
+add ("Michaels": 5);
+add ("Kelsey": 5);
+add ("Goetz": 5);
+add ("Eller": 5);
+add ("Bauman": 5);
+add ("Baer": 5);
+add ("Augustine": 5);
+add ("Layne": 5);
+add ("Hummel": 5);
+add ("Brenner": 5);
+add ("Amaya": 5);
+add ("Adamson": 5);
+add ("Ornelas": 5);
+add ("Dowell": 5);
+add ("Cloutier": 5);
+add ("Christy": 5);
+add ("Castellanos": 5);
+add ("Wing": 5);
+add ("Wellman": 5);
+add ("Saylor": 5);
+add ("Orourke": 5);
+add ("Moya": 5);
+add ("Montalvo": 5);
+add ("Kilpatrick": 5);
+add ("Harley": 5);
+add ("Durbin": 5);
+add ("Shell": 5);
+add ("Oldham": 5);
+add ("Kang": 5);
+add ("Garvin": 5);
+add ("Foss": 5);
+add ("Branham": 5);
+add ("Bartholomew": 5);
+add ("Templeton": 5);
+add ("Maguire": 5);
+add ("Holton": 5);
+add ("Alonso": 5);
+add ("Rider": 5);
+add ("Monahan": 5);
+add ("Mccormack": 5);
+add ("Beaty": 5);
+add ("Anders": 5);
+add ("Streeter": 5);
+add ("Nieto": 5);
+add ("Nielson": 5);
+add ("Moffett": 5);
+add ("Lankford": 5);
+add ("Keating": 5);
+add ("Heck": 5);
+add ("Gatlin": 5);
+add ("Delatorre": 5);
+add ("Callaway": 5);
+add ("Adcock": 5);
+add ("Worrell": 5);
+add ("Unger": 5);
+add ("Robinette": 5);
+add ("Nowak": 5);
+add ("Jeter": 5);
+add ("Brunner": 5);
+add ("Ashton": 5);
+add ("Steen": 5);
+add ("Parrott": 5);
+add ("Overstreet": 5);
+add ("Nobles": 5);
+add ("Montanez": 5);
+add ("Luther": 5);
+add ("Clevenger": 5);
+add ("Brinkley": 5);
+add ("Trahan": 5);
+add ("Quarles": 5);
+add ("Pickering": 5);
+add ("Pederson": 5);
+add ("Jansen": 5);
+add ("Grantham": 5);
+add ("Gilchrist": 5);
+add ("Crespo": 5);
+add ("Aiken": 5);
+add ("Schell": 5);
+add ("Schaeffer": 5);
+add ("Lorenz": 5);
+add ("Leyva": 5);
+add ("Harms": 5);
+add ("Dyson": 5);
+add ("Wallis": 5);
+add ("Pease": 5);
+add ("Leavitt": 5);
+add ("Hyman": 5);
+add ("Cheng": 5);
+add ("Cavanaugh": 5);
+add ("Batts": 5);
+add ("Warden": 5);
+add ("Seaman": 5);
+add ("Rockwell": 5);
+add ("Quezada": 5);
+add ("Paxton": 5);
+add ("Linder": 5);
+add ("Houck": 5);
+add ("Fontaine": 5);
+add ("Durant": 5);
+add ("Caruso": 5);
+add ("Adler": 5);
+add ("Pimentel": 5);
+add ("Mize": 5);
+add ("Lytle": 5);
+add ("Donald": 5);
+add ("Cleary": 5);
+add ("Cason": 5);
+add ("Acker": 5);
+add ("Switzer": 5);
+add ("Salmon": 5);
+add ("Isaacs": 5);
+add ("Higginbotham": 5);
+add ("Han": 5);
+add ("Waterman": 5);
+add ("Vandyke": 5);
+add ("Stamper": 5);
+add ("Sisk": 5);
+add ("Shuler": 5);
+add ("Riddick": 5);
+add ("Redman": 5);
+add ("Mcmahan": 5);
+add ("Levesque": 5);
+add ("Hatton": 5);
+add ("Bronson": 5);
+add ("Bollinger": 5);
+add ("Arnett": 5);
+add ("Okeefe": 5);
+add ("Gerber": 5);
+add ("Gannon": 5);
+add ("Farnsworth": 5);
+add ("Baughman": 5);
+add ("Silverman": 5);
+add ("Satterfield": 5);
+add ("Royal": 5);
+add ("Mccrary": 5);
+add ("Kowalski": 5);
+add ("Joy": 5);
+add ("Grigsby": 5);
+add ("Greco": 5);
+add ("Cabral": 5);
+add ("Trout": 5);
+add ("Rinehart": 5);
+add ("Mahon": 5);
+add ("Linton": 5);
+add ("Gooden": 5);
+add ("Curley": 5);
+add ("Baugh": 5);
+add ("Wyman": 5);
+add ("Weiner": 5);
+add ("Schwab": 5);
+add ("Schuler": 5);
+add ("Morrissey": 5);
+add ("Mahan": 5);
+add ("Coy": 5);
+add ("Bunn": 5);
+add ("Andrew": 5);
+add ("Thrasher": 5);
+add ("Spear": 5);
+add ("Waggoner": 5);
+add ("Shelley": 5);
+add ("Robert": 5);
+add ("Qualls": 5);
+add ("Purdy": 5);
+add ("Mcwhorter": 5);
+add ("Mauldin": 5);
+add ("Mark": 5);
+add ("Jordon": 5);
+add ("Gilman": 5);
+add ("Perryman": 5);
+add ("Newsom": 5);
+add ("Menard": 5);
+add ("Martino": 5);
+add ("Graf": 5);
+add ("Billingsley": 5);
+add ("Artis": 5);
+add ("Simpkins": 5);
+add ("Salisbury": 5);
+add ("Quintanilla": 5);
+add ("Gilliland": 5);
+add ("Fraley": 5);
+add ("Foust": 5);
+add ("Crouse": 5);
+add ("Scarborough": 5);
+add ("Ngo": 5);
+add ("Grissom": 5);
+add ("Fultz": 5);
+add ("Rico": 5);
+add ("Marlow": 5);
+add ("Markham": 5);
+add ("Madrigal": 5);
+add ("Lawton": 5);
+add ("Barfield": 5);
+add ("Whiting": 5);
+add ("Varney": 5);
+add ("Schwarz": 5);
+add ("Huey": 5);
+add ("Gooch": 5);
+add ("Arce": 5);
+add ("Wheat": 5);
+add ("Truong": 5);
+add ("Poulin": 5);
+add ("Mackenzie": 5);
+add ("Leone": 5);
+add ("Hurtado": 5);
+add ("Selby": 5);
+add ("Gaither": 5);
+add ("Fortner": 5);
+add ("Culpepper": 5);
+add ("Coughlin": 5);
+add ("Brinson": 5);
+add ("Boudreau": 5);
+add ("Barkley": 5);
+add ("Bales": 5);
+add ("Stepp": 5);
+add ("Holm": 5);
+add ("Tan": 5);
+add ("Schilling": 5);
+add ("Morrell": 5);
+add ("Kahn": 5);
+add ("Heaton": 5);
+add ("Gamez": 5);
+add ("Douglass": 5);
+add ("Causey": 5);
+add ("Brothers": 5);
+add ("Turpin": 5);
+add ("Shanks": 5);
+add ("Schrader": 5);
+add ("Meek": 5);
+add ("Isom": 5);
+add ("Hardison": 5);
+add ("Carranza": 5);
+add ("Yanez": 5);
+add ("Way": 5);
+add ("Scroggins": 5);
+add ("Schofield": 5);
+add ("Runyon": 5);
+add ("Ratcliff": 5);
+add ("Murrell": 5);
+add ("Moeller": 5);
+add ("Irby": 5);
+add ("Currier": 5);
+add ("Butterfield": 5);
+add ("Yee": 5);
+add ("Ralston": 5);
+add ("Pullen": 5);
+add ("Pinson": 5);
+add ("Estep": 5);
+add ("East": 5);
+add ("Carbone": 5);
+add ("Lance": 5);
+add ("Hawks": 5);
+add ("Ellington": 5);
+add ("Casillas": 5);
+add ("Spurlock": 5);
+add ("Sikes": 5);
+add ("Motley": 5);
+add ("Mccartney": 5);
+add ("Kruger": 5);
+add ("Isbell": 5);
+add ("Houle": 5);
+add ("Francisco": 5);
+add ("Burk": 5);
+add ("Bone": 5);
+add ("Tomlin": 5);
+add ("Shelby": 5);
+add ("Quigley": 5);
+add ("Neumann": 5);
+add ("Lovelace": 5);
+add ("Fennell": 5);
+add ("Colby": 5);
+add ("Cheatham": 5);
+add ("Bustamante": 5);
+add ("Skidmore": 5);
+add ("Hidalgo": 5);
+add ("Forman": 5);
+add ("Culp": 5);
+add ("Bowens": 5);
+add ("Betancourt": 5);
+add ("Aquino": 5);
+add ("Robb": 5);
+add ("Rea": 5);
+add ("Milner": 5);
+add ("Martel": 5);
+add ("Gresham": 5);
+add ("Wiles": 5);
+add ("Ricketts": 5);
+add ("Gavin": 5);
+add ("Dowd": 5);
+add ("Collazo": 5);
+add ("Bostic": 5);
+add ("Blakely": 5);
+add ("Sherrod": 5);
+add ("Power": 5);
+add ("Kenyon": 5);
+add ("Gandy": 5);
+add ("Ebert": 5);
+add ("Deloach": 5);
+add ("Cary": 5);
+add ("Bull": 5);
+add ("Allard": 5);
+add ("Sauer": 5);
+add ("Robins": 5);
+add ("Olivares": 5);
+add ("Gillette": 5);
+add ("Chestnut": 5);
+add ("Bourque": 5);
+add ("Paine": 5);
+add ("Lyman": 5);
+add ("Hite": 5);
+add ("Hauser": 5);
+add ("Devore": 5);
+add ("Crawley": 5);
+add ("Chapa": 5);
+add ("Vu": 5);
+add ("Tobias": 5);
+add ("Talbert": 5);
+add ("Poindexter": 5);
+add ("Millard": 5);
+add ("Meador": 5);
+add ("Mcduffie": 5);
+add ("Mattox": 5);
+add ("Kraus": 5);
+add ("Harkins": 5);
+add ("Choate": 5);
+add ("Bess": 5);
+add ("Wren": 5);
+add ("Sledge": 5);
+add ("Sanborn": 5);
+add ("Outlaw": 5);
+add ("Kinder": 5);
+add ("Geary": 5);
+add ("Cornwell": 5);
+add ("Barclay": 5);
+add ("Adam": 5);
+add ("Abney": 5);
+add ("Seward": 5);
+add ("Rhoads": 5);
+add ("Howland": 5);
+add ("Fortier": 5);
+add ("Easter": 5);
+add ("Benner": 5);
+add ("Vines": 5);
+add ("Tubbs": 5);
+add ("Troutman": 5);
+add ("Rapp": 5);
+add ("Noe": 5);
+add ("Mccurdy": 5);
+add ("Harder": 5);
+add ("Deluca": 5);
+add ("Westmoreland": 5);
+add ("South": 5);
+add ("Havens": 5);
+add ("Guajardo": 5);
+add ("Ely": 5);
+add ("Clary": 5);
+add ("Seal": 5);
+add ("Meehan": 5);
+add ("Herzog": 5);
+add ("Guillen": 5);
+add ("Ashcraft": 5);
+add ("Waugh": 5);
+add ("Renner": 5);
+add ("Milam": 5);
+add ("Jung": 5);
+add ("Elrod": 5);
+add ("Churchill": 5);
+add ("Buford": 5);
+add ("Breaux": 5);
+add ("Bolin": 5);
+add ("Asher": 5);
+add ("Windham": 5);
+add ("Tirado": 5);
+add ("Pemberton": 5);
+add ("Nolen": 5);
+add ("Noland": 5);
+add ("Knott": 5);
+add ("Emmons": 5);
+add ("Cornish": 5);
+add ("Christenson": 5);
+add ("Brownlee": 5);
+add ("Barbee": 5);
+add ("Waldrop": 4);
+add ("Pitt": 4);
+add ("Olvera": 4);
+add ("Lombardi": 4);
+add ("Gruber": 4);
+add ("Gaffney": 4);
+add ("Eggleston": 4);
+add ("Banda": 4);
+add ("Archuleta": 4);
+add ("Still": 4);
+add ("Slone": 4);
+add ("Prewitt": 4);
+add ("Pfeiffer": 4);
+add ("Nettles": 4);
+add ("Mena": 4);
+add ("Mcadams": 4);
+add ("Henning": 4);
+add ("Gardiner": 4);
+add ("Cromwell": 4);
+add ("Chisholm": 4);
+add ("Burleson": 4);
+add ("Box": 4);
+add ("Vest": 4);
+add ("Oglesby": 4);
+add ("Mccarter": 4);
+add ("Malcolm": 4);
+add ("Lumpkin": 4);
+add ("Larue": 4);
+add ("Grey": 4);
+add ("Wofford": 4);
+add ("Vanhorn": 4);
+add ("Thorn": 4);
+add ("Teel": 4);
+add ("Swafford": 4);
+add ("Stclair": 4);
+add ("Stanfield": 4);
+add ("Ocampo": 4);
+add ("Herrmann": 4);
+add ("Hannon": 4);
+add ("Arsenault": 4);
+add ("Roush": 4);
+add ("Mcalister": 4);
+add ("Hiatt": 4);
+add ("Gunderson": 4);
+add ("Forsythe": 4);
+add ("Duggan": 4);
+add ("Delvalle": 4);
+add ("Cintron": 4);
+add ("Wilks": 4);
+add ("Weinstein": 4);
+add ("Uribe": 4);
+add ("Rizzo": 4);
+add ("Noyes": 4);
+add ("Mclendon": 4);
+add ("Gurley": 4);
+add ("Bethea": 4);
+add ("Winstead": 4);
+add ("Maples": 4);
+add ("Harry": 4);
+add ("Guyton": 4);
+add ("Giordano": 4);
+add ("Alderman": 4);
+add ("Valdes": 4);
+add ("Polanco": 4);
+add ("Pappas": 4);
+add ("Lively": 4);
+add ("Grogan": 4);
+add ("Griffiths": 4);
+add ("Bobo": 4);
+add ("Arevalo": 4);
+add ("Whitson": 4);
+add ("Sowell": 4);
+add ("Rendon": 4);
+add ("Matthew": 4);
+add ("Julian": 4);
+add ("Fernandes": 4);
+add ("Farrow": 4);
+add ("Edmond": 4);
+add ("Benavidez": 4);
+add ("Ayres": 4);
+add ("Alicea": 4);
+add ("Stump": 4);
+add ("Smalley": 4);
+add ("Seitz": 4);
+add ("Schulte": 4);
+add ("Gilley": 4);
+add ("Gallant": 4);
+add ("Dewey": 4);
+add ("Casper": 4);
+add ("Canfield": 4);
+add ("Wolford": 4);
+add ("Omalley": 4);
+add ("Mcnutt": 4);
+add ("Mcnulty": 4);
+add ("Mcgovern": 4);
+add ("Hardman": 4);
+add ("Harbin": 4);
+add ("Cowart": 4);
+add ("Chavarria": 4);
+add ("Brink": 4);
+add ("Beckett": 4);
+add ("Bagwell": 4);
+add ("Armstead": 4);
+add ("Anglin": 4);
+add ("Abreu": 4);
+add ("Reynoso": 4);
+add ("Krebs": 4);
+add ("Jett": 4);
+add ("Hoffmann": 4);
+add ("Greenfield": 4);
+add ("Forte": 4);
+add ("Burney": 4);
+add ("Broome": 4);
+add ("Sisson": 4);
+add ("Parent": 4);
+add ("Jude": 4);
+add ("Younger": 4);
+add ("Trammell": 4);
+add ("Partridge": 4);
+add ("Marvin": 4);
+add ("Mace": 4);
+add ("Lomax": 4);
+add ("Lemieux": 4);
+add ("Gossett": 4);
+add ("Frantz": 4);
+add ("Fogle": 4);
+add ("Cooney": 4);
+add ("Broughton": 4);
+add ("Pence": 4);
+add ("Paulsen": 4);
+add ("Neil": 4);
+add ("Muncy": 4);
+add ("Mcarthur": 4);
+add ("Hollins": 4);
+add ("Edward": 4);
+add ("Beauchamp": 4);
+add ("Withers": 4);
+add ("Osorio": 4);
+add ("Mulligan": 4);
+add ("Hoyle": 4);
+add ("Foy": 4);
+add ("Dockery": 4);
+add ("Cockrell": 4);
+add ("Begley": 4);
+add ("Amador": 4);
+add ("Roby": 4);
+add ("Rains": 4);
+add ("Lindquist": 4);
+add ("Gentile": 4);
+add ("Everhart": 4);
+add ("Bohannon": 4);
+add ("Wylie": 4);
+add ("Thao": 4);
+add ("Sommers": 4);
+add ("Purnell": 4);
+add ("Palma": 4);
+add ("Fortin": 4);
+add ("Dunning": 4);
+add ("Breeden": 4);
+add ("Vail": 4);
+add ("Phelan": 4);
+add ("Phan": 4);
+add ("Marx": 4);
+add ("Cosby": 4);
+add ("Colburn": 4);
+add ("Chong": 4);
+add ("Boling": 4);
+add ("Biddle": 4);
+add ("Ledesma": 4);
+add ("Gaddis": 4);
+add ("Denney": 4);
+add ("Chow": 4);
+add ("Bueno": 4);
+add ("Berrios": 4);
+add ("Wicker": 4);
+add ("Tolliver": 4);
+add ("Thibodeaux": 4);
+add ("Nagle": 4);
+add ("Lavoie": 4);
+add ("Fisk": 4);
+add ("Do": 4);
+add ("Crist": 4);
+add ("Barbosa": 4);
+add ("Reedy": 4);
+add ("March": 4);
+add ("Locklear": 4);
+add ("Kolb": 4);
+add ("Himes": 4);
+add ("Behrens": 4);
+add ("Beckwith": 4);
+add ("Beckham": 4);
+add ("Weems": 4);
+add ("Wahl": 4);
+add ("Shorter": 4);
+add ("Shackelford": 4);
+add ("Rees": 4);
+add ("Muse": 4);
+add ("Free": 4);
+add ("Cerda": 4);
+add ("Valadez": 4);
+add ("Thibodeau": 4);
+add ("Saavedra": 4);
+add ("Ridgeway": 4);
+add ("Reiter": 4);
+add ("Mchenry": 4);
+add ("Majors": 4);
+add ("Lachance": 4);
+add ("Keaton": 4);
+add ("Israel": 4);
+add ("Ferrara": 4);
+add ("Falcon": 4);
+add ("Clemens": 4);
+add ("Blocker": 4);
+add ("Applegate": 4);
+add ("Paz": 4);
+add ("Needham": 4);
+add ("Mojica": 4);
+add ("Kuykendall": 4);
+add ("Hamel": 4);
+add ("Escamilla": 4);
+add ("Doughty": 4);
+add ("Burchett": 4);
+add ("Ainsworth": 4);
+add ("Wilbur": 4);
+add ("Vidal": 4);
+add ("Upchurch": 4);
+add ("Thigpen": 4);
+add ("Strauss": 4);
+add ("Spruill": 4);
+add ("Sowers": 4);
+add ("Riggins": 4);
+add ("Ricker": 4);
+add ("Mccombs": 4);
+add ("Harlow": 4);
+add ("Garnett": 4);
+add ("Buffington": 4);
+add ("Yi": 4);
+add ("Sotelo": 4);
+add ("Olivas": 4);
+add ("Negrete": 4);
+add ("Morey": 4);
+add ("Macon": 4);
+add ("Logsdon": 4);
+add ("Lapointe": 4);
+add ("Florence": 4);
+add ("Cathey": 4);
+add ("Bigelow": 4);
+add ("Bello": 4);
+add ("Westfall": 4);
+add ("Stubblefield": 4);
+add ("Peak": 4);
+add ("Lindley": 4);
+add ("Jeffrey": 4);
+add ("Hein": 4);
+add ("Hawes": 4);
+add ("Farrington": 4);
+add ("Edge": 4);
+add ("Breen": 4);
+add ("Birch": 4);
+add ("Wilde": 4);
+add ("Steed": 4);
+add ("Sepulveda": 4);
+add ("Reinhardt": 4);
+add ("Proffitt": 4);
+add ("Minter": 4);
+add ("Messina": 4);
+add ("Mcnabb": 4);
+add ("Maier": 4);
+add ("Keeler": 4);
+add ("Gamboa": 4);
+add ("Donohue": 4);
+add ("Dexter": 4);
+add ("Basham": 4);
+add ("Shinn": 4);
+add ("Orlando": 4);
+add ("Crooks": 4);
+add ("Cota": 4);
+add ("Borders": 4);
+add ("Bills": 4);
+add ("Bachman": 4);
+add ("Tisdale": 4);
+add ("Tavares": 4);
+add ("Schmid": 4);
+add ("Pickard": 4);
+add ("Jasper": 4);
+add ("Gulley": 4);
+add ("Fonseca": 4);
+add ("Delossantos": 4);
+add ("Condon": 4);
+add ("Clancy": 4);
+add ("Batista": 4);
+add ("Wicks": 4);
+add ("Wadsworth": 4);
+add ("New": 4);
+add ("Martell": 4);
+add ("Lo": 4);
+add ("Littleton": 4);
+add ("Ison": 4);
+add ("Haag": 4);
+add ("Folsom": 4);
+add ("Brumfield": 4);
+add ("Broyles": 4);
+add ("Brito": 4);
+add ("Mireles": 4);
+add ("Mcdonnell": 4);
+add ("Leclair": 4);
+add ("Hamblin": 4);
+add ("Gough": 4);
+add ("Fanning": 4);
+add ("Binder": 4);
+add ("Winfield": 4);
+add ("Whitworth": 4);
+add ("Soriano": 4);
+add ("Palumbo": 4);
+add ("Newkirk": 4);
+add ("Mangum": 4);
+add ("Hutcherson": 4);
+add ("Comstock": 4);
+add ("Cecil": 4);
+add ("Carlin": 4);
+add ("Beall": 4);
+add ("Bair": 4);
+add ("Wendt": 4);
+add ("Watters": 4);
+add ("Walling": 4);
+add ("Putman": 4);
+add ("Otoole": 4);
+add ("Oliva": 4);
+add ("Morley": 4);
+add ("Mares": 4);
+add ("Lemus": 4);
+add ("Keener": 4);
+add ("Jeffery": 4);
+add ("Hundley": 4);
+add ("Dial": 4);
+add ("Damico": 4);
+add ("Billups": 4);
+add ("Strother": 4);
+add ("Mcfarlane": 4);
+add ("Lamm": 4);
+add ("Eaves": 4);
+add ("Crutcher": 4);
+add ("Caraballo": 4);
+add ("Canty": 4);
+add ("Atwell": 4);
+add ("Taft": 4);
+add ("Siler": 4);
+add ("Rust": 4);
+add ("Rawls": 4);
+add ("Rawlings": 4);
+add ("Prieto": 4);
+add ("Niles": 4);
+add ("Mcneely": 4);
+add ("Mcafee": 4);
+add ("Hulsey": 4);
+add ("Harlan": 4);
+add ("Hackney": 4);
+add ("Galvez": 4);
+add ("Escalante": 4);
+add ("Delagarza": 4);
+add ("Crider": 4);
+add ("Charlton": 4);
+add ("Bandy": 4);
+add ("Wilbanks": 4);
+add ("Stowe": 4);
+add ("Steinberg": 4);
+add ("Samson": 4);
+add ("Renfro": 4);
+add ("Masterson": 4);
+add ("Massie": 4);
+add ("Lanham": 4);
+add ("Haskell": 4);
+add ("Hamrick": 4);
+add ("Fort": 4);
+add ("Dehart": 4);
+add ("Card": 4);
+add ("Burdette": 4);
+add ("Branson": 4);
+add ("Bourne": 4);
+add ("Babin": 4);
+add ("Aleman": 4);
+add ("Worthy": 4);
+add ("Tibbs": 4);
+add ("Sweat": 4);
+add ("Smoot": 4);
+add ("Slack": 4);
+add ("Paradis": 4);
+add ("Packard": 4);
+add ("Mull": 4);
+add ("Luce": 4);
+add ("Houghton": 4);
+add ("Gantt": 4);
+add ("Furman": 4);
+add ("Danner": 4);
+add ("Christianson": 4);
+add ("Burge": 4);
+add ("Broderick": 4);
+add ("Ashford": 4);
+add ("Arndt": 4);
+add ("Almeida": 4);
+add ("Stallworth": 4);
+add ("Shade": 4);
+add ("Searcy": 4);
+add ("Sager": 4);
+add ("Noonan": 4);
+add ("Mclemore": 4);
+add ("Mcintire": 4);
+add ("Maxey": 4);
+add ("Lavigne": 4);
+add ("Jobe": 4);
+add ("Ireland": 4);
+add ("Ferrer": 4);
+add ("Falk": 4);
+add ("Edgar": 4);
+add ("Coffin": 4);
+add ("Byrnes": 4);
+add ("Aranda": 4);
+add ("Apodaca": 4);
+add ("Stamps": 4);
+add ("Rounds": 4);
+add ("Peek": 4);
+add ("Olmstead": 4);
+add ("Lewandowski": 4);
+add ("Kaminski": 4);
+add ("Her": 4);
+add ("Dunaway": 4);
+add ("Bruns": 4);
+add ("Brackett": 4);
+add ("Amato": 4);
+add ("Reich": 4);
+add ("Mcclung": 4);
+add ("Lacroix": 4);
+add ("Koontz": 4);
+add ("Herrick": 4);
+add ("Hardesty": 4);
+add ("Flanders": 4);
+add ("Cousins": 4);
+add ("Close": 4);
+add ("Cato": 4);
+add ("Cade": 4);
+add ("Vickery": 4);
+add ("Shank": 4);
+add ("Nagel": 4);
+add ("Dupuis": 4);
+add ("Croteau": 4);
+add ("Cotter": 4);
+add ("Cable": 4);
+add ("Stuckey": 4);
+add ("Stine": 4);
+add ("Porterfield": 4);
+add ("Pauley": 4);
+add ("Nye": 4);
+add ("Moffitt": 4);
+add ("Lu": 4);
+add ("Knudsen": 4);
+add ("Hardwick": 4);
+add ("Goforth": 4);
+add ("Dupont": 4);
+add ("Blunt": 4);
+add ("Barrows": 4);
+add ("Barnhill": 4);
+add ("Shull": 4);
+add ("Rash": 4);
+add ("Ralph": 4);
+add ("Penny": 4);
+add ("Lorenzo": 4);
+add ("Loftis": 4);
+add ("Lemay": 4);
+add ("Kitchens": 4);
+add ("Horvath": 4);
+add ("Grenier": 4);
+add ("Fuchs": 4);
+add ("Fairbanks": 4);
+add ("Culbertson": 4);
+add ("Calkins": 4);
+add ("Burnside": 4);
+add ("Beattie": 4);
+add ("Ashworth": 4);
+add ("Albertson": 4);
+add ("Wertz": 4);
+add ("Vo": 4);
+add ("Vaught": 4);
+add ("Vallejo": 4);
+add ("Tyree": 4);
+add ("Turk": 4);
+add ("Tuck": 4);
+add ("Tijerina": 4);
+add ("Sage": 4);
+add ("Picard": 4);
+add ("Peterman": 4);
+add ("Otis": 4);
+add ("Marroquin": 4);
+add ("Marr": 4);
+add ("Lantz": 4);
+add ("Hoang": 4);
+add ("Demarco": 4);
+add ("Daily": 4);
+add ("Cone": 4);
+add ("Berube": 4);
+add ("Barnette": 4);
+add ("Wharton": 4);
+add ("Stinnett": 4);
+add ("Slocum": 4);
+add ("Scanlon": 4);
+add ("Sander": 4);
+add ("Pinto": 4);
+add ("Mancuso": 4);
+add ("Lima": 4);
+add ("Judge": 4);
+add ("Headley": 4);
+add ("Epstein": 4);
+add ("Counts": 4);
+add ("Clarkson": 4);
+add ("Carnahan": 4);
+add ("Brice": 4);
+add ("Boren": 4);
+add ("Arteaga": 4);
+add ("Adame": 4);
+add ("Zook": 4);
+add ("Whittle": 4);
+add ("Whitehurst": 4);
+add ("Wenzel": 4);
+add ("Saxton": 4);
+add ("Rhea": 4);
+add ("Reddick": 4);
+add ("Puente": 4);
+add ("Hazel": 4);
+add ("Handley": 4);
+add ("Haggerty": 4);
+add ("Earley": 4);
+add ("Devlin": 4);
+add ("Dallas": 4);
+add ("Chaffin": 4);
+add ("Cady": 4);
+add ("Ahmed": 4);
+add ("Acuna": 4);
+add ("Solano": 4);
+add ("Sigler": 4);
+add ("Pollack": 4);
+add ("Pendergrass": 4);
+add ("Ostrander": 4);
+add ("Janes": 4);
+add ("Francois": 4);
+add ("Fine": 4);
+add ("Crutchfield": 4);
+add ("Cordell": 4);
+add ("Chamberlin": 4);
+add ("Brubaker": 4);
+add ("Baptiste": 4);
+add ("Willson": 4);
+add ("Reis": 4);
+add ("Neeley": 4);
+add ("Mullin": 4);
+add ("Mercier": 4);
+add ("Lira": 4);
+add ("Layman": 4);
+add ("Keeling": 4);
+add ("Higdon": 4);
+add ("Guest": 4);
+add ("Forrester": 4);
+add ("Espinal": 4);
+add ("Dion": 4);
+add ("Chapin": 4);
+add ("Carl": 4);
+add ("Warfield": 4);
+add ("Toledo": 4);
+add ("Pulido": 4);
+add ("Peebles": 4);
+add ("Nagy": 4);
+add ("Montague": 4);
+add ("Mello": 4);
+add ("Lear": 4);
+add ("Jaeger": 4);
+add ("Hogg": 4);
+add ("Graff": 4);
+add ("Furr": 4);
+add ("Derrick": 4);
+add ("Cave": 4);
+add ("Canada": 4);
+add ("Soliz": 4);
+add ("Poore": 4);
+add ("Mendenhall": 4);
+add ("Mclaurin": 4);
+add ("Maestas": 4);
+add ("Low": 4);
+add ("Gable": 4);
+add ("Belt": 4);
+add ("Barraza": 4);
+add ("Tillery": 4);
+add ("Snead": 4);
+add ("Pond": 4);
+add ("Neill": 4);
+add ("Mcculloch": 4);
+add ("Mccorkle": 4);
+add ("Lightfoot": 4);
+add ("Hutchings": 4);
+add ("Holloman": 4);
+add ("Harness": 4);
+add ("Dorn": 4);
+add ("Council": 4);
+add ("Bock": 4);
+add ("Zielinski": 4);
+add ("Turley": 4);
+add ("Treadwell": 4);
+add ("Stpierre": 4);
+add ("Starling": 4);
+add ("Somers": 4);
+add ("Oswald": 4);
+add ("Merrick": 4);
+add ("Marquis": 4);
+add ("Ivory": 4);
+add ("Easterling": 4);
+add ("Bivens": 4);
+add ("Truitt": 4);
+add ("Poston": 4);
+add ("Parry": 4);
+add ("Ontiveros": 4);
+add ("Olivarez": 4);
+add ("Neville": 4);
+add ("Moreau": 4);
+add ("Medlin": 4);
+add ("Ma": 4);
+add ("Lenz": 4);
+add ("Knowlton": 4);
+add ("Fairley": 4);
+add ("Cobbs": 4);
+add ("Chisolm": 4);
+add ("Bannister": 4);
+add ("Woodworth": 4);
+add ("Toler": 4);
+add ("Ocasio": 4);
+add ("Noriega": 4);
+add ("Neuman": 4);
+add ("Moye": 4);
+add ("Milburn": 4);
+add ("Mcclanahan": 4);
+add ("Lilley": 4);
+add ("Hanes": 4);
+add ("Flannery": 4);
+add ("Dellinger": 4);
+add ("Danielson": 4);
+add ("Conti": 4);
+add ("Blodgett": 4);
+add ("Beers": 4);
+add ("Weatherford": 4);
+add ("Strain": 4);
+add ("Karr": 4);
+add ("Hitt": 4);
+add ("Denham": 4);
+add ("Custer": 4);
+add ("Coble": 4);
+add ("Clough": 4);
+add ("Casteel": 4);
+add ("Bolduc": 4);
+add ("Batchelor": 4);
+add ("Ammons": 4);
+add ("Whitlow": 4);
+add ("Tierney": 4);
+add ("Staten": 4);
+add ("Sibley": 4);
+add ("Seifert": 4);
+add ("Schubert": 4);
+add ("Salcedo": 4);
+add ("Mattison": 4);
+add ("Laney": 4);
+add ("Haggard": 4);
+add ("Grooms": 4);
+add ("Dix": 4);
+add ("Dees": 4);
+add ("Cromer": 4);
+add ("Cooks": 4);
+add ("Colson": 4);
+add ("Caswell": 4);
+add ("Zarate": 4);
+add ("Swisher": 4);
+add ("Stacey": 4);
+add ("Shin": 4);
+add ("Ragan": 4);
+add ("Pridgen": 4);
+add ("Mcvey": 4);
+add ("Matheny": 4);
+add ("Leigh": 4);
+add ("Lafleur": 4);
+add ("Franz": 4);
+add ("Ferraro": 4);
+add ("Dugger": 4);
+add ("Whiteside": 4);
+add ("Rigsby": 4);
+add ("Mcmurray": 4);
+add ("Lehmann": 4);
+add ("Large": 4);
+add ("Jacoby": 4);
+add ("Hildebrand": 4);
+add ("Hendrick": 4);
+add ("Headrick": 4);
+add ("Goad": 4);
+add ("Fincher": 4);
+add ("Drury": 4);
+add ("Borges": 4);
+add ("Archibald": 4);
+add ("Albers": 4);
+add ("Woodcock": 4);
+add ("Trapp": 4);
+add ("Soares": 4);
+add ("Seaton": 4);
+add ("Richie": 4);
+add ("Monson": 4);
+add ("Luckett": 4);
+add ("Lindberg": 4);
+add ("Kopp": 4);
+add ("Keeton": 4);
+add ("Hsu": 4);
+add ("Healey": 4);
+add ("Garvey": 4);
+add ("Gaddy": 4);
+add ("Fain": 4);
+add ("Burchfield": 4);
+add ("Badger": 4);
+add ("Wentworth": 4);
+add ("Strand": 4);
+add ("Stack": 4);
+add ("Spooner": 4);
+add ("Saucier": 4);
+add ("Sales": 4);
+add ("Ruby": 4);
+add ("Ricci": 4);
+add ("Plunkett": 4);
+add ("Pannell": 4);
+add ("Ness": 4);
+add ("Leger": 4);
+add ("Hoy": 4);
+add ("Freitas": 4);
+add ("Fong": 4);
+add ("Elizondo": 4);
+add ("Duval": 4);
+add ("Chun": 4);
+add ("Calvin": 4);
+add ("Beaudoin": 4);
+add ("Urbina": 4);
+add ("Stock": 4);
+add ("Rickard": 4);
+add ("Partin": 4);
+add ("Moe": 4);
+add ("Mcgrew": 4);
+add ("Mcclintock": 4);
+add ("Ledoux": 4);
+add ("Forsyth": 4);
+add ("Faison": 4);
+add ("Devries": 4);
+add ("Bertrand": 4);
+add ("Wasson": 3);
+add ("Tilton": 3);
+add ("Scarbrough": 3);
+add ("Pride": 3);
+add ("Oh": 3);
+add ("Leung": 3);
+add ("Larry": 3);
+add ("Irvine": 3);
+add ("Garber": 3);
+add ("Denning": 3);
+add ("Corral": 3);
+add ("Colley": 3);
+add ("Castleberry": 3);
+add ("Bowlin": 3);
+add ("Bogan": 3);
+add ("Beale": 3);
+add ("Baines": 3);
+add ("True": 3);
+add ("Trice": 3);
+add ("Rayburn": 3);
+add ("Parkinson": 3);
+add ("Pak": 3);
+add ("Nunes": 3);
+add ("Mcmillen": 3);
+add ("Leahy": 3);
+add ("Lea": 3);
+add ("Kimmel": 3);
+add ("Higgs": 3);
+add ("Fulmer": 3);
+add ("Carden": 3);
+add ("Bedford": 3);
+add ("Taggart": 3);
+add ("Spearman": 3);
+add ("Register": 3);
+add ("Prichard": 3);
+add ("Morrill": 3);
+add ("Koonce": 3);
+add ("Heinz": 3);
+add ("Hedges": 3);
+add ("Guenther": 3);
+add ("Grice": 3);
+add ("Findley": 3);
+add ("Earle": 3);
+add ("Dover": 3);
+add ("Creighton": 3);
+add ("Boothe": 3);
+add ("Bayer": 3);
+add ("Arreola": 3);
+add ("Vitale": 3);
+add ("Valles": 3);
+add ("See": 3);
+add ("Raney": 3);
+add ("Peter": 3);
+add ("Osgood": 3);
+add ("Lowell": 3);
+add ("Hanlon": 3);
+add ("Burley": 3);
+add ("Bounds": 3);
+add ("Worden": 3);
+add ("Weatherly": 3);
+add ("Vetter": 3);
+add ("Tanaka": 3);
+add ("Stiltner": 3);
+add ("Sell": 3);
+add ("Nevarez": 3);
+add ("Mosby": 3);
+add ("Montero": 3);
+add ("Melancon": 3);
+add ("Harter": 3);
+add ("Hamer": 3);
+add ("Goble": 3);
+add ("Gladden": 3);
+add ("Gist": 3);
+add ("Ginn": 3);
+add ("Akin": 3);
+add ("Zaragoza": 3);
+add ("Towns": 3);
+add ("Tarver": 3);
+add ("Sammons": 3);
+add ("Royster": 3);
+add ("Oreilly": 3);
+add ("Muir": 3);
+add ("Morehead": 3);
+add ("Luster": 3);
+add ("Kingsley": 3);
+add ("Kelso": 3);
+add ("Grisham": 3);
+add ("Glynn": 3);
+add ("Baumann": 3);
+add ("Alves": 3);
+add ("Yount": 3);
+add ("Tamayo": 3);
+add ("Tam": 3);
+add ("Paterson": 3);
+add ("Oates": 3);
+add ("Menendez": 3);
+add ("Longo": 3);
+add ("Hargis": 3);
+add ("Greenlee": 3);
+add ("Gillen": 3);
+add ("Desantis": 3);
+add ("Conover": 3);
+add ("Breedlove": 3);
+add ("Wayne": 3);
+add ("Sumpter": 3);
+add ("Scherer": 3);
+add ("Rupp": 3);
+add ("Reichert": 3);
+add ("Heredia": 3);
+add ("Fallon": 3);
+add ("Creel": 3);
+add ("Cohn": 3);
+add ("Clemmons": 3);
+add ("Casas": 3);
+add ("Bickford": 3);
+add ("Belton": 3);
+add ("Bach": 3);
+add ("Williford": 3);
+add ("Whitcomb": 3);
+add ("Tennant": 3);
+add ("Sutter": 3);
+add ("Stull": 3);
+add ("Sessions": 3);
+add ("Mccallum": 3);
+add ("Manson": 3);
+add ("Langlois": 3);
+add ("Keel": 3);
+add ("Keegan": 3);
+add ("Emanuel": 3);
+add ("Dangelo": 3);
+add ("Dancy": 3);
+add ("Damron": 3);
+add ("Clapp": 3);
+add ("Clanton": 3);
+add ("Bankston": 3);
+add ("Trinidad": 3);
+add ("Oliveira": 3);
+add ("Mintz": 3);
+add ("Mcinnis": 3);
+add ("Martens": 3);
+add ("Mabe": 3);
+add ("Laster": 3);
+add ("Jolley": 3);
+add ("Irish": 3);
+add ("Hildreth": 3);
+add ("Hefner": 3);
+add ("Glaser": 3);
+add ("Duckett": 3);
+add ("Demers": 3);
+add ("Brockman": 3);
+add ("Blais": 3);
+add ("Back": 3);
+add ("Alcorn": 3);
+add ("Agnew": 3);
+add ("Toliver": 3);
+add ("Tice": 3);
+add ("Song": 3);
+add ("Seeley": 3);
+add ("Najera": 3);
+add ("Musser": 3);
+add ("Mcfall": 3);
+add ("Laplante": 3);
+add ("Galvin": 3);
+add ("Fajardo": 3);
+add ("Doan": 3);
+add ("Coyne": 3);
+add ("Copley": 3);
+add ("Clawson": 3);
+add ("Cheung": 3);
+add ("Barone": 3);
+add ("Wynne": 3);
+add ("Woodley": 3);
+add ("Tremblay": 3);
+add ("Stoll": 3);
+add ("Sparrow": 3);
+add ("Sparkman": 3);
+add ("Schweitzer": 3);
+add ("Sasser": 3);
+add ("Samples": 3);
+add ("Roney": 3);
+add ("Ramon": 3);
+add ("Legg": 3);
+add ("Lai": 3);
+add ("Joe": 3);
+add ("Heim": 3);
+add ("Farias": 3);
+add ("Concepcion": 3);
+add ("Colwell": 3);
+add ("Christman": 3);
+add ("Bratcher": 3);
+add ("Alba": 3);
+add ("Winchester": 3);
+add ("Upshaw": 3);
+add ("Southerland": 3);
+add ("Sorrell": 3);
+add ("Shay": 3);
+add ("Sells": 3);
+add ("Mount": 3);
+add ("Mccloskey": 3);
+add ("Martindale": 3);
+add ("Luttrell": 3);
+add ("Loveless": 3);
+add ("Lovejoy": 3);
+add ("Linares": 3);
+add ("Latimer": 3);
+add ("Holly": 3);
+add ("Embry": 3);
+add ("Coombs": 3);
+add ("Bratton": 3);
+add ("Bostick": 3);
+add ("Boss": 3);
+add ("Venable": 3);
+add ("Tuggle": 3);
+add ("Toro": 3);
+add ("Staggs": 3);
+add ("Sandlin": 3);
+add ("Jefferies": 3);
+add ("Heckman": 3);
+add ("Griffis": 3);
+add ("Crayton": 3);
+add ("Clem": 3);
+add ("Button": 3);
+add ("Browder": 3);
+add ("Allan": 3);
+add ("Thorton": 3);
+add ("Sturgill": 3);
+add ("Sprouse": 3);
+add ("Royer": 3);
+add ("Rousseau": 3);
+add ("Ridenour": 3);
+add ("Pogue": 3);
+add ("Perales": 3);
+add ("Peeples": 3);
+add ("Metzler": 3);
+add ("Mesa": 3);
+add ("Mccutcheon": 3);
+add ("Mcbee": 3);
+add ("Jay": 3);
+add ("Hornsby": 3);
+add ("Heffner": 3);
+add ("Corrigan": 3);
+add ("Armijo": 3);
+add ("Vue": 3);
+add ("Romeo": 3);
+add ("Plante": 3);
+add ("Peyton": 3);
+add ("Paredes": 3);
+add ("Macklin": 3);
+add ("Hussey": 3);
+add ("Hodgson": 3);
+add ("Granados": 3);
+add ("Frias": 3);
+add ("Carman": 3);
+add ("Brent": 3);
+add ("Becnel": 3);
+add ("Batten": 3);
+add ("Almanza": 3);
+add ("Turney": 3);
+add ("Teal": 3);
+add ("Sturgeon": 3);
+add ("Meeker": 3);
+add ("Mcdaniels": 3);
+add ("Limon": 3);
+add ("Keeney": 3);
+add ("Kee": 3);
+add ("Hutto": 3);
+add ("Holguin": 3);
+add ("Gorham": 3);
+add ("Fishman": 3);
+add ("Fierro": 3);
+add ("Blanchette": 3);
+add ("Rodrigue": 3);
+add ("Reddy": 3);
+add ("Osburn": 3);
+add ("Oden": 3);
+add ("Lerma": 3);
+add ("Kirkwood": 3);
+add ("Keefer": 3);
+add ("Haugen": 3);
+add ("Hammett": 3);
+add ("Chalmers": 3);
+add ("Carlos": 3);
+add ("Brinkman": 3);
+add ("Baumgartner": 3);
+add ("Zhang": 3);
+add ("Valerio": 3);
+add ("Tellez": 3);
+add ("Steffen": 3);
+add ("Shumate": 3);
+add ("Sauls": 3);
+add ("Ripley": 3);
+add ("Kemper": 3);
+add ("Jacks": 3);
+add ("Guffey": 3);
+add ("Evers": 3);
+add ("Craddock": 3);
+add ("Carvalho": 3);
+add ("Blaylock": 3);
+add ("Banuelos": 3);
+add ("Balderas": 3);
+add ("Wooden": 3);
+add ("Wheaton": 3);
+add ("Turnbull": 3);
+add ("Shuman": 3);
+add ("Pointer": 3);
+add ("Mosier": 3);
+add ("Mccue": 3);
+add ("Ligon": 3);
+add ("Kozlowski": 3);
+add ("Johansen": 3);
+add ("Ingle": 3);
+add ("Herr": 3);
+add ("Briones": 3);
+add ("Southern": 3);
+add ("Snipes": 3);
+add ("Rickman": 3);
+add ("Pipkin": 3);
+add ("Peace": 3);
+add ("Pantoja": 3);
+add ("Orosco": 3);
+add ("Moniz": 3);
+add ("Lawless": 3);
+add ("Kunkel": 3);
+add ("Hibbard": 3);
+add ("Galarza": 3);
+add ("Enos": 3);
+add ("Bussey": 3);
+add ("Settle": 3);
+add ("Schott": 3);
+add ("Salcido": 3);
+add ("Perreault": 3);
+add ("Mcdougal": 3);
+add ("Mccool": 3);
+add ("Haight": 3);
+add ("Garris": 3);
+add ("Ferry": 3);
+add ("Easton": 3);
+add ("Conyers": 3);
+add ("Atherton": 3);
+add ("Wimberly": 3);
+add ("Utley": 3);
+add ("Stephen": 3);
+add ("Spellman": 3);
+add ("Smithson": 3);
+add ("Slagle": 3);
+add ("Skipper": 3);
+add ("Ritchey": 3);
+add ("Rand": 3);
+add ("Petit": 3);
+add ("Osullivan": 3);
+add ("Oaks": 3);
+add ("Nutt": 3);
+add ("Mcvay": 3);
+add ("Mccreary": 3);
+add ("Mayhew": 3);
+add ("Knoll": 3);
+add ("Jewett": 3);
+add ("Harwood": 3);
+add ("Hailey": 3);
+add ("Cardoza": 3);
+add ("Ashe": 3);
+add ("Arriaga": 3);
+add ("Andres": 3);
+add ("Zeller": 3);
+add ("Wirth": 3);
+add ("Whitmire": 3);
+add ("Stauffer": 3);
+add ("Spring": 3);
+add ("Rountree": 3);
+add ("Redden": 3);
+add ("Mccaffrey": 3);
+add ("Martz": 3);
+add ("Loving": 3);
+add ("Larose": 3);
+add ("Langdon": 3);
+add ("Humes": 3);
+add ("Gaskin": 3);
+add ("Faber": 3);
+add ("Doll": 3);
+add ("Devito": 3);
+add ("Cass": 3);
+add ("Almond": 3);
+add ("Wingfield": 3);
+add ("Wingate": 3);
+add ("Villareal": 3);
+add ("Tyner": 3);
+add ("Smothers": 3);
+add ("Severson": 3);
+add ("Reno": 3);
+add ("Pennell": 3);
+add ("Maupin": 3);
+add ("Leighton": 3);
+add ("Janssen": 3);
+add ("Hassell": 3);
+add ("Hallman": 3);
+add ("Halcomb": 3);
+add ("Folse": 3);
+add ("Fitzsimmons": 3);
+add ("Fahey": 3);
+add ("Cranford": 3);
+add ("Bolen": 3);
+add ("Battles": 3);
+add ("Battaglia": 3);
+add ("Wooldridge": 3);
+add ("Weed": 3);
+add ("Trask": 3);
+add ("Rosser": 3);
+add ("Regalado": 3);
+add ("Mcewen": 3);
+add ("Keefe": 3);
+add ("Fuqua": 3);
+add ("Echevarria": 3);
+add ("Domingo": 3);
+add ("Dang": 3);
+add ("Caro": 3);
+add ("Boynton": 3);
+add ("Andrus": 3);
+add ("Wild": 3);
+add ("Viera": 3);
+add ("Vanmeter": 3);
+add ("Taber": 3);
+add ("Spradlin": 3);
+add ("Seibert": 3);
+add ("Provost": 3);
+add ("Prentice": 3);
+add ("Oliphant": 3);
+add ("Laporte": 3);
+add ("Hwang": 3);
+add ("Hatchett": 3);
+add ("Hass": 3);
+add ("Greiner": 3);
+add ("Freedman": 3);
+add ("Covert": 3);
+add ("Chilton": 3);
+add ("Byars": 3);
+add ("Wiese": 3);
+add ("Venegas": 3);
+add ("Swank": 3);
+add ("Shrader": 3);
+add ("Roderick": 3);
+add ("Roberge": 3);
+add ("Mullis": 3);
+add ("Mortensen": 3);
+add ("Mccune": 3);
+add ("Marlowe": 3);
+add ("Kirchner": 3);
+add ("Keck": 3);
+add ("Isaacson": 3);
+add ("Hostetler": 3);
+add ("Halverson": 3);
+add ("Gunther": 3);
+add ("Griswold": 3);
+add ("Gerard": 3);
+add ("Fenner": 3);
+add ("Durden": 3);
+add ("Blackwood": 3);
+add ("Bertram": 3);
+add ("Ahrens": 3);
+add ("Sawyers": 3);
+add ("Savoy": 3);
+add ("Nabors": 3);
+add ("Mcswain": 3);
+add ("Mackay": 3);
+add ("Loy": 3);
+add ("Lavender": 3);
+add ("Lash": 3);
+add ("Labbe": 3);
+add ("Jessup": 3);
+add ("Hubert": 3);
+add ("Fullerton": 3);
+add ("Donnell": 3);
+add ("Cruse": 3);
+add ("Crittenden": 3);
+add ("Correia": 3);
+add ("Centeno": 3);
+add ("Caudle": 3);
+add ("Canady": 3);
+add ("Callender": 3);
+add ("Alarcon": 3);
+add ("Ahern": 3);
+add ("Winfrey": 3);
+add ("Tribble": 3);
+add ("Tom": 3);
+add ("Styles": 3);
+add ("Salley": 3);
+add ("Roden": 3);
+add ("Musgrove": 3);
+add ("Minnick": 3);
+add ("Fortenberry": 3);
+add ("Carrion": 3);
+add ("Bunting": 3);
+add ("Bethel": 3);
+add ("Batiste": 3);
+add ("Woo": 3);
+add ("Whited": 3);
+add ("Underhill": 3);
+add ("Stillwell": 3);
+add ("Silvia": 3);
+add ("Rauch": 3);
+add ("Pippin": 3);
+add ("Perrin": 3);
+add ("Messenger": 3);
+add ("Mancini": 3);
+add ("Lister": 3);
+add ("Kinard": 3);
+add ("Hartmann": 3);
+add ("Fleck": 3);
+add ("Broadway": 3);
+add ("Wilt": 3);
+add ("Treadway": 3);
+add ("Thornhill": 3);
+add ("Speed": 3);
+add ("Spalding": 3);
+add ("Sam": 3);
+add ("Rafferty": 3);
+add ("Pitre": 3);
+add ("Patino": 3);
+add ("Ordonez": 3);
+add ("Linkous": 3);
+add ("Kelleher": 3);
+add ("Homan": 3);
+add ("Holiday": 3);
+add ("Galbraith": 3);
+add ("Feeney": 3);
+add ("Dorris": 3);
+add ("Curtin": 3);
+add ("Coward": 3);
+add ("Camarillo": 3);
+add ("Buss": 3);
+add ("Bunnell": 3);
+add ("Bolt": 3);
+add ("Beeler": 3);
+add ("Autry": 3);
+add ("Alcala": 3);
+add ("Witte": 3);
+add ("Wentz": 3);
+add ("Stidham": 3);
+add ("Shively": 3);
+add ("Nunley": 3);
+add ("Meacham": 3);
+add ("Martins": 3);
+add ("Lemke": 3);
+add ("Lefebvre": 3);
+add ("Kaye": 3);
+add ("Hynes": 3);
+add ("Horowitz": 3);
+add ("Hoppe": 3);
+add ("Holcombe": 3);
+add ("Estrella": 3);
+add ("Dunne": 3);
+add ("Derr": 3);
+add ("Cochrane": 3);
+add ("Brittain": 3);
+add ("Bedard": 3);
+add ("Beauregard": 3);
+add ("Torrence": 3);
+add ("Strunk": 3);
+add ("Soria": 3);
+add ("Simonson": 3);
+add ("Shumaker": 3);
+add ("Scoggins": 3);
+add ("Packer": 3);
+add ("Oconner": 3);
+add ("Moriarty": 3);
+add ("Leroy": 3);
+add ("Kuntz": 3);
+add ("Ives": 3);
+add ("Hutcheson": 3);
+add ("Horan": 3);
+add ("Hales": 3);
+add ("Garmon": 3);
+add ("Fitts": 3);
+add ("Dell": 3);
+add ("Bohn": 3);
+add ("Atchison": 3);
+add ("Worth": 3);
+add ("Wisniewski": 3);
+add ("Will": 3);
+add ("Vanwinkle": 3);
+add ("Sturm": 3);
+add ("Sallee": 3);
+add ("Prosser": 3);
+add ("Moen": 3);
+add ("Lundberg": 3);
+add ("Kunz": 3);
+add ("Kohl": 3);
+add ("Keane": 3);
+add ("Jorgenson": 3);
+add ("Jaynes": 3);
+add ("Funderburk": 3);
+add ("Freed": 3);
+add ("Frame": 3);
+add ("Durr": 3);
+add ("Creamer": 3);
+add ("Cosgrove": 3);
+add ("Candelaria": 3);
+add ("Berlin": 3);
+add ("Batson": 3);
+add ("Vanhoose": 3);
+add ("Thomsen": 3);
+add ("Teeter": 3);
+add ("Sommer": 3);
+add ("Smyth": 3);
+add ("Sena": 3);
+add ("Redmon": 3);
+add ("Orellana": 3);
+add ("Maness": 3);
+add ("Lennon": 3);
+add ("Heflin": 3);
+add ("Goulet": 3);
+add ("Frick": 3);
+add ("Forney": 3);
+add ("Dollar": 3);
+add ("Bunker": 3);
+add ("Asbury": 3);
+add ("Aguiar": 3);
+add ("Talbott": 3);
+add ("Southard": 3);
+add ("Pleasant": 3);
+add ("Mowery": 3);
+add ("Mears": 3);
+add ("Lemmon": 3);
+add ("Krieger": 3);
+add ("Hickson": 3);
+add ("Gracia": 3);
+add ("Elston": 3);
+add ("Duong": 3);
+add ("Delgadillo": 3);
+add ("Dayton": 3);
+add ("Dasilva": 3);
+add ("Conaway": 3);
+add ("Catron": 3);
+add ("Bruton": 3);
+add ("Bradbury": 3);
+add ("Bordelon": 3);
+add ("Bivins": 3);
+add ("Bittner": 3);
+add ("Bergstrom": 3);
+add ("Beals": 3);
+add ("Abell": 3);
+add ("Whelan": 3);
+add ("Travers": 3);
+add ("Tejada": 3);
+add ("Pulley": 3);
+add ("Pino": 3);
+add ("Norfleet": 3);
+add ("Nealy": 3);
+add ("Maes": 3);
+add ("Loper": 3);
+add ("Held": 3);
+add ("Gerald": 3);
+add ("Gatewood": 3);
+add ("Frierson": 3);
+add ("Freund": 3);
+add ("Finnegan": 3);
+add ("Cupp": 3);
+add ("Covey": 3);
+add ("Catalano": 3);
+add ("Boehm": 3);
+add ("Bader": 3);
+add ("Yoon": 3);
+add ("Walston": 3);
+add ("Tenney": 3);
+add ("Sipes": 3);
+add ("Roller": 3);
+add ("Rawlins": 3);
+add ("Medlock": 3);
+add ("Mccaskill": 3);
+add ("Mccallister": 3);
+add ("Marcotte": 3);
+add ("Maclean": 3);
+add ("Hughey": 3);
+add ("Henke": 3);
+add ("Harwell": 3);
+add ("Gladney": 3);
+add ("Gilson": 3);
+add ("Dew": 3);
+add ("Chism": 3);
+add ("Caskey": 3);
+add ("Brandenburg": 3);
+add ("Baylor": 3);
+add ("Villasenor": 3);
+add ("Veal": 3);
+add ("Van": 3);
+add ("Thatcher": 3);
+add ("Stegall": 3);
+add ("Shore": 3);
+add ("Petrie": 3);
+add ("Nowlin": 3);
+add ("Navarrete": 3);
+add ("Muhammad": 3);
+add ("Lombard": 3);
+add ("Loftin": 3);
+add ("Lemaster": 3);
+add ("Kroll": 3);
+add ("Kovach": 3);
+add ("Kimbrell": 3);
+add ("Kidwell": 3);
+add ("Hershberger": 3);
+add ("Fulcher": 3);
+add ("Eng": 3);
+add ("Cantwell": 3);
+add ("Bustos": 3);
+add ("Boland": 3);
+add ("Bobbitt": 3);
+add ("Binkley": 3);
+add ("Wester": 3);
+add ("Weis": 3);
+add ("Verdin": 3);
+add ("Tong": 3);
+add ("Tiller": 3);
+add ("Sisco": 3);
+add ("Sharkey": 3);
+add ("Seymore": 3);
+add ("Rosenbaum": 3);
+add ("Rohr": 3);
+add ("Quinonez": 3);
+add ("Pinkston": 3);
+add ("Nation": 3);
+add ("Malley": 3);
+add ("Logue": 3);
+add ("Lessard": 3);
+add ("Lerner": 3);
+add ("Lebron": 3);
+add ("Krauss": 3);
+add ("Klinger": 3);
+add ("Halstead": 3);
+add ("Haller": 3);
+add ("Getz": 3);
+add ("Burrow": 3);
+add ("Brant": 3);
+add ("Alger": 3);
+add ("Victor": 3);
+add ("Shores": 3);
+add ("Scully": 3);
+add ("Pounds": 3);
+add ("Pfeifer": 3);
+add ("Perron": 3);
+add ("Nelms": 3);
+add ("Munn": 3);
+add ("Mcmaster": 3);
+add ("Mckenney": 3);
+add ("Manns": 3);
+add ("Knudson": 3);
+add ("Hutchens": 3);
+add ("Huskey": 3);
+add ("Goebel": 3);
+add ("Flagg": 3);
+add ("Cushman": 3);
+add ("Click": 3);
+add ("Castellano": 3);
+add ("Carder": 3);
+add ("Bumgarner": 3);
+add ("Blaine": 3);
+add ("Bible": 3);
+add ("Wampler": 3);
+add ("Spinks": 3);
+add ("Robson": 3);
+add ("Neel": 3);
+add ("Mcreynolds": 3);
+add ("Mathias": 3);
+add ("Maas": 3);
+add ("Loera": 3);
+add ("Kasper": 3);
+add ("Jose": 3);
+add ("Jenson": 3);
+add ("Florez": 3);
+add ("Coons": 3);
+add ("Buckingham": 3);
+add ("Brogan": 3);
+add ("Berryman": 3);
+add ("Wilmoth": 3);
+add ("Wilhite": 3);
+add ("Thrash": 3);
+add ("Shephard": 3);
+add ("Seidel": 3);
+add ("Schulze": 3);
+add ("Roldan": 3);
+add ("Pettis": 3);
+add ("Obryan": 3);
+add ("Maki": 3);
+add ("Mackie": 3);
+add ("Hatley": 3);
+add ("Frazer": 3);
+add ("Fiore": 3);
+add ("Falls": 3);
+add ("Chesser": 3);
+add ("Bui": 3);
+add ("Bottoms": 3);
+add ("Bisson": 3);
+add ("Benefield": 3);
+add ("Allman": 3);
+add ("Wilke": 3);
+add ("Trudeau": 3);
+add ("Timm": 3);
+add ("Shifflett": 3);
+add ("Rau": 3);
+add ("Mundy": 3);
+add ("Milliken": 3);
+add ("Mayers": 3);
+add ("Leake": 3);
+add ("Kohn": 3);
+add ("Huntington": 3);
+add ("Horsley": 3);
+add ("Hermann": 3);
+add ("Guerin": 3);
+add ("Fryer": 3);
+add ("Frizzell": 3);
+add ("Foret": 3);
+add ("Flemming": 3);
+add ("Fife": 3);
+add ("Criswell": 3);
+add ("Carbajal": 3);
+add ("Bozeman": 3);
+add ("Boisvert": 3);
+add ("Archie": 3);
+add ("Antonio": 3);
+add ("Angulo": 3);
+add ("Wallen": 3);
+add ("Tapp": 3);
+add ("Silvers": 3);
+add ("Ramsay": 3);
+add ("Oshea": 3);
+add ("Orta": 3);
+add ("Moll": 3);
+add ("Mckeever": 3);
+add ("Mcgehee": 3);
+add ("Luciano": 3);
+add ("Linville": 3);
+add ("Kiefer": 3);
+add ("Ketchum": 3);
+add ("Howerton": 3);
+add ("Groce": 3);
+add ("Gaylord": 3);
+add ("Gass": 3);
+add ("Fusco": 3);
+add ("Corbitt": 3);
+add ("Blythe": 3);
+add ("Betz": 3);
+add ("Bartels": 3);
+add ("Amaral": 3);
+add ("Aiello": 3);
+add ("Yoo": 3);
+add ("Weddle": 3);
+add ("Troy": 3);
+add ("Sun": 3);
+add ("Sperry": 3);
+add ("Seiler": 3);
+add ("Runyan": 3);
+add ("Raley": 3);
+add ("Overby": 3);
+add ("Osteen": 3);
+add ("Olds": 3);
+add ("Mckeown": 3);
+add ("Mauro": 3);
+add ("Matney": 3);
+add ("Lauer": 3);
+add ("Lattimore": 3);
+add ("Hindman": 3);
+add ("Hartwell": 3);
+add ("Fredrickson": 3);
+add ("Fredericks": 3);
+add ("Espino": 3);
+add ("Clegg": 3);
+add ("Carswell": 3);
+add ("Cambell": 3);
+add ("Burkholder": 3);
+add ("August": 3);
+add ("Woodbury": 3);
+add ("Welker": 3);
+add ("Totten": 3);
+add ("Thornburg": 3);
+add ("Theriault": 3);
+add ("Stitt": 3);
+add ("Stamm": 3);
+add ("Stackhouse": 3);
+add ("Simone": 3);
+add ("Scholl": 3);
+add ("Saxon": 3);
+add ("Rife": 3);
+add ("Razo": 3);
+add ("Quinlan": 3);
+add ("Pinkerton": 3);
+add ("Olivo": 3);
+add ("Nesmith": 3);
+add ("Nall": 3);
+add ("Mattos": 3);
+add ("Leak": 3);
+add ("Lafferty": 3);
+add ("Justus": 3);
+add ("Giron": 3);
+add ("Geer": 3);
+add ("Fielder": 3);
+add ("Eagle": 3);
+add ("Drayton": 3);
+add ("Dortch": 3);
+add ("Conners": 3);
+add ("Conger": 3);
+add ("Chau": 3);
+add ("Boatwright": 3);
+add ("Billiot": 3);
+add ("Barden": 3);
+add ("Armenta": 3);
+add ("Antoine": 3);
+add ("Tibbetts": 3);
+add ("Steadman": 3);
+add ("Slattery": 3);
+add ("Sides": 3);
+add ("Rinaldi": 3);
+add ("Raynor": 3);
+add ("Rayford": 3);
+add ("Pinckney": 3);
+add ("Pettigrew": 3);
+add ("Nickel": 3);
+add ("Milne": 3);
+add ("Matteson": 3);
+add ("Halsey": 3);
+add ("Gonsalves": 3);
+add ("Fellows": 3);
+add ("Durand": 3);
+add ("Desimone": 3);
+add ("Cowley": 3);
+add ("Cowles": 3);
+add ("Brill": 3);
+add ("Barham": 3);
+add ("Barela": 3);
+add ("Barba": 3);
+add ("Ashmore": 3);
+add ("Withrow": 3);
+add ("Valenti": 3);
+add ("Tejeda": 3);
+add ("Spriggs": 3);
+add ("Sayre": 3);
+add ("Salerno": 3);
+add ("Place": 3);
+add ("Peltier": 3);
+add ("Peel": 3);
+add ("Merriman": 3);
+add ("Matheson": 3);
+add ("Lowman": 3);
+add ("Lindstrom": 3);
+add ("Hyland": 3);
+add ("Homer": 3);
+add ("Ha": 3);
+add ("Giroux": 3);
+add ("Fries": 3);
+add ("Frasier": 3);
+add ("Earls": 3);
+add ("Dugas": 3);
+add ("Damon": 3);
+add ("Dabney": 3);
+add ("Collado": 3);
+add ("Briseno": 3);
+add ("Baxley": 3);
+add ("Andre": 3);
+add ("Word": 3);
+add ("Whyte": 3);
+add ("Wenger": 3);
+add ("Vanover": 3);
+add ("Vanburen": 3);
+add ("Thiel": 3);
+add ("Schindler": 3);
+add ("Schiller": 3);
+add ("Rigby": 3);
+add ("Pomeroy": 3);
+add ("Passmore": 3);
+add ("Marble": 3);
+add ("Manzo": 3);
+add ("Mahaffey": 3);
+add ("Lindgren": 3);
+add ("Laflamme": 3);
+add ("Greathouse": 3);
+add ("Fite": 3);
+add ("Ferrari": 3);
+add ("Calabrese": 3);
+add ("Bayne": 3);
+add ("Yamamoto": 3);
+add ("Wick": 3);
+add ("Townes": 3);
+add ("Thames": 3);
+add ("Steel": 3);
+add ("Reinhart": 3);
+add ("Peeler": 3);
+add ("Naranjo": 3);
+add ("Montez": 3);
+add ("Mcdade": 3);
+add ("Mast": 3);
+add ("Markley": 3);
+add ("Marchand": 3);
+add ("Leeper": 3);
+add ("Kong": 3);
+add ("Kellum": 3);
+add ("Hudgens": 3);
+add ("Hennessey": 3);
+add ("Hadden": 3);
+add ("Guess": 3);
+add ("Gainey": 3);
+add ("Coppola": 3);
+add ("Borrego": 3);
+add ("Bolling": 3);
+add ("Beane": 3);
+add ("Ault": 3);
+add ("Slaton": 3);
+add ("Poland": 3);
+add ("Pape": 3);
+add ("Null": 3);
+add ("Mulkey": 3);
+add ("Lightner": 3);
+add ("Langer": 3);
+add ("Hillard": 3);
+add ("Glasgow": 3);
+add ("Fabian": 3);
+add ("Ethridge": 3);
+add ("Enright": 3);
+add ("Derosa": 3);
+add ("Baskin": 3);
+add ("Alfred": 3);
+add ("Weinberg": 3);
+add ("Turman": 3);
+add ("Tinker": 3);
+add ("Somerville": 3);
+add ("Pardo": 3);
+add ("Noll": 3);
+add ("Lashley": 3);
+add ("Ingraham": 3);
+add ("Hiller": 3);
+add ("Hendon": 3);
+add ("Glaze": 3);
+add ("Flora": 3);
+add ("Cothran": 3);
+add ("Cooksey": 3);
+add ("Conte": 3);
+add ("Carrico": 3);
+add ("Apple": 3);
+add ("Abner": 3);
+add ("Wooley": 3);
+add ("Swope": 3);
+add ("Summerlin": 3);
+add ("Sturgis": 3);
+add ("Sturdivant": 3);
+add ("Stott": 3);
+add ("Spurgeon": 3);
+add ("Spillman": 3);
+add ("Speight": 3);
+add ("Roussel": 3);
+add ("Popp": 3);
+add ("Nutter": 3);
+add ("Mckeon": 3);
+add ("Mazza": 3);
+add ("Magnuson": 3);
+add ("Lanning": 3);
+add ("Kozak": 3);
+add ("Jankowski": 3);
+add ("Heyward": 3);
+add ("Forster": 3);
+add ("Corwin": 3);
+add ("Callaghan": 3);
+add ("Bays": 3);
+add ("Wortham": 3);
+add ("Usher": 3);
+add ("Theriot": 3);
+add ("Sayers": 3);
+add ("Sabo": 3);
+add ("Rupert": 3);
+add ("Poling": 3);
+add ("Nathan": 3);
+add ("Loya": 3);
+add ("Lieberman": 3);
+add ("Levi": 3);
+add ("Laroche": 3);
+add ("Labelle": 3);
+add ("Howes": 3);
+add ("Harr": 3);
+add ("Garay": 3);
+add ("Fogarty": 3);
+add ("Everson": 3);
+add ("Durkin": 3);
+add ("Dominquez": 3);
+add ("Chaves": 3);
+add ("Chambliss": 3);
+add ("Alfonso": 3);
+add ("Witcher": 3);
+add ("Wilber": 3);
+add ("Vieira": 3);
+add ("Vandiver": 3);
+add ("Terrill": 3);
+add ("Stoker": 3);
+add ("Schreiner": 3);
+add ("Nestor": 3);
+add ("Moorman": 3);
+add ("Liddell": 3);
+add ("Lew": 3);
+add ("Lawhorn": 3);
+add ("Krug": 3);
+add ("Irons": 3);
+add ("Hylton": 3);
+add ("Hollenbeck": 3);
+add ("Herrin": 3);
+add ("Hembree": 3);
+add ("Hair": 3);
+add ("Goolsby": 3);
+add ("Goodin": 3);
+add ("Gilmer": 3);
+add ("Foltz": 3);
+add ("Dinkins": 3);
+add ("Daughtry": 3);
+add ("Caban": 3);
+add ("Brim": 3);
+add ("Briley": 3);
+add ("Bilodeau": 3);
+add ("Bear": 3);
+add ("Wyant": 3);
+add ("Vergara": 3);
+add ("Tallent": 3);
+add ("Swearingen": 3);
+add ("Stroup": 3);
+add ("Sherry": 3);
+add ("Scribner": 3);
+add ("Roger": 3);
+add ("Quillen": 3);
+add ("Pitman": 3);
+add ("Monaco": 3);
+add ("Mccants": 3);
+add ("Maxfield": 3);
+add ("Martinson": 3);
+add ("Landon": 3);
+add ("Holtz": 3);
+add ("Flournoy": 3);
+add ("Brookins": 3);
+add ("Brody": 3);
+add ("Baumgardner": 3);
+add ("Angelo": 3);
+add ("Straub": 3);
+add ("Sills": 3);
+add ("Roybal": 3);
+add ("Roundtree": 3);
+add ("Oswalt": 3);
+add ("Money": 3);
+add ("Mcgriff": 3);
+add ("Mcdougall": 3);
+add ("Mccleary": 3);
+add ("Maggard": 3);
+add ("Gragg": 3);
+add ("Gooding": 3);
+add ("Godinez": 3);
+add ("Doolittle": 3);
+add ("Donato": 3);
+add ("Cowell": 3);
+add ("Cassell": 3);
+add ("Bracken": 3);
+add ("Appel": 3);
+add ("Ahmad": 3);
+add ("Zambrano": 3);
+add ("Reuter": 3);
+add ("Perea": 3);
+add ("Olive": 3);
+add ("Nakamura": 3);
+add ("Monaghan": 3);
+add ("Mickens": 3);
+add ("Mcclinton": 3);
+add ("Mcclary": 3);
+add ("Marler": 3);
+add ("Kish": 3);
+add ("Judkins": 3);
+add ("Gilbreath": 3);
+add ("Freese": 3);
+add ("Flanigan": 3);
+add ("Felts": 3);
+add ("Erdmann": 3);
+add ("Dodds": 3);
+add ("Chew": 3);
+add ("Brownell": 3);
+add ("Brazil": 3);
+add ("Boatright": 3);
+add ("Barreto": 3);
+add ("Slayton": 3);
+add ("Sandberg": 3);
+add ("Saldivar": 3);
+add ("Pettway": 3);
+add ("Odum": 3);
+add ("Narvaez": 3);
+add ("Moultrie": 3);
+add ("Montemayor": 3);
+add ("Merrell": 3);
+add ("Lees": 3);
+add ("Keyser": 3);
+add ("Hoke": 3);
+add ("Hardaway": 3);
+add ("Hannan": 3);
+add ("Gilbertson": 3);
+add ("Fogg": 3);
+add ("Dumont": 3);
+add ("Deberry": 3);
+add ("Coggins": 3);
+add ("Carrera": 3);
+add ("Buxton": 3);
+add ("Bucher": 3);
+add ("Broadnax": 3);
+add ("Beeson": 3);
+add ("Araujo": 3);
+add ("Appleton": 3);
+add ("Amundson": 3);
+add ("Aguayo": 3);
+add ("Ackley": 3);
+add ("Yocum": 3);
+add ("Worsham": 3);
+add ("Shivers": 3);
+add ("Shelly": 3);
+add ("Sanches": 3);
+add ("Sacco": 3);
+add ("Robey": 3);
+add ("Rhoden": 3);
+add ("Pender": 3);
+add ("Ochs": 3);
+add ("Mccurry": 3);
+add ("Madera": 3);
+add ("Luong": 3);
+add ("Luis": 3);
+add ("Knotts": 3);
+add ("Jackman": 3);
+add ("Heinrich": 3);
+add ("Hargrave": 3);
+add ("Gault": 3);
+add ("Forest": 3);
+add ("Comeaux": 3);
+add ("Chitwood": 3);
+add ("Child": 3);
+add ("Caraway": 3);
+add ("Boettcher": 3);
+add ("Bernhardt": 3);
+add ("Barrientos": 3);
+add ("Zink": 3);
+add ("Wickham": 3);
+add ("Whiteman": 3);
+add ("Thorp": 3);
+add ("Stillman": 3);
+add ("Settles": 3);
+add ("Schoonover": 3);
+add ("Roque": 3);
+add ("Riddell": 3);
+add ("Rey": 3);
+add ("Pilcher": 3);
+add ("Phifer": 3);
+add ("Novotny": 3);
+add ("Maple": 3);
+add ("Macleod": 3);
+add ("Hardee": 3);
+add ("Haase": 3);
+add ("Grider": 3);
+add ("Fredrick": 3);
+add ("Earnest": 3);
+add ("Doucette": 3);
+add ("Clausen": 3);
+add ("Christmas": 3);
+add ("Bevins": 3);
+add ("Beamon": 3);
+add ("Badillo": 3);
+add ("Tolley": 2);
+add ("Tindall": 2);
+add ("Soule": 2);
+add ("Snook": 2);
+add ("Sebastian": 2);
+add ("Seale": 2);
+add ("Pitcher": 2);
+add ("Pinkney": 2);
+add ("Pellegrino": 2);
+add ("Nowell": 2);
+add ("Nemeth": 2);
+add ("Nail": 2);
+add ("Mondragon": 2);
+add ("Mclane": 2);
+add ("Lundgren": 2);
+add ("Ingalls": 2);
+add ("Hudspeth": 2);
+add ("Hixson": 2);
+add ("Gearhart": 2);
+add ("Furlong": 2);
+add ("Downes": 2);
+add ("Dionne": 2);
+add ("Dibble": 2);
+add ("Deyoung": 2);
+add ("Cornejo": 2);
+add ("Camara": 2);
+add ("Brookshire": 2);
+add ("Boyette": 2);
+add ("Wolcott": 2);
+add ("Tracey": 2);
+add ("Surratt": 2);
+add ("Sellars": 2);
+add ("Segal": 2);
+add ("Salyer": 2);
+add ("Reeve": 2);
+add ("Rausch": 2);
+add ("Philips": 2);
+add ("Labonte": 2);
+add ("Haro": 2);
+add ("Gower": 2);
+add ("Freeland": 2);
+add ("Fawcett": 2);
+add ("Eads": 2);
+add ("Driggers": 2);
+add ("Donley": 2);
+add ("Collett": 2);
+add ("Cage": 2);
+add ("Bromley": 2);
+add ("Boatman": 2);
+add ("Ballinger": 2);
+add ("Baldridge": 2);
+add ("Volz": 2);
+add ("Trombley": 2);
+add ("Stonge": 2);
+add ("Silas": 2);
+add ("Shanahan": 2);
+add ("Rivard": 2);
+add ("Rhyne": 2);
+add ("Pedroza": 2);
+add ("Matias": 2);
+add ("Mallard": 2);
+add ("Jamieson": 2);
+add ("Hedgepeth": 2);
+add ("Hartnett": 2);
+add ("Estevez": 2);
+add ("Eskridge": 2);
+add ("Denman": 2);
+add ("Chiu": 2);
+add ("Chinn": 2);
+add ("Catlett": 2);
+add ("Carmack": 2);
+add ("Buie": 2);
+add ("Book": 2);
+add ("Bechtel": 2);
+add ("Beardsley": 2);
+add ("Bard": 2);
+add ("Ballou": 2);
+add ("Windsor": 2);
+add ("Ulmer": 2);
+add ("Storm": 2);
+add ("Skeen": 2);
+add ("Robledo": 2);
+add ("Rincon": 2);
+add ("Reitz": 2);
+add ("Piazza": 2);
+add ("Pearl": 2);
+add ("Munger": 2);
+add ("Moten": 2);
+add ("Mcmichael": 2);
+add ("Loftus": 2);
+add ("Ledet": 2);
+add ("Kersey": 2);
+add ("Groff": 2);
+add ("Fowlkes": 2);
+add ("Folk": 2);
+add ("Crumpton": 2);
+add ("Collette": 2);
+add ("Clouse": 2);
+add ("Bettis": 2);
+add ("Villagomez": 2);
+add ("Timmerman": 2);
+add ("Strom": 2);
+add ("Saul": 2);
+add ("Santoro": 2);
+add ("Roddy": 2);
+add ("Phillip": 2);
+add ("Penrod": 2);
+add ("Musselman": 2);
+add ("Macpherson": 2);
+add ("Leboeuf": 2);
+add ("Harless": 2);
+add ("Haddad": 2);
+add ("Guido": 2);
+add ("Golding": 2);
+add ("Fulkerson": 2);
+add ("Fannin": 2);
+add ("Dulaney": 2);
+add ("Dowdell": 2);
+add ("Deane": 2);
+add ("Cottle": 2);
+add ("Ceja": 2);
+add ("Cate": 2);
+add ("Bosley": 2);
+add ("Benge": 2);
+add ("Albritton": 2);
+add ("Voigt": 2);
+add ("Trowbridge": 2);
+add ("Soileau": 2);
+add ("Seely": 2);
+add ("Rome": 2);
+add ("Rohde": 2);
+add ("Pearsall": 2);
+add ("Paulk": 2);
+add ("Orth": 2);
+add ("Nason": 2);
+add ("Mota": 2);
+add ("Mcmullin": 2);
+add ("Marquardt": 2);
+add ("Madigan": 2);
+add ("Hoag": 2);
+add ("Gillum": 2);
+add ("Gayle": 2);
+add ("Gabbard": 2);
+add ("Fenwick": 2);
+add ("Fender": 2);
+add ("Eck": 2);
+add ("Danforth": 2);
+add ("Cushing": 2);
+add ("Cress": 2);
+add ("Creed": 2);
+add ("Cazares": 2);
+add ("Casanova": 2);
+add ("Bey": 2);
+add ("Bettencourt": 2);
+add ("Barringer": 2);
+add ("Baber": 2);
+add ("Stansberry": 2);
+add ("Schramm": 2);
+add ("Rutter": 2);
+add ("Rivero": 2);
+add ("Race": 2);
+add ("Oquendo": 2);
+add ("Necaise": 2);
+add ("Mouton": 2);
+add ("Montenegro": 2);
+add ("Miley": 2);
+add ("Mcgough": 2);
+add ("Marra": 2);
+add ("Macmillan": 2);
+add ("Lock": 2);
+add ("Lamontagne": 2);
+add ("Jasso": 2);
+add ("Jaime": 2);
+add ("Horst": 2);
+add ("Hetrick": 2);
+add ("Heilman": 2);
+add ("Gaytan": 2);
+add ("Gall": 2);
+add ("Fried": 2);
+add ("Fortney": 2);
+add ("Eden": 2);
+add ("Dingle": 2);
+add ("Desjardins": 2);
+add ("Dabbs": 2);
+add ("Burbank": 2);
+add ("Brigham": 2);
+add ("Breland": 2);
+add ("Beaman": 2);
+add ("Banner": 2);
+add ("Arriola": 2);
+add ("Yarborough": 2);
+add ("Wallin": 2);
+add ("Treat": 2);
+add ("Toscano": 2);
+add ("Stowers": 2);
+add ("Reiss": 2);
+add ("Pichardo": 2);
+add ("Orton": 2);
+add ("Mitchel": 2);
+add ("Michels": 2);
+add ("Mcnamee": 2);
+add ("Mccrory": 2);
+add ("Leatherman": 2);
+add ("Kell": 2);
+add ("Keister": 2);
+add ("Jerome": 2);
+add ("Horning": 2);
+add ("Hargett": 2);
+add ("Guay": 2);
+add ("Friday": 2);
+add ("Ferro": 2);
+add ("Deboer": 2);
+add ("Dagostino": 2);
+add ("Clemente": 2);
+add ("Christ": 2);
+add ("Carper": 2);
+add ("Bowler": 2);
+add ("Blanks": 2);
+add ("Beaudry": 2);
+add ("Willie": 2);
+add ("Towle": 2);
+add ("Tafoya": 2);
+add ("Stricklin": 2);
+add ("Strader": 2);
+add ("Soper": 2);
+add ("Sonnier": 2);
+add ("Sigmon": 2);
+add ("Schenk": 2);
+add ("Saddler": 2);
+add ("Rodman": 2);
+add ("Pedigo": 2);
+add ("Mendes": 2);
+add ("Lunn": 2);
+add ("Lohr": 2);
+add ("Lahr": 2);
+add ("Kingsbury": 2);
+add ("Jarman": 2);
+add ("Hume": 2);
+add ("Holliman": 2);
+add ("Hofmann": 2);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.c b/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.c
new file mode 100644
index 000000000000..b9696b10fe82
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.c
@@ -0,0 +1,112 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include "nulls.h"
+#include "genrand.h"
+#include "tdefs.h"
+
+/*
+* Routine: nullCheck(int nColumn)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+nullCheck(int nColumn)
+{
+ static int nLastTable = 0;
+ tdef *pTdef;
+ ds_key_t kBitMask = 1;
+
+ nLastTable = getTableFromColumn(nColumn);
+ pTdef = getSimpleTdefsByNumber(nLastTable);
+
+ kBitMask <<= nColumn - pTdef->nFirstColumn;
+
+ return((pTdef->kNullBitMap & kBitMask) != 0);
+}
+
+/*
+* Routine: nullSet(int *pDest, int nStream)
+* Purpose: set the kNullBitMap for a particular table
+* Algorithm:
+* 1. if random[1,100] >= table's NULL pct, clear map and return
+* 2. set map
+
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects: uses 2 RNG calls
+* TODO: None
+*/
+void
+nullSet(ds_key_t *pDest, int nStream)
+{
+ int nThreshold;
+ ds_key_t kBitMap;
+ static int nLastTable = 0;
+ tdef *pTdef;
+
+ nLastTable = getTableFromColumn(nStream);
+ pTdef = getSimpleTdefsByNumber(nLastTable);
+
+ /* burn the RNG calls */
+ genrand_integer(&nThreshold, DIST_UNIFORM, 0, 9999, 0, nStream);
+ genrand_key(&kBitMap, DIST_UNIFORM, 1, MAXINT, 0, nStream);
+
+ /* set the bitmap based on threshold and NOT NULL definitions */
+ *pDest = 0;
+ if (nThreshold < pTdef->nNullPct)
+ {
+ *pDest = kBitMap;
+ *pDest &= ~pTdef->kNotNullBitMap;
+ }
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.h b/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.h
new file mode 100644
index 000000000000..b058c7eb49fc
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/nulls.h
@@ -0,0 +1,38 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+int nullCheck(int nColumn);
+void nullSet(ds_key_t *pDest, int nStream);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.c b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.c
new file mode 100644
index 000000000000..9d00917364a7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.c
@@ -0,0 +1,229 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "r_params.h"
+#include "scaling.h"
+#include "tdefs.h"
+#include "genrand.h"
+
+/*
+* Routine: split_work(int tnum, worker_t *w)
+* Purpose: allocate work between processes and threads
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+split_work (int tnum, ds_key_t * pkFirstRow, ds_key_t * pkRowCount)
+{
+ ds_key_t kTotalRows, kRowsetSize, kExtraRows;
+ int nParallel, nChild;
+
+ kTotalRows = get_rowcount(tnum);
+ nParallel = get_int ("PARALLEL");
+ nChild = get_int ("CHILD");
+
+ /*
+ * 1. small tables aren't paralelized
+ * 2. nothing is parallelized unless a command line arg is supplied
+ */
+ *pkFirstRow = 1;
+ *pkRowCount = kTotalRows;
+
+ if (kTotalRows < 1000000)
+ {
+ if (nChild > 1) /* small table; only build it once */
+ {
+ *pkFirstRow = 1;
+ *pkRowCount = 0;
+ return (0);
+ }
+ return (1);
+ }
+
+ if (!is_set ("PARALLEL"))
+ {
+ return (1);
+ }
+
+ /*
+ * at this point, do the calculation to set the rowcount for this part of a parallel build
+ */
+ kExtraRows = kTotalRows % nParallel;
+ kRowsetSize = (kTotalRows - kExtraRows) / nParallel;
+
+ /* start the starting row id */
+ *pkFirstRow += (nChild - 1) * kRowsetSize;
+ if (kExtraRows && (nChild - 1))
+ *pkFirstRow += ((nChild - 1) < kExtraRows) ? (nChild - 1) : kExtraRows;
+
+ /* set the rowcount for this child */
+ *pkRowCount = kRowsetSize;
+ if (kExtraRows && (nChild <= kExtraRows))
+ *pkRowCount += 1;
+
+ return (1);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+checkSeeds (tdef * pTdef)
+{
+ int i, res, nReturnCode = 0;
+ static int bInit = 0, bSetSeeds = 0;
+
+ if (!bInit)
+ {
+ bSetSeeds = is_set ("CHKSEEDS");
+ bInit = 1;
+ }
+
+ for (i = pTdef->nFirstColumn; i <= pTdef->nLastColumn; i++)
+ {
+ while (Streams[i].nUsed < Streams[i].nUsedPerRow)
+ genrand_integer (&res, DIST_UNIFORM, 1, 100, 0, i);
+ if (bSetSeeds)
+ {
+ if (Streams[i].nUsed > Streams[i].nUsedPerRow)
+ {
+ fprintf (stderr, "Seed overrun on column %d. Used: %d\n",
+ i, Streams[i].nUsed);
+ Streams[i].nUsedPerRow = Streams[i].nUsed;
+ nReturnCode = 1;
+ }
+ }
+ Streams[i].nUsed = 0; /* reset for the next time */
+ }
+
+ return (nReturnCode);
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+tpcds_row_stop (int tbl)
+{
+ tdef *pTdef;
+
+ pTdef = getSimpleTdefsByNumber (tbl);
+ checkSeeds (pTdef);
+ if (pTdef->flags & FL_PARENT)
+ {
+ pTdef = getSimpleTdefsByNumber (pTdef->nParam);
+ checkSeeds (pTdef);
+ if (pTdef->flags & FL_PARENT)
+ {
+ pTdef = getSimpleTdefsByNumber (pTdef->nParam);
+ checkSeeds (pTdef);
+ }
+ }
+
+ return (0);
+}
+
+/*
+ * Routine: row_skip
+ * Purpose: skip over un-used rows in a table
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: 20020816 jms The second parameter should really be a ds_key_t to allow BIG skips
+ */
+int
+row_skip (int tbl, ds_key_t count)
+{
+ int i;
+
+ for (i = 0; Streams[i].nColumn != -1; i++)
+ {
+ if (Streams[i].nTable == tbl)
+ {
+ skip_random (i, count * Streams[i].nUsedPerRow);
+ Streams[i].nUsed = 0;
+ Streams[i].nTotal = count * Streams[i].nUsedPerRow;
+ }
+ if (Streams[i].nDuplicateOf && (Streams[i].nDuplicateOf != i))
+ {
+ skip_random (Streams[i].nDuplicateOf,
+ count * Streams[Streams[i].nDuplicateOf].nUsedPerRow);
+ Streams[Streams[i].nDuplicateOf].nUsed = 0;
+ Streams[Streams[i].nDuplicateOf].nTotal =
+ count * Streams[i].nUsedPerRow;
+ }
+ }
+
+ return (0);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.h b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.h
new file mode 100644
index 000000000000..a56000e31ad1
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.h
@@ -0,0 +1,41 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef PARALLEL_H
+#define PARALLEL_H
+int split_work(int nTable, ds_key_t *pkFirstRow, ds_key_t *pkRowCount);
+int tpcds_row_stop(int tbl);
+int row_skip(int tbl, ds_key_t count);
+#endif /* PARALLEL_H */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.sh b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.sh
new file mode 100644
index 000000000000..9c293bff3869
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/parallel.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+#
+# Legal Notice
+#
+# This document and associated source code (the "Work") is a part of a
+# benchmark specification maintained by the TPC.
+#
+# The TPC reserves all right, title, and interest to the Work as provided
+# under U.S. and international laws, including without limitation all patent
+# and trademark rights therein.
+#
+# No Warranty
+#
+# 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+# CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+# AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+# WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+# INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+# DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+# PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+# WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+# ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+# QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+# WITH REGARD TO THE WORK.
+# 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+# ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+# COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+# OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+# INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+# OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+# RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+# ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+#
+# Contributors:
+# Gradient Systems
+#
+
+while read table ab sc child
+do
+if [ $sc = "NP" ]
+then
+echo $table too small to parallelize
+continue
+fi
+cd c:/_CVS/tpc/tpcds
+./dbgen2.exe /f /dir c:/temp /ab $ab /sc $sc /parallel 10 /child 10 > /dev/null 2>&1 &
+./dbgen2.exe /f /dir c:/temp /ab $ab /sc $sc /parallel 20 /child 20 > /dev/null 2>&1 &
+wait
+cd c:/temp
+compare=$table
+while [ -n "$compare" ]
+do
+if [ ! -f ${compare}_10_10.csv ]
+then
+echo review $compare scaling -- $sc is too small to parallelize
+break
+fi
+tail -1 ${compare}_10_10.csv > parallel.csv
+tail -1 ${compare}_20_20.csv > serial.csv
+diff parallel.csv serial.csv > ${compare}.diff
+if [ -s ${compare}.diff ]
+then
+echo
+echo $compare ERROR
+echo =========
+tail -1 serial.csv parallel.csv
+echo
+else
+echo $compare ok
+fi
+rm ${compare}* parallel.csv serial.csv
+if [ "$compare" = "$child" ]
+then compare=""
+else compare=$child
+fi
+done
+done << _EOF_
+call_center cc NP
+catalog_page cp NP
+catalog_sales cs 1 catalog_returns
+customer cu 100
+customer_address ca 100
+customer_demographics cd NP
+date_dim da NP
+household_demographics hd NP
+income_band ib NP
+inventory inv 1
+item it 10000
+promotion pr NP
+promotional_bundle pb NP
+promotional_bundle_coverage pc NP
+reason re NP
+ship_mode sm NP
+store st NP
+store_sales ss 1 store_returns
+time_dim ti NP
+warehouse wa NP
+web_page wp NP
+web_sales ws 10 web_returns
+web_site web NP
+_EOF_
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/params.h b/ydb/library/benchmarks/gen/tpcds-dbgen/params.h
new file mode 100644
index 000000000000..c3f84290bf80
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/params.h
@@ -0,0 +1,78 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef QGEN_PARAMS_H
+#define QGEN_PARAMS_H
+#include "r_params.h"
+#include "release.h"
+#ifdef DECLARER
+
+option_t options[] =
+{
+{"ABREVIATION", OPT_STR, 0,"build table with abreviation ", NULL, ""},
+{"DELIMITER", OPT_STR|OPT_ADV, 1,"use as output field separator", NULL, "|"},
+{"DIR", OPT_STR, 2,"generate tables in directory ", NULL, "."},
+{"DISTRIBUTIONS", OPT_STR|OPT_ADV, 3, "read distributions from file ", NULL, "tpcds.idx"},
+{"FORCE", OPT_FLG|OPT_ADV, 4,"over-write data files without prompting", NULL, "N"},
+{"HELP", OPT_INT, 5, "display this message", usage, "0"},
+{"PARAMS", OPT_STR, 6, "read parameters from file ", read_file, ""},
+{"PROG", OPT_STR|OPT_HIDE|OPT_SET, 7, "DO NOT MODIFY" , NULL, "dsdgen"},
+{"QUIET", OPT_FLG, 8, "disable all output to stdout/stderr", NULL, "N"},
+{"SCALE", OPT_INT, 9,"volume of data to generate in GB", SetScaleIndex, "1"},
+{"SUFFIX", OPT_STR|OPT_ADV, 10,"use as output file suffix", NULL, ".dat"},
+{"TABLE", OPT_STR, 11,"build only table ", NULL, "ALL"},
+{"TERMINATE", OPT_FLG|OPT_ADV, 12,"end each record with a field delimiter", NULL, "Y"},
+{"UPDATE", OPT_INT, 13,"generate update data set ", NULL, ""},
+{"VERBOSE", OPT_FLG, 14, "enable verbose output", NULL, "N"},
+{"_SCALE_INDEX", OPT_INT|OPT_HIDE, 15, "Scale band; used for dist lookups" , NULL, "1"},
+{"PARALLEL", OPT_INT, 16,"build data in separate chunks", NULL, ""},
+{"CHILD", OPT_INT, 17,"generate th chunk of the parallelized data", NULL, "1"},
+{"CHKSEEDS", OPT_FLG|OPT_HIDE, 18, "validate RNG usage for parallelism", NULL, "N"},
+{"RELEASE", OPT_FLG, 19, "display the release information", printReleaseInfo, "N"},
+{"_FILTER", OPT_FLG, 20, "output data to stdout", NULL, "N"},
+{"VALIDATE", OPT_FLG, 21, "produce rows for data validation", NULL, "N"},
+{"VCOUNT", OPT_INT|OPT_ADV, 22, "set number of validation rows to be produced", NULL, "50"},
+{"VSUFFIX", OPT_STR|OPT_ADV, 23, "set file suffix for data validation", NULL, ".vld"},
+{"RNGSEED", OPT_INT|OPT_ADV, 24, "set RNG seed", NULL, "19620718"},
+{NULL}
+};
+
+char *params[23 + 2];
+#else
+extern option_t options[];
+extern char *params[];
+extern char *szTableNames[];
+#endif
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/permute.c b/ydb/library/benchmarks/gen/tpcds-dbgen/permute.c
new file mode 100644
index 000000000000..7694abaa1ed6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/permute.c
@@ -0,0 +1,132 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include
+#include "genrand.h"
+
+/*
+* Routine: MakePermutation(int nSize)
+* Purpose: Permute the integers in [1..nSize]
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int *
+makePermutation(int *nNumberSet, int nSize, int nStream)
+{
+ int i,
+ nTemp,
+ nIndex,
+ *pInt;
+
+ if (nSize <= 0)
+ return(NULL);
+
+ if (!nNumberSet)
+ {
+ nNumberSet = (int *)malloc(nSize * sizeof(int));
+ MALLOC_CHECK(nNumberSet);
+ pInt = nNumberSet;
+ for (i=0; i < nSize; i++)
+ *pInt++ = i;
+ }
+
+ for (i=0; i < nSize; i++)
+ {
+ nIndex = genrand_integer(NULL, DIST_UNIFORM, 0, nSize - 1, 0, nStream);
+ nTemp = nNumberSet[i];
+ nNumberSet[i] = nNumberSet[nIndex];
+ nNumberSet[nIndex] = nTemp;
+ }
+
+ return(nNumberSet);
+}
+
+/*
+* Routine: MakePermutation(int nSize)
+* Purpose: Permute the integers in [1..nSize]
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t *
+makeKeyPermutation(ds_key_t *nNumberSet, ds_key_t nSize, int nStream)
+{
+ ds_key_t i,
+ nTemp,
+ nIndex,
+ *pInt;
+ if (nSize <= 0)
+ return(NULL);
+
+ if (!nNumberSet)
+ {
+ nNumberSet = (ds_key_t *)malloc(nSize * sizeof(ds_key_t));
+ MALLOC_CHECK(nNumberSet);
+ pInt = nNumberSet;
+ for (i=0; i < nSize; i++)
+ *pInt++ = i;
+ }
+
+ for (i=0; i < nSize; i++)
+ {
+ nIndex = genrand_key(NULL, DIST_UNIFORM, 0, nSize - 1, 0, nStream);
+ nTemp = nNumberSet[i];
+ nNumberSet[i] = nNumberSet[nIndex];
+ nNumberSet[nIndex] = nTemp;
+ }
+
+ return(nNumberSet);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/permute.h b/ydb/library/benchmarks/gen/tpcds-dbgen/permute.h
new file mode 100644
index 000000000000..096db5ad5eef
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/permute.h
@@ -0,0 +1,39 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+int *makePermutation(int *pNumberSet, int nSize, int nStream);
+ds_key_t *makeKeyPermutation(ds_key_t *pNumberSet, ds_key_t nSize, int nStream);
+#define getPermutationEntry(pPermutation, nIndex) (pPermutation[nIndex - 1] + 1)
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/porting.c b/ydb/library/benchmarks/gen/tpcds-dbgen/porting.c
new file mode 100644
index 000000000000..0efbe1a211b5
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/porting.c
@@ -0,0 +1,57 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+/*********************
+ ** Define some routines that, while common, are not ANSI standard
+ *********************/
+#include "config.h"
+#include "porting.h"
+#include
+
+#ifndef strdup
+char *strdup(const char *szSrc)
+{
+ char *szResult;
+
+ szResult = (char *)malloc(strlen(szSrc) + 1);
+ if (szResult)
+ {
+ strcpy(szResult, szSrc);
+ }
+
+ return(szResult);
+}
+#endif
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/porting.h b/ydb/library/benchmarks/gen/tpcds-dbgen/porting.h
new file mode 100644
index 000000000000..5bf8ef01ce30
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/porting.h
@@ -0,0 +1,149 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef PORTING_H
+#define PORTING_H
+
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+
+#ifdef USE_VALUES_H
+#include
+#endif
+
+#ifdef USE_LIMITS_H
+#include
+#endif
+
+#ifdef USE_STDLIB_H
+#include
+#endif
+
+#ifndef WIN32
+#include
+#else
+#define int32_t __int32
+#define int64_t __int64
+#endif
+
+#ifdef WIN32
+#include
+#define timeb _timeb
+#define ftime _ftime
+#else
+#include
+#endif
+
+typedef HUGE_TYPE ds_key_t;
+
+/*
+ * add some functions that are not strictly ANSI standard
+ */
+#ifndef strdup
+char *strdup(const char *);
+#endif
+
+#ifdef WIN32
+#include
+#include
+#include
+#define random rand
+#define strncasecmp _strnicmp
+#define strcasecmp _stricmp
+#define strdup _strdup
+#define access _access
+#define isatty _isatty
+#define fileno _fileno
+#define F_OK 0
+#define MAXINT INT_MAX
+#define THREAD __declspec(thread)
+#define MIN_MULTI_NODE_ROWS 100000
+#define MIN_MULTI_THREAD_ROWS 5000
+#define THREAD __declspec(thread)
+/* Lines added by Chuck McDevitt for WIN32 support */
+#ifndef _POSIX_
+#ifndef S_ISREG
+#define S_ISREG(m) ( ((m) & _S_IFMT) == _S_IFREG )
+#define S_ISFIFO(m) ( ((m) & _S_IFMT) == _S_IFIFO )
+#endif
+#endif
+#endif /* WIN32 */
+
+#ifdef INTERIX
+#include
+#define MAXINT INT_MAX
+#endif /* INTERIX */
+
+#ifdef AIX
+#define MAXINT INT_MAX
+#endif
+
+
+#define INTERNAL(m) {\
+fprintf(stderr, "ERROR: %s\n\tFile: %s\n\tLine: %d\n", \
+ m, __FILE__, __LINE__); \
+}
+
+#define OPEN_CHECK(var, path) \
+ if ((var) == NULL) \
+ { \
+ fprintf(stderr, "Open failed for %s at %s:%d\n", \
+ path, __FILE__, __LINE__); \
+ exit(1);\
+ }
+
+#ifdef MEM_TEST
+#define MALLOC_CHECK(v) \
+ if (v == NULL) \
+ { \
+ fprintf(stderr, "Malloc Failed at %d in %s\n", __LINE__, __FILE__); \
+ exit(1); \
+ } \
+ else \
+ { \
+ fprintf(stderr, "Add (%x) %d at %d in %s\n", sizeof(*v), v, __LINE__, __FILE__); \
+ }
+#else
+#define MALLOC_CHECK(v) \
+ if (v == NULL) \
+ { \
+ fprintf(stderr, "Malloc Failed at %d in %s\n", __LINE__, __FILE__); \
+ exit(1); \
+ }
+#endif /* MEM_TEST */
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.c b/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.c
new file mode 100644
index 000000000000..33ccefa749d0
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.c
@@ -0,0 +1,278 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "decimal.h"
+#include "pricing.h"
+#include "constants.h"
+#include "columns.h"
+#include "error_msg.h"
+#include "dist.h"
+#include "driver.h"
+#include "genrand.h"
+#include "w_web_sales.h"
+#include "s_pline.h"
+
+#define MAX_LIMIT 12
+static ds_limits_t aPriceLimits[MAX_LIMIT] =
+{
+ {CS_PRICING, CS_QUANTITY_MAX, CS_MARKUP_MAX, CS_DISCOUNT_MAX, CS_WHOLESALE_MAX, CS_COUPON_MAX},
+ {SS_PRICING, SS_QUANTITY_MAX, SS_MARKUP_MAX, SS_DISCOUNT_MAX, SS_WHOLESALE_MAX, SS_COUPON_MAX},
+ {WS_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {CR_PRICING, CS_QUANTITY_MAX, CS_MARKUP_MAX, CS_DISCOUNT_MAX, CS_WHOLESALE_MAX, CS_COUPON_MAX},
+ {SR_PRICING, SS_QUANTITY_MAX, SS_MARKUP_MAX, SS_DISCOUNT_MAX, SS_WHOLESALE_MAX, SS_COUPON_MAX},
+ {WR_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_PLINE_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_CLIN_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_WLIN_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_SRET_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_CRET_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX},
+ {S_WRET_PRICING, WS_QUANTITY_MAX, WS_MARKUP_MAX, WS_DISCOUNT_MAX, WS_WHOLESALE_MAX, WS_COUPON_MAX}
+
+};
+
+/*
+* Routine: set_pricing(int nTabId, ds_pricing_t *pPricing)
+* Purpose: handle the various pricing calculations for the fact tables
+* Notes:
+* the RNG usage is not kept in sync between sales pricing and returns pricing. If the calculations look wrong, it may
+* be necessary to "waste" some RNG calls on one side or the other to bring things back in line
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void set_pricing(int nTabId, ds_pricing_t *pPricing)
+{
+ static int nLastId = -1,
+ init = 0,
+ nQuantityMax,
+ nQuantityMin = 1;
+ static decimal_t dQuantity, dMarkupMin, dDiscountMin, dWholesaleMin,
+ dMarkupMax, dDiscountMax, dWholesaleMax, dCouponMin, dCouponMax,
+ dZero, dOneHalf, d9pct, dOne, dTemp, dHundred;
+ decimal_t dMarkup, dCoupon, dShipping, dDiscount, dTemp2;
+ int i,
+ nCashPct,
+ nCreditPct,
+ nCouponUsage;
+
+ if (!init)
+ {
+ strtodec(&dMarkupMin, "0.00");
+ strtodec(&dDiscountMin, "0.00");
+ strtodec(&dWholesaleMin, "1.00");
+ strtodec(&dCouponMin, "0.00");
+ strtodec(&dZero, "0.00");
+ strtodec(&dOneHalf, "0.50");
+ strtodec(&d9pct, "0.09");
+ strtodec(&dWholesaleMin, "1.00");
+ strtodec(&dHundred, "100.00");
+ strtodec(&dOne, "1.00");
+
+ init = 1;
+ }
+
+ if (nTabId != nLastId)
+ {
+ nLastId = -1;
+ for (i=0; i < MAX_LIMIT; i++)
+ {
+ if (nTabId == aPriceLimits[i].nId)
+ nLastId = i;
+ }
+ if (nLastId == -1)
+ INTERNAL("No pricing limits defined");
+ nQuantityMax = atoi(aPriceLimits[nLastId].szQuantity);
+ strtodec(&dDiscountMax, aPriceLimits[nLastId].szDiscount);
+ strtodec(&dMarkupMax, aPriceLimits[nLastId].szMarkUp);
+ strtodec(&dWholesaleMax, aPriceLimits[nLastId].szWholesale);
+ strtodec(&dCouponMax, aPriceLimits[nLastId].szCoupon);
+ }
+
+ switch(nTabId)
+ {
+ case SS_PRICING:
+ case CS_PRICING:
+ case WS_PRICING:
+ case S_PLINE_PRICING:
+ case S_CLIN_PRICING:
+ case S_WLIN_PRICING:
+ genrand_integer(&pPricing->quantity, DIST_UNIFORM, nQuantityMin, nQuantityMax, 0, nTabId);
+ itodec(&dQuantity, pPricing->quantity);
+ genrand_decimal(&pPricing->wholesale_cost, DIST_UNIFORM, &dWholesaleMin, &dWholesaleMax, NULL, nTabId);
+
+ /* ext_wholesale_cost = wholesale_cost * quantity */
+ decimal_t_op(&pPricing->ext_wholesale_cost, OP_MULT, &dQuantity, &pPricing->wholesale_cost);
+
+ /* list_price = wholesale_cost * (1 + markup) */
+ genrand_decimal(&dMarkup, DIST_UNIFORM, &dMarkupMin, &dMarkupMax, NULL, nTabId);
+ decimal_t_op(&dMarkup, OP_PLUS, &dMarkup, &dOne);
+ decimal_t_op(&pPricing->list_price, OP_MULT, &pPricing->wholesale_cost, &dMarkup);
+
+ /* sales_price = list_price * (1 - discount)*/
+ genrand_decimal(&dDiscount, DIST_UNIFORM, &dDiscountMin, &dDiscountMax, NULL, nTabId);
+ NegateDecimal(&dDiscount);
+ decimal_t_op(&pPricing->ext_discount_amt, OP_PLUS, &dDiscount, &dOne);
+ decimal_t_op(&pPricing->sales_price, OP_MULT, &pPricing->list_price, &pPricing->ext_discount_amt);
+
+ /* ext_list_price = list_price * quantity */
+ decimal_t_op(&pPricing->ext_list_price, OP_MULT, &pPricing->list_price, &dQuantity);
+
+ /* ext_sales_price = sales_price * quantity */
+ decimal_t_op(&pPricing->ext_sales_price, OP_MULT, &pPricing->sales_price, &dQuantity);
+
+ /* ext_discount_amt = ext_list_price - ext_sales_price */
+ decimal_t_op(&pPricing->ext_discount_amt, OP_MINUS, &pPricing->ext_list_price, &pPricing->ext_sales_price);
+
+ /* coupon_amt = ext_sales_price * coupon */
+ genrand_decimal(&dCoupon, DIST_UNIFORM, &dZero, &dOne, NULL, nTabId);
+ genrand_integer(&nCouponUsage, DIST_UNIFORM, 1, 100, 0, nTabId);
+ if (nCouponUsage <= 20) /* 20% of sales employ a coupon */
+ decimal_t_op(&pPricing->coupon_amt, OP_MULT, &pPricing->ext_sales_price, &dCoupon);
+ else
+ memcpy(&pPricing->coupon_amt, &dZero, sizeof(decimal_t));
+
+ /* net_paid = ext_sales_price - coupon_amt */
+ decimal_t_op(&pPricing->net_paid, OP_MINUS, &pPricing->ext_sales_price, &pPricing->coupon_amt);
+
+ /* shipping_cost = list_price * shipping */
+ genrand_decimal(&dShipping, DIST_UNIFORM, &dZero, &dOneHalf, NULL, nTabId);
+ decimal_t_op(&pPricing->ship_cost, OP_MULT, &pPricing->list_price, &dShipping);
+
+ /* ext_shipping_cost = shipping_cost * quantity */
+ decimal_t_op(&pPricing->ext_ship_cost, OP_MULT, &pPricing->ship_cost, &dQuantity);
+
+ /* net_paid_inc_ship = net_paid + ext_shipping_cost */
+ decimal_t_op(&pPricing->net_paid_inc_ship, OP_PLUS, &pPricing->net_paid, &pPricing->ext_ship_cost);
+
+ /* ext_tax = tax * net_paid */
+ genrand_decimal(&pPricing->tax_pct, DIST_UNIFORM, &dZero, &d9pct, NULL, nTabId);
+ decimal_t_op(&pPricing->ext_tax, OP_MULT, &pPricing->net_paid, &pPricing->tax_pct);
+
+ /* net_paid_inc_tax = net_paid + ext_tax */
+ decimal_t_op(&pPricing->net_paid_inc_tax, OP_PLUS, &pPricing->net_paid, &pPricing->ext_tax);
+
+ /* net_paid_inc_ship_tax = net_paid_inc_tax + ext_shipping_cost */
+ decimal_t_op(&pPricing->net_paid_inc_ship_tax, OP_PLUS, &pPricing->net_paid_inc_ship, &pPricing->ext_tax);
+
+ /* net_profit = net_paid - ext_wholesale_cost */
+ decimal_t_op(&pPricing->net_profit, OP_MINUS, &pPricing->net_paid, &pPricing->ext_wholesale_cost);
+ break;
+ case CR_PRICING:
+ case SR_PRICING:
+ case WR_PRICING:
+ /* quantity is determined before we are called */
+ /* ext_wholesale_cost = wholesale_cost * quantity */
+ itodec(&dQuantity, pPricing->quantity);
+ decimal_t_op(&pPricing->ext_wholesale_cost, OP_MULT, &dQuantity, &pPricing->wholesale_cost);
+
+ /* ext_list_price = list_price * quantity */
+ decimal_t_op(&pPricing->ext_list_price, OP_MULT, &pPricing->list_price, &dQuantity);
+
+ /* ext_sales_price = sales_price * quantity */
+ decimal_t_op(&pPricing->ext_sales_price, OP_MULT, &pPricing->sales_price, &dQuantity);
+
+ /* net_paid = ext_list_price (couppons don't effect returns) */
+ memcpy(&pPricing->net_paid, &pPricing->ext_sales_price, sizeof(decimal_t));
+
+ /* shipping_cost = list_price * shipping */
+ genrand_decimal(&dShipping, DIST_UNIFORM, &dZero, &dOneHalf, NULL, nTabId);
+ decimal_t_op(&pPricing->ship_cost, OP_MULT, &pPricing->list_price, &dShipping);
+
+ /* ext_shipping_cost = shipping_cost * quantity */
+ decimal_t_op(&pPricing->ext_ship_cost, OP_MULT, &pPricing->ship_cost, &dQuantity);
+
+ /* net_paid_inc_ship = net_paid + ext_shipping_cost */
+ decimal_t_op(&pPricing->net_paid_inc_ship, OP_PLUS, &pPricing->net_paid, &pPricing->ext_ship_cost);
+
+ /* ext_tax = tax * net_paid */
+ decimal_t_op(&pPricing->ext_tax, OP_MULT, &pPricing->net_paid, &pPricing->tax_pct);
+
+ /* net_paid_inc_tax = net_paid + ext_tax */
+ decimal_t_op(&pPricing->net_paid_inc_tax, OP_PLUS, &pPricing->net_paid, &pPricing->ext_tax);
+
+ /* net_paid_inc_ship_tax = net_paid_inc_tax + ext_shipping_cost */
+ decimal_t_op(&pPricing->net_paid_inc_ship_tax, OP_PLUS, &pPricing->net_paid_inc_ship, &pPricing->ext_tax);
+
+ /* net_profit = net_paid - ext_wholesale_cost */
+ decimal_t_op(&pPricing->net_profit, OP_MINUS, &pPricing->net_paid, &pPricing->ext_wholesale_cost);
+
+ /* see to it that the returned amounts add up to the total returned */
+ /* allocate some of return to cash */
+ genrand_integer(&nCashPct, DIST_UNIFORM, 0, 100, 0, nTabId);
+ itodec(&dTemp, nCashPct);
+ decimal_t_op(&pPricing->refunded_cash, OP_DIV, &dTemp, &dHundred);
+ decimal_t_op(&pPricing->refunded_cash, OP_MULT, &pPricing->refunded_cash, &pPricing->net_paid);
+
+ /* allocate some to reversed charges */
+ genrand_integer(&nCreditPct, DIST_UNIFORM, 1, 100, 0, nTabId);
+ itodec(&dTemp2, nCreditPct);
+ decimal_t_op(&dTemp, OP_DIV, &dTemp2, &dHundred);
+ decimal_t_op(&dTemp2, OP_MINUS, &pPricing->net_paid, &pPricing->refunded_cash);
+ decimal_t_op(&pPricing->reversed_charge, OP_MULT, &dTemp2, &dTemp);
+
+ /* the rest is store credit */
+ decimal_t_op(&pPricing->store_credit, OP_MINUS, &pPricing->net_paid, &pPricing->reversed_charge);
+ decimal_t_op(&pPricing->store_credit, OP_MINUS, &pPricing->store_credit, &pPricing->refunded_cash);
+
+ /* pick a fee for the return */
+ genrand_decimal(&pPricing->fee, DIST_UNIFORM, &dOneHalf, &dHundred, &dZero, nTabId);
+
+ /* and calculate the net effect */
+ decimal_t_op(&pPricing->net_loss, OP_MINUS, &pPricing->net_paid_inc_ship_tax, &pPricing->store_credit);
+ decimal_t_op(&pPricing->net_loss, OP_MINUS, &pPricing->net_loss, &pPricing->refunded_cash);
+ decimal_t_op(&pPricing->net_loss, OP_MINUS, &pPricing->net_loss, &pPricing->reversed_charge);
+ decimal_t_op(&pPricing->net_loss, OP_PLUS, &pPricing->net_loss, &pPricing->fee);
+ break;
+ }
+
+ return;
+
+}
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.h b/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.h
new file mode 100644
index 000000000000..2eddeef55c2e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/pricing.h
@@ -0,0 +1,77 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef PRICING_H
+#define PRICING_H
+#include "decimal.h"
+
+typedef struct DS_PRICING_T {
+ decimal_t wholesale_cost;
+ decimal_t list_price;
+ decimal_t sales_price;
+ int quantity;
+ decimal_t ext_discount_amt;
+ decimal_t ext_sales_price;
+ decimal_t ext_wholesale_cost;
+ decimal_t ext_list_price;
+ decimal_t tax_pct;
+ decimal_t ext_tax;
+ decimal_t coupon_amt;
+ decimal_t ship_cost;
+ decimal_t ext_ship_cost;
+ decimal_t net_paid;
+ decimal_t net_paid_inc_tax;
+ decimal_t net_paid_inc_ship;
+ decimal_t net_paid_inc_ship_tax;
+ decimal_t net_profit;
+ decimal_t refunded_cash;
+ decimal_t reversed_charge;
+ decimal_t store_credit;
+ decimal_t fee;
+ decimal_t net_loss;
+} ds_pricing_t;
+
+typedef struct DS_LIMITS_T
+{
+ int nId;
+ char *szQuantity;
+ char *szMarkUp;
+ char *szDiscount;
+ char *szWholesale;
+ char *szCoupon;
+} ds_limits_t;
+
+void set_pricing(int nTabId, ds_pricing_t *pPricing);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/print.c b/ydb/library/benchmarks/gen/tpcds-dbgen/print.c
new file mode 100644
index 000000000000..cc9a446ffdaf
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/print.c
@@ -0,0 +1,690 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#ifdef WIN32
+#include
+#else
+#include
+#endif
+#include "tables.h"
+#include "print.h"
+#include "tdef_functions.h"
+#include "r_params.h"
+#include "date.h"
+#include "decimal.h"
+#include "tdefs.h"
+#include "nulls.h"
+#include "constants.h"
+#include "build_support.h"
+
+static FILE *fpOutfile = NULL;
+static FILE *fpDeleteFile;
+static char *arDeleteFiles[3] = {"", "delete_", "inventory_delete_"};
+
+static int current_table = -1;
+
+int print_jdate (FILE *pFile, ds_key_t kValue);
+
+void
+print_close(int tbl)
+{
+ tdef *pTdef = getSimpleTdefsByNumber(tbl);
+
+ fpOutfile = NULL;
+ if (pTdef->outfile)
+ {
+ fclose(pTdef->outfile);
+ pTdef->outfile = NULL;
+ }
+
+ if (pTdef->flags & FL_PARENT)
+ print_close(pTdef->nParam);
+
+ return;
+}
+
+int
+print_separator (int sep)
+{
+ int res = 0;
+ static char *pDelimiter;
+ static int init = 0;
+
+ if (!init)
+ {
+ pDelimiter = get_str ("DELIMITER");
+ init = 1;
+ }
+
+ if (sep)
+ {
+ if (fwrite(pDelimiter, 1, 1, fpOutfile) != 1)
+ {
+ fprintf(stderr, "ERROR: Failed to write delimiter\n");
+ exit(-1);
+ }
+ }
+
+ return (res);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+FILE *
+print_prep (int table, int update)
+{
+ return (NULL);
+}
+
+/*
+* Routine: dbg_print()
+* Purpose: genralized data print routine
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20000113 need better separator handling
+* 20020125 cast to/from 64b is messy, assumes int/pointer are same size
+*/
+void
+print_integer (int nColumn, int val, int sep)
+{
+ if (!nullCheck(nColumn))
+ {
+ if (fprintf (fpOutfile, "%d", val) < 0)
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_varchar (int nColumn, char *val, int sep)
+{
+ size_t nLength;
+
+ if (!nullCheck(nColumn) && (val != NULL))
+ {
+ nLength = strlen(val);
+
+#ifdef STR_QUOTES
+ if ((fwrite ("\"", 1, 1, fpOutfile) != 1) ||
+ (fwrite (val, 1, nLength, fpOutfile) != nLength) ||
+ (fwrite ("\"", 1, 1, fpOutfile)) != 1)
+#else
+ if (fwrite (val, 1, nLength, fpOutfile) != nLength)
+#endif
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_delete (int * val)
+{
+ if (print_jdate(fpDeleteFile, *val))
+ {
+ fprintf(stderr, "ERROR: Failed to write delete key\n");
+ exit(-1);
+ }
+ fprintf(fpDeleteFile, "%s", get_str("DELIMITER"));
+ if (print_jdate(fpDeleteFile, *(val + 1)))
+ {
+ fprintf(stderr, "ERROR: Failed to write delete key\n");
+ exit(-1);
+ }
+ if (is_set("TERMINATE"))
+ fprintf(fpDeleteFile, get_str("DELIMITER"));
+ fprintf(fpDeleteFile, "\n");
+
+ return;
+}
+
+/*
+void
+print_cp_delete (int nCatalog, int nPage)
+{
+ static int bInit = 0;
+ static char *cp;
+
+ if (!bInit)
+ {
+ cp = strdup(get_str("DELIMITER"));
+ bInit = 1;
+ }
+
+ if (fprintf (fpDeleteFile, "%d%s%d\n", nCatalog, cp, nPage) < 0)
+ {
+ fprintf(stderr, "ERROR: Failed to write delete key\n");
+ exit(-1);
+ }
+
+ return;
+}
+*/
+void
+print_char (int nColumn, char val, int sep)
+{
+ if (!nullCheck(nColumn))
+ {
+ if (fwrite (&val, 1, 1, fpOutfile) != 1)
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_date (int nColumn, ds_key_t val, int sep)
+{
+ if (!nullCheck(nColumn))
+ {
+ if (val > 0)
+ {
+ if (print_jdate(fpOutfile, val))
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ }
+
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_time (int nColumn, ds_key_t val, int sep)
+{
+ int nHours, nMinutes, nSeconds;
+
+ nHours = (int)(val / 3600);
+ val -= 3600 * nHours;
+ nMinutes = (int)(val / 60);
+ val -= 60 * nMinutes;
+ nSeconds = (int)(val % 60);
+
+ if (!nullCheck(nColumn))
+ {
+ if (val != -1)
+ {
+ fprintf(fpOutfile, "%02d:%02d:%02d", nHours, nMinutes, nSeconds);
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_decimal (int nColumn, decimal_t * val, int sep)
+{
+ int i;
+ double dTemp;
+
+ if (!nullCheck(nColumn))
+ {
+#ifdef WIN32
+#pragma warning(disable: 4244)
+#endif
+ dTemp = val->number;
+#ifdef WIN32
+#pragma warning(default: 4244)
+#endif
+ for (i=0; i < val->precision; i++)
+ dTemp /= 10.0;
+
+ if (fprintf(fpOutfile, "%.*f", val->precision, dTemp) < 0)
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_key (int nColumn, ds_key_t val, int sep)
+{
+ if (!nullCheck(nColumn))
+ {
+ if (val != (ds_key_t) -1) /* -1 is a special value, indicating NULL */
+ {
+ if (fprintf (fpOutfile, HUGE_FORMAT, val) < 0)
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_id (int nColumn, ds_key_t val, int sep)
+{
+ char szID[RS_BKEY + 1];
+
+ if (!nullCheck(nColumn))
+ {
+ if (val != (ds_key_t) -1) /* -1 is a special value, indicating NULL */
+ {
+ mk_bkey(szID, val, 0);
+#ifdef STR_QUOTES
+ if ((fwrite ("\"", 1, 1, fpOutfile) < 1) ||
+ (fwrite (szID, 1, RS_BKEY, fpOutfile) < RS_BKEY) ||
+ (fwrite ("\"", 1, 1, fpOutfile) < 1))
+#else
+ if (fwrite (szID, 1, RS_BKEY, fpOutfile) < RS_BKEY)
+#endif
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ }
+ #ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+ print_separator (sep);
+
+ return;
+}
+
+void
+print_boolean (int nColumn, int val, int sep)
+{
+ if (!nullCheck(nColumn))
+ {
+
+#ifdef STR_QUOTES
+ if (fwrite ((val?"\"Y\"":"\"N\""), 1, 3, fpOutfile) != 3)
+#else
+ if (fwrite ( ((val)?"Y":"N"), 1, 1, fpOutfile) != 1)
+#endif
+ {
+ fprintf(stderr, "ERROR: Failed to write output for column %d\n", nColumn);
+ exit(-1);
+ }
+ }
+#ifdef _MYSQL
+ else fwrite("NULL", 1, 4, fpOutfile);
+#endif
+
+ print_separator (sep);
+
+ return;
+}
+
+/*
+* Routine: print_start(tbl)
+* Purpose: open the output file for a given table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+print_start (int tbl)
+{
+ int res = 0;
+ char path[256];
+ tdef *pTdef = getSimpleTdefsByNumber(tbl);
+
+
+ current_table = tbl;
+
+ if (is_set ("FILTER"))
+ fpOutfile = stdout;
+ else
+ {
+ if (pTdef->outfile == NULL)
+ {
+ if (is_set("PARALLEL"))
+ sprintf (path, "%s%c%s_%d_%d%s",
+ get_str ("DIR"),
+ PATH_SEP, getTableNameByID (tbl),
+ get_int("CHILD"), get_int("PARALLEL"), (is_set("VALIDATE"))?get_str ("VSUFFIX"):get_str ("SUFFIX"));
+ else
+ {
+ if (is_set("UPDATE"))
+ sprintf (path, "%s%c%s_%d%s",
+ get_str ("DIR"),
+ PATH_SEP, getTableNameByID (tbl), get_int("UPDATE"), (is_set("VALIDATE"))?get_str ("VSUFFIX"):get_str ("SUFFIX"));
+ else
+ sprintf (path, "%s%c%s%s",
+ get_str ("DIR"),
+ PATH_SEP, getTableNameByID (tbl), (is_set("VALIDATE"))?get_str ("VSUFFIX"):get_str ("SUFFIX"));
+ }
+ if ((access (path, F_OK) != -1) && !is_set ("FORCE"))
+ {
+ fprintf (stderr,
+ "ERROR: %s exists. Either remove it or use the FORCE option to overwrite it.\n",
+ path);
+ exit (-1);
+ }
+#ifdef WIN32
+ pTdef->outfile = fopen (path, "wt");
+#else
+ pTdef->outfile = fopen (path, "w");
+#endif
+ }
+ }
+
+ fpOutfile = pTdef->outfile;
+ res = (fpOutfile != NULL);
+
+ if (!res) /* open failed! */
+ {
+ INTERNAL ("Failed to open output file!");
+ exit(0);
+ }
+#ifdef WIN32
+ else if (setvbuf (fpOutfile, NULL, _IOFBF, 32767))
+ {
+ INTERNAL ("setvbuf() FAILED");
+ }
+#endif
+
+ pTdef->flags |= FL_OPEN;
+
+ return (0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+print_end (int tbl)
+{
+ int res = 0;
+ static int init = 0;
+ static int add_term = 0;
+ static char term[10];
+
+ if (!init)
+ {
+ if (is_set ("TERMINATE"))
+ {
+ strncpy (term, get_str ("DELIMITER"), 9);
+ add_term = strlen(term);
+ }
+ init = 1;
+ }
+
+ if (add_term)
+ fwrite(term, 1, add_term, fpOutfile);
+ fprintf (fpOutfile, "\n");
+ fflush(fpOutfile);
+
+ return (res);
+}
+
+/*
+* Routine: openDeleteFile(void)
+* Purpose: open the output file for the delete keys for a given table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+openDeleteFile(int bOpen)
+{
+ int res = 0;
+ char path[256];
+
+ if (!bOpen)
+ fclose(fpDeleteFile);
+ else
+ {
+ sprintf (path, "%s%c%s%d%s",
+ get_str ("DIR"),
+ PATH_SEP, arDeleteFiles[bOpen], get_int("UPDATE"), get_str("SUFFIX"));
+ if ((access (path, F_OK) != -1) && !is_set ("FORCE"))
+ {
+ fprintf (stderr,
+ "ERROR: %s exists. Either remove it or use the FORCE option to overwrite it.\n",
+ path);
+ exit (-1);
+ }
+#ifdef WIN32
+ fpDeleteFile = fopen (path, "wt");
+#else
+ fpDeleteFile = fopen (path, "w");
+#endif
+
+ res = (fpDeleteFile != NULL);
+
+ if (!res) /* open failed! */
+ {
+ INTERNAL ("Failed to open output file!");
+ }
+#ifdef WIN32
+ else if (setvbuf (fpDeleteFile, NULL, _IOFBF, 32767))
+ {
+ INTERNAL ("setvbuf() FAILED");
+ }
+#endif
+ }
+
+ return (0);
+}
+
+/*
+* Routine: print_string()
+* Purpose: genralized data print routine
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+*/
+void
+print_string (char *szMessage, ds_key_t val)
+{
+ if (fprintf (fpOutfile, szMessage, val) < 0)
+ {
+ fprintf(stderr, "ERROR: Failed to write string\n");
+ exit(-1);
+ }
+
+ return;
+}
+
+/*
+* Routine: print_jdate()
+* Purpose: genralized data print routine
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+*/
+int
+print_jdate (FILE *pFile, ds_key_t kValue)
+{
+
+ date_t dTemp;
+
+ jtodt (&dTemp, (int) kValue);
+#if (defined(STR_QUOTES) && !defined(_MYSQL))
+ if ((fwrite ("\"", 1, 1, pFile) != 1) ||
+ (fwrite(dttostr(&dTemp), 1, 10, pFile) != 10) ||
+ (fwrite ("\"", 1, 1, pFile)) != 1)
+#else
+ if (fwrite(dttostr(&dTemp), 1, 10, pFile) != 10)
+#endif
+ return(-1);
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+print_validation(ds_key_t kRowNumber)
+{
+ static int bInit = 0;
+ static char szValidateFormat[20];
+
+ if (!bInit)
+ {
+ sprintf(szValidateFormat, "Row #%s: ", HUGE_FORMAT);
+ bInit = 1;
+ }
+
+ if (is_set("VALIDATE"))
+ {
+ print_string(szValidateFormat, kRowNumber);
+ }
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/print.h b/ydb/library/benchmarks/gen/tpcds-dbgen/print.h
new file mode 100644
index 000000000000..e0ef53845ea6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/print.h
@@ -0,0 +1,58 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+/*
+ * OUTPUT ROUTINES
+ */
+FILE *print_prep(int table, int update);
+int dbg_print(int format, ds_key_t data, int len, int sep);
+int print_start(int tbl);
+int openDeleteFile(int bOpen);
+int print_end(int tbl);
+void print_close(int tbl);
+
+void print_integer(int nColumn, int col, int s);
+void print_char(int nColumn, char col, int s);
+void print_key(int nColumn, ds_key_t col, int s);
+void print_id(int nColumn, ds_key_t col, int s);
+void print_varchar(int nColumn, char *col, int s);
+void print_boolean(int nColumn, int col, int s);
+void print_date(int nColumn, ds_key_t, int s);
+void print_time(int nColumn, ds_key_t, int s);
+void print_delete(int *pnDate);
+void print_cp_delete(int nCatalog, int nPage);
+void print_string(char *szMessage, ds_key_t kParam);
+void print_validation(ds_key_t kRowNumber);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/qgen.y b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen.y
new file mode 100644
index 000000000000..e3712ca62dd2
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen.y
@@ -0,0 +1,572 @@
+%{
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#ifdef WIN32
+#include
+#pragma warning(disable: 4305)
+#endif
+
+#include "StringBuffer.h"
+#include "expr.h"
+#include "grammar_support.h"
+#include "keywords.h"
+#include "substitution.h"
+#include "error_msg.h"
+#include "tables.h"
+#include "qgen_params.h"
+#include "tdefs.h"
+#include "query_handler.h"
+#include "list.h"
+#include "dist.h"
+#include "scaling.h"
+
+
+#define DEBUG0(l, fmt) if (l <= verbose) printf(fmt)
+#define DEBUG1(l, fmt, arg) if (l <= verbose) printf(fmt, arg)
+#define DEBUG2(l, fmt, arg, arg2) if (l <= verbose) printf(fmt, arg, arg2)
+
+extern file_ref_t file_stack[];
+
+int yylex(void);
+
+#ifdef WIN32
+int yyparse(void);
+#endif
+
+/* GLOBAL VARIABLES */
+int verbose = 0,
+ j,
+ nRetCode;
+ds_key_t i;
+char tmpstr[128];
+segment_t *pSegment;
+substitution_t *pSub;
+%}
+
+%union {
+ int intval;
+ char *strval;
+ expr_t *exprval;
+ list_t *list;
+ }
+
+%token TOK_INT
+%token TOK_LITERAL
+%token TOK_PATH
+%token TOK_DECIMAL
+%token TOK_ID
+%token TOK_SQL
+%token KW_DEFINE
+%token KW_RANDOM
+%token KW_UNIFORM
+%token KW_RANGE
+%token KW_DATE
+%token KW_INCLUDE
+%token KW_TEXT
+%token KW_DIST
+%token KW_LIST
+%token KW_ROWCOUNT
+%token KW_BEGIN
+%token KW_END
+%token KW_SALES
+%token KW_RETURNS
+%token KW_DISTMEMBER
+%token KW_DISTWEIGHT
+%token KW_QUERY
+%token KW_STREAM
+%token KW_TEMPLATE
+%token KW_SEED
+%token KW_SCALE
+%token KW_SCALE_STEP
+%token KW_SET
+%token KW_ADD
+%token KW_NAMES
+%token KW_TYPES
+%token KW_WEIGHTS
+%token KW_INT
+%token KW_VARCHAR
+%token KW_DECIMAL
+%token KW_LIMIT
+%token KW_LIMITA
+%token KW_LIMITB
+%token KW_LIMITC
+%token KW_ULIST
+%type comma_expr_list
+%type dist_expr_list
+%type expr
+%type function_call
+%type arithmetic_expr
+%type dist_function_name
+%type function_name
+%type keyword_expr
+%type keyword_value
+%type path
+%type opt_substitution_suffix
+%type replacement
+%type replacement_list
+%type statement
+
+%left WITH
+%left '+' '-' '%'
+%left '*' '/' '^'
+%right '['
+%nonassoc UMINUS
+%left TCAST
+
+%%
+
+workload_spec: statement_list
+ {
+ AddQuerySegment(pCurrentQuery, "\n");
+ AddQuerySubstitution(pCurrentQuery, "_END", 0, 0);
+ AddQuerySegment(pCurrentQuery, "\n");
+ }
+ ;
+
+statement_list: statement
+ | statement_list statement
+ {
+ if (is_set("DEBUG"))
+ {
+ if ($2 != KW_DEFINE)
+ {
+ printf("STATUS: parsed %s statement at line %d\n",
+ ($2 == TOK_SQL)?"SQL":KeywordText($2), pCurrentFile->line_number);
+ }
+ }
+ }
+ ;
+
+statement: include_statement {$$ = KW_INCLUDE; }
+ | define_statement {$$ = KW_DEFINE; }
+ | query_statement {$$ = TOK_SQL; }
+ | dist_statement {$$ = KW_DIST; }
+ ;
+
+
+/*=====================================================================
+/* generic include syntax, should be identical to standard UNIX rules. */
+/* this will need to be revisited to port the product to PC platforms */
+/**/
+include_statement: '#' KW_INCLUDE path
+ {
+ if (include_file($3, pCurrentQuery) < 0)
+ yyerror("File include failed");
+ }
+ | '#' KW_INCLUDE '<' path '>'
+ {
+ yywarn("System include not supported; using relative pathing");
+ if (include_file($4, pCurrentQuery) < 0)
+ yyerror("File include failed");
+ }
+ ;
+/*======================================================================*/
+
+/*=====================================================================*/
+/* dist statement: create a new distribution */
+dist_statement: KW_DIST TOK_ID ';' dist_argument_list dist_members_list
+ ;
+
+dist_argument_list: dist_argument
+ | dist_argument_list dist_argument
+ ;
+
+dist_argument: KW_SET KW_WEIGHTS '=' TOK_INT ';'
+ | KW_SET KW_TYPES '=' '(' dist_type_list ')' ';'
+ | KW_SET KW_NAMES '=' '(' dist_name_list ':' dist_name_list ')' ';'
+ ;
+
+dist_type: KW_INT
+ | KW_VARCHAR
+ | KW_DECIMAL
+ ;
+
+dist_type_list:
+ | dist_type
+ | dist_type_list ',' dist_type
+ ;
+
+dist_name_list: TOK_ID
+ | dist_name_list ',' TOK_ID
+ ;
+
+dist_members_list: dist_member
+ | dist_members_list dist_member
+ ;
+
+dist_member: KW_ADD '(' dist_value_list ':' dist_weight_list ')' ';'
+ ;
+
+dist_value: TOK_INT
+ | TOK_LITERAL
+ | TOK_DECIMAL
+ ;
+
+dist_value_list: dist_value
+ | dist_value_list ',' dist_value
+ ;
+
+dist_weight_list: TOK_INT
+ | dist_value_list ',' TOK_INT
+ ;
+/*======================================================================*/
+
+
+/*=====================================================================*/
+/* define statement: define a substitiution type */
+define_statement: KW_DEFINE TOK_ID '=' expr ';'
+ {
+ defineSubstitution(pCurrentQuery, $2, $4);
+ if (is_set("DEBUG"))
+ printf("STATUS: DEFINED %s\n", $2);
+ }
+ | KW_DEFINE KW_LIMIT '=' TOK_INT ';'
+ {
+ pSub = findSubstitution(pCurrentQuery, "_LIMIT", 0);
+ sprintf(tmpstr, "%d", $4);
+ ResetBuffer(pSub->pAssignment->Value.pBuf);
+ AddBuffer(pSub->pAssignment->Value.pBuf, tmpstr);
+ if (is_set("DEBUG"))
+ printf("STATUS: SET LIMIT\n");
+ }
+ ;
+
+
+comma_expr_list: expr
+ {
+ $$ = makeList(L_FL_TAIL, NULL);
+ addList($$, $1);
+ }
+ | comma_expr_list ',' expr
+ {
+ addList($1, $3);
+ $$ = $1;
+ }
+ ;
+
+expr: TOK_LITERAL
+ {
+ $$ = MakeStringConstant($1);
+ }
+ | TOK_INT
+ {
+ $$ = MakeIntConstant($1);
+ }
+ | function_call
+ | keyword_expr
+ {
+ $$ = MakeIntConstant($1);
+ $$->nFlags |= EXPR_FL_KEYWORD;
+ }
+ | '[' keyword_value ']'
+ {
+ $$ = getKeywordValue($2);
+ }
+ | '[' TOK_ID TOK_INT opt_substitution_suffix ']'
+ {
+ $$ = MakeVariableReference($2, $3);
+ }
+ | '[' TOK_ID opt_substitution_suffix ']'
+ {
+ $$ = MakeVariableReference($2, $3);
+ }
+ | KW_SCALE
+ {
+ $$ = MakeIntConstant(get_int("SCALE"));
+ }
+ | arithmetic_expr
+ ;
+
+function_call: function_name '(' comma_expr_list ')'
+ {
+ $$ = MakeFunctionCall($1, $3);
+ }
+ | dist_function_name '(' dist_expr_list ')'
+ {
+ $$ = MakeFunctionCall($1, $3);
+ }
+ | KW_TEXT '(' replacement_list ')'
+ {
+ $$ = MakeFunctionCall(KW_TEXT, $3);
+ }
+ | KW_ROWCOUNT '(' TOK_LITERAL ')'
+ {
+ i = GetTableNumber($3);
+ if (i == -1)
+ {
+ i = distsize($3);
+ if (i == -1)
+ ReportError(QERR_BAD_NAME, $3, 1);
+ }
+ else
+ i = getIDCount(i);
+ $$ = MakeIntConstant(i);
+ }
+ | KW_ROWCOUNT '(' TOK_LITERAL ',' TOK_LITERAL ')'
+ {
+ /* TODO: Need to convert this to DSS_HUGE */
+ i = GetTableNumber($3);
+ if (i == -1)
+ {
+ i = distsize($3);
+ if (i == -1)
+ ReportError(QERR_BAD_NAME, $3, 1);
+ }
+ j = GetTableNumber($5);
+ if (i == -1)
+ ReportError(QERR_BAD_NAME, $5, 1);
+ i = (int)getIDCount(i);
+ j = (int)getIDCount(j);
+ $$ = MakeIntConstant((i>j)?j:i);
+ }
+ | KW_SCALE_STEP '(' ')'
+ {
+ $$ = MakeIntConstant(getScaleSlot(get_int("SCALE")) + 1);
+ }
+ | KW_ULIST '(' expr ',' TOK_INT ')'
+ {
+ $$ = MakeListExpr(KW_ULIST, $3, $5);
+ }
+ | KW_LIST '(' expr ',' TOK_INT ')'
+ {
+ $$ = MakeListExpr(KW_LIST, $3, $5);
+ }
+ | KW_RANGE '(' expr ',' TOK_INT ')'
+ {
+ $$ = MakeListExpr(KW_RANGE, $3, $5);
+ }
+ ;
+
+arithmetic_expr: expr '+' expr
+ {
+ $$ = makeArithmeticExpr(OP_ADD, $1, $3);
+ }
+ | expr '-' expr
+ {
+ $$ = makeArithmeticExpr(OP_SUBTRACT, $1, $3);
+ }
+ | expr '*' expr
+ {
+ $$ = makeArithmeticExpr(OP_MULTIPLY, $1, $3);
+ }
+ | expr '/' expr
+ {
+ $$ = makeArithmeticExpr(OP_DIVIDE, $1, $3);
+ }
+ ;
+dist_expr_list: expr
+ {
+ $$ = makeList(L_FL_TAIL, NULL);
+ addList($$, $1);
+ }
+ | TOK_ID
+ {
+ $$ = makeList(L_FL_TAIL, NULL);
+ addList($$, MakeStringConstant($1));
+ }
+ | dist_expr_list ',' expr
+ {
+ addList($1, $3);
+ $$ = $1;
+ }
+ | dist_expr_list ',' TOK_ID
+ {
+ addList($1, MakeStringConstant($3));
+ $$ = $1;
+ }
+ ;
+
+function_name: KW_DATE {$$ = KW_DATE;}
+ | KW_RANDOM {$$ = KW_RANDOM;}
+ ;
+
+dist_function_name: KW_DIST {$$ = KW_DIST;}
+ | KW_DISTMEMBER {$$ = KW_DISTMEMBER;}
+ | KW_DISTWEIGHT {$$ = KW_DISTWEIGHT;}
+ ;
+
+keyword_expr: KW_UNIFORM {$$ = KW_UNIFORM;}
+ | KW_SALES {$$ = KW_SALES;}
+ | KW_RETURNS {$$ = KW_RETURNS;}
+ ;
+
+keyword_value: KW_QUERY {$$ = KW_QUERY;}
+ | KW_TEMPLATE {$$ = KW_TEMPLATE;}
+ | KW_STREAM {$$ = KW_STREAM;}
+ | KW_SEED {$$ = KW_SEED;}
+ ;
+
+replacement_list: replacement
+ {
+ $$ = makeList(L_FL_TAIL, NULL);
+ addList($$, $1);
+ }
+ | replacement_list ',' replacement
+ {
+ addList($$, $3);
+ $$ = $1;
+ }
+ ;
+
+replacement: '{' TOK_LITERAL ',' TOK_INT '}'
+ {
+ $$ = MakeReplacement($2, $4);
+ }
+ ;
+
+/*======================================================================*/
+
+
+/*=====================================================================
+ * query statement: a query statement is the template into which defined
+ * substitutions are placed to make valid SQL syntax
+ */
+query_statement: query_component_list ';'
+ {
+ pSegment = getTail(pCurrentQuery->SegmentList);
+ pSegment->flags |= QS_EOS;
+ }
+
+ ;
+
+query_component_list: substitution
+ | TOK_SQL
+ {
+ if ((nRetCode = AddQuerySegment(pCurrentQuery, $1)) != 0)
+ yyerror("SQL parse failed");
+ }
+
+ | query_component_list substitution
+ | query_component_list TOK_SQL
+ {
+ if ((nRetCode = AddQuerySegment(pCurrentQuery, $2)) != 0)
+ yyerror("SQL parse failed");
+ }
+ ;
+
+substitution: '[' TOK_ID opt_substitution_suffix ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, $2, 0, $3)) < 0)
+ {
+ sprintf(tmpstr, "Substitution match failed on %s", $2);
+ yyerror(tmpstr);
+ }
+ }
+ | '[' TOK_ID TOK_INT opt_substitution_suffix ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, $2, $3, $4)) < 0)
+ {
+ sprintf(tmpstr, "Substitution match failed on %s", $2);
+ yyerror(tmpstr);
+ }
+ }
+ | '[' KW_QUERY ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_QUERY", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_STREAM ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_STREAM", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_TEMPLATE ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_TEMPLATE", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_SEED ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_SEED", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_LIMITA ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_LIMITA", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_LIMITB ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_LIMITB", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ | '[' KW_LIMITC ']'
+ {
+ if ((nRetCode = AddQuerySubstitution(pCurrentQuery, "_LIMITC", 0, 0)) < 0)
+ {
+ yyerror("Lookup of predefined constant failed");
+ }
+ }
+ ;
+
+opt_substitution_suffix: /* */ {$$ = 0;}
+ | '.' KW_BEGIN {$$ = 0;}
+ | '.' KW_END {$$ = 1;}
+ | '.' TOK_INT {$$ = $2;}
+ ;
+
+/*======================================================================*/
+
+/*=====================================================================
+ * GENERAL ELEMENTS: things used in multiple statement types
+ */
+path: TOK_LITERAL { $$ = $1; }
+ ;
+/*======================================================================*/
+
+%%
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/qgen2.vcproj b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen2.vcproj
new file mode 100644
index 000000000000..294711a99b3f
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen2.vcproj
@@ -0,0 +1,1092 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/qgen_params.h b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen_params.h
new file mode 100644
index 000000000000..a06c001017ff
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/qgen_params.h
@@ -0,0 +1,83 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef QGEN_PARAMS_H
+#define QGEN_PARAMS_H
+
+#include "r_params.h"
+#include "release.h"
+#define MAX_PARAM 21
+#ifdef DECLARER
+
+option_t options[] =
+{
+/* General Parmeters */
+{"PROG", OPT_STR|OPT_HIDE|OPT_SET, 0, "DO NOT MODIFY" , NULL, "qgen2"},
+{"FILE", OPT_STR, 1, "read parameters from file ", read_file, ""},
+{"VERBOSE", OPT_FLG, 2, "enable verbose output", NULL, "N"},
+{"HELP", OPT_FLG, 3, "display this message", usage, "N"},
+{"DISTRIBUTIONS", OPT_STR|OPT_ADV,4, "read distributions from file ", NULL, "tpcds.idx"},
+{"OUTPUT_DIR", OPT_STR, 5, "write query streams into directory ", NULL, "."},
+#ifndef WIN32
+{"PATH_SEP", OPT_STR|OPT_ADV, 6, "use to separate path elements", NULL, "/"},
+#else
+{"PATH_SEP", OPT_STR|OPT_ADV, 6, "use to separate path elements", NULL, "\\\\"},
+#endif
+{"DUMP", OPT_FLG|OPT_ADV|OPT_HIDE, 7,"dump templates as parsed", NULL, "N"},
+{"YYDEBUG", OPT_FLG|OPT_ADV|OPT_HIDE, 8,"debug the grammar", NULL, "N"},
+{"QUIET", OPT_FLG, 9, "suppress all output (for scripting)", NULL, "N"},
+{"STREAMS", OPT_INT, 10, "generate query streams/versions", NULL, "1"},
+{"INPUT", OPT_STR, 11, "read template names from ", NULL, ""},
+{"SCALE", OPT_INT, 12, "assume a database of GB", NULL, "1"},
+{"RNGSEED", OPT_INT|OPT_ADV, 13, "seed the RNG with ", NULL, "19620718"},
+{"RELEASE", OPT_FLG|OPT_ADV, 14, "display QGEN release info", printReleaseInfo, ""},
+{"TEMPLATE", OPT_STR|OPT_ADV, 15, "build queries from template ONLY", NULL, ""},
+{"COUNT", OPT_INT|OPT_ADV, 16, "generate versions per stream (used with TEMPLATE)", NULL, "1"},
+{"DEBUG", OPT_FLG|OPT_ADV, 17, "minor debugging outptut", NULL, "N"},
+{"LOG", OPT_STR, 18, "write parameter log to ", NULL, ""},
+{"FILTER", OPT_FLG|OPT_ADV, 19, "write generated queries to stdout", NULL, "N"},
+{"QUALIFY", OPT_FLG, 20, "generate qualification queries in ascending order", NULL, "N"},
+{"DIALECT", OPT_STR|OPT_ADV, 21, "include query dialect defintions found in .tpl", NULL, "ansi"},
+{"DIRECTORY", OPT_STR|OPT_ADV, 22, "look in for templates", NULL, ""},
+{NULL}
+};
+
+char *params[MAX_PARAM + 2];
+#else
+extern option_t options[];
+extern char *params[];
+extern char *szTableNames[];
+#endif
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.c b/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.c
new file mode 100644
index 000000000000..b38dacbc45d9
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.c
@@ -0,0 +1,315 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#ifndef USE_STDLIB_H
+#include
+#endif
+#include "StringBuffer.h"
+#include "eval.h"
+#include "substitution.h"
+#include "error_msg.h"
+#include "qgen_params.h"
+#include "genrand.h"
+#include "r_params.h"
+
+extern list_t *TemplateList;
+extern StringBuffer_t *g_sbTemplateName;
+extern int g_nQueryNumber, g_nStreamNumber;
+extern option_t *Options;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+substitution_t *
+defineSubstitution(template_t *pQuery, char *szSubstitutionName, expr_t *pDefinition)
+{
+ substitution_t *pSub;
+
+ pSub = (substitution_t *)malloc(sizeof(struct SUBSTITUTION_T));
+ MALLOC_CHECK(pSub);
+ if (pSub == NULL)
+ return(NULL);
+ memset(pSub, 0, sizeof(struct SUBSTITUTION_T));
+ pSub->name = szSubstitutionName;
+ pSub->pAssignment = pDefinition;
+ pSub->nSubParts = pDefinition->nValueCount;
+ addList(pQuery->SubstitutionList, (void *)pSub);
+
+ return(pSub);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+AddQuerySegment(template_t *pQuery, char *szText)
+{
+ segment_t *pSegment;
+
+ pSegment = (segment_t *)malloc(sizeof(struct SEGMENT_T));
+ MALLOC_CHECK(pSegment);
+ if (pSegment == NULL)
+ return(-1);
+ memset(pSegment, 0, sizeof(struct SEGMENT_T));
+ pSegment->text = szText;
+ addList(pQuery->SegmentList, (void *)pSegment);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+Expr_Val_t *
+findValue(segment_t *pSegment)
+{
+ Expr_Val_t *pReturnValue;
+ substitution_t *pSub;
+
+
+ pSub = pSegment->pSubstitution;
+ pReturnValue = pSub->arValues;
+
+ pReturnValue += pSub->nSubParts * pSegment->nSubCount;
+ pReturnValue += pSegment->nSubUse;
+
+ return(pReturnValue);
+
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void PrintTemplate(template_t *t)
+{
+ substitution_t *pSubstitution;
+ segment_t *pSegment;
+
+ for (pSubstitution = (substitution_t *)getHead(t->SubstitutionList);
+ pSubstitution;
+ pSubstitution = (substitution_t *)getNext(t->SubstitutionList))
+ {
+ printf("DEFINE %s = ", pSubstitution->name);
+ PrintExpr(pSubstitution->pAssignment);
+ printf(";\n");
+
+ }
+
+ printf("\n\n");
+
+ for (pSegment = (segment_t *)getHead(t->SegmentList); pSegment; pSegment = (segment_t *)getNext(t->SegmentList))
+ {
+ printf("%s", pSegment->text);
+ if (pSegment->pSubstitution)
+ {
+ printf("[%s]", pSegment->pSubstitution->name);
+ }
+ printf(" ");
+ }
+
+ printf(";\n");
+
+ return;
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void GenerateQuery(FILE *pOutFile, FILE *pLogFile, int nQuery)
+{
+ int i,
+ nBufferCount;
+ substitution_t *pSub;
+ segment_t *pSegment;
+ Expr_Val_t *pValue;
+ static int nQueryCount = 1;
+
+ if (pOutFile == NULL)
+ pOutFile = stdout;
+
+ /* get the template */
+ pCurrentQuery = getItem(TemplateList, nQuery);
+ if (!pCurrentQuery)
+ ReportError(QERR_QUERY_RANGE, NULL, 1);
+
+ if (g_sbTemplateName == NULL)
+ {
+ g_sbTemplateName = InitBuffer(20, 10);
+ }
+ ResetBuffer(g_sbTemplateName);
+ AddBuffer(g_sbTemplateName, pCurrentQuery->name);
+ if (pLogFile)
+ fprintf(pLogFile, "Template: %s\n", pCurrentQuery->name);
+ if (is_set("DEBUG"))
+ printf("STATUS: Generating Template: %s\n", pCurrentQuery->name);
+
+ /* initialize the template if required */
+ if (!(pCurrentQuery->flags & QT_INIT))
+ {
+ for (pSub = (substitution_t *)getHead(pCurrentQuery->SubstitutionList);
+ pSub;
+ pSub = (substitution_t *)getNext(pCurrentQuery->SubstitutionList))
+ {
+ nBufferCount = ((pSub->nUse)?pSub->nUse:1) * ((pSub->nSubParts)?pSub->nSubParts:1);
+ pSub->arValues = (Expr_Val_t *)malloc(nBufferCount * sizeof(struct EXPR_VAL_T));
+ MALLOC_CHECK(pSub->arValues);
+ for (i=0; i < nBufferCount; i++)
+ {
+ memset(&pSub->arValues[i], 0, sizeof(struct EXPR_VAL_T));
+#ifdef MEM_TEST
+ fprintf(stderr, "pSub arValues %d: %x\n", i, &pSub->arValues[i]);
+#endif
+ pSub->arValues[i].pBuf = InitBuffer(15, 15);
+ }
+ }
+ pCurrentQuery->flags |= QT_INIT;
+ }
+
+ /* select the values for this query */
+ for (pSub = (substitution_t *)getHead(pCurrentQuery->SubstitutionList);
+ pSub;
+ pSub = (substitution_t *)getNext(pCurrentQuery->SubstitutionList))
+ {
+ nBufferCount = ((pSub->nUse)?pSub->nUse:1) * ((pSub->nSubParts)?pSub->nSubParts:1);
+ for (i=0; i < nBufferCount; i++)
+ {
+ ResetBuffer(pSub->arValues[i].pBuf);
+ }
+#ifdef MEM_TEST
+ if (pSub->pAssignment->Value.pBuf == NULL) fprintf(stderr, "NULL pBuf %x @ %d\n", pSub->pAssignment, __LINE__);
+#endif
+ pSub->nDataType = EvalExpr(pSub->pAssignment, pSub->arValues, 0, nQueryCount);
+ if (pLogFile)
+ {
+ for (i=0; i < nBufferCount; i++)
+ {
+ fprintf(pLogFile, "\t%s.%02d = ", pSub->name, i+1);
+ if (!pSub->arValues[i].bUseInt)
+ fprintf(pLogFile, "%s\n", GetBuffer(pSub->arValues[i].pBuf));
+ else
+ {
+ fprintf(pLogFile, HUGE_FORMAT, pSub->arValues[i].nValue);
+ fprintf(pLogFile, "\n");
+ }
+ }
+ }
+
+ }
+
+ /* output the query */
+ for (pSegment = (segment_t *)getHead(pCurrentQuery->SegmentList);
+ pSegment;
+ pSegment = (segment_t *)getNext(pCurrentQuery->SegmentList))
+ {
+ if (pSegment->text)
+ fprintf(pOutFile, "%s", pSegment->text);
+ if (pSegment->pSubstitution)
+ {
+ pValue = findValue(pSegment);
+ if (!pValue->bUseInt)
+ fprintf(pOutFile, "%s", GetBuffer(pValue->pBuf));
+ else
+ {
+ fprintf(pOutFile, HUGE_FORMAT, pValue->nValue);
+ }
+ }
+ if (pSegment->flags & QS_EOS)
+ fprintf(pOutFile, ";\n");
+ }
+
+ nQueryCount += 1;
+
+
+ return;
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.h b/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.h
new file mode 100644
index 000000000000..f469dca78036
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/query_handler.h
@@ -0,0 +1,39 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+void GenerateQuery(FILE *pOutFile, FILE *pLogFile, int nQuery);
+void PrintTemplate(template_t *t);
+void PrintQuery(FILE *pOutput, template_t *t);
+substitution_t *defineSubstitution(template_t *pQuery, char *szSubstitutionName, expr_t *pDefinition);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/r_driver.h b/ydb/library/benchmarks/gen/tpcds-dbgen/r_driver.h
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.c b/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.c
new file mode 100644
index 000000000000..20a63eeb9244
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.c
@@ -0,0 +1,953 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+/*
+ * parameter handling functions
+ */
+#include
+#include
+#include
+#include
+#include "config.h"
+#include "porting.h"
+#include "r_params.h"
+#include "tdefs.h"
+#include "release.h"
+
+#define PARAM_MAX_LEN 80
+
+#ifndef TEST
+extern option_t options[];
+extern char *params[];
+#else
+option_t options[] =
+{
+{"PROG", OPT_STR|OPT_HIDE, 0, NULL, NULL, "tester"},
+{"PARAMS", OPT_STR, 1, "read parameters from file ", read_file, ""},
+{"DISTRIBUTIONS", OPT_STR, 2, "read distributions from file ", NULL, "tester_dist.idx"},
+{"OUTDIR", OPT_STR, 3, "generate files in directory ", NULL, "./"},
+{"VERBOSE", OPT_FLG, 4, "enable verbose output", NULL, "N"},
+{"HELP", OPT_FLG, 5, "display this message", usage, "N"},
+{"scale", OPT_INT, 6, "set scale to ", NULL, "1"},
+NULL
+};
+char *params[9];
+#endif
+
+static int param_init = 0;
+
+#define MAX_LINE_LEN 120
+#ifdef WIN32
+#define OPTION_START '/'
+#else
+#define OPTION_START '-'
+#endif
+
+int read_file(char *param_name, char *option);
+int fnd_param(char *name);
+void print_params(void);
+
+/*
+ * Routine: load_params()
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO:
+ * 20010621 JMS shared memory not yet implemented
+ */
+void
+load_params()
+{
+/*
+ int i=0;
+ while (options[i].name != NULL)
+ {
+ load_param(i, GetSharedMemoryParam(options[i].index));
+ i++;
+ }
+ SetSharedMemoryStat(STAT_ROWCOUNT, get_int("STEP"), 0);
+*/
+ return;
+}
+
+/*
+ * Routine: set_flag(int f)
+ * Purpose: set a toggle parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+set_flg(char *flag)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(flag);
+ if (nParam >= 0)
+ strcpy(params[options[nParam].index], "Y");
+
+ return;
+}
+
+/*
+ * Routine: clr_flg(f)
+ * Purpose: clear a toggle parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+clr_flg(char *flag)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(flag);
+ if (nParam >= 0)
+ strcpy(params[options[nParam].index], "N");
+ return;
+}
+
+/*
+ * Routine: is_set(int f)
+ * Purpose: return the state of a toggle parameter, or whether or not a string or int parameter
+ * has been set
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+is_set(char *flag)
+{
+ int nParam,
+ bIsSet = 0;
+
+ init_params();
+ nParam = fnd_param(flag);
+ if (nParam >= 0)
+ {
+ if ((options[nParam].flags & TYPE_MASK) == OPT_FLG)
+ bIsSet = (params[options[nParam].index][0] == 'Y')?1:0;
+ else
+ bIsSet = (options[nParam].flags & OPT_SET) || (strlen(options[nParam].dflt) > 0);
+ }
+
+ return(bIsSet ); /* better a false negative than a false positive ? */
+}
+
+/*
+ * Routine: set_int(int var, char *value)
+ * Purpose: set an integer parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+set_int(char *var, char *val)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(var);
+ if (nParam >= 0)
+ {
+ strcpy(params[options[nParam].index], val);
+ options[nParam].flags |= OPT_SET;
+ }
+ return;
+}
+
+/*
+ * Routine: get_int(char *var)
+ * Purpose: return the value of an integer parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+get_int(char *var)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(var);
+ if (nParam >= 0)
+ return(atoi(params[options[nParam].index]));
+ else
+ return(0);
+}
+
+/*
+ * Routine: set_str(int var, char *value)
+ * Purpose: set a character parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+set_str(char *var, char *val)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(var);
+ if (nParam >= 0)
+ {
+ strcpy(params[options[nParam].index], val);
+ options[nParam].flags |= OPT_SET;
+ }
+
+
+ return;
+}
+
+/*
+ * Routine: get_str(char * var)
+ * Purpose: return the value of a character parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+get_str(char *var)
+{
+ int nParam;
+
+ init_params();
+ nParam = fnd_param(var);
+ if (nParam >= 0)
+ return(params[options[nParam].index]);
+ else
+ return(NULL);
+}
+
+/*
+ * Routine: init_params(void)
+ * Purpose: initialize a parameter set, setting default values
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+init_params(void)
+{
+ int i;
+ static int init = 0;
+
+ if (init)
+ return(0);
+
+
+ for (i=0; options[i].name != NULL; i++)
+ {
+ params[options[i].index] = (char *)malloc(PARAM_MAX_LEN * sizeof(char));
+ MALLOC_CHECK(params[options[i].index]);
+ strncpy(params[options[i].index], options[i].dflt, 80);
+ if (*options[i].dflt)
+ options[i].flags |= OPT_DFLT;
+ }
+
+ init = 1;
+ param_init = 1;
+
+ return(0);
+}
+
+/*
+ * Routine: print_options(struct OPTION_T *o, int file, int depth)
+ * Purpose: print a summary of options
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+static void
+print_options(struct OPTION_T *o, int bShowOptional)
+{
+ int i,
+ w_adjust,
+ bShow = 0,
+ nCount = 0;
+
+ for (i=0; options[i].name != NULL; i++)
+ {
+ /*
+ * options come in two groups, general and "hidden". Decide which group to show
+ * in this pass, and ignore others
+ */
+ bShow = 0;
+ if (bShowOptional && (o[i].flags & OPT_ADV))
+ bShow = 1;
+ if (!bShowOptional && !(o[i].flags & OPT_ADV))
+ bShow = 1;
+
+ if (!bShow || (o[i].flags & OPT_HIDE))
+ continue;
+
+ nCount += 1;
+ printf("%s = ", o[i].name);
+ w_adjust = 15 - strlen(o[i].name);
+ if (o[i].flags & OPT_INT)
+ printf(" ");
+ else if (o[i].flags & OPT_STR)
+ printf(" ");
+ else if (o[i].flags & OPT_SUB)
+ printf(" ");
+ else if (o[i].flags & OPT_FLG)
+ printf(" [Y|N] ");
+ else printf(" ");
+ printf("%*s-- %s", w_adjust, " ", o[i].usage);
+ if (o[i].flags & OPT_NOP)
+ printf(" NOT IMPLEMENTED");
+ printf("\n");
+ }
+
+ if (nCount == 0)
+ printf("None defined.\n");
+
+ return;
+}
+/*
+ * Routine: save_file(char *path)
+ * Purpose: print a summary of options
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+save_file(char *path)
+{
+ int i,
+ w_adjust;
+ FILE *ofp;
+ time_t timestamp;
+
+ init_params();
+ time(×tamp);
+
+ if ((ofp = fopen(path, "w")) == NULL)
+ return(-1);
+
+ fprintf(ofp, "--\n-- %s Benchmark Parameter File\n-- Created: %s",
+ get_str("PROG"), ctime(×tamp));
+ fprintf(ofp, "--\n-- Each entry is of the form: ' = -- optional comment'\n");
+ fprintf(ofp, "-- Refer to benchmark documentation for more details\n--\n");
+
+ for (i=0; options[i].name != NULL; i++)
+ {
+ if (options[i].flags & OPT_HIDE) /* hidden option */
+ continue;
+ if (strlen(params[options[i].index]) == 0)
+ continue;
+
+ fprintf(ofp, "%s = ", options[i].name);
+ w_adjust = strlen(options[i].name) + 3;
+ if (options[i].flags & OPT_STR)
+ {
+ fprintf(ofp, "\"%s\"", params[options[i].index]);
+ w_adjust += 2;
+ }
+ else
+ fprintf(ofp, "%s", params[options[i].index]);
+ w_adjust += strlen(params[options[i].index]) + 3;
+ w_adjust = 60 - w_adjust;
+ fprintf(ofp, "%*s-- %s", w_adjust, " ", options[i].usage);
+ if (options[i].flags & OPT_NOP)
+ fprintf(ofp, " NOT IMPLEMENTED");
+ fprintf(ofp, "\n");
+ }
+
+ fclose(ofp);
+
+ return(0);
+}
+
+/*
+ * Routine: usage(char *param_name, char *msg)
+ * Purpose: display a usage message, with an optional error message
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+usage (char *param_name, char *msg)
+{
+ init_params();
+
+ fprintf (stderr,
+ "%s Population Generator (Version %d.%d.%d%s)\n",
+ get_str("PROG"), VERSION, RELEASE, MODIFICATION, PATCH);
+ fprintf (stderr, "Copyright %s %s\n", COPYRIGHT, C_DATES);
+
+ if (msg != NULL)
+ printf("\nERROR: %s\n\n", msg);
+
+ printf("\n\nUSAGE: %s [options]\n", get_str("PROG"));
+ printf("\nNote: When defined in a parameter file (using -p), parmeters should\n");
+ printf("use the form below. Each option can also be set from the command\n");
+ printf("line, using a form of '%cparam [optional argument]'\n",
+ OPTION_START);
+ printf("Unique anchored substrings of options are also recognized, and \n");
+ printf("case is ignored, so '%csc' is equivalent to '%cSCALE'\n\n",
+ OPTION_START, OPTION_START);
+ printf("General Options\n===============\n");
+ print_options(options, 0);
+ printf("\n");
+ printf("Advanced Options\n===============\n");
+ print_options(options, 1);
+ printf("\n");
+ exit((msg == NULL)?0:1);
+
+
+}
+
+/*
+ * Routine: set_option(int var, char *value)
+ * Purpose: set a particular parameter; main entry point for the module
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+set_option(char *name, char *param)
+{
+ int res = 1;
+ option_t *o;
+ char parse_int[15];
+ char *cp;
+
+ init_params();
+
+ res = fnd_param(name);
+ if (res == -1)
+ return(res);
+
+ o = &options[res];
+
+ if (o->flags & OPT_NOP)
+ {
+ printf("ERROR: Cannot accept %s.\tNot Implemented!\n", o->name);
+ return(0);
+ }
+
+ /* option is already set from the command line or hard-coded */
+ /* and doesn't allow multiple settings */
+
+ switch(o->flags & TYPE_MASK)
+ {
+ case OPT_FLG:
+ if ((param && (*param == 'Y' || *param == 'Y' || *param == OPTION_START)) ||
+ (param == NULL))
+ {
+ if (o->action)
+ if (o->action(o->name, NULL) < 0)
+ usage(o->name, "Cannot process option");
+ set_flg(name);
+ }
+ else
+ clr_flg(name);
+ res = 1;
+ break;
+ case OPT_INT:
+ if (o->action)
+ {
+ if ((res = o->action(o->name, param)) < 0)
+ usage(NULL, "Bad parameter argument");
+ else
+ sprintf(parse_int, "%d", res);
+ }
+ set_int(name, (o->action)?parse_int:param);
+ res = 2;
+ break;
+ case OPT_STR:
+ if (*param == '"')
+ {
+ cp = strchr((param + 1), '"');
+ if (cp == NULL) /* non-terminated string literal */
+ usage(NULL, "Non-terminated string");
+ *cp = '\0';
+ param += 1;
+ }
+ else
+ {
+ cp = strpbrk(param, " \t\n");
+ if (cp != NULL)
+ *cp = '\0';
+ }
+ if (o->action && strlen(param))
+ if (o->action(o->name, param) < 0)
+ usage(o->name, "Cannot process option");
+ set_str(name, param);
+ res = 2;
+ break;
+ default:
+ fprintf(stderr, "Invalid option/type (%d/%s)\n",
+ o->flags & TYPE_MASK, o->name);
+ exit(0);
+ break;
+ }
+
+ o->flags |= OPT_SET; /* marked as set */
+
+ return(res);
+}
+
+/*
+ * Routine: process_options(int count, char **vector)
+ * Purpose: process a set of command line options
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: 20000309 need to return integer to allow processing of left-over args
+ */
+int
+process_options (int count, char **vector)
+{
+ int option_num = 1,
+ res = 1;
+
+ init_params();
+
+ while (option_num < count)
+ {
+ if (*vector[option_num] == OPTION_START)
+ {
+ if (option_num == (count - 1))
+ res = set_option(vector[option_num] + 1, NULL);
+ else
+ res = set_option(vector[option_num] + 1,
+ vector[option_num + 1]);
+ }
+
+ if (res < 0)
+ {
+ printf ("ERROR: option '%s' or its argument unknown.\n",
+ (vector[option_num] + 1));
+ usage (NULL, NULL);
+ exit (1);
+ }
+ else
+ option_num += res;
+ }
+
+#ifdef JMS
+ if (is_set("VERBOSE"))
+ print_params();
+#endif
+
+ return(option_num);
+}
+
+/*
+ * Routine: read_file(char *param_name, char *fname)
+ * Purpose: process a parameter file
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+read_file(char *param_name, char *optarg)
+{
+ FILE *fp;
+ char *cp;
+ char line[MAX_LINE_LEN];
+ char name[100];
+ int index;
+
+ init_params();
+
+ if ((fp = fopen(optarg, "r")) == NULL)
+ return(-1);
+ while (fgets(line, MAX_LINE_LEN, fp) != NULL)
+ {
+ if ((cp = strchr(line, '\n')) != NULL)
+ *cp = '\0';
+ if ((cp = strchr(line, '-')) != NULL)
+ if (*(cp + 1) == '-')
+ *cp = '\0';
+ if ((cp = strtok(line, " \t=\n")) != NULL)
+ {
+ strcpy(name, cp);
+ index = fnd_param(name);
+ if (index == -1)
+ continue; /* JMS: errors are silently ignored */
+ cp += strlen(cp) + 1;
+ while ( *cp && strchr(" \t =", *cp))
+ cp++;
+
+ /* command line options over-ride those in a file */
+ if (options[index].flags & OPT_SET)
+ continue;
+
+ if (*cp)
+ {
+ switch(options[index].flags & TYPE_MASK)
+ {
+ case OPT_INT:
+ if ((cp = strtok(cp, " \t\n")) != NULL)
+ set_option(name, cp);
+ break;
+ case OPT_STR:
+ case OPT_FLG:
+ set_option(name, cp);
+ break;
+ }
+ }
+ }
+ }
+
+ fclose(fp);
+
+ return(0);
+}
+
+/*
+ * Routine: print_params(void)
+ * Purpose: print a parameter summary to display current settings
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+void
+print_params(void)
+{
+ int i;
+
+ init_params();
+
+ for (i=0; options[i].name != NULL; i++)
+ if (options[i].name != NULL)
+ {
+ printf("%s = ", options[i].name);
+ switch(options[i].flags & TYPE_MASK)
+ {
+ case OPT_INT:
+ printf("%d\n", get_int(options[i].name));
+ break;
+ case OPT_STR:
+ printf("%s\n", get_str(options[i].name));
+ break;
+ case OPT_FLG:
+ printf("%c\n", is_set(options[i].name)?'Y':'N');
+ break;
+ }
+ }
+
+ return;
+}
+
+/*
+ * Routine: fnd_param(char *name, int *type, char *value)
+ * Purpose: traverse the defined parameters, looking for a match
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns: index of option
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+fnd_param(char *name)
+{
+ int i,
+ res = -1;
+
+ for (i=0; options[i].name != NULL; i++)
+ {
+ if (strncasecmp(name, options[i].name, strlen(name)) == 0)
+ {
+ if (res == -1)
+ res = i;
+ else
+ return(-1);
+ }
+ }
+
+ return(res);
+}
+
+/*
+ * Routine: GetParamName(int nParam)
+ * Purpose: Translate between a parameter index and its name
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+GetParamName(int nParam)
+{
+ init_params();
+
+ return(options[nParam].name);
+}
+
+
+/*
+ * Routine: GetParamValue(int nParam)
+ * Purpose: Retrieve a parameters string value based on an index
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+GetParamValue(int nParam)
+{
+ init_params();
+
+ return(params[options[nParam].index]);
+}
+
+/*
+ * Routine: load_param(char *szValue, int nParam)
+ * Purpose: Set a parameter based on an index
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+load_param(int nParam, char *szValue)
+{
+ init_params();
+
+ if (options[nParam].flags & OPT_SET) /* already set from the command line */
+ return(0);
+ else
+ strcpy(params[options[nParam].index], szValue);
+
+ return(0);
+}
+
+/*
+ * Routine: IsIntParam(char *szValue, int nParam)
+ * Purpose: Boolean test for integer parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+IsIntParam(char *szParam)
+{
+ int nParam;
+
+ if ((nParam = fnd_param(szParam)) == -1)
+ return(nParam);
+
+ return((options[nParam].flags & OPT_INT)?1:0);
+}
+
+/*
+ * Routine: IsStrParam(char *szValue, int nParam)
+ * Purpose: Boolean test for string parameter
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+IsStrParam(char *szParam)
+{
+ int nParam;
+
+ if ((nParam = fnd_param(szParam)) == -1)
+ return(nParam);
+
+ return((options[nParam].flags & OPT_STR)?1:0);
+}
+
+#ifdef TEST
+
+main()
+{
+ init_params();
+ set_int("SCALE", "7");
+ set_flg("VERBOSE");
+ set_str("DISTRIBUTIONS", "'some file name'");
+ print_params();
+ set_int("s" , "8");
+ clr_flg("VERBOSE");
+ printf("DIST is %s\n", get_str("DISTRIBUTIONS"));
+ print_params();
+ usage(NULL, NULL);
+}
+#endif /* TEST_PARAMS */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.h b/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.h
new file mode 100644
index 000000000000..0d931a56882e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/r_params.h
@@ -0,0 +1,83 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+
+#ifndef R_PARAMS_H
+#define R_PARAMS_H
+#define OPT_NONE 0x00
+#define OPT_FLG 0x01 /* option is a flag; no parameter */
+#define OPT_INT 0x02 /* argument is an integer */
+#define OPT_STR 0x04 /* argument is a string */
+#define OPT_NOP 0x08 /* flags non-operational options */
+#define OPT_SUB 0x10 /* sub-option defined */
+#define OPT_ADV 0x20 /* advanced option */
+#define OPT_SET 0x40 /* not changeable -- used for default/file/command precedence */
+#define OPT_DFLT 0x80 /* param set to non-zero default */
+#define OPT_MULTI 0x100 /* param may be set repeatedly */
+#define OPT_HIDE 0x200 /* hidden option -- not listed in usage */
+#define TYPE_MASK 0x07
+
+typedef struct OPTION_T
+ {
+ char *name;
+ int flags;
+ int index;
+ char *usage;
+ int (*action)(char *szPName, char *optarg);
+ char *dflt;
+ } option_t;
+#endif
+/*
+ * function declarations
+ */
+int process_options(int count, char **args);
+char *get_str(char *var);
+void set_str(char *param, char *value);
+int get_int(char *var);
+void set_int(char *var, char *val);
+int is_set(char *flag);
+void clr_flg(char *flag);
+int find_table(char *szParamName, char *tname);
+int read_file(char *param_name, char *arg);
+int usage(char *param_name, char *msg);
+char *GetParamName(int nParam);
+char *GetParamValue(int nParam);
+int load_param(int nParam, char *value);
+int fnd_param(char *name);
+int init_params(void);
+int set_option(char *pname, char *value);
+void load_params(void);
+int IsIntParam(char *szName);
+int IsStrParam(char *szName);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/release.c b/ydb/library/benchmarks/gen/tpcds-dbgen/release.c
new file mode 100644
index 000000000000..197353c5a289
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/release.c
@@ -0,0 +1,68 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "release.h"
+#include "r_params.h"
+
+/*
+ * Routine: release(char *param_name, char *msg)
+ * Purpose: display version information
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+printReleaseInfo (char *param_name, char *msg)
+{
+ fprintf (stderr,
+ "%s Population Generator (Version %d.%d.%d%s)\n",
+ get_str("PROG"), VERSION, RELEASE, MODIFICATION, PATCH);
+ fprintf (stderr, "Copyright %s %s\n", COPYRIGHT, C_DATES);
+
+ exit(0);
+}
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/release.h b/ydb/library/benchmarks/gen/tpcds-dbgen/release.h
new file mode 100644
index 000000000000..c81945c03631
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/release.h
@@ -0,0 +1,51 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef RELEASE_H
+#define RELEASE_H
+
+/***
+ *** RELEASE INFORMATION
+ ***/
+#define VERSION 3
+#define RELEASE 2
+#define MODIFICATION 0
+#define PATCH ""
+#define COPYRIGHT "Transaction Processing Performance Council (TPC)"
+#define C_DATES "2001 - 2021"
+
+int printReleaseInfo(char *param, char *val);
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.c
new file mode 100644
index 000000000000..5e9908e1e25a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.c
@@ -0,0 +1,151 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_brand.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_BRAND_TBL g_s_brand;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_brand(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_BRAND_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_brand;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_brand, 0, sizeof(struct S_BRAND_TBL));
+ bInit = 1;
+ }
+
+ r->brand_id = kIndex;
+ r->subclass_id = (kIndex % BRAND_SUBCLASS_COUNT) + 1;
+ r->manager_id = mk_join(S_BRAND_MANAGER_ID, S_MANAGER, 1);
+ r->manufacturer_id = mk_join(S_BRAND_MANUFACTURER_ID, S_MANUFACTURER, 1);
+ mk_word(r->brand_name, "syllables", kIndex, RS_BRAND_NAME, S_BRAND_NAME);
+ tpcds_row_stop(S_BRAND);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_brand(void *pSrc)
+{
+ struct S_BRAND_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_brand;
+ else
+ r = pSrc;
+
+ print_start(S_BRAND);
+ print_key(S_BRAND_ID, r->brand_id, 1);
+ print_key(S_BRAND_SUBCLASS_ID, r->subclass_id, 1);
+ print_key(S_BRAND_MANAGER_ID, r->manager_id, 1);
+ print_key(S_BRAND_MANUFACTURER_ID, r->manufacturer_id, 1);
+ print_varchar(S_BRAND_NAME, r->brand_name, 1);
+ print_end(S_BRAND);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_brand(void *pSrc)
+{
+ struct S_BRAND_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_brand;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.h
new file mode 100644
index 000000000000..b9f249d8d119
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_brand.h
@@ -0,0 +1,53 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef s_brand_H
+#define s_brand_H
+
+#define RS_BRAND_NAME 30
+#define BRAND_SUBCLASS_COUNT 5 /* number of subrands per brand */
+
+struct S_BRAND_TBL {
+ ds_key_t brand_id;
+ ds_key_t subclass_id;
+ ds_key_t manager_id;
+ ds_key_t manufacturer_id;
+ char brand_name[RS_BRAND_NAME + 1];
+};
+
+int mk_s_brand(void *pDest, ds_key_t kIndex);
+int pr_s_brand(void *pSrc);
+int ld_s_brand(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.c
new file mode 100644
index 000000000000..2ce056c9c1ae
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.c
@@ -0,0 +1,151 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include "s_call_center.h"
+#include "genrand.h"
+#include "r_params.h"
+#include "scaling.h"
+#include "constants.h"
+#include "date.h"
+#include "tables.h"
+#include "dist.h"
+#include "build_support.h"
+#include "columns.h"
+#include "print.h"
+#include "w_call_center.h"
+#include "decimal.h"
+#include "permute.h"
+#include "scd.h"
+
+extern struct CALL_CENTER_TBL g_w_call_center;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_call_center (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(CALL_CENTER), S_CALL_CENTER_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_call_center(NULL, getSKFromID(kIndex, S_CALL_CENTER_ID));
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_call_center(void *row)
+{
+ struct CALL_CENTER_TBL *r;
+
+ if (row == NULL)
+ r = &g_w_call_center;
+ else
+ r = row;
+
+ print_start(S_CALL_CENTER);
+ print_id(CC_CALL_CENTER_SK, r->cc_call_center_sk, 1);
+ print_date(CC_OPEN_DATE_ID, r->cc_open_date_id, 1);
+ print_date(CC_CLOSED_DATE_ID, r->cc_closed_date_id, 1);
+ print_varchar(CC_NAME, r->cc_name, 1);
+ print_varchar(CC_CLASS, &r->cc_class[0], 1);
+ print_integer(CC_EMPLOYEES, r->cc_employees, 1);
+ print_integer(CC_SQ_FT, r->cc_sq_ft, 1);
+ print_varchar(CC_HOURS, r->cc_hours, 1);
+ print_varchar(CC_MANAGER, &r->cc_manager[0], 1);
+ print_decimal(CC_TAX_PERCENTAGE, &r->cc_tax_percentage, 0);
+ print_end(S_CALL_CENTER);
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_call_center(void *r)
+{
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.h
new file mode 100644
index 000000000000..20970e2f6f2c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_call_center.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CALL_CENTER_H
+#define S_CALL_CENTER_H
+
+int mk_s_call_center(void *row,ds_key_t kIndex);
+int pr_s_call_center(void *pSrc);
+int ld_s_call_center(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.c
new file mode 100644
index 000000000000..a4acd86c5cde
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.c
@@ -0,0 +1,156 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "misc.h"
+#include "tables.h"
+
+struct S_CATALOG_TBL g_s_catalog;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_catalog(void *pDest, ds_key_t kIndex)
+{
+ struct S_CATALOG_TBL *r;
+ static int bInit = 0;
+ int nDateDelta;
+ static date_t dtStartMin,
+ dtStartMax;
+
+ if (pDest == NULL)
+ r = &g_s_catalog;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_catalog, 0, sizeof(struct S_CATALOG_TBL));
+ strtodt(&dtStartMin, "1999-01-01");
+ strtodt(&dtStartMax, "2002-12-31");
+ bInit = 1;
+ }
+
+ r->s_catalog_number = kIndex;
+ genrand_date(&r->s_catalog_start_date, DIST_UNIFORM, &dtStartMin, &dtStartMax, NULL, S_CATALOG_START_DATE);
+ genrand_integer(&nDateDelta, DIST_UNIFORM, S_CATALOG_DURATION_MIN, S_CATALOG_DURATION_MAX, 0, S_CATALOG_END_DATE);
+ jtodt(&r->s_catalog_end_date, r->s_catalog_start_date.julian + nDateDelta);
+ gen_text(r->s_catalog_catalog_desc, S_CATALOG_DESC_MIN, S_CATALOG_DESC_MAX, S_CATALOG_DESC);
+ genrand_integer(&r->s_catalog_catalog_type, DIST_UNIFORM, 1, S_CATALOG_TYPE_COUNT, 0, S_CATALOG_TYPE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog(void *pSrc)
+{
+ struct S_CATALOG_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG);
+ print_key(S_CATALOG_NUMBER, r->s_catalog_number, 1);
+ print_date(S_CATALOG_START_DATE, r->s_catalog_start_date.julian, 1);
+ print_date(S_CATALOG_END_DATE, r->s_catalog_end_date.julian, 1);
+ print_varchar(S_CATALOG_DESC, r->s_catalog_catalog_desc, 1);
+ print_integer(S_CATALOG_TYPE, r->s_catalog_catalog_type, 0);
+ print_end(S_CATALOG);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog(void *pSrc)
+{
+ struct S_CATALOG_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.h
new file mode 100644
index 000000000000..b3ad626ef9c7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog.h
@@ -0,0 +1,61 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_H
+#define S_CATALOG_H
+#include "date.h"
+
+#define RS_S_CATALOG_DESC 50
+#define S_CATALOG_DURATION_MIN 50 /* days a catlog is active */
+#define S_CATALOG_DURATION_MAX 100
+#define S_CATALOG_DESC_MIN 38 /* length of descriptive text */
+#define S_CATALOG_DESC_MAX 50
+#define S_CATALOG_TYPE_COUNT 10 /* number of catalog types */
+
+/*
+ * S_CATALOG table structure
+ */
+struct S_CATALOG_TBL {
+ ds_key_t s_catalog_number;
+ date_t s_catalog_start_date;
+ date_t s_catalog_end_date;
+ char s_catalog_catalog_desc[RS_S_CATALOG_DESC + 1];
+ int s_catalog_catalog_type;
+ };
+
+int mk_s_catalog(void *pDest, ds_key_t kIndex);
+int pr_s_catalog(void *pSrc);
+int ld_s_catalog(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.c
new file mode 100644
index 000000000000..9b7c50d48a87
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.c
@@ -0,0 +1,231 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog_order.h"
+#include "s_catalog_order_lineitem.h"
+#include "s_catalog_returns.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "scaling.h"
+#include "params.h"
+#include "w_web_sales.h"
+#include "parallel.h"
+
+struct S_CATALOG_ORDER_TBL g_s_catalog_order;
+struct S_CATALOG_ORDER_LINEITEM_TBL g_s_catalog_order_lineitem;
+struct S_CATALOG_RETURNS_TBL g_s_catalog_return;
+int nItemIndex;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+static int
+mk_master(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_CATALOG_ORDER_TBL *r;
+ int nGiftPct;
+
+ if (pDest == NULL)
+ r = &g_s_catalog_order;
+ else
+ r = pDest;
+
+
+ if (!bInit)
+ {
+ memset(&g_s_catalog_order, 0, sizeof(struct S_CATALOG_ORDER_TBL));
+ bInit = 1;
+ }
+
+ jtodt(&r->dtOrderDate, getUpdateDate(S_CATALOG_ORDER, kIndex));
+ r->kID = getUpdateBase(S_CATALOG_ORDER) + kIndex;
+ genrand_integer(&r->nOrderTime , DIST_UNIFORM, 0, (24 * 3600) - 1, 0, S_CORD_ORDER_TIME);
+ r->kBillCustomerID = mk_join(S_CORD_BILL_CUSTOMER_ID, CUSTOMER, 1);
+
+ /* most orders are for the ordering customers, some are not */
+ genrand_integer(&nGiftPct, DIST_UNIFORM, 0, 99, 0, S_CORD_SHIP_CUSTOMER_ID);
+ if (nGiftPct > WS_GIFT_PCT)
+ r->kShipCustomerID =
+ mk_join (S_CORD_SHIP_CUSTOMER_ID, CUSTOMER, 2);
+ else
+ r->kShipCustomerID = r->kBillCustomerID;
+ r->kShipModeID = mk_join(S_CORD_SHIP_MODE_ID, SHIP_MODE, 1);
+ gen_text(&r->szComment[0], (int)(RS_S_CATALOG_ORDER_COMMENT * 0.6), RS_S_CATALOG_ORDER_COMMENT, S_CORD_COMMENT);
+
+ return(0);
+}
+
+static int
+mk_detail(void *pDest, int nLine, int bPrint)
+{
+ int nTemp;
+
+ mk_s_catalog_order_lineitem(pDest, nLine);
+ if (bPrint)
+ pr_s_catalog_order_lineitem(pDest);
+
+ // an item can only by returned after it has shipped
+ genrand_integer(&nTemp, DIST_UNIFORM, 0, 9999, 0, S_CLIN_IS_RETURNED);
+ if ((nTemp < S_CATALOG_RETURN_PCT) && (g_s_catalog_order_lineitem.dtShipDate.julian != -1))
+ {
+ mk_s_catalog_returns(&g_s_catalog_return, nLine);
+ if (bPrint)
+ pr_s_catalog_returns(&g_s_catalog_return);
+ }
+
+ return(0);
+}
+
+int
+mk_s_catalog_order(void *pDest, ds_key_t kIndex)
+{
+ int i;
+
+ mk_master(pDest, kIndex);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_CLIN_ITEM_ID);
+ for (i=1; i <= 9; i++)
+ {
+ mk_detail(&g_s_catalog_order_lineitem, i, 1);
+ }
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog_order(void *pSrc)
+{
+ struct S_CATALOG_ORDER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_order;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG_ORDER);
+ print_key(S_CORD_ID, r->kID, 1);
+ print_id(S_CORD_BILL_CUSTOMER_ID, r->kBillCustomerID, 1);
+ print_id(S_CORD_SHIP_CUSTOMER_ID, r->kShipCustomerID, 1);
+ print_date(S_CORD_ORDER_DATE, r->dtOrderDate.julian, 1);
+ print_integer(S_CORD_ORDER_TIME, r->nOrderTime, 1);
+ print_id(S_CORD_SHIP_MODE_ID, r->kShipModeID, 1);
+ print_id(S_CORD_CALL_CENTER_ID, r->kCallCenterID, 1);
+ print_varchar(S_CORD_COMMENT, r->szComment, 0);
+ print_end(S_CATALOG_ORDER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog_order(void *pSrc)
+{
+ struct S_CATALOG_ORDER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_order;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_catalog_order(int nTable, ds_key_t kRow, int* bPermutation)
+{
+ int nLineitem,
+ i;
+
+ row_skip(S_CATALOG_ORDER, kRow - 1);
+ row_skip(S_CATALOG_ORDER_LINEITEM, (kRow - 1)*9);
+ row_skip(S_CATALOG_RETURNS, kRow - 1);
+
+ mk_master(NULL, kRow);
+ genrand_integer(&nLineitem, DIST_UNIFORM, 1, 9, 0, S_CLIN_LINE_NUMBER);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_CLIN_ITEM_ID);
+ for (i=1; i < nLineitem; i++)
+ mk_detail(&g_s_catalog_order_lineitem, i, 0);
+ print_start(S_CATALOG_ORDER_LINEITEM);
+ print_key(0, (kRow - 1) * 9 + nLineitem, 1);
+ mk_detail(&g_s_catalog_order_lineitem, nLineitem, 1);
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.h
new file mode 100644
index 000000000000..3c9b0d4078bd
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order.h
@@ -0,0 +1,57 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_ORDER_H
+#define S_CATALOG_ORDER_H
+
+#define RS_S_CATALOG_ORDER_COMMENT 100
+#define S_CATALOG_RETURN_PCT 1030
+
+struct S_CATALOG_ORDER_TBL {
+ ds_key_t kID;
+ ds_key_t kBillCustomerID;
+ ds_key_t kShipCustomerID;
+ date_t dtOrderDate;
+ int nOrderTime;
+ ds_key_t kShipModeID;
+ ds_key_t kCallCenterID;
+ char szComment[RS_S_CATALOG_ORDER_COMMENT + 1];
+};
+
+int mk_s_catalog_order(void *pDest, ds_key_t kIndex);
+int pr_s_catalog_order(void *pSrc);
+int ld_s_catalog_order(void *pSrc);
+int vld_s_catalog_order(int nTable, ds_key_t kRow, int *pPermuatation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.c
new file mode 100644
index 000000000000..347d533465b3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.c
@@ -0,0 +1,197 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog_order_lineitem.h"
+#include "s_catalog_order.h"
+#include "w_web_sales.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "pricing.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scaling.h"
+#include "constants.h"
+#include "scd.h"
+
+extern struct S_CATALOG_ORDER_LINEITEM_TBL g_s_catalog_order_lineitem;
+extern struct S_CATALOG_ORDER_TBL g_s_catalog_order;
+extern int nItemIndex;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_catalog_order_lineitem(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_CATALOG_ORDER_LINEITEM_TBL *r;
+ static decimal_t dMin,
+ dMax;
+ static date_t dtMax;
+ int nShipLag;
+ static int *pItemPermutation;
+
+ if (pDest == NULL)
+ r = &g_s_catalog_order_lineitem;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_catalog_order_lineitem, 0, sizeof(struct S_CATALOG_ORDER_LINEITEM_TBL));
+ strtodec(&dMin, "1.00");
+ strtodec(&dMax, "1000.00");
+ pItemPermutation = makePermutation(NULL, (int)getIDCount(ITEM), S_CLIN_PERMUTE);
+ strtodt(&dtMax, TODAYS_DATE);
+ bInit = 1;
+ }
+
+ r->kOrderID = g_s_catalog_order.kID;
+ r->kLineNumber = kIndex;
+ nItemIndex += 1;
+ if (nItemIndex > getIDCount(ITEM))
+ nItemIndex = 1;
+
+ /*
+ * select a unique item, and then map to the appropriate business key
+ */
+ r->kItemID = getPermutationEntry(pItemPermutation, nItemIndex);
+ r->kItemID = getFirstSK(r->kItemID);
+
+ r->kPromotionID = mk_join(S_CLIN_PROMOTION_ID, PROMOTION, 1);
+ r->kWarehouseID = mk_join(S_CLIN_WAREHOUSE_ID, WAREHOUSE, 1);
+ /*
+ * an order cannot ship until its has been made
+ * an order cannot be recorded as shipping if its is outside the date window
+ */
+ genrand_integer(&nShipLag, DIST_UNIFORM, 0, 60, 0, S_CLIN_SHIP_DATE);
+ jtodt(&r->dtShipDate, g_s_catalog_order.dtOrderDate.julian + nShipLag);
+ if (r->dtShipDate.julian > dtMax.julian)
+ r->dtShipDate.julian = -1;
+ r->kCatalogPage = mk_join(S_CLIN_CATALOG_PAGE_ID, CATALOG_PAGE, g_s_catalog_order.dtOrderDate.julian);
+ r->kCatalogID = getCatalogNumberFromPage(r->kCatalogPage);
+ // genrand_integer(&r->Pricing.quantity, DIST_UNIFORM, 1, 100, 0, S_CLIN_QUANTITY);
+ set_pricing(S_CLIN_PRICING, &r->Pricing);
+
+ return(0);
+
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog_order_lineitem(void *pSrc)
+{
+ struct S_CATALOG_ORDER_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_order_lineitem;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG_ORDER_LINEITEM);
+ print_key(S_CLIN_ORDER_ID, r->kOrderID, 1);
+ print_key(S_CLIN_LINE_NUMBER, r->kLineNumber, 1);
+ print_id(S_CLIN_ITEM_ID, r->kItemID, 1);
+ print_id(S_CLIN_PROMOTION_ID, r->kPromotionID, 1);
+ print_integer(S_CLIN_QUANTITY, r->Pricing.quantity, 1);
+ print_decimal(S_CLIN_PRICING, &r->Pricing.sales_price, 1);
+ print_decimal(S_CLIN_COUPON_AMT, &r->Pricing.coupon_amt, 1);
+ print_id(S_CLIN_WAREHOUSE_ID, r->kWarehouseID, 1);
+ print_date(S_CLIN_SHIP_DATE, r->dtShipDate.julian, 1);
+ print_key(S_CLIN_CATALOG_ID, r->kCatalogID, 1);
+ print_key(S_CLIN_CATALOG_PAGE_ID, r->kCatalogPage, 1);
+ print_decimal(S_CLIN_SHIP_COST, &r->Pricing.ship_cost, 0);
+ print_end(S_CATALOG_ORDER_LINEITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog_order_lineitem(void *pSrc)
+{
+ struct S_CATALOG_ORDER_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_order_lineitem;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.h
new file mode 100644
index 000000000000..ff3904ebfcd3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_order_lineitem.h
@@ -0,0 +1,60 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_ORDER_LINEITEM_H
+#define S_CATALOG_ORDER_LINEITEM_H
+
+#include "pricing.h"
+
+#define PAGES_PER_CATALOG 50
+
+struct S_CATALOG_ORDER_LINEITEM_TBL {
+ ds_key_t kOrderID;
+ ds_key_t kLineNumber;
+ ds_key_t kItemID;
+ int nQuantity;
+ decimal_t dCouponAmt;
+ ds_key_t kPromotionID;
+ ds_key_t kWarehouseID;
+ date_t dtShipDate;
+ ds_key_t kCatalogID;
+ ds_key_t kCatalogPage;
+ ds_pricing_t Pricing;
+};
+
+int mk_s_catalog_order_lineitem(void *pDest, ds_key_t kIndex);
+int pr_s_catalog_order_lineitem(void *pSrc);
+int ld_s_catalog_order_lineitem(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.c
new file mode 100644
index 000000000000..98bf11474143
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.c
@@ -0,0 +1,131 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog_page.h"
+#include "w_catalog_page.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "scaling.h"
+#include "tdef_functions.h"
+#include "validate.h"
+#include "parallel.h"
+
+struct CATALOG_PAGE_TBL g_w_catalog_page;
+
+int
+mk_s_catalog_page(void *pDest, ds_key_t kRow)
+{
+ mk_w_catalog_page(pDest, kRow);
+ tpcds_row_stop(CATALOG_PAGE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog_page(void *pSrc)
+{
+ struct CATALOG_PAGE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_catalog_page;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG_PAGE);
+ print_integer(S_CATALOG_PAGE_CATALOG_NUMBER, r->cp_catalog_number, 1);
+ print_integer(S_CATALOG_PAGE_NUMBER, r->cp_catalog_page_number, 1);
+ print_varchar(S_CATALOG_PAGE_DEPARTMENT, &r->cp_department[0], 1);
+ print_varchar(S_CP_ID, &r->cp_catalog_page_id[0], 1);
+ print_date(S_CP_START_DATE, r->cp_start_date_id, 1);
+ print_date(S_CP_END_DATE, r->cp_end_date_id, 1);
+ print_varchar(S_CP_DESCRIPTION, r->cp_description, 1);
+ print_varchar(S_CP_TYPE, r->cp_type, 0);
+ print_end(S_CATALOG_PAGE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog_page(void *pSrc)
+{
+ struct CATALOG_PAGE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_catalog_page;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_catalog_page(int nTable, ds_key_t kRow, int *Permutation)
+{
+ return(validateGeneric(S_CATALOG_PAGE, kRow, NULL));
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.h
new file mode 100644
index 000000000000..f2027c0589de
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_page.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_PAGE_H
+#define S_CATALOG_PAGE_H
+int mk_s_catalog_page(void *pDest, ds_key_t kIndex);
+int pr_s_catalog_page(void *pSrc);
+int ld_s_catalog_page(void *pSrc);
+int vld_s_catalog_page(int nTable, ds_key_t kRow, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.c
new file mode 100644
index 000000000000..8027e44e3097
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.c
@@ -0,0 +1,146 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog_promotional_item.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+
+struct S_CATALOG_PROMOTIONAL_ITEM_TBL g_s_catalog_promotional_item;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_catalog_promotional_item(void *pDest, ds_key_t kIndex)
+{
+ struct S_CATALOG_PROMOTIONAL_ITEM_TBL *r;
+ static int bInit = 0;
+
+ if (pDest == NULL)
+ r = &g_s_catalog_promotional_item;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_catalog_promotional_item, 0, sizeof(struct S_CATALOG_PROMOTIONAL_ITEM_TBL));
+ bInit = 1;
+ }
+ r->catalog_promotional_item_catalog_number = mk_join(S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER,S_CATALOG, 1);
+ genrand_integer(&r->catalog_promotional_item_catalog_page_number, DIST_UNIFORM, 1, PAGES_PER_CATALOG, 0, S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER);
+ r->catalog_promotional_item_item_id = mk_join(S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID, S_ITEM, 1);
+ r->catalog_promotional_item_promotion_id = kIndex / ITEMS_PER_PROMOTION;
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog_promotional_item(void *pSrc)
+{
+ struct S_CATALOG_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_promotional_item;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG_PROMOTIONAL_ITEM);
+ print_key(S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER, r->catalog_promotional_item_catalog_number, 1);
+ print_key(S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER, r->catalog_promotional_item_catalog_page_number, 1);
+ print_key(S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID, r->catalog_promotional_item_item_id, 1);
+ print_key(S_CATALOG_PROMOTIONAL_ITEM_PROMOTION_ID, r->catalog_promotional_item_promotion_id, 0);
+ print_end(S_CATALOG_PROMOTIONAL_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog_promotional_item(void *pSrc)
+{
+ struct S_CATALOG_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_promotional_item;
+ else
+ r = pSrc;
+
+ return(0);
+
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.h
new file mode 100644
index 000000000000..34150efcd1cf
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_promotional_item.h
@@ -0,0 +1,55 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_PROMOTIONAL_ITEM_H
+#define S_CATALOG_PROMOTIONAL_ITEM_H
+
+#define PAGES_PER_CATALOG 50
+#define ITEMS_PER_PROMOTION 50
+
+/*
+ * S_CATALOG_PROMOTIONAL_ITEM table structure
+ */
+struct S_CATALOG_PROMOTIONAL_ITEM_TBL {
+ ds_key_t catalog_promotional_item_catalog_number;
+ int catalog_promotional_item_catalog_page_number;
+ ds_key_t catalog_promotional_item_item_id;
+ ds_key_t catalog_promotional_item_promotion_id;
+ };
+
+int mk_s_catalog_promotional_item(void *pDest, ds_key_t kIndex);
+int pr_s_catalog_promotional_item(void *pSrc);
+int ld_s_catalog_promotional_item(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.c
new file mode 100644
index 000000000000..85e2122f9eba
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.c
@@ -0,0 +1,183 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_catalog_returns.h"
+#include "s_catalog_order.h"
+#include "s_catalog_order_lineitem.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_CATALOG_RETURNS_TBL g_s_catalog_returns;
+extern struct S_CATALOG_ORDER_LINEITEM_TBL g_s_catalog_order_lineitem;
+extern struct S_CATALOG_ORDER_TBL g_s_catalog_order;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_catalog_returns(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_CATALOG_RETURNS_TBL *r;
+ int nReturnLag;
+
+
+ if (pDest == NULL)
+ r = &g_s_catalog_returns;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_catalog_returns, 0, sizeof(struct S_CATALOG_RETURNS_TBL));
+ bInit = 1;
+ }
+
+ genrand_integer(&nReturnLag, DIST_UNIFORM, 0, 60, 0, S_CRET_DATE);
+ r->kReturnTime = mk_join(S_CRET_TIME, TIME, 1);
+ jtodt(&r->dtReturnDate, g_s_catalog_order_lineitem.dtShipDate.julian + nReturnLag);
+ r->kCallCenterID = mk_join(S_CRET_CALL_CENTER_ID, CALL_CENTER, 1);
+ r->kItemID = g_s_catalog_order_lineitem.kItemID;
+ r->kReasonID = mk_join(S_CRET_REASON_ID, REASON, 1);
+ r->kOrderID = g_s_catalog_order.kID;
+ r->kLineNumber = kIndex;
+ r->kItemID = g_s_catalog_order_lineitem.kItemID;
+ r->kReturnCustomerID= g_s_catalog_order.kShipCustomerID;
+ r->kRefundCustomerID = g_s_catalog_order.kShipCustomerID;
+ r->Pricing = g_s_catalog_order_lineitem.Pricing;
+ genrand_integer(&r->Pricing.quantity, DIST_UNIFORM, 1, g_s_catalog_order_lineitem.Pricing.quantity, 0, S_CRET_PRICING);
+ set_pricing(S_CRET_PRICING, &r->Pricing);
+ r->kShipModeID = mk_join (S_CRET_SHIPMODE_ID, SHIP_MODE, 1);
+ r->kWarehouseID = mk_join (S_CRET_WAREHOUSE_ID, WAREHOUSE, 1);
+ r->kCatalogPageID = g_s_catalog_order_lineitem.kCatalogPage;
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_catalog_returns(void *pSrc)
+{
+ struct S_CATALOG_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_returns;
+ else
+ r = pSrc;
+
+ print_start(S_CATALOG_RETURNS);
+ print_id(S_CRET_CALL_CENTER_ID, r->kCallCenterID, 1);
+ print_key(S_CRET_ORDER_ID, r->kOrderID, 1);
+ print_key(S_CRET_LINE_NUMBER, r->kLineNumber, 1);
+ print_id(S_CRET_ITEM_ID, r->kItemID, 1);
+ print_id(S_CRET_RETURN_CUSTOMER_ID, r->kReturnCustomerID, 1);
+ print_id(S_CRET_REFUND_CUSTOMER_ID, r->kRefundCustomerID, 1);
+ print_date(S_CRET_DATE, r->dtReturnDate.julian, 1);
+ print_time(S_CRET_TIME, r->kReturnTime, 1);
+ print_integer(S_CRET_QUANTITY, r->Pricing.quantity, 1);
+ print_decimal(S_CRET_AMOUNT, &r->Pricing.net_paid, 1);
+ print_decimal(S_CRET_TAX, &r->Pricing.ext_tax, 1);
+ print_decimal(S_CRET_FEE, &r->Pricing.fee, 1);
+ print_decimal(S_CRET_SHIP_COST, &r->Pricing.ext_ship_cost, 1);
+ print_decimal(S_CRET_REFUNDED_CASH, &r->Pricing.refunded_cash, 1);
+ print_decimal(S_CRET_REVERSED_CHARGE, &r->Pricing.reversed_charge, 1);
+ print_decimal(S_CRET_MERCHANT_CREDIT, &r->Pricing.store_credit, 1);
+ print_id(S_CRET_REASON_ID, r->kReasonID, 1);
+ print_id(S_CRET_SHIPMODE_ID, r->kShipModeID, 1);
+ print_id(S_CRET_WAREHOUSE_ID, r->kWarehouseID, 1);
+ print_id(S_CRET_CATALOG_PAGE_ID, r->kCatalogPageID, 0);
+ print_end(S_CATALOG_RETURNS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_catalog_returns(void *pSrc)
+{
+ struct S_CATALOG_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_catalog_returns;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.h
new file mode 100644
index 000000000000..e31aceb9fe00
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_catalog_returns.h
@@ -0,0 +1,61 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATALOG_RETURNS_H
+#define S_CATALOG_RETURNS_H
+
+#include "pricing.h"
+
+struct S_CATALOG_RETURNS_TBL {
+ ds_key_t kCallCenterID;
+ ds_key_t kOrderID;
+ ds_key_t kLineNumber;
+ ds_key_t kItemID;
+ ds_key_t kReturnCustomerID;
+ ds_key_t kRefundCustomerID;
+ date_t dtReturnDate;
+ ds_key_t kReturnTime;
+ int nQuantity;
+ ds_pricing_t Pricing;
+ ds_key_t kReasonID;
+ ds_key_t kCatalogPageID;
+ ds_key_t kShipModeID;
+ ds_key_t kWarehouseID;
+};
+
+int mk_s_catalog_returns(void *pDest, ds_key_t kIndex);
+int pr_s_catalog_returns(void *pSrc);
+int ld_s_catalog_returns(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.c
new file mode 100644
index 000000000000..cb05ace6e938
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.c
@@ -0,0 +1,146 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_category.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+
+struct S_CATEGORY_TBL g_s_category;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20031022 jms RNGUsage for description is an estimate
+*/
+int
+mk_s_category(void *pDest, ds_key_t kIndex)
+{
+ struct S_CATEGORY_TBL *r;
+ static int bInit = 0;
+
+ if (pDest == NULL)
+ r = &g_s_category;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_category, 0, sizeof(struct S_CATEGORY_TBL));
+ bInit = 1;
+ }
+ r->category_id = kIndex;
+ mk_word(r->category_name, "Syllables", kIndex, RS_CATEGORY_NAME, S_CATEGORY_NAME);
+ gen_text(r->category_desc, S_CATEGORY_DESC_MIN, RS_CATEGORY_DESC, S_CATEGORY_DESC);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_category(void *pSrc)
+{
+ struct S_CATEGORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_category;
+ else
+ r = pSrc;
+
+ print_start(S_CATEGORY);
+ print_key(S_CATEGORY_ID, r->category_id, 1);
+ print_varchar(S_CATEGORY_NAME, r->category_name, 1);
+ print_varchar(S_CATEGORY_DESC, r->category_desc, 0);
+ print_end(S_CATEGORY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_category(void *pSrc)
+{
+ struct S_CATEGORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_category;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.h
new file mode 100644
index 000000000000..af59b09a244a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_category.h
@@ -0,0 +1,55 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CATEGORY_H
+#define S_CATEGORY_H
+
+#define RS_CATEGORY_NAME 25
+#define RS_CATEGORY_DESC 50
+#define S_CATEGORY_DESC_MIN 35
+
+/*
+ * S_CATEGORY table structure
+ */
+struct S_CATEGORY_TBL {
+ ds_key_t category_id;
+ char category_name[RS_CATEGORY_NAME + 1];
+ char category_desc[RS_CATEGORY_DESC + 1];
+};
+
+int mk_s_category(void *pDest, ds_key_t kIndex);
+int pr_s_category(void *pSrc);
+int ld_s_category(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.c
new file mode 100644
index 000000000000..d32bcd7a7dc2
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.c
@@ -0,0 +1,149 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_class.h"
+#include "print.h"
+#include "build_support.h"
+#include "columns.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+
+struct S_CLASS_TBL g_s_class;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO:
+* 20031022 jms RNGUsage for descrition is an estimate
+*/
+int
+mk_s_class(void *pDest, ds_key_t kIndex)
+{
+ struct S_CLASS_TBL *r;
+ static int bInit = 0;
+
+ if (pDest == NULL)
+ r = &g_s_class;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_class, 0, sizeof(struct S_CLASS_TBL));
+ bInit = 1;
+ }
+
+ r->id = kIndex;
+ r->subcat_id = mk_join(S_CLASS_SUBCAT_ID, S_SUBCATEGORY, 1);
+ gen_text(r->desc, S_CLASS_DESC_MIN, RS_CLASS_DESC, S_CLASS_DESC);
+ tpcds_row_stop(S_CLASS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_class(void *pSrc)
+{
+ struct S_CLASS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_class;
+ else
+ r = pSrc;
+
+ print_start(S_CLASS);
+ print_key(S_CLASS_ID, r->id, 1);
+ print_key(S_CLASS_SUBCAT_ID, r->subcat_id, 1);
+ print_varchar(S_CLASS_DESC, r->desc, 0);
+ print_end(S_CLASS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_class(void *pSrc)
+{
+ struct S_CLASS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_class;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.h
new file mode 100644
index 000000000000..ff88062f5584
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_class.h
@@ -0,0 +1,54 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CLASS_H
+#define S_CLASS_H
+
+#define RS_CLASS_DESC 50
+#define S_CLASS_DESC_MIN 35
+
+/*
+ * S_CLASS table structure
+ */
+struct S_CLASS_TBL {
+ ds_key_t id;
+ ds_key_t subcat_id;
+ char desc[RS_CLASS_DESC + 1];
+};
+
+int mk_s_class(void *pDest, ds_key_t kIndex);
+int pr_s_class(void *pSrc);
+int ld_s_class(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.c
new file mode 100644
index 000000000000..54802dd034bb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.c
@@ -0,0 +1,145 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_company.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_COMPANY_TBL g_s_company;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_company(void *pDest, ds_key_t kIndex)
+{
+ struct S_COMPANY_TBL *r;
+ static int bInit = 0;
+
+ if (pDest == NULL)
+ r = &g_s_company;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_company, 0, sizeof(struct S_COMPANY_TBL));
+ bInit = 1;
+ }
+
+ r->company_id = kIndex;
+ mk_word(r->company_name, "Syllables", kIndex, RS_COMPANY_NAME, S_COMPANY_NAME);
+ tpcds_row_stop(S_COMPANY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_company(void *pSrc)
+{
+ struct S_COMPANY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_company;
+ else
+ r = pSrc;
+
+ print_start(S_COMPANY);
+ print_key(S_COMPANY_ID, r->company_id, 1);
+ print_varchar(S_COMPANY_NAME, r->company_name, 0);
+ print_end(S_COMPANY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_company(void *pSrc)
+{
+ struct S_COMPANY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_company;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.h
new file mode 100644
index 000000000000..12ef9902255e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_company.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_COMPANY_H
+#define S_COMPANY_H
+
+#define RS_COMPANY_NAME 50
+
+/*
+ * S_COMPANY table structure
+ */
+struct S_COMPANY_TBL {
+ ds_key_t company_id;
+ char company_name[RS_COMPANY_NAME + 1];
+};
+
+int mk_s_company(void *pDest, ds_key_t kIndex);
+int pr_s_company(void *pSrc);
+int ld_s_company(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.c
new file mode 100644
index 000000000000..41abe35b5355
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.c
@@ -0,0 +1,280 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_customer.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "address.h"
+#include "scaling.h"
+#include "parallel.h"
+#include "w_customer_demographics.h"
+#include "w_customer_address.h"
+#include "permute.h"
+
+struct S_CUSTOMER_TBL g_s_customer;
+extern struct W_CUSTOMER_ADDRESS_TBL g_w_customer_address;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_customer (void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_CUSTOMER_TBL *r;
+ static date_t dtMin,
+ dtMax, dtBirthMin, dtBirthMax, dtToday, dt1YearAgo, dt10YearsAgo;
+ static decimal_t dMinIncome, dMaxIncome;
+ int nTemp;
+ ds_key_t kTempDemographic;
+ char *szTemp;
+ static int *pPermutation;
+
+ if (pDest == NULL)
+ r = &g_s_customer;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset (&g_s_customer, 0, sizeof (struct S_CUSTOMER_TBL));
+ setUpdateDateRange (S_CUSTOMER, &dtMin, &dtMax);
+ strtodec (&dMinIncome, "0.00");
+ strtodec (&dMaxIncome, "200000.00");
+ r->pBirthCountry = strdup ("");
+ strtodt (&dtBirthMin, "1924-01-01");
+ strtodt (&dtBirthMax, "1992-12-31");
+ strtodt (&dtToday, TODAYS_DATE);
+ jtodt (&dt1YearAgo, dtToday.julian - 365);
+ jtodt (&dt10YearsAgo, dtToday.julian - 365);
+ pPermutation =
+ makePermutation (NULL, (int) getIDCount (CUSTOMER), S_CUST_ID);
+
+ bInit = 1;
+ }
+
+ r->kID = getPermutationEntry (pPermutation, (int) kIndex);
+ kTempDemographic = mk_join (S_CUST_GENDER, CUSTOMER_DEMOGRAPHICS, 1) - 1;
+ bitmap_to_dist (&szTemp, "gender", &kTempDemographic, 1,
+ CUSTOMER_DEMOGRAPHICS);
+ switch (*szTemp)
+ {
+ case 'M': /* male */
+ r->sGender[0] = 'M';
+ pick_distribution (&r->pFirstName, "first_names", 1, 1,
+ S_CUST_FIRST_NAME);
+ pick_distribution (&r->pSalutation, "salutations", 1, 2,
+ S_CUST_SALUTATION);
+ break;
+ case 'F': /* female */
+ r->sGender[0] = 'F';
+ pick_distribution (&r->pFirstName, "first_names", 1, 2,
+ S_CUST_FIRST_NAME);
+ pick_distribution (&r->pSalutation, "salutations", 1, 3,
+ S_CUST_SALUTATION);
+ break;
+ default: /* gender neutral */
+ r->sGender[0] = 'U';
+ pick_distribution (&r->pFirstName, "first_names", 1, 3,
+ S_CUST_FIRST_NAME);
+ pick_distribution (&r->pSalutation, "salutations", 1, 1,
+ S_CUST_SALUTATION);
+ break;
+ }
+ bitmap_to_dist (&r->pMaritalStatus, "marital_status", &kTempDemographic, 1,
+ CUSTOMER_DEMOGRAPHICS);
+ bitmap_to_dist (&r->pEducation, "education", &kTempDemographic, 1,
+ CUSTOMER_DEMOGRAPHICS);
+ bitmap_to_dist (&r->nPurchaseEstimate, "purchase_band", &kTempDemographic,
+ 1, CUSTOMER_DEMOGRAPHICS);
+ bitmap_to_dist (&r->pCreditRating, "credit_rating", &kTempDemographic, 1,
+ CUSTOMER_DEMOGRAPHICS);
+ r->nDependents = (int) (kTempDemographic % (ds_key_t) CD_MAX_CHILDREN);
+ kTempDemographic /= (ds_key_t) CD_MAX_CHILDREN;
+ r->nEmployed = (int) (kTempDemographic % (ds_key_t) CD_MAX_EMPLOYED);
+ kTempDemographic /= (ds_key_t) CD_MAX_EMPLOYED;
+ r->nCollege = (int) (kTempDemographic % (ds_key_t) CD_MAX_COLLEGE);
+
+ pick_distribution (&r->pLastName, "last_names", 1, 1, S_CUST_LAST_NAME);
+ r->bPreferredFlag =
+ (genrand_integer (NULL, DIST_UNIFORM, 1, 100, 0, S_CUST_PREFERRED_FLAG) >
+ 50) ? 1 : 0;
+ genrand_date (&r->dtBirthDate, DIST_UNIFORM, &dtBirthMin, &dtBirthMax, NULL,
+ S_CUST_BIRTH_DATE);
+ genrand_date (&r->dtFirstPurchaseDate, DIST_UNIFORM, &dt10YearsAgo,
+ &dt1YearAgo, NULL, S_CUST_FIRST_PURCHASE_DATE);
+ genrand_integer (&nTemp, DIST_UNIFORM, 1, 30, 0, S_CUST_FIRST_SHIPTO_DATE);
+ jtodt (&r->dtFirstShipToDate, r->dtFirstPurchaseDate.julian + nTemp);
+ gen_charset (r->szLogin, ALPHANUM, 5, RS_S_CUST_LOGIN, S_CUST_LOGIN);
+ genrand_email (r->szEmail, r->pFirstName, r->pLastName, S_CUST_EMAIL);
+ genrand_date (&r->dtLastLogin, DIST_UNIFORM, &dt1YearAgo, &dtToday, NULL,
+ S_CUST_LAST_LOGIN);
+ genrand_date (&r->dtReview, DIST_UNIFORM, &dt1YearAgo, &dtToday, NULL,
+ S_CUST_LAST_REVIEW);
+ genrand_ipaddr (r->szPrimaryMachine, S_CUST_PRIMARY_MACHINE);
+ genrand_ipaddr (r->szSecondaryMachine, S_CUST_SECONDARY_MACHINE);
+ pick_distribution (&r->pLocationType, "location_type", 1, 1,
+ S_CUST_LOCATION_TYPE);
+ pick_distribution (&r->nVehicle, "vehicle_count", 1, 1, S_CUST_VEHICLE_CNT);
+ genrand_decimal (&r->dIncome, DIST_UNIFORM, &dMinIncome, &dMaxIncome, NULL,
+ S_CUST_INCOME);
+ pick_distribution (&r->pBuyPotential, "buy_potential", 1, 1,
+ S_CUST_PURCHASE_ESTIMATE);
+ mk_w_customer_address (NULL, kIndex);
+
+ return (0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_customer (void *pSrc)
+{
+ struct S_CUSTOMER_TBL *r;
+ char szTemp[6];
+
+ if (pSrc == NULL)
+ r = &g_s_customer;
+ else
+ r = pSrc;
+
+ print_start (S_CUSTOMER);
+ print_id (S_CUST_ID, r->kID, 1);
+ print_varchar (S_CUST_SALUTATION, r->pSalutation, 1);
+ print_varchar (S_CUST_LAST_NAME, r->pLastName, 1);
+ print_varchar (S_CUST_FIRST_NAME, r->pFirstName, 1);
+ print_boolean (S_CUST_PREFERRED_FLAG, r->bPreferredFlag, 1);
+ print_date (S_CUST_BIRTH_DATE, r->dtBirthDate.julian, 1);
+ print_varchar (S_CUST_BIRTH_COUNTRY, r->pBirthCountry, 1);
+ print_varchar (S_CUST_LOGIN, r->szLogin, 1);
+ print_varchar (S_CUST_EMAIL, r->szEmail, 1);
+ print_date (S_CUST_LAST_LOGIN, r->dtLastLogin.julian, 1);
+ print_date (S_CUST_FIRST_SHIPTO_DATE, r->dtFirstShipToDate.julian, 1);
+ print_date (S_CUST_FIRST_PURCHASE_DATE, r->dtFirstPurchaseDate.julian, 1);
+ print_date (S_CUST_LAST_REVIEW, r->dtReview.julian, 1);
+ print_varchar (S_CUST_PRIMARY_MACHINE, r->szPrimaryMachine, 1);
+ print_varchar (S_CUST_SECONDARY_MACHINE, r->szSecondaryMachine, 1);
+ print_integer (S_CUST_ADDRESS_STREET_NUM,
+ g_w_customer_address.ca_address.street_num, 1);
+ print_varchar (S_CUST_ADDRESS_SUITE_NUM,
+ g_w_customer_address.ca_address.suite_num, 1);
+ print_varchar (S_CUST_ADDRESS_STREET_NAME1,
+ g_w_customer_address.ca_address.street_name1, 1);
+ print_varchar (S_CUST_ADDRESS_STREET_NAME2,
+ g_w_customer_address.ca_address.street_name2, 1);
+ print_varchar (S_CUST_ADDRESS_STREET_TYPE,
+ g_w_customer_address.ca_address.street_type, 1);
+ print_varchar (S_CUST_ADDRESS_CITY, g_w_customer_address.ca_address.city,
+ 1);
+ sprintf (szTemp, "%05d", g_w_customer_address.ca_address.zip);
+ print_varchar (S_CUST_ADDRESS_ZIP, szTemp, 1);
+ print_varchar (S_CUST_ADDRESS_COUNTY,
+ g_w_customer_address.ca_address.county, 1);
+ print_varchar (S_CUST_ADDRESS_STATE, g_w_customer_address.ca_address.state,
+ 1);
+ print_varchar (S_CUST_ADDRESS_COUNTRY,
+ g_w_customer_address.ca_address.country, 1);
+ print_varchar (S_CUST_LOCATION_TYPE, r->pLocationType, 1);
+ print_varchar (S_CUST_GENDER, r->sGender, 1);
+ print_varchar (S_CUST_MARITAL_STATUS, r->pMaritalStatus, 1);
+ print_varchar (S_CUST_EDUCATION, r->pEducation, 1);
+ print_varchar (S_CUST_CREDIT_RATING, r->pCreditRating, 1);
+ print_integer (S_CUST_PURCHASE_ESTIMATE, r->nPurchaseEstimate, 1);
+ print_varchar (S_CUST_BUY_POTENTIAL, r->pBuyPotential, 1);
+ print_integer (S_CUST_DEPENDENT_CNT, r->nDependents, 1);
+ print_integer (S_CUST_EMPLOYED_CNT, r->nEmployed, 1);
+ print_integer (S_CUST_COLLEGE_CNT, r->nCollege, 1);
+ print_integer (S_CUST_VEHICLE_CNT, r->nVehicle, 1);
+ print_decimal (S_CUST_INCOME, &r->dIncome, 0);
+ print_end (S_CUSTOMER);
+
+ return (0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_customer (void *pSrc)
+{
+ struct S_CUSTOMER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_customer;
+ else
+ r = pSrc;
+
+ return (0);
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.h
new file mode 100644
index 000000000000..50209d420d7a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer.h
@@ -0,0 +1,77 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_CUSTOMER_H
+#define S_CUSTOMER_H
+
+#define RS_S_CUST_LOGIN 13
+#define RS_S_CUST_EMAIL 50
+#define RS_S_CUST_MACHINE 15
+
+struct S_CUSTOMER_TBL {
+ ds_key_t kID;
+ char *pSalutation;
+ char *pLastName;
+ char *pFirstName;
+ int bPreferredFlag;
+ date_t dtBirthDate;
+ date_t dtFirstPurchaseDate;
+ date_t dtFirstShipToDate;
+ char *pBirthCountry;
+ char szLogin[RS_S_CUST_LOGIN + 1];
+ char szEmail[RS_S_CUST_EMAIL + 1];
+ date_t dtLastLogin;
+ date_t dtReview;
+ char szPrimaryMachine[RS_S_CUST_MACHINE + 1];
+ char szSecondaryMachine[RS_S_CUST_MACHINE + 1];
+ ds_addr_t adAddress;
+ char *pLocationType;
+ char sGender[2];
+ char *pMaritalStatus;
+ char *pEducation;
+ char *pCreditRating;
+ int nPurchaseEstimate;
+ char *pBuyPotential;
+ int nDependents;
+ int nEmployed;
+ int nCollege;
+ int nVehicle;
+ decimal_t dIncome;
+};
+
+int mk_s_customer(void *pDest, ds_key_t kIndex);
+int pr_s_customer(void *pSrc);
+int ld_s_customer(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.c
new file mode 100644
index 000000000000..15625f1b3c05
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.c
@@ -0,0 +1,129 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "w_customer_address.h"
+#include "s_customer_address.h"
+#include "date.h"
+#include "decimal.h"
+#include "genrand.h"
+#include "columns.h"
+#include "build_support.h"
+#include "print.h"
+#include "tables.h"
+#include "nulls.h"
+#include "tdefs.h"
+#include "tdef_functions.h"
+
+extern struct W_CUSTOMER_ADDRESS_TBL g_w_customer_address;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_customer_address(void *row)
+{
+ struct W_CUSTOMER_ADDRESS_TBL *r;
+ char szTemp[11];
+
+ if (row == NULL)
+ r = &g_w_customer_address;
+ else
+ r = row;
+
+ print_start(S_CUSTOMER_ADDRESS);
+ print_varchar(S_CADR_ID, r->ca_addr_id, 1);
+ print_integer(S_CADR_ADDRESS_STREET_NUMBER, r->ca_address.street_num, 1);
+ print_varchar(S_CADR_ADDRESS_STREET_NAME1, r->ca_address.street_name1, 1);
+ print_varchar(S_CADR_ADDRESS_STREET_NAME2, r->ca_address.street_name2, 1);
+ print_varchar(S_CADR_ADDRESS_STREET_TYPE, r->ca_address.street_type, 1);
+ print_varchar(S_CADR_ADDRESS_SUITE_NUM, &r->ca_address.suite_num[0], 1);
+ print_varchar(S_CADR_ADDRESS_CITY, r->ca_address.city, 1);
+ print_varchar(S_CADR_ADDRESS_COUNTY, r->ca_address.county, 1);
+ print_varchar(S_CADR_ADDRESS_STATE, r->ca_address.state, 1);
+ sprintf(szTemp, "%05d", r->ca_address.zip);
+ print_varchar(S_CADR_ADDRESS_ZIP, szTemp, 1);
+ print_varchar(S_CADR_ADDRESS_COUNTRY, &r->ca_address.country[0], 0);
+ print_end(S_CUSTOMER_ADDRESS);
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_customer_address(void *row)
+{
+ struct W_CUSTOMER_ADDRESS_TBL *r;
+
+ if (row == NULL)
+ r = &g_w_customer_address;
+ else
+ r = row;
+
+ return(0);
+}
+
+int
+vld_s_customer_address(int nTable, ds_key_t kRow, int *Permutation)
+{
+ return(validateGeneric(S_CUSTOMER_ADDRESS, kRow, Permutation));
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.h
new file mode 100644
index 000000000000..8a73bc0a93b3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_customer_address.h
@@ -0,0 +1,43 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_BUSINESS_ADDRESS_H
+#define S_BUSINESS_ADDRESS_H
+
+
+int pr_s_customer_address(void *pSrc);
+int ld_s_customer_address(void *pSrc);
+int vld_s_customer_address(int nTable, ds_key_t kRow, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.c
new file mode 100644
index 000000000000..de8ee84e3bf5
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.c
@@ -0,0 +1,147 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_division.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_DIVISION_TBL g_s_division;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_division(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_DIVISION_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_division;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_division, 0, sizeof(struct S_DIVISION_TBL));
+ bInit = 1;
+ }
+
+ r->id = kIndex;
+ r->company = (kIndex % DIVISIONS_PER_COMPANY) + 1;
+ mk_word(r->name, "syllables", kIndex, RS_DIVISION_NAME, S_DIVISION_NAME);
+ tpcds_row_stop(S_DIVISION);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_division(void *pSrc)
+{
+ struct S_DIVISION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_division;
+ else
+ r = pSrc;
+
+ print_start(S_DIVISION);
+ print_key(S_DIVISION_ID, r->id, 1);
+ print_varchar(S_DIVISION_NAME, r->name, 1);
+ print_key(S_DIVISION_COMPANY, r->company, 1);
+ print_end(S_DIVISION);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_division(void *pSrc)
+{
+ struct S_DIVISION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_division;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.h
new file mode 100644
index 000000000000..e2bc92820ca0
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_division.h
@@ -0,0 +1,53 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_DIVISION_H
+#define S_DIVISION_H
+
+#define RS_DIVISION_NAME 40
+#define RS_DIVISION_COMPANY_NAME 40
+#define DIVISIONS_PER_COMPANY 4
+
+struct S_DIVISION_TBL {
+ ds_key_t id;
+ char name[RS_DIVISION_NAME + 1];
+ ds_key_t company;
+ char szCompanyName[RS_DIVISION_COMPANY_NAME + 1];
+};
+
+int mk_s_division(void *pDest, ds_key_t kIndex);
+int pr_s_division(void *pSrc);
+int ld_s_division(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.c
new file mode 100644
index 000000000000..e8d5fcc11c08
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.c
@@ -0,0 +1,167 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_inventory.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "r_params.h"
+#include "parallel.h"
+#include "scaling.h"
+#include "scd.h"
+
+struct S_INVENTORY_TBL g_s_inventory;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_inventory(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_INVENTORY_TBL *r;
+ static ds_key_t item_count;
+ static ds_key_t warehouse_count;
+ ds_key_t kItem;
+ int nTemp;
+
+ if (pDest == NULL)
+ r = &g_s_inventory;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ item_count = getIDCount(ITEM);
+ warehouse_count = get_rowcount (WAREHOUSE);
+ memset(&g_s_inventory, 0, sizeof(struct S_INVENTORY_TBL));
+ bInit = 1;
+ }
+
+ nTemp = (int) kIndex - 1;
+ kItem = (nTemp % item_count) + 1;
+ nTemp /= (int) item_count;
+ r->warehouse_id = (nTemp % warehouse_count) + 1;
+
+
+ /*
+ * the generation of SCD ids in the warehouse is tied to the monotonically increasing surrogate key.
+ * this isn't ideal, but changing the data set on the warehouse side is a problem at this late date, so we
+ * need to mimic the behavior.
+ */
+ r->invn_date.julian = getUpdateDate(S_INVENTORY, kIndex);
+ r->item_id = getFirstSK(kItem);
+ genrand_integer(&r->quantity, DIST_UNIFORM, INVN_MIN_QUANTITY, INVN_MAX_QUANTITY, 0, S_INVN_QUANTITY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_inventory(void *pSrc)
+{
+ struct S_INVENTORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_inventory;
+ else
+ r = pSrc;
+
+ print_start(S_INVENTORY);
+ print_id(S_INVN_WAREHOUSE, r->warehouse_id, 1);
+ print_id(S_INVN_ITEM, r->item_id, 1);
+ print_date(S_INVN_DATE, r->invn_date.julian, 1);
+ print_integer(S_INVN_QUANTITY, r->quantity, 0);
+ print_end(S_INVENTORY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_inventory(void *pSrc)
+{
+ struct S_INVENTORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_inventory;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.h
new file mode 100644
index 000000000000..eddfe803f6bb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_inventory.h
@@ -0,0 +1,56 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_INVENTORY_H
+#define S_INVENTORY_H
+
+#define INVN_MIN_DATE "1999-01-01"
+#define INVN_MAX_DATE "2003-12-31"
+#define INVN_MIN_UPDATE_DATE "2004-01-01"
+#define INVN_UPDATE_DURATION 30
+#define INVN_MIN_QUANTITY 0
+#define INVN_MAX_QUANTITY 250
+
+struct S_INVENTORY_TBL {
+ ds_key_t warehouse_id;
+ ds_key_t item_id;
+ date_t invn_date;
+ int quantity;
+};
+
+int mk_s_inventory(void *pDest, ds_key_t kIndex);
+int pr_s_inventory(void *pSrc);
+int ld_s_inventory(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.c
new file mode 100644
index 000000000000..e51f517b5287
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.c
@@ -0,0 +1,178 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_item.h"
+#include "w_item.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scaling.h"
+#include "scd.h"
+#include "tdef_functions.h"
+#include "r_params.h"
+
+extern struct W_ITEM_TBL g_w_item;
+extern struct W_ITEM_TBL g_OldValues;
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_item (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(ITEM),
+ S_ITEM_PERMUTE);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_item(NULL, getSKFromID(kIndex, S_ITEM_ID));
+ tpcds_row_stop(ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_item(void *pSrc)
+{
+ struct W_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_item;
+ else
+ r = pSrc;
+
+ print_start(S_ITEM);
+ print_varchar(S_ITEM_ID, r->i_item_id, 1);
+ print_varchar(S_ITEM_DESC, r->i_item_desc, 1);
+ print_decimal(S_ITEM_LIST_PRICE, &r->i_current_price, 1);
+ print_decimal(S_ITEM_WHOLESALE_COST, &r->i_wholesale_cost, 1);
+ print_varchar(S_ITEM_SIZE, r->i_size, 1);
+ print_varchar(S_ITEM_FORMULATION, r->i_formulation, 1);
+ print_varchar(S_ITEM_FLAVOR, r->i_color, 1);
+ print_varchar(S_ITEM_UNITS, r->i_units, 1);
+ print_varchar(S_ITEM_CONTAINER, r->i_container, 1);
+ print_key(S_ITEM_MANAGER_ID, r->i_manager_id, 0);
+ print_end(S_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_item(void *pSrc)
+{
+ struct W_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_item;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_item(int nTable, ds_key_t kRow, int *Permutation)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ table_func_t *pTF = getTdefFunctionsByNumber(ITEM);
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(ITEM),
+ S_ITEM_PERMUTE);
+ bInit = 1;
+ }
+
+ memset(&g_OldValues, 0, sizeof(struct W_ITEM_TBL));
+ pTF->validate(S_ITEM, kRow, pPermutation);
+
+ return(0);
+}
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.h
new file mode 100644
index 000000000000..b965453a2032
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_item.h
@@ -0,0 +1,43 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_ITEM_H
+#define S_ITEM_H
+
+int mk_s_item(void *row, ds_key_t kIndex);
+int pr_s_item(void *pSrc);
+int ld_s_item(void *pSrc);
+int vld_s_item(int nTable, ds_key_t kIndex, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.c
new file mode 100644
index 000000000000..254be4ee08f5
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.c
@@ -0,0 +1,149 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_manager.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_MANAGER_TBL g_s_manager;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_manager(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_MANAGER_TBL *r;
+ char *szFirst = NULL,
+ *szLast = NULL;
+
+ if (pDest == NULL)
+ r = &g_s_manager;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_manager, 0, sizeof(struct S_MANAGER_TBL));
+ bInit = 1;
+ }
+
+ r->id = kIndex;
+ pick_distribution(&szFirst, "first_names", 1, 3, S_MANAGER_NAME);
+ pick_distribution(&szLast, "last_names", 1, 1, S_MANAGER_NAME);
+ sprintf(r->name, "%s %s", szFirst, szLast);
+ tpcds_row_stop(S_MANAGER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_manager(void *pSrc)
+{
+ struct S_MANAGER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_manager;
+ else
+ r = pSrc;
+
+ print_start(S_MANAGER);
+ print_key(S_MANAGER_ID, r->id, 1);
+ print_varchar(S_MANAGER_NAME, r->name, 0);
+ print_end(S_MANAGER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_manager(void *pSrc)
+{
+ struct S_MANAGER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_manager;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.h
new file mode 100644
index 000000000000..f4adf80d9efd
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manager.h
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_MANAGER_H
+#define S_MANAGER_H
+
+#define RS_S_MANAGER_NAME 500
+
+struct S_MANAGER_TBL {
+ ds_key_t id;
+ char name[RS_S_MANAGER_NAME + 1];
+};
+
+int mk_s_manager(void *pDest, ds_key_t kIndex);
+int pr_s_manager(void *pSrc);
+int ld_s_manager(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.c
new file mode 100644
index 000000000000..d9ba9c7eb512
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.c
@@ -0,0 +1,145 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_manufacturer.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_MANUFACTURER_TBL g_s_manufacturer;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_manufacturer(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_MANUFACTURER_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_manufacturer;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_manufacturer, 0, sizeof(struct S_MANUFACTURER_TBL));
+ bInit = 1;
+ }
+
+ r->id = kIndex;
+ mk_word(r->name, "syllables", kIndex, RS_S_MANUFACTURER_NAME, S_MANUFACTURER_NAME);
+ tpcds_row_stop(S_MANUFACTURER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_manufacturer(void *pSrc)
+{
+ struct S_MANUFACTURER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_manufacturer;
+ else
+ r = pSrc;
+
+ print_start(S_MANUFACTURER);
+ print_key(S_MANUFACTURER_ID, r->id, 1);
+ print_varchar(S_MANUFACTURER_NAME, r->name, 0);
+ print_end(S_MANUFACTURER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_manufacturer(void *pSrc)
+{
+ struct S_MANUFACTURER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_manufacturer;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.h
new file mode 100644
index 000000000000..9ff57b631ee1
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_manufacturer.h
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_MANUFACTURER_H
+#define S_MANUFACTURER_H
+
+#define RS_S_MANUFACTURER_NAME 50
+
+struct S_MANUFACTURER_TBL {
+ ds_key_t id;
+ char name [RS_S_MANUFACTURER_NAME + 1];
+};
+
+int mk_s_manufacturer(void *pDest, ds_key_t kIndex);
+int pr_s_manufacturer(void *pSrc);
+int ld_s_manufacturer(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.c
new file mode 100644
index 000000000000..b9ebef87f051
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.c
@@ -0,0 +1,150 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_market.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+
+struct S_MARKET_TBL g_s_market;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_market(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_MARKET_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_market;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_market, 0, sizeof(struct S_MARKET_TBL));
+ bInit = 1;
+ }
+
+ r->id = kIndex;
+ mk_word(r->class_name, "syllables", kIndex, RS_S_MARKET_CLASS_NAME, S_MARKET_CLASS_NAME);
+ gen_text(r->desc, 1, RS_S_MARKET_CLASS_DESC, S_MARKET_DESC);
+ r->manager_id = mk_join(S_MARKET_MANAGER_ID, S_MANAGER, 1);
+ tpcds_row_stop(S_MARKET);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_market(void *pSrc)
+{
+ struct S_MARKET_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_market;
+ else
+ r = pSrc;
+
+ print_start(S_MARKET);
+ print_key(S_MARKET_ID, r->id, 1);
+ print_varchar(S_MARKET_CLASS_NAME, r->class_name, 1);
+ print_varchar(S_MARKET_DESC, r->desc, 1);
+ print_key(S_MARKET_MANAGER_ID, r->manager_id, 0);
+ print_end(S_MARKET);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_market(void *pSrc)
+{
+ struct S_MARKET_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_market;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.h
new file mode 100644
index 000000000000..f4ec85fd4281
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_market.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef s_market_H
+#define s_market_H
+
+#define RS_S_MARKET_CLASS_NAME 50
+#define RS_S_MARKET_CLASS_DESC 100
+
+struct S_MARKET_TBL {
+ ds_key_t id;
+ char class_name[RS_S_MARKET_CLASS_NAME + 1];
+ char desc[RS_S_MARKET_CLASS_DESC + 1];
+ ds_key_t manager_id;
+};
+
+int mk_s_market(void *pDest, ds_key_t kIndex);
+int pr_s_market(void *pSrc);
+int ld_s_market(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.c
new file mode 100644
index 000000000000..576a253499cc
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.c
@@ -0,0 +1,186 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_pline.h"
+#include "s_purchase.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+#include "scaling.h"
+#include "permute.h"
+#include "scd.h"
+
+struct S_PURCHASE_LINEITEM_TBL g_s_pline;
+extern struct S_PURCHASE_TBL g_s_purchase;
+extern int nItemIndex;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_pline(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_PURCHASE_LINEITEM_TBL *r;
+ static decimal_t dMin,
+ dMax;
+ static int *pItemPermutation,
+ nItemIDCount;
+
+ if (pDest == NULL)
+ r = &g_s_pline;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_pline, 0, sizeof(struct S_PURCHASE_LINEITEM_TBL));
+ strtodec(&dMin, "1.00");
+ strtodec(&dMax, "1000.00");
+ /*
+ * need to assure that a given item only appears in a single lineitem within an order
+ * use adjacent orders from within a permutation of possible values;
+ * since item is an SCD, use the item count
+ */
+ nItemIDCount = (int)getIDCount(ITEM);
+ pItemPermutation = makePermutation(NULL, nItemIDCount, S_PLINE_PERMUTE);
+ bInit = 1;
+ }
+
+ r->kPurchaseID = g_s_purchase.kID;
+ r->kLineNumber = kIndex;
+ nItemIndex += 1;
+ if (nItemIndex > nItemIDCount)
+ nItemIndex = 1;
+
+ /*
+ * pick the next entry in the permutation, to assure uniqueness within order
+ * shift to SK value to align with printID() expectations
+ */
+ r->kItemID = getPermutationEntry(pItemPermutation, nItemIndex);
+ r->kItemID = getFirstSK(r->kItemID);
+
+ r->kPromotionID = mk_join(S_PLINE_PROMOTION_ID, PROMOTION, 1);
+ genrand_integer(&r->Pricing.quantity, DIST_UNIFORM, PLINE_MIN_QUANTITY, PLINE_MAX_QUANTITY, 0, S_PLINE_QUANTITY);
+ set_pricing(S_PLINE_PRICING, &r->Pricing);
+ gen_text(r->szComment, 1, RS_S_PLINE_COMMENT, S_PLINE_COMMENT);
+ /* tpcds_row_stop(S_PURCHASE_LINEITEM); */
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_pline(void *pSrc)
+{
+ struct S_PURCHASE_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_pline;
+ else
+ r = pSrc;
+
+ print_start(S_PURCHASE_LINEITEM);
+ print_key(S_PLINE_PURCHASE_ID, r->kPurchaseID, 1);
+ print_key(S_PLINE_NUMBER, r->kLineNumber, 1);
+ print_id(S_PLINE_ITEM_ID, r->kItemID, 1);
+ print_id(S_PLINE_PROMOTION_ID, r->kPromotionID, 1);
+ print_integer(S_PLINE_QUANTITY, r->Pricing.quantity, 1);
+ print_decimal(S_PLINE_SALE_PRICE, &r->Pricing.sales_price, 1);
+ print_decimal(S_PLINE_COUPON_AMT, &r->Pricing.coupon_amt, 1);
+ print_varchar(S_PLINE_COMMENT, r->szComment,0);
+ print_end(S_PURCHASE_LINEITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_pline(void *pSrc)
+{
+ struct S_PURCHASE_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_pline;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.h
new file mode 100644
index 000000000000..4b022597e70a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_pline.h
@@ -0,0 +1,59 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_PLINE_H
+#define S_PLINE_H
+#include "pricing.h"
+
+#define RS_S_PLINE_COMMENT 100
+#define PLINE_MIN_QUANTITY 1
+#define PLINE_MAX_QUANTITY 100
+#define PLINE_RETURN_PCT 3
+
+struct S_PURCHASE_LINEITEM_TBL {
+ ds_key_t kPurchaseID;
+ ds_key_t kLineNumber;
+ ds_key_t kItemID;
+ ds_key_t kPromotionID;
+ int nRegister;
+ int nClerk;
+ char szComment[RS_S_PLINE_COMMENT + 1];
+ ds_pricing_t Pricing;
+};
+
+int mk_s_pline(void *pDest, ds_key_t kIndex);
+int pr_s_pline(void *pSrc);
+int ld_s_pline(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.c
new file mode 100644
index 000000000000..102bdde538e7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.c
@@ -0,0 +1,150 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include "genrand.h"
+#include "s_product.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_PRODUCT_TBL g_s_product;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_product(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_PRODUCT_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_product;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_product, 0, sizeof(struct S_PRODUCT_TBL));
+ r->type = strdup("PTYPE");
+ bInit = 1;
+ }
+
+ mk_bkey(r->id, kIndex, S_PRODUCT_ID);
+ mk_bkey(r->brand_id, (ds_key_t)mk_join(S_PRODUCT_BRAND_ID, S_BRAND, 1), S_PRODUCT_BRAND_ID);
+ mk_word(r->name, "syllables", kIndex, RS_S_PRODUCT_NAME, S_PRODUCT_NAME);
+ tpcds_row_stop(S_PRODUCT);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_product(void *pSrc)
+{
+ struct S_PRODUCT_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_product;
+ else
+ r = pSrc;
+
+ print_start(S_PRODUCT);
+ print_varchar(S_PRODUCT_ID, r->id, 1);
+ print_varchar(S_PRODUCT_BRAND_ID, r->brand_id, 1);
+ print_varchar(S_PRODUCT_NAME, r->name, 1);
+ print_varchar(S_PRODUCT_TYPE, r->type, 0);
+ print_end(S_PRODUCT);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_product(void *pSrc)
+{
+ struct S_PRODUCT_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_product;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.h
new file mode 100644
index 000000000000..2a7433720177
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_product.h
@@ -0,0 +1,51 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_PRODUCT_H
+#define S_PRODUCT_H
+
+#define RS_S_PRODUCT_NAME 50
+
+struct S_PRODUCT_TBL {
+ char id[RS_BKEY + 1];
+ char brand_id[RS_BKEY + 1];
+ char name[RS_S_PRODUCT_NAME + 1];
+ char* type;
+};
+
+int mk_s_product(void *pDest, ds_key_t kIndex);
+int pr_s_product(void *pSrc);
+int ld_s_product(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.c
new file mode 100644
index 000000000000..2a5a69f63ce0
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.c
@@ -0,0 +1,191 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_promotion.h"
+#include "w_promotion.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+#include "date.h"
+#include "permute.h"
+#include "scaling.h"
+#include "tdef_functions.h"
+#include "scd.h"
+#include "r_params.h"
+
+extern struct W_PROMOTION_TBL g_w_promotion;
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_promotion (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(PROMOTION), S_PROMOTION_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_promotion(NULL, kIndex);
+ tpcds_row_stop(PROMOTION);
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_promotion(void *pSrc)
+{
+ struct W_PROMOTION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_promotion;
+ else
+ r = pSrc;
+
+ print_start(S_PROMOTION);
+ print_varchar(P_PROMO_ID, r->p_promo_id, 1);
+ print_varchar(P_PROMO_NAME, &r->p_promo_name[0], 1);
+ print_date(P_START_DATE_ID, r->p_start_date_id, 1);
+ print_date(P_START_DATE_ID, r->p_end_date_id, 1);
+ print_decimal(P_COST, &r->p_cost, 1);
+ print_integer(P_RESPONSE_TARGET, r->p_response_target, 1);
+ print_boolean(P_CHANNEL_DMAIL, r->p_channel_dmail, 1);
+ print_boolean(P_CHANNEL_EMAIL, r->p_channel_email, 1);
+ print_boolean(P_CHANNEL_CATALOG, r->p_channel_catalog, 1);
+ print_boolean(P_CHANNEL_TV, r->p_channel_tv, 1);
+ print_boolean(P_CHANNEL_RADIO, r->p_channel_radio, 1);
+ print_boolean(P_CHANNEL_PRESS, r->p_channel_press, 1);
+ print_boolean(P_CHANNEL_EVENT, r->p_channel_event, 1);
+ print_boolean(P_CHANNEL_DEMO, r->p_channel_demo, 1);
+ print_varchar(P_CHANNEL_DETAILS, &r->p_channel_details[0], 1);
+ print_varchar(P_PURPOSE, r->p_purpose, 1);
+ print_boolean(P_DISCOUNT_ACTIVE, r->p_discount_active, 0);
+ print_end(S_PROMOTION);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_promotion(void *pSrc)
+{
+ struct W_PROMOTION_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_promotion;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+
+int
+vld_s_promotion(int nTable, ds_key_t kRow, int *Permutation)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+ table_func_t *pTF = getTdefFunctionsByNumber(PROMOTION);
+
+ if (!bInit)
+ {
+ pPermutation =
+ makePermutation(NULL, (int)getIDCount(PROMOTION), S_PROMOTION_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)kRow);
+
+ row_skip(PROMOTION, kRow - 1);
+ pTF->builder(NULL, kIndex);
+ tpcds_row_stop(PROMOTION);
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.h
new file mode 100644
index 000000000000..3a530394a48c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_promotion.h
@@ -0,0 +1,43 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_PROMOTION_H
+#define S_PROMOTION_H
+
+int mk_s_promotion(void *pRow, ds_key_t kIndex);
+int pr_s_promotion(void *pSrc);
+int ld_s_promotion(void *pSrc);
+int vld_s_promotion(int nTable, ds_key_t kIndex, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.c
new file mode 100644
index 000000000000..3c1d3748e4be
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.c
@@ -0,0 +1,225 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_purchase.h"
+#include "s_pline.h"
+#include "s_store_returns.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "r_params.h"
+#include "misc.h"
+#include "scaling.h"
+#include "parallel.h"
+
+struct S_PURCHASE_TBL g_s_purchase;
+struct S_PURCHASE_LINEITEM_TBL g_s_purchase_lineitem;
+struct S_STORE_RETURNS_TBL g_s_store_return;
+int nItemIndex;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_master(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_PURCHASE_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_purchase;
+ else
+ r = pDest;
+
+
+ if (!bInit)
+ {
+ memset(&g_s_purchase, 0, sizeof(struct S_PURCHASE_TBL));
+ bInit = 1;
+ }
+
+
+ r->kID = kIndex + getUpdateBase(S_PURCHASE);
+ r->kStoreID = mk_join(S_PURCHASE_STORE_ID, STORE, 1);
+ r->kCustomerID = mk_join(S_PURCHASE_CUSTOMER_ID, CUSTOMER, 1);
+ jtodt(&r->dtPurchaseDate, getUpdateDate(S_PURCHASE, kIndex));
+ genrand_integer(&r->nRegister, DIST_UNIFORM, 1, 17, 0, S_PURCHASE_REGISTER);
+ genrand_integer(&r->nClerk, DIST_UNIFORM, 101, 300, 0, S_PURCHASE_CLERK);
+ gen_text(&r->szComment[0], (int)(RS_S_PURCHASE_COMMENT * 0.6), RS_S_PURCHASE_COMMENT, S_PURCHASE_COMMENT);
+
+ return(0);
+}
+
+int
+mk_detail(int i, int bPrint)
+{
+ int nTemp;
+
+ mk_s_pline(&g_s_purchase_lineitem, i);
+ if (bPrint)
+ pr_s_pline(&g_s_purchase_lineitem);
+ genrand_integer(&nTemp, DIST_UNIFORM, 0, 99, 0, S_PLINE_IS_RETURNED);
+ if (nTemp < WR_RETURN_PCT)
+ {
+ mk_s_store_returns(&g_s_store_return, 1);
+ if (bPrint)
+ pr_s_store_returns(&g_s_store_return);
+ }
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_purchase(void *pSrc)
+{
+ struct S_PURCHASE_TBL *r;
+ char szKey[RS_BKEY + 1];
+
+ if (pSrc == NULL)
+ r = &g_s_purchase;
+ else
+ r = pSrc;
+
+ print_start(S_PURCHASE);
+ print_key(S_PURCHASE_ID, r->kID, 1);
+ mk_bkey(szKey, r->kID, 0);
+ mk_bkey(szKey, r->kStoreID, 0);
+ print_varchar(S_PURCHASE_STORE_ID, szKey, 1);
+ mk_bkey(szKey, r->kCustomerID, 0);
+ print_varchar(S_PURCHASE_CUSTOMER_ID, szKey, 1);
+ print_date(S_PURCHASE_DATE, r->dtPurchaseDate.julian, 1);
+ print_integer(S_PURCHASE_TIME, r->nPurchaseTime, 1);
+ print_integer(S_PURCHASE_REGISTER, r->nRegister, 1);
+ print_integer(S_PURCHASE_CLERK, r->nClerk, 1);
+ print_varchar(S_PURCHASE_COMMENT, r->szComment, 0);
+ print_end(S_PURCHASE);
+
+ return(0);
+}
+
+int
+mk_s_purchase(void *pDest, ds_key_t kIndex)
+{
+ int i;
+
+ mk_master(pDest, kIndex);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_PLINE_ITEM_ID);
+ for (i=1; i <= 12; i++)
+ {
+ mk_detail(i, 1);
+ }
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_purchase(void *pSrc)
+{
+ struct S_PURCHASE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_purchase;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_purchase(int nTable, ds_key_t kRow, int* bPermutation)
+{
+ int nLineitem,
+ i;
+
+ row_skip(S_PURCHASE, kRow - 1);
+ row_skip(S_PURCHASE_LINEITEM, (kRow - 1));
+ row_skip(S_STORE_RETURNS, (kRow - 1));
+
+ mk_master(NULL, kRow);
+ genrand_integer(&nLineitem, DIST_UNIFORM, 1, 12, 0, S_PLINE_NUMBER);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_PLINE_ITEM_ID);
+ for (i=1; i < nLineitem; i++)
+ mk_detail(i, 0);
+ print_start(S_PURCHASE_LINEITEM);
+ print_key(0, (kRow - 1) * 12 + nLineitem, 1);
+ mk_detail(i, 1);
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.h
new file mode 100644
index 000000000000..8058489bed9b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_purchase.h
@@ -0,0 +1,56 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_PURCHASE_H
+#define S_PURCHASE_H
+
+#define RS_S_PURCHASE_COMMENT 100
+
+struct S_PURCHASE_TBL {
+ ds_key_t kID;
+ ds_key_t kStoreID;
+ ds_key_t kCustomerID;
+ date_t dtPurchaseDate;
+ int nPurchaseTime;
+ int nRegister;
+ int nClerk;
+ char szComment[RS_S_PURCHASE_COMMENT + 1];
+};
+
+int mk_s_purchase(void *pDest, ds_key_t kIndex);
+int pr_s_purchase(void *pSrc);
+int ld_s_purchase(void *pSrc);
+int vld_s_purchase(int nTable, ds_key_t kRow, int *pPermute);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.c
new file mode 100644
index 000000000000..ff2cbbe40a8d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.c
@@ -0,0 +1,146 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_reason.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+
+struct S_REASON_TBL g_s_reason;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_reason(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_REASON_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_reason;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_reason, 0, sizeof(struct S_REASON_TBL));
+ bInit = 1;
+ }
+
+ r->kID = kIndex;
+ gen_text(r->szDesc, 1, RS_S_REASON_DESC, S_REASON_DESC);
+ tpcds_row_stop(S_REASON);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_reason(void *pSrc)
+{
+ struct S_REASON_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_reason;
+ else
+ r = pSrc;
+
+ print_start(S_REASON);
+ print_key(S_REASON_ID, r->kID, 1);
+ print_varchar(S_REASON_DESC, r->szDesc, 0);
+ print_end(S_REASON);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_reason(void *pSrc)
+{
+ struct S_REASON_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_reason;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.h
new file mode 100644
index 000000000000..fc8f026e8bee
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_reason.h
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef s_reason_H
+#define s_reason_H
+
+#define RS_S_REASON_DESC 200
+
+struct S_REASON_TBL {
+ ds_key_t kID;
+ char szDesc[RS_S_REASON_DESC + 1];
+};
+
+int mk_s_reason(void *pDest, ds_key_t kIndex);
+int pr_s_reason(void *pSrc);
+int ld_s_reason(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.c
new file mode 100644
index 000000000000..324fdedaf58e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.c
@@ -0,0 +1,155 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_store.h"
+#include "w_store.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "w_store.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scaling.h"
+#include "scd.h"
+
+extern struct W_STORE_TBL g_w_store;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_store (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(STORE), S_STORE_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_store(NULL,getSKFromID(kIndex, S_STORE_ID));
+ if (!g_w_store.closed_date_id)
+ g_w_store.closed_date_id = -1; /* dates use a special NULL indicator */
+
+ return(0);
+}
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_store(void *pSrc)
+{
+ struct W_STORE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_store;
+ else
+ r = pSrc;
+
+ print_start(S_STORE);
+ print_varchar(W_STORE_ID, r->store_id, 1);
+ print_date(W_STORE_CLOSED_DATE_ID, r->closed_date_id, 1);
+ print_varchar(W_STORE_NAME, r->store_name, 1);
+ print_integer(W_STORE_EMPLOYEES, r->employees, 1);
+ print_integer(W_STORE_FLOOR_SPACE, r->floor_space, 1);
+ print_varchar(W_STORE_HOURS, r->hours, 1);
+ print_varchar(W_STORE_MANAGER, &r->store_manager[0], 1);
+ print_integer(W_STORE_MARKET_ID, r->market_id, 1);
+ print_varchar(W_STORE_GEOGRAPHY_CLASS, r->geography_class, 1);
+ print_varchar(W_STORE_MARKET_MANAGER, &r->market_manager[0], 1);
+ print_decimal(W_STORE_TAX_PERCENTAGE,&r->dTaxPercentage, 0);
+ print_end(S_STORE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_store(void *pSrc)
+{
+ struct W_STORE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_store;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.h
new file mode 100644
index 000000000000..c6113cdfa994
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store.h
@@ -0,0 +1,41 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_STORE_H
+#define S_STORE_H
+int mk_s_store(void *row, ds_key_t kIndex);
+int pr_s_store(void *pSrc);
+int ld_s_store(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.c
new file mode 100644
index 000000000000..016ea854606b
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.c
@@ -0,0 +1,147 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_store_promotional_item.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_STORE_PROMOTIONAL_ITEM_TBL g_s_store_promotional_item;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_store_promotional_item(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_STORE_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_store_promotional_item;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_store_promotional_item, 0, sizeof(struct S_STORE_PROMOTIONAL_ITEM_TBL));
+ bInit = 1;
+ }
+
+ r->promotion_id = mk_join(S_SITM_PROMOTION_ID, S_PROMOTION, 1);
+ r->item_id = mk_join(S_SITM_ITEM_ID, S_ITEM, 1);
+ r->store_id = mk_join(S_SITM_STORE_ID, S_STORE, 1);
+ tpcds_row_stop(S_STORE_PROMOTIONAL_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_store_promotional_item(void *pSrc)
+{
+ struct S_STORE_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_store_promotional_item;
+ else
+ r = pSrc;
+
+ print_start(S_STORE_PROMOTIONAL_ITEM);
+ print_key(S_SITM_PROMOTION_ID, r->promotion_id, 1);
+ print_key(S_SITM_ITEM_ID, r->item_id, 1);
+ print_key(S_SITM_STORE_ID, r->store_id, 0);
+ print_end(S_STORE_PROMOTIONAL_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_store_promotional_item(void *pSrc)
+{
+ struct S_STORE_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_store_promotional_item;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.h
new file mode 100644
index 000000000000..7e54750752f3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_promotional_item.h
@@ -0,0 +1,48 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_STORE_PROMOTIONAL_ITEM_H
+#define S_STORE_PROMOTIONAL_ITEM_H
+
+struct S_STORE_PROMOTIONAL_ITEM_TBL {
+ ds_key_t promotion_id;
+ ds_key_t item_id;
+ ds_key_t store_id;
+};
+
+int mk_s_store_promotional_item(void *pDest, ds_key_t kIndex);
+int pr_s_store_promotional_item(void *pSrc);
+int ld_s_store_promotional_item(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.c
new file mode 100644
index 000000000000..b3d62d74a2ca
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.c
@@ -0,0 +1,176 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_store_returns.h"
+#include "s_purchase.h"
+#include "s_pline.h"
+#include "s_purchase.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_STORE_RETURNS_TBL g_s_store_returns;
+extern struct S_PURCHASE_TBL g_s_purchase;
+extern struct S_PURCHASE_LINEITEM_TBL g_s_purchase_lineitem;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_store_returns(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_STORE_RETURNS_TBL *r;
+ int nReturnLag;
+
+ if (pDest == NULL)
+ r = &g_s_store_returns;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_store_returns, 0, sizeof(struct S_STORE_RETURNS_TBL));
+ bInit = 1;
+ }
+
+ genrand_integer(&nReturnLag, DIST_UNIFORM, 0, 60, 0, S_SRET_RETURN_DATE);
+ if (g_s_purchase.dtPurchaseDate.julian == -1)
+ r->dtReturnDate.julian = -1;
+ else
+ jtodt(&r->dtReturnDate, g_s_purchase.dtPurchaseDate.julian + nReturnLag);
+ r->kReturnTime = mk_join(S_SRET_RETURN_TIME, TIME, 1);
+ r->kReasonID = mk_join(S_SRET_REASON_ID, REASON, 1);
+ r->Pricing = g_s_purchase_lineitem.Pricing;
+ if (g_s_purchase_lineitem.Pricing.quantity != -1)
+ genrand_integer(&r->Pricing.quantity, DIST_UNIFORM, 1, g_s_purchase_lineitem.Pricing.quantity, 0, S_SRET_PRICING);
+ else
+ r->Pricing.quantity = -1;
+ set_pricing(S_SRET_PRICING, &r->Pricing);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_store_returns(void *pSrc)
+{
+ struct S_STORE_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_store_returns;
+ else
+ r = pSrc;
+
+ print_start(S_STORE_RETURNS);
+ print_id(S_SRET_STORE_ID, g_s_purchase.kStoreID, 1);
+ print_key(S_SRET_PURCHASE_ID, g_s_purchase.kID, 1);
+ print_key(S_SRET_LINENUMBER, g_s_purchase_lineitem.kLineNumber, 1);
+ print_id(S_SRET_ITEM_ID, g_s_purchase_lineitem.kItemID, 1);
+ print_id(S_SRET_CUSTOMER_ID, g_s_purchase.kCustomerID, 1);
+ print_date(S_SRET_RETURN_DATE, r->dtReturnDate.julian, 1);
+ print_time(S_SRET_RETURN_TIME, r->kReturnTime, 1);
+ print_key(S_SRET_TICKET_NUMBER, g_s_purchase.kID, 1);
+ print_integer(S_SRET_RETURN_QUANTITY, r->Pricing.quantity, 1);
+ print_decimal(S_SRET_RETURN_AMT, &r->Pricing.sales_price, 1);
+ print_decimal(S_SRET_RETURN_TAX, &r->Pricing.ext_tax, 1);
+ print_decimal(S_SRET_RETURN_FEE, &r->Pricing.fee, 1);
+ print_decimal(S_SRET_RETURN_SHIP_COST, &r->Pricing.ext_ship_cost, 1);
+ print_decimal(S_SRET_REFUNDED_CASH, &r->Pricing.refunded_cash, 1);
+ print_decimal(S_SRET_REVERSED_CHARGE, &r->Pricing.reversed_charge, 1);
+ print_decimal(S_SRET_MERCHANT_CREDIT, &r->Pricing.store_credit, 1);
+ print_id(S_SRET_REASON_ID, r->kReasonID, 0);
+ print_end(S_STORE_RETURNS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_store_returns(void *pSrc)
+{
+ struct S_STORE_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_store_returns;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.h
new file mode 100644
index 000000000000..f0c8f2e4860c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_store_returns.h
@@ -0,0 +1,51 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_STORE_RETURNS_H
+#define S_STORE_RETURNS_H
+#include "pricing.h"
+
+struct S_STORE_RETURNS_TBL {
+ date_t dtReturnDate;
+ ds_key_t kReturnTime;
+ ds_pricing_t Pricing;
+ ds_key_t kReasonID;
+
+};
+
+int mk_s_store_returns(void *pDest, ds_key_t kIndex);
+int pr_s_store_returns(void *pSrc);
+int ld_s_store_returns(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.c
new file mode 100644
index 000000000000..261ed135de4c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.c
@@ -0,0 +1,150 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_subcategory.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+
+struct S_SUBCATEGORY_TBL g_s_subcategory;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_subcategory(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_SUBCATEGORY_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_subcategory;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_subcategory, 0, sizeof(struct S_SUBCATEGORY_TBL));
+ bInit = 1;
+ }
+
+ r->kID = kIndex;
+ r->kCategoryID = mk_join(S_SBCT_CATEGORY_ID, S_CATEGORY, 1);
+ mk_word(r->szName, "Syllables", kIndex, RS_S_SBCT_NAME, S_SBCT_NAME);
+ gen_text(r->szDesc, 1, RS_S_SBCT_DESC, S_SBCT_DESC);
+ tpcds_row_stop(S_SUBCATEGORY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_subcategory(void *pSrc)
+{
+ struct S_SUBCATEGORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_subcategory;
+ else
+ r = pSrc;
+
+ print_start(S_SUBCATEGORY);
+ print_key(S_SBCT_ID, r->kID, 1);
+ print_key(S_SBCT_CATEGORY_ID, r->kCategoryID, 1);
+ print_varchar(S_SBCT_NAME, r->szName, 1);
+ print_varchar(S_SBCT_DESC, r->szDesc, 0);
+ print_end(S_SUBCATEGORY);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_subcategory(void *pSrc)
+{
+ struct S_SUBCATEGORY_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_subcategory;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.h
new file mode 100644
index 000000000000..c7d89fef50a6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subcategory.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_SUBCATEGORY_H
+#define S_SUBCATEGORY_H
+
+#define RS_S_SBCT_NAME 30
+#define RS_S_SBCT_DESC 100
+
+struct S_SUBCATEGORY_TBL {
+ ds_key_t kID;
+ ds_key_t kCategoryID;
+ char szName[RS_S_SBCT_NAME + 1];
+ char szDesc[RS_S_SBCT_DESC + 1];
+};
+
+int mk_s_subcategory(void *pDest, ds_key_t kIndex);
+int pr_s_subcategory(void *pSrc);
+int ld_s_subcategory(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.c
new file mode 100644
index 000000000000..69fb06b9abdd
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.c
@@ -0,0 +1,150 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_subclass.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+
+struct S_SUBCLASS_TBL g_s_subclass;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_subclass(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_SUBCLASS_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_subclass;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_subclass, 0, sizeof(struct S_SUBCLASS_TBL));
+ bInit = 1;
+ }
+
+ r->kID = kIndex;
+ r->kClassID = mk_join(S_SUBC_CLASS_ID, S_CLASS, 1);
+ mk_word(r->szName, "Syllables", kIndex, RS_S_SUBC_NAME, S_SUBC_NAME);
+ gen_text(r->szDesc, 1, RS_S_SUBC_DESC, S_SUBC_DESC);
+ tpcds_row_stop(S_SUBCLASS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_subclass(void *pSrc)
+{
+ struct S_SUBCLASS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_subclass;
+ else
+ r = pSrc;
+
+ print_start(S_SUBCLASS);
+ print_key(S_SUBC_ID, r->kID, 1);
+ print_key(S_SUBC_CLASS_ID, r->kClassID, 1);
+ print_varchar(S_SUBC_NAME, r->szName, 1);
+ print_varchar(S_SUBC_DESC, r->szDesc, 0);
+ print_end(S_SUBCLASS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_subclass(void *pSrc)
+{
+ struct S_SUBCLASS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_subclass;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.h
new file mode 100644
index 000000000000..21a1d6def7bb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_subclass.h
@@ -0,0 +1,52 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_SUBCLASS_H
+#define S_SUBCLASS_H
+
+#define RS_S_SUBC_NAME 30
+#define RS_S_SUBC_DESC 100
+
+struct S_SUBCLASS_TBL {
+ ds_key_t kID;
+ ds_key_t kClassID;
+ char szName[RS_S_SUBC_NAME + 1];
+ char szDesc[RS_S_SUBC_DESC + 1];
+};
+
+int mk_s_subclass(void *pDest, ds_key_t kIndex);
+int pr_s_subclass(void *pSrc);
+int ld_s_subclass(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_tdefs.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_tdefs.h
new file mode 100644
index 000000000000..bf0946eac9bf
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_tdefs.h
@@ -0,0 +1,75 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+tdef s_tdefs[] = {
+{"s_brand", "s_br", FL_NOP|FL_SOURCE_DDL, S_BRAND_START, S_BRAND_END, S_BRAND, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_customer_address", "s_ca", FL_SOURCE_DDL|FL_PASSTHRU, S_CUSTOMER_ADDRESS_START, S_CUSTOMER_ADDRESS_END, S_CUSTOMER_ADDRESS, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_call_center", "s_cc", FL_SOURCE_DDL, S_CALL_CENTER_START, S_CALL_CENTER_END, S_CALL_CENTER, -1, NULL, 0, 0, 0, 0x0, 0x02, NULL},
+{"s_catalog", "s_ct", FL_SOURCE_DDL|FL_NOP, S_CATALOG_START, S_CATALOG_END, S_CATALOG, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_catalog_order", "s_cord", FL_SOURCE_DDL|FL_PARENT|FL_DATE_BASED, S_CATALOG_ORDER_START, S_CATALOG_ORDER_END, S_CATALOG_ORDER, S_CATALOG_ORDER_LINEITEM, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_catalog_order_lineitem", "s_cl", FL_SOURCE_DDL|FL_CHILD|FL_PARENT, S_CATALOG_ORDER_LINEITEM_START, S_CATALOG_ORDER_LINEITEM_END, S_CATALOG_ORDER_LINEITEM, S_CATALOG_RETURNS, NULL, 0, 0, 0, 0x0, 0x07, NULL},
+{"s_catalog_page", "s_cp", FL_SOURCE_DDL|FL_PASSTHRU, S_CATALOG_PAGE_START, S_CATALOG_PAGE_END, S_CATALOG_PAGE, -1, NULL, 0, 0, 0, 0x0, 0x033, NULL},
+{"s_catalog_promotional_item", "s_ci", FL_NOP|FL_SOURCE_DDL, S_CATALOG_PROMOTIONAL_ITEM_START, S_CATALOG_PROMOTIONAL_ITEM_END, S_CATALOG_PROMOTIONAL_ITEM, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_catalog_returns", "s_cr", FL_SOURCE_DDL|FL_CHILD, S_CATALOG_RETURNS_START, S_CATALOG_RETURNS_END, S_CATALOG_RETURNS, -1, NULL, 0, 0, 0, 0x0, 0x0E, NULL},
+{"s_category", "s_cg", FL_NOP|FL_SOURCE_DDL, S_CATEGORY_START, S_CATEGORY_END, S_CATEGORY, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_class", "s_cl", FL_NOP|FL_SOURCE_DDL, S_CLASS_START, S_CLASS_END, S_CLASS, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_company", "s_co", FL_NOP|FL_SOURCE_DDL, S_COMPANY_START, S_COMPANY_END, S_COMPANY, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_customer", "s_cu", FL_SOURCE_DDL, S_CUSTOMER_START, S_CUSTOMER_END, S_CUSTOMER, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_division", "s_di", FL_NOP|FL_SOURCE_DDL, S_DIVISION_START, S_DIVISION_END, S_DIVISION, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_inventory", "s_in", FL_SOURCE_DDL|FL_DATE_BASED, S_INVENTORY_START, S_INVENTORY_END, S_INVENTORY, -1, NULL, 0, 0, 0, 0x0, 0x07, NULL},
+{"s_item", "s_it", FL_SOURCE_DDL, S_ITEM_START, S_ITEM_END, S_ITEM, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_manager", "s_mg", FL_NOP|FL_SOURCE_DDL, S_MANAGER_START, S_MANAGER_END, S_MANAGER, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_manufacturer", "s_mn", FL_NOP|FL_SOURCE_DDL, S_MANUFACTURER_START, S_MANUFACTURER_END, S_MANUFACTURER, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_market", "s_mk", FL_NOP|FL_SOURCE_DDL, S_MARKET_START, S_MARKET_END, S_MARKET, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_product", "s_pr", FL_NOP|FL_SOURCE_DDL, S_PRODUCT_START, S_PRODUCT_END, S_PRODUCT, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_promotion", "s_pm", FL_SOURCE_DDL|FL_PASSTHRU, S_PROMOTION_START, S_PROMOTION_END, S_PROMOTION, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_purchase", "s_pu", FL_SOURCE_DDL|FL_PARENT|FL_DATE_BASED, S_PURCHASE_START, S_PURCHASE_END, S_PURCHASE, S_PURCHASE_LINEITEM, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_purchase_lineitem", "s_pl", FL_SOURCE_DDL|FL_CHILD|FL_PARENT, S_PURCHASE_LINEITEM_START, S_PURCHASE_LINEITEM_END, S_PURCHASE_LINEITEM, S_STORE_RETURNS, NULL, 0, 0, 0, 0x0, 0x07, NULL},
+{"s_reason", "s_re", FL_NOP|FL_SOURCE_DDL, S_REASON_START, S_REASON_END, S_REASON, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_store", "s_st", FL_SOURCE_DDL, S_STORE_START, S_STORE_END, S_STORE, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_store_promotional_item","s_sp",FL_NOP|FL_SOURCE_DDL,S_STORE_PROMOTIONAL_ITEM_START, S_STORE_PROMOTIONAL_ITEM_END, S_STORE_PROMOTIONAL_ITEM, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_store_returns", "s_sr", FL_SOURCE_DDL|FL_CHILD, S_STORE_RETURNS_START, S_STORE_RETURNS_END, S_STORE_RETURNS, -1, NULL, 0, 0, 0, 0x0, 0x0E, NULL},
+{"s_subcategory", "s_ct", FL_NOP|FL_SOURCE_DDL, S_SUBCATEGORY_START, S_SUBCATEGORY_END, S_SUBCATEGORY, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_subclass", "s_sc", FL_NOP|FL_SOURCE_DDL, S_SUBCLASS_START, S_SUBCLASS_END, S_SUBCLASS, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_warehouse", "s_wh", FL_SOURCE_DDL, S_WAREHOUSE_START, S_WAREHOUSE_END, S_WAREHOUSE, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_web_order", "s_wo", FL_SOURCE_DDL|FL_PARENT|FL_DATE_BASED, S_WEB_ORDER_START, S_WEB_ORDER_END, S_WEB_ORDER, S_WEB_ORDER_LINEITEM, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_web_order_lineitem","s_wl", FL_SOURCE_DDL|FL_CHILD|FL_PARENT, S_WEB_ORDER_LINEITEM_START, S_WEB_ORDER_LINEITEM_END, S_WEB_ORDER_LINEITEM, S_WEB_RETURNS, NULL, 0, 0, 0, 0x0, 0x07, NULL},
+{"s_web_page", "s_wp", FL_SOURCE_DDL|FL_PASSTHRU, S_WEB_PAGE_START, S_WEB_PAGE_END, S_WEB_PAGE, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_web_promotional_item","s_wi",FL_NOP|FL_SOURCE_DDL, S_WEB_PROMOTIONAL_ITEM_START, S_WEB_PROMOTIONAL_ITEM_END, S_WEB_PROMOTIONAL_ITEM, -1, NULL, 0, 0, 0, 0x0, 0x0, NULL},
+{"s_web_returns", "s_wr", FL_SOURCE_DDL|FL_CHILD, S_WEB_RETURNS_START, S_WEB_RETURNS_END, S_WEB_RETURNS, -1, NULL, 0, 0, 0, 0x0, 0x0E, NULL},
+{"s_web_site", "s_ws", FL_SOURCE_DDL, S_WEB_SITE_START, S_WEB_SITE_END, S_WEB_SITE, -1, NULL, 0, 0, 0, 0x0, 0x01, NULL},
+{"s_zip_to_gmt", "s_zi", FL_SOURCE_DDL|FL_VPRINT, S_ZIPG_START, S_ZIPG_END, S_ZIPG, -1, NULL, 0, 0, 0, 0x0, 0x03, NULL},
+{NULL}
+};
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.c
new file mode 100644
index 000000000000..94cb908fa9f7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.c
@@ -0,0 +1,145 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_warehouse.h"
+#include "w_warehouse.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scaling.h"
+
+struct W_WAREHOUSE_TBL g_w_warehouse;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_warehouse (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(WAREHOUSE), S_WRHS_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_warehouse(NULL, kIndex);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_warehouse(void *pSrc)
+{
+ struct W_WAREHOUSE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_warehouse;
+ else
+ r = pSrc;
+
+ print_start(S_WAREHOUSE);
+ print_varchar(W_WAREHOUSE_ID, r->w_warehouse_id, 1);
+ print_varchar(W_WAREHOUSE_NAME, &r->w_warehouse_name[0], 1);
+ print_integer(W_WAREHOUSE_SQ_FT, r->w_warehouse_sq_ft, 0);
+ print_end(S_WAREHOUSE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_warehouse(void *pSrc)
+{
+ struct W_WAREHOUSE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_warehouse;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.h
new file mode 100644
index 000000000000..a140daf0ef11
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_warehouse.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WAREHOUSE_H
+#define S_WAREHOUSE_H
+
+int mk_s_warehouse(void *pRow, ds_key_t kIndex);
+int pr_s_warehouse(void *pSrc);
+int ld_s_warehouse(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.c
new file mode 100644
index 000000000000..fd8b3ae6c3b9
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.c
@@ -0,0 +1,237 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_order.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "misc.h"
+#include "s_web_order_lineitem.h"
+#include "params.h"
+#include "scaling.h"
+#include "w_web_sales.h"
+#include "s_web_returns.h"
+#include "parallel.h"
+
+struct S_WEB_ORDER_TBL g_s_web_order;
+struct S_WEB_ORDER_LINEITEM_TBL g_s_web_order_lineitem;
+struct S_WEB_RETURNS_TBL g_s_web_return;
+int nItemIndex = -1;
+
+ /* now build/print the lineitems for this order */
+ /* for each lineitem, randomly determine if it is to be returned */
+/**
+ ** TODO: need to make this variable, as in the warehouse
+**/
+static void
+mk_detail(int i, int bPrint)
+{
+ int nTemp;
+
+ mk_s_web_order_lineitem(&g_s_web_order_lineitem, i);
+ if (bPrint)
+ pr_s_web_order_lineitem(&g_s_web_order_lineitem);
+ genrand_integer(&nTemp, DIST_UNIFORM, 0, 99, 0, S_WLIN_IS_RETURNED);
+ if (nTemp < WR_RETURN_PCT)
+ {
+ mk_s_web_return(&g_s_web_return, i);
+ if (bPrint)
+ pr_s_web_return(&g_s_web_return);
+ }
+
+return;
+}
+
+static void
+mk_master(void *pDest, ds_key_t kIndex)
+{
+ struct S_WEB_ORDER_TBL *r;
+ int nGiftPct;
+
+ static int bInit = 0;
+
+ if (pDest == NULL)
+ r = &g_s_web_order;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_web_order, 0, sizeof(struct S_WEB_ORDER_TBL));
+ bInit = 1;
+ }
+
+ jtodt(&r->dtOrderDate, getUpdateDate(S_WEB_ORDER, kIndex));
+ r->kID = getUpdateBase(S_WEB_ORDER) + kIndex;
+ genrand_integer(&r->nOrderTime , DIST_UNIFORM, 0, (24 * 3600) - 1, 0, S_WORD_ORDER_TIME);
+ r->kBillCustomerID = mk_join(S_WORD_BILL_CUSTOMER_ID, CUSTOMER, 1);
+
+ /* most orders are for the ordering customers, some are not */
+ genrand_integer(&nGiftPct, DIST_UNIFORM, 0, 99, 0, S_WORD_SHIP_CUSTOMER_ID);
+ if (nGiftPct > WS_GIFT_PCT)
+ r->kShipCustomerID =
+ mk_join (S_WORD_SHIP_CUSTOMER_ID, CUSTOMER, 2);
+ else
+ r->kShipCustomerID = r->kBillCustomerID;
+ r->kShipModeID = mk_join(S_WORD_SHIP_MODE_ID, SHIP_MODE, 1);
+ r->kWebSiteID = mk_join(S_WORD_WEB_SITE_ID, WEB_SITE, 1);
+ gen_text(&r->szComment[0], (int)(RS_S_WORD_COMMENT * 0.6), RS_S_WORD_COMMENT, S_WORD_COMMENT);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_order(void *pDest, ds_key_t kIndex)
+{
+ int i;
+
+ mk_master(pDest, kIndex);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_WLIN_ITEM_ID);
+ for (i=1; i <= 12; i++)
+ {
+ mk_detail(i, 1);
+ }
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_order(void *pSrc)
+{
+ struct S_WEB_ORDER_TBL *r;
+ char szTemp[RS_BKEY + 1];
+
+ if (pSrc == NULL)
+ r = &g_s_web_order;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_ORDER);
+ print_key(S_WORD_ID, r->kID, 1);
+ mk_bkey(szTemp, r->kID, 0);
+ print_id(S_WORD_BILL_CUSTOMER_ID, r->kBillCustomerID, 1);
+ print_id(S_WORD_SHIP_CUSTOMER_ID, r->kShipCustomerID, 1);
+ print_date(S_WORD_ORDER_DATE, r->dtOrderDate.julian, 1);
+ print_integer(S_WORD_ORDER_TIME, r->nOrderTime, 1);
+ print_id(S_WORD_SHIP_MODE_ID, r->kShipModeID, 1);
+ print_id(S_WORD_WEB_SITE_ID, r->kWebSiteID, 1);
+ print_varchar(S_WORD_COMMENT, r->szComment, 0);
+ print_end(S_WEB_ORDER);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_order(void *pSrc)
+{
+ struct S_WEB_ORDER_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_order;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_web_order(int nTable, ds_key_t kRow, int* bPermutation)
+{
+ int nLineitem,
+ i;
+
+ row_skip(S_WEB_ORDER, kRow - 1);
+ row_skip(S_WEB_ORDER_LINEITEM, kRow - 1);
+ row_skip(S_WEB_RETURNS, kRow - 1);
+
+ mk_master(NULL, kRow);
+ genrand_integer(&nLineitem, DIST_UNIFORM, 1, 12, 0, S_WLIN_LINE_NUMBER);
+ genrand_integer(&nItemIndex, DIST_UNIFORM, 1, (int)getIDCount(ITEM), 0, S_WLIN_ITEM_ID);
+ for (i=1; i < nLineitem; i++)
+ mk_detail(i, 0);
+ print_start(S_WEB_ORDER_LINEITEM);
+ print_key(0, (kRow - 1) * 12 + nLineitem, 1);
+ mk_detail(i, 1);
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.h
new file mode 100644
index 000000000000..5f9e30709f5a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order.h
@@ -0,0 +1,56 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_ORDER_H
+#define S_WEB_ORDER_H
+
+#define RS_S_WORD_COMMENT 100
+
+struct S_WEB_ORDER_TBL {
+ ds_key_t kID;
+ ds_key_t kBillCustomerID;
+ ds_key_t kShipCustomerID;
+ date_t dtOrderDate;
+ int nOrderTime;
+ ds_key_t kShipModeID;
+ ds_key_t kWebSiteID;
+ char szComment[RS_S_WORD_COMMENT + 1];
+};
+
+int mk_s_web_order(void *pDest, ds_key_t kIndex);
+int pr_s_web_order(void *pSrc);
+int ld_s_web_order(void *pSrc);
+int vld_s_web_order(int nTable, ds_key_t kRow, int *pPermute);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.c
new file mode 100644
index 000000000000..a7a2c39dbd77
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.c
@@ -0,0 +1,228 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_order_lineitem.h"
+#include "s_web_order.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "decimal.h"
+#include "w_web_sales.h"
+#include "pricing.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scaling.h"
+#include "scd.h"
+
+struct S_WEB_ORDER_LINEITEM_TBL g_s_web_order_lineitem;
+extern struct S_WEB_ORDER_TBL g_s_web_order;
+extern int nItemIndex;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_order_lineitem(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_WEB_ORDER_LINEITEM_TBL *r;
+ static decimal_t dMin,
+ dMax;
+ static date_t dtMax;
+ int nShipLag;
+ static int *pItemPermutation,
+ nItemCount;
+
+ if (pDest == NULL)
+ r = &g_s_web_order_lineitem;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_web_order_lineitem, 0, sizeof(struct S_WEB_ORDER_LINEITEM_TBL));
+ strtodec(&dMin, "1.00");
+ strtodec(&dMax, "1000.00");
+ strtodt(&dtMax, TODAYS_DATE);
+ nItemCount = (int)getIDCount(ITEM);
+ pItemPermutation = makePermutation(NULL, nItemCount, S_WLIN_PERMUTE);
+ bInit = 1;
+ }
+
+ r->kOrderID = g_s_web_order.kID;
+ r->kLineNumber = kIndex;
+ if (++nItemIndex > nItemCount)
+ nItemIndex += 1;
+
+ /*
+ * select a unique item, and then map to the appropriate business key
+ */
+ r->kItemID = getPermutationEntry(pItemPermutation, nItemIndex);
+ r->kItemID = getFirstSK(r->kItemID);
+
+ r->kPromotionID = mk_join(S_WLIN_PROMOTION_ID, PROMOTION, 1);
+ r->kWarehouseID = mk_join(S_WLIN_WAREHOUSE_ID, WAREHOUSE, 1);
+ /*
+ * an order cannot ship until its has been made
+ * an order cannot be recorded as shipping if its is outside the date window
+ */
+ genrand_integer(&nShipLag, DIST_UNIFORM, 0, 60, 0, S_WLIN_SHIP_DATE);
+ r->dtShipDate.julian = g_s_web_order.dtOrderDate.julian + nShipLag;
+ if (r->dtShipDate.julian > dtMax.julian)
+ r->dtShipDate.julian = -1;
+ r->kWebPageID = mk_join(S_WLIN_WEB_PAGE_ID, WEB_PAGE, 1);
+ set_pricing(S_WLIN_PRICING, &r->Pricing);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_order_lineitem(void *pSrc)
+{
+ struct S_WEB_ORDER_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_order_lineitem;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_ORDER_LINEITEM);
+ print_key(S_WLIN_ID, r->kOrderID, 1);
+ print_key(S_WLIN_LINE_NUMBER, r->kLineNumber, 1);
+ print_id(S_WLIN_ITEM_ID, r->kItemID, 1);
+ print_id(S_WLIN_PROMOTION_ID, r->kPromotionID, 1);
+ print_integer(S_WLIN_QUANTITY, r->Pricing.quantity, 1);
+ print_decimal(S_WLIN_PRICING, &r->Pricing.sales_price, 1);
+ print_decimal(S_WLIN_COUPON_AMT, &r->Pricing.coupon_amt, 1);
+ print_id(S_WLIN_WAREHOUSE_ID, r->kWarehouseID, 1);
+ print_date(S_WLIN_SHIP_DATE, r->dtShipDate.julian, 1);
+ print_decimal(S_WLIN_SHIP_COST, &r->Pricing.ship_cost, 1);
+ print_id(S_WLIN_WEB_PAGE_ID, r->kWebPageID, 0);
+ print_end(S_WEB_ORDER_LINEITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_order_lineitem(void *pSrc)
+{
+ struct S_WEB_ORDER_LINEITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_order_lineitem;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+vld_s_web_order_lineitem(int nTable, ds_key_t kRow, int *Permutation)
+{
+ row_skip(nTable, kRow - 1);
+ row_skip(S_WEB_RETURNS, (kRow - 1) );
+ /*
+ mk_master(NULL, kRow);
+ genrand_integer(&nMaxLineitem, DIST_UNIFORM, 8, 16, 9, CS_ORDER_NUMBER);
+ genrand_integer(&nLineitem, DIST_UNIFORM, 1, nMaxLineitem, 0, CS_PRICING_QUANTITY);
+ for (i = 1; i < nLineitem; i++)
+ {
+ mk_detail(NULL, 0);
+ }
+ mk_detail(NULL, 1);
+ */
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.h
new file mode 100644
index 000000000000..bfb314c38778
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_order_lineitem.h
@@ -0,0 +1,59 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_ORDER_LINEITEM_H
+#define S_WEB_ORDER_LINEITEM_H
+
+#include "decimal.h"
+#include "pricing.h"
+
+struct S_WEB_ORDER_LINEITEM_TBL {
+ ds_key_t kOrderID;
+ ds_key_t kLineNumber;
+ ds_key_t kItemID;
+ ds_key_t kPromotionID;
+ int nQuantity;
+ decimal_t dSalesPrice;
+ decimal_t dCouponAmt;
+ ds_key_t kWarehouseID;
+ date_t dtShipDate;
+ ds_key_t kWebPageID;
+ ds_pricing_t Pricing;
+};
+
+int mk_s_web_order_lineitem(void *pDest, ds_key_t kIndex);
+int pr_s_web_order_lineitem(void *pSrc);
+int ld_s_web_order_lineitem(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.c
new file mode 100644
index 000000000000..b824dc5733d7
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.c
@@ -0,0 +1,174 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_page.h"
+#include "w_web_page.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "scaling.h"
+#include "parallel.h"
+#include "permute.h"
+#include "scd.h"
+#include "tdef_functions.h"
+
+extern struct W_WEB_PAGE_TBL g_w_web_page;
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_page (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(WEB_PAGE), S_WPAG_PERMUTE);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_web_page(NULL, getSKFromID(kIndex, S_WPAG_ID));
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_page(void *pSrc)
+{
+ struct W_WEB_PAGE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_web_page;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_PAGE);
+ print_varchar(WP_PAGE_ID, r->wp_page_id, 1);
+ print_date(WP_CREATION_DATE_SK, r->wp_creation_date_sk, 1);
+ print_date(WP_ACCESS_DATE_SK, r->wp_access_date_sk, 1);
+ print_boolean(WP_AUTOGEN_FLAG, r->wp_autogen_flag, 1);
+ print_varchar(WP_URL, &r->wp_url[0], 1);
+ print_varchar(WP_TYPE, &r->wp_type[0], 1);
+ print_integer(WP_CHAR_COUNT, r->wp_char_count, 1);
+ print_integer(WP_LINK_COUNT, r->wp_link_count, 1);
+ print_integer(WP_IMAGE_COUNT, r->wp_image_count, 1);
+ print_integer(WP_MAX_AD_COUNT, r->wp_max_ad_count, 0);
+ print_end(S_WEB_PAGE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_page(void *pSrc)
+{
+ struct W_WEB_PAGE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_web_page;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+int
+vld_s_web_page(int nTable, ds_key_t kRow, int *Permutation)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ table_func_t *pTF = getTdefFunctionsByNumber(WEB_PAGE);
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(WEB_PAGE),
+ S_WPAG_PERMUTE);
+ bInit = 1;
+ }
+
+ pTF->validate(S_WEB_PAGE, kRow, pPermutation);
+
+ return(0);
+ }
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.h
new file mode 100644
index 000000000000..9298806e3805
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_page.h
@@ -0,0 +1,42 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_PAGE_H
+#define S_WEB_PAGE_H
+int mk_s_web_page(void *pRow, ds_key_t kIndex);
+int pr_s_web_page(void *pSrc);
+int ld_s_web_page(void *pSrc);
+int vld_s_web_page(int nTable, ds_key_t kIndex, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotinal_item.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotinal_item.c
new file mode 100644
index 000000000000..7bdb168d2a18
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotinal_item.c
@@ -0,0 +1,149 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_promotional_item.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "parallel.h"
+
+struct S_WEB_PROMOTIONAL_ITEM_TBL g_s_web_promotional_item;
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_promotional_item(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_WEB_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pDest == NULL)
+ r = &g_s_web_promotional_item;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_web_promotional_item, 0, sizeof(struct S_WEB_PROMOTIONAL_ITEM_TBL));
+ bInit = 1;
+ }
+
+ r->kSiteID = mk_join(S_WITM_SITE_ID, S_WEB_SITE, 1);
+ r->kPageID = mk_join(S_WITM_PAGE_ID, S_WEB_PAGE, 1);
+ r->kItemID = mk_join(S_WITM_ITEM_ID, S_ITEM, 1);
+ r->kPromotionID = mk_join(S_WITM_PROMOTION_ID, S_PROMOTION, 1);
+ tpcds_row_stop(S_WEB_PROMOTIONAL_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_promotional_item(void *pSrc)
+{
+ struct S_WEB_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_promotional_item;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_PROMOTIONAL_ITEM);
+ print_key(S_WITM_SITE_ID, r->kSiteID, 1);
+ print_key(S_WITM_PAGE_ID, r->kPageID, 1);
+ print_key(S_WITM_ITEM_ID, r->kItemID, 1);
+ print_key(S_WITM_PROMOTION_ID, r->kPromotionID, 0);
+ print_end(S_WEB_PROMOTIONAL_ITEM);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_promotional_item(void *pSrc)
+{
+ struct S_WEB_PROMOTIONAL_ITEM_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_promotional_item;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotional_item.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotional_item.h
new file mode 100644
index 000000000000..82da43cec36f
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_promotional_item.h
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_PROMOTIONAL_ITEM_H
+#define S_WEB_PROMOTIONAL_ITEM_H
+
+struct S_WEB_PROMOTIONAL_ITEM_TBL {
+ ds_key_t kSiteID;
+ ds_key_t kPageID;
+ ds_key_t kItemID;
+ ds_key_t kPromotionID;
+};
+
+int mk_s_web_promotional_item(void *pDest, ds_key_t kIndex);
+int pr_s_web_promotional_item(void *pSrc);
+int ld_s_web_promotional_item(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.c
new file mode 100644
index 000000000000..ae85be67c5ef
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.c
@@ -0,0 +1,188 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_returns.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "w_web_sales.h"
+#include "s_web_order.h"
+#include "s_web_order_lineitem.h"
+#include "parallel.h"
+
+struct S_WEB_RETURNS_TBL g_s_web_returns;
+extern struct S_WEB_ORDER_TBL g_s_web_order;
+extern struct S_WEB_ORDER_LINEITEM_TBL g_s_web_order_lineitem;
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_return(void *pDest, ds_key_t kIndex)
+{
+ static int bInit = 0;
+ struct S_WEB_RETURNS_TBL *r;
+ int nReturnLag;
+ static date_t MinDataDate,
+ MaxDataDate;
+
+ if (pDest == NULL)
+ r = &g_s_web_returns;
+ else
+ r = pDest;
+
+ if (!bInit)
+ {
+ memset(&g_s_web_returns, 0, sizeof(struct S_WEB_RETURNS_TBL));
+ strtodt(&MinDataDate, DATA_START_DATE);
+ strtodt(&MaxDataDate, DATA_END_DATE);
+ bInit = 1;
+ }
+
+ genrand_integer(&nReturnLag, DIST_UNIFORM, 1, 60, 0, S_WRET_RETURN_DATE);
+ if (g_s_web_order.dtOrderDate.julian == -1)
+ r->dtReturnDate.julian = -1;
+ else
+ jtodt(&r->dtReturnDate, g_s_web_order.dtOrderDate.julian + nReturnLag);
+ r->kReturnTime = mk_join(S_WRET_RETURN_TIME, TIME, 1);
+ r->kReasonID = mk_join(S_WRET_REASON_ID, REASON, 1);
+ r->kSiteID = g_s_web_order.kWebSiteID;
+ r->kOrderID = g_s_web_order.kID;
+ r->nLineNumber = kIndex;
+ r->kItemID = g_s_web_order_lineitem.kItemID;
+ r->kReturningCustomerID = g_s_web_order.kShipCustomerID;
+ r->kRefundedCustomerID = g_s_web_order.kShipCustomerID;
+ r->Pricing = g_s_web_order_lineitem.Pricing;
+ if (g_s_web_order_lineitem.Pricing.quantity == -1)
+ r->Pricing.quantity = -1;
+ else
+ genrand_integer(&r->Pricing.quantity, DIST_UNIFORM, 1, g_s_web_order_lineitem.Pricing.quantity, 0, S_WRET_PRICING);
+ set_pricing(S_WRET_PRICING, &r->Pricing);
+ r->kReasonID = mk_join(S_WRET_REASON_ID, REASON, 1);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_return(void *pSrc)
+{
+ struct S_WEB_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_returns;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_RETURNS);
+ print_id(S_WRET_SITE_ID, r->kSiteID, 1);
+ print_key(S_WRET_ORDER_ID,r->kOrderID, 1);
+ print_integer(S_WRET_LINE_NUMBER, r->nLineNumber, 1);
+ print_id(S_WRET_ITEM_ID, r->kItemID, 1);
+ print_id(S_WRET_RETURN_CUST_ID, r->kReturningCustomerID, 1);
+ print_id(S_WRET_REFUND_CUST_ID,r->kRefundedCustomerID, 1);
+ print_date(S_WRET_RETURN_DATE, r->dtReturnDate.julian, 1);
+ print_time(S_WRET_RETURN_TIME, r->kReturnTime, 1);
+ print_integer(S_WRET_PRICING, r->Pricing.quantity, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.ext_sales_price, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.ext_tax, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.fee, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.ext_ship_cost, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.refunded_cash, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.reversed_charge, 1);
+ print_decimal(S_WRET_PRICING, &r->Pricing.store_credit, 1);
+ print_id(S_WRET_REASON_ID, r->kReasonID, 0);
+ print_end(S_WEB_RETURNS);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_return(void *pSrc)
+{
+ struct S_WEB_RETURNS_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_web_returns;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.h
new file mode 100644
index 000000000000..80621ca99c4a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_returns.h
@@ -0,0 +1,57 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_RETURNS_H
+#define S_WEB_RETURNS_H
+
+#include "pricing.h"
+
+struct S_WEB_RETURNS_TBL {
+ ds_key_t kSiteID;
+ ds_key_t kOrderID;
+ int nLineNumber;
+ ds_key_t kItemID;
+ ds_key_t kReturningCustomerID;
+ ds_key_t kRefundedCustomerID;
+ date_t dtReturnDate;
+ ds_key_t kReturnTime;
+ ds_pricing_t Pricing;
+ ds_key_t kReasonID;
+};
+
+int mk_s_web_return(void *pDest, ds_key_t kIndex);
+int pr_s_web_return(void *pSrc);
+int ld_s_web_return(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.c
new file mode 100644
index 000000000000..cec999e171bb
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.c
@@ -0,0 +1,151 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_web_site.h"
+#include "w_web_site.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "scaling.h"
+#include "decimal.h"
+#include "permute.h"
+#include "scd.h"
+
+struct W_WEB_SITE_TBL g_w_web_site;
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_web_site (void* row, ds_key_t index)
+{
+ static int bInit = 0;
+ static int *pPermutation;
+ ds_key_t kIndex;
+
+ if (!bInit)
+ {
+ pPermutation = makePermutation(NULL, (int)getIDCount(WEB_SITE), S_WSIT_ID);
+ bInit = 1;
+ }
+
+ kIndex = getPermutationEntry(pPermutation, (int)index);
+ mk_w_web_site(NULL,getSKFromID(kIndex, S_WSIT_ID));
+
+ return(0);
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_web_site(void *pSrc)
+{
+ struct W_WEB_SITE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_web_site;
+ else
+ r = pSrc;
+
+ print_start(S_WEB_SITE);
+ print_varchar(WEB_SITE_ID, &r->web_site_id[0], 1);
+ print_date(WEB_OPEN_DATE, r->web_open_date, 1);
+ print_date(WEB_CLOSE_DATE, r->web_close_date, 1);
+ print_varchar(WEB_NAME, &r->web_name[0], 1);
+ print_varchar(WEB_CLASS, &r->web_class[0], 1);
+ print_varchar(WEB_MANAGER, &r->web_manager[0], 1);
+ print_decimal(WEB_TAX_PERCENTAGE, &r->web_tax_percentage, 0);
+ print_end(S_WEB_SITE);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_web_site(void *pSrc)
+{
+ struct W_WEB_SITE_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_w_web_site;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.h
new file mode 100644
index 000000000000..01f9a8c030e5
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_web_site.h
@@ -0,0 +1,41 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_WEB_SITE_H
+#define S_WEB_SITE_H
+
+int pr_s_web_site(void *pSrc);
+int ld_s_web_site(void *pSrc);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.c b/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.c
new file mode 100644
index 000000000000..d281bf6e041a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.c
@@ -0,0 +1,256 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "genrand.h"
+#include "s_zip_to_gmt.h"
+#include "print.h"
+#include "columns.h"
+#include "build_support.h"
+#include "tables.h"
+#include "tdef_functions.h"
+#include "r_params.h"
+#include "parallel.h"
+#include "tdefs.h"
+
+struct S_ZIP_GMT_TBL g_s_zip;
+
+struct ZIP_MAP {
+ int nMin;
+ int nMax;
+ int nOffset;
+} arGMTOffset[63] =
+{
+{0,599, -99}, /* List of unused values */
+{600,999, -5}, /* List of ZIP Codes in Puerto Rico and U.S. Virgin Islands */
+{1000,2799, -5}, /* List of ZIP Codes in Massachusetts */
+{2800,2999, -5}, /* List of ZIP Codes in Rhode Island */
+{3000,3899, -5}, /* List of ZIP Codes in New Hampshire */
+{3900,4999, -5}, /* List of ZIP Codes in Maine */
+{5000,5999, -5}, /* List of ZIP Codes in Vermont */
+{6000,6999, -5}, /* List of ZIP Codes in Connecticut */
+{7000,8999, -5}, /* List of ZIP Codes in New Jersey */
+{9000,9999, -5}, /* List of ZIP Codes in the military */
+{10000, 14999, -5}, /* List of ZIP Codes in New York */
+{15000, 19699, -5}, /* List of ZIP Codes in Pennsylvania */
+{19700, 19999, -5}, /* List of ZIP Codes in Delaware */
+{20000, 20599, -5}, /* List of ZIP Codes in District of Columbia */
+{20600, 21999, -5}, /* List of ZIP Codes in Maryland */
+{22000, 24699, -5}, /* List of ZIP Codes in Virginia */
+{24700, 26999, -5}, /* List of ZIP Codes in West Virginia */
+{27000, 28999, -5}, /* List of ZIP Codes in North Carolina */
+{29000, 29999, -5}, /* List of ZIP Codes in South Carolina */
+{30000, 31999, -5}, /* List of ZIP Codes in Georgia */
+{32000, 33999, -5}, /* List of ZIP Codes in Florida */
+{34000, 34999, -6}, /* List of ZIP Codes in Florida */
+{34090, 34095, -5}, /* List of ZIP Codes in the military */
+{35000, 36999, -6}, /* List of ZIP Codes in Alabama */
+{37000, 38599, -5}, /* List of ZIP Codes in Tennessee */
+{38600, 39999, -6}, /* List of ZIP Codes in Mississippi */
+{40000, 41799, -5}, /* List of ZIP Codes in Kentucky */
+{41800, 42799, -6}, /* List of ZIP Codes in Kentucky */
+{43000, 45999, -5}, /* List of ZIP Codes in Ohio */
+{46000, 47999, -5}, /* List of ZIP Codes in Indiana */
+{48000, 49999, -5}, /* List of ZIP Codes in Michigan */
+{50000, 52999, -6}, /* List of ZIP Codes in Iowa */
+{53000, 54999, -6}, /* List of ZIP Codes in Wisconsin */
+{55000, 56999, -6}, /* List of ZIP Codes in Minnesota */
+{57000, 57499, -6}, /* List of ZIP Codes in South Dakota */
+{57500, 57999, -7}, /* List of ZIP Codes in South Dakota */
+{58000, 58499, -6}, /* List of ZIP Codes in North Dakota */
+{58500, 58499, -7}, /* List of ZIP Codes in North Dakota */
+{59000, 59999, -7}, /* List of ZIP Codes in Montana */
+{60000, 62999, -6}, /* List of ZIP Codes in Illinois */
+{63000, 65999, -6}, /* List of ZIP Codes in Missouri */
+{66000, 67999, -6}, /* List of ZIP Codes in Kansas */
+{68000, 68999, -6}, /* List of ZIP Codes in Nebraska */
+{69000, 69999, -7}, /* List of ZIP Codes in Nebraska */
+{70000, 71599, -6}, /* List of ZIP Codes in Louisiana */
+{71600, 72999, -6}, /* List of ZIP Codes in Arkansas */
+{73000, 74999, -6}, /* List of ZIP Codes in Oklahoma */
+{75000, 78999, -6}, /* List of ZIP Codes in Texas */
+{79000, 79999, -7}, /* List of ZIP Codes in Texas */
+{80000, 81999, -7}, /* List of ZIP Codes in Colorado */
+{82000, 83199, -7}, /* List of ZIP Codes in Wyoming */
+{83200, 83699, -7}, /* List of ZIP Codes in Idaho */
+{83700, 83999, -8}, /* List of ZIP Codes in Idaho */
+{84000, 84999, -7}, /* List of ZIP Codes in Utah */
+{85000, 86999, -7}, /* List of ZIP Codes in Arizona */
+{87000, 88999, -7}, /* List of ZIP Codes in New Mexico */
+{89000, 89999, -8}, /* List of ZIP Codes in Nevada */
+{90000, 95999, -8}, /* List of ZIP Codes in California */
+{96000, 96699, -8}, /* List of ZIP Codes in the military */
+{96700, 96899, -10}, /* List of ZIP Codes in Hawaii */
+{97000, 97999, -8}, /* List of ZIP Codes in Oregon */
+{98000, 99499, -8}, /* List of ZIP Codes in Washington */
+{99500, 99999, -9}, /* List of ZIP Codes in Alaska */
+};
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+mk_s_zip(void *pDest, ds_key_t kIndex)
+{
+ struct S_ZIP_GMT_TBL *r;
+ static struct ZIP_MAP *pMap;
+
+ if (pDest == NULL)
+ r = &g_s_zip;
+ else
+ r = pDest;
+
+ kIndex -= 1; /* zip codes are 0-based */
+ pMap = &arGMTOffset[0];
+ while (kIndex > pMap->nMax)
+ pMap += 1;
+ sprintf(r->szZip, "%05lld", kIndex);
+ r->nGMTOffset = pMap->nOffset;
+
+ return(r->nGMTOffset == -99?1:0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+pr_s_zip(void *pSrc)
+{
+ struct S_ZIP_GMT_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_zip;
+ else
+ r = pSrc;
+
+ print_start(S_ZIPG);
+ print_varchar(S_ZIPG_ZIP, r->szZip, 1);
+ print_integer(S_ZIPG_GMT, r->nGMTOffset, 0);
+ print_end(S_ZIPG);
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+ld_s_zip(void *pSrc)
+{
+ struct S_ZIP_GMT_TBL *r;
+
+ if (pSrc == NULL)
+ r = &g_s_zip;
+ else
+ r = pSrc;
+
+ return(0);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+vld_s_zip(int nTable, ds_key_t kRow, int *Permutation)
+{
+ table_func_t *pTF = getTdefFunctionsByNumber(nTable);
+
+ row_skip(nTable + S_BRAND, kRow - 1);
+ if (!pTF->builder(NULL, kRow))
+ {
+ /* there is a 600 offset for the first row */
+ print_key(0, kRow - 600, 1);
+ if (pTF->loader[is_set("DBLOAD")](NULL))
+ {
+ fprintf(stderr, "ERROR: Load failed on %s!\n", getTableNameByID(nTable));
+ exit(-1);
+ }
+ tpcds_row_stop(nTable);
+ }
+
+ return(0);
+}
+
+
+
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.h b/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.h
new file mode 100644
index 000000000000..1b08fc498996
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/s_zip_to_gmt.h
@@ -0,0 +1,48 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef S_ZIP_H
+#define S_ZIP_H
+
+struct S_ZIP_GMT_TBL {
+ char szZip[RS_ZIPG_ZIP + 1];
+ int nGMTOffset;
+};
+
+int mk_s_zip(void *pDest, ds_key_t kIndex);
+int pr_s_zip(void *pSrc);
+int ld_s_zip(void *pSrc);
+int vld_s_zip(int nTable, ds_key_t kRow, int *Permutation);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.c b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.c
new file mode 100644
index 000000000000..ee069f456b3e
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.c
@@ -0,0 +1,797 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include "config.h"
+#include "porting.h"
+#include "dist.h"
+#include "constants.h"
+#include "genrand.h"
+#include "columns.h"
+#include "tdefs.h"
+#include "error_msg.h"
+#include "r_params.h"
+#include "tdefs.h"
+#include "tdef_functions.h"
+#include "w_inventory.h"
+#include "scaling.h"
+#include "tpcds.idx.h"
+#include "print.h"
+#include "parallel.h"
+#include "scd.h"
+
+
+static struct SCALING_T {
+ ds_key_t kBaseRowcount;
+ ds_key_t kNextInsertValue;
+ int nUpdatePercentage;
+ ds_key_t kDayRowcount[6];
+} arRowcount[MAX_TABLE + 1];
+static int arUpdateDates[6];
+static int arInventoryUpdateDates[6];
+
+static int arScaleVolume[9] =
+ {1, 10, 100, 300, 1000, 3000, 10000, 30000, 100000};
+
+void setUpdateScaling(int table);
+int row_skip(int tbl, ds_key_t count);
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+getScaleSlot(int nTargetGB)
+{
+ int i;
+
+ for (i=0; nTargetGB > arScaleVolume[i]; i++);
+
+ return(i);
+}
+
+/*
+* Routine: LogScale(void)
+* Purpose: use the command line volume target, in GB, to calculate the global rowcount multiplier
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects: arRowcounts are set to the appropriate number of rows for the target scale factor
+* TODO: None
+*/
+static ds_key_t
+LogScale(int nTable, int nTargetGB)
+{
+ int nIndex = 1,
+ nDelta,
+ i;
+ float fOffset;
+ ds_key_t hgRowcount = 0;
+
+ i = getScaleSlot(nTargetGB);
+
+ nDelta = dist_weight(NULL, "rowcounts", nTable + 1, i + 1) - dist_weight(NULL, "rowcounts", nTable + 1, i);
+ fOffset = (float)(nTargetGB - arScaleVolume[i - 1])/(float)(arScaleVolume[i] - arScaleVolume[i - 1]);
+
+ hgRowcount = (int)(fOffset * (float)nDelta);
+ hgRowcount += dist_weight(NULL, "rowcounts", nTable + 1, nIndex);
+
+
+ return(hgRowcount);
+}
+
+/*
+* Routine: StaticScale(void)
+* Purpose: use the command line volume target, in GB, to calculate the global rowcount multiplier
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects: arRowcounts are set to the appropriate number of rows for the target scale factor
+* TODO: None
+*/
+static ds_key_t
+StaticScale(int nTable, int nTargetGB)
+{
+ return(dist_weight(NULL, "rowcounts", nTable + 1, 1));
+}
+
+/*
+* Routine: LinearScale(void)
+* Purpose: use the command line volume target, in GB, to calculate the global rowcount multiplier
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions: scale factors defined in rowcounts distribution define 1/10/100/1000/... GB
+* with sufficient accuracy
+* Side Effects: arRowcounts are set to the appropriate number of rows for the target scale factor
+* TODO: None
+*/
+static ds_key_t
+LinearScale(int nTable, int nTargetGB)
+{
+ int i;
+ ds_key_t hgRowcount = 0;
+
+ for (i=8; i >= 0; i--) /* work from large scales down)*/
+ {
+ /*
+ * use the defined rowcounts to build up the target GB volume
+ */
+ while (nTargetGB >= arScaleVolume[i])
+ {
+ hgRowcount += dist_weight(NULL, "rowcounts", nTable + 1, i + 1);
+ nTargetGB -= arScaleVolume[i];
+ }
+ }
+
+ return(hgRowcount);
+}
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+getIDCount(int nTable)
+{
+ ds_key_t kRowcount,
+ kUniqueCount;
+ tdef *pTdef;
+
+ kRowcount = get_rowcount(nTable);
+ if (nTable >= PSEUDO_TABLE_START)
+ return(kRowcount);
+ pTdef = getSimpleTdefsByNumber(nTable);
+ if (pTdef->flags & FL_TYPE_2)
+ {
+ kUniqueCount = (kRowcount / 6) * 3;
+ switch (kRowcount % 6)
+ {
+ case 1:
+ kUniqueCount += 1;
+ break;
+ case 2:
+ case 3:
+ kUniqueCount += 2;
+ break;
+ case 4:
+ case 5:
+ kUniqueCount += 3;
+ break;
+ }
+ return(kUniqueCount);
+ }
+ else
+ {
+ return(kRowcount);
+ }
+}
+
+/*
+* Routine: get_rowcount(int table)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20040820 jms Need to address special case scaling in a more general fashion
+*/
+ds_key_t
+get_rowcount(int table)
+{
+
+ static int bScaleSet = 0,
+ nScale;
+ int nTable,
+ nMultiplier,
+ i,
+ nBadScale = 0,
+ nRowcountOffset = 0;
+ tdef *pTdef;
+
+ if (!bScaleSet)
+ {
+ nScale = get_int("SCALE");
+ if (nScale > 100000)
+ ReportErrorNoLine(QERR_BAD_SCALE, NULL, 1);
+
+ memset(arRowcount, 0, sizeof(long) * MAX_TABLE);
+ for (nTable=CALL_CENTER; nTable <= MAX_TABLE; nTable++)
+ {
+ switch(nScale)
+ {
+ case 100000:
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 9);
+ break;
+ case 30000:
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 8);
+ break;
+ case 10000:
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 7);
+ break;
+ case 3000:
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 6);
+ break;
+ case 1000:
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 5);
+ break;
+ case 300:
+ nBadScale = QERR_BAD_SCALE;
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 4);
+ break;
+ case 100:
+ nBadScale = QERR_BAD_SCALE;
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 3);
+ break;
+ case 10:
+ nBadScale = QERR_BAD_SCALE;
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 2);
+ break;
+ case 1:
+ nBadScale = QERR_QUALIFICATION_SCALE;
+ arRowcount[nTable].kBaseRowcount = dist_weight(NULL, "rowcounts", nTable + nRowcountOffset + 1, 1);
+ break;
+ default:
+ nBadScale = QERR_BAD_SCALE;
+ switch(dist_member(NULL, "rowcounts", nTable + 1, 3))
+ {
+ case 2:
+ arRowcount[nTable].kBaseRowcount = LinearScale(nTable + nRowcountOffset , nScale);
+ break;
+ case 1:
+ arRowcount[nTable].kBaseRowcount = StaticScale(nTable + nRowcountOffset , nScale);
+ break;
+ case 3:
+ arRowcount[nTable].kBaseRowcount = LogScale(nTable + nRowcountOffset , nScale);
+ break;
+ } /* switch(FL_SCALE_MASK) */
+ break;
+ } /* switch(nScale) */
+
+ /* now adjust for the multiplier */
+ nMultiplier = 1;
+ if (nTable < PSEUDO_TABLE_START)
+ {
+ pTdef = getSimpleTdefsByNumber(nTable);
+ nMultiplier = (pTdef->flags & FL_TYPE_2)?2:1;
+ }
+ for (i=1; i <= dist_member(NULL, "rowcounts", nTable + 1, 2); i++)
+ nMultiplier *= 10;
+ arRowcount[nTable].kBaseRowcount *= nMultiplier;
+
+ } /* for each table */
+
+
+ if (nBadScale && !is_set("QUIET"))
+ ReportErrorNoLine(nBadScale, NULL, 0);
+
+ bScaleSet = 1;
+ }
+
+ if ((table == INVENTORY))
+ return(sc_w_inventory(nScale));
+ if ((table == S_INVENTORY))
+ return(getIDCount(ITEM) * get_rowcount(WAREHOUSE) * 6);
+
+ return(arRowcount[table].kBaseRowcount);
+
+}
+
+/*
+* Routine: setUpdateDates
+* Purpose: determine the dates for fact table updates
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+setUpdateDates(void)
+{
+ int nDay,
+ nUpdate,
+ i;
+ date_t dtTemp;
+
+ nUpdate = get_int("UPDATE");
+ while (nUpdate--)
+ {
+ /* pick two adjacent days in the low density zone */
+ arUpdateDates[0] = getSkewedJulianDate(calendar_low, 0);
+ jtodt(&dtTemp, arUpdateDates[0]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp) + 1, calendar_low);
+ if (nDay)
+ arUpdateDates[1] = arUpdateDates[0] + 1;
+ else
+ arUpdateDates[1] = arUpdateDates[0] - 1;
+
+ /*
+ * pick the related Thursdays for inventory
+ * 1. shift first date to the Thursday in the current update week
+ * 2. move forward/back to get into correct comparability zone
+ * 3. set next date to next/prior Thursday based on comparability zone
+ */
+ jtodt(&dtTemp, arUpdateDates[0] + (4 - set_dow(&dtTemp)));
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_low);
+ arInventoryUpdateDates[0] = dtTemp.julian;
+ if (!nDay)
+ {
+ jtodt(&dtTemp, dtTemp.julian - 7);
+ arInventoryUpdateDates[0] = dtTemp.julian;
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_low);
+ if (!nDay)
+ arInventoryUpdateDates[0] += 14;
+ }
+
+ arInventoryUpdateDates[1] = arInventoryUpdateDates[0] + 7;
+ jtodt(&dtTemp, arInventoryUpdateDates[1]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp) + 1, calendar_low);
+ if (!nDay)
+ arInventoryUpdateDates[1] -= 14;
+
+ /* repeat for medium calendar zone */
+ arUpdateDates[2] = getSkewedJulianDate(calendar_medium, 0);
+ jtodt(&dtTemp, arUpdateDates[2]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp) + 1, calendar_medium);
+ if (nDay)
+ arUpdateDates[3] = arUpdateDates[2] + 1;
+ else
+ arUpdateDates[3] = arUpdateDates[2] - 1;
+
+ jtodt(&dtTemp, arUpdateDates[2] + (4 - set_dow(&dtTemp)));
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_medium);
+ arInventoryUpdateDates[2] = dtTemp.julian;
+ if (!nDay)
+ {
+ jtodt(&dtTemp, dtTemp.julian - 7);
+ arInventoryUpdateDates[2] = dtTemp.julian;
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_medium);
+ if (!nDay)
+ arInventoryUpdateDates[2] += 14;
+ }
+
+ arInventoryUpdateDates[3] = arInventoryUpdateDates[2] + 7;
+ jtodt(&dtTemp, arInventoryUpdateDates[3]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_medium);
+ if (!nDay)
+ arInventoryUpdateDates[3] -= 14;
+
+
+ /* repeat for high calendar zone */
+ arUpdateDates[4] = getSkewedJulianDate(calendar_high, 0);
+ jtodt(&dtTemp, arUpdateDates[4]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp) + 1, calendar_high);
+ if (nDay)
+ arUpdateDates[5] = arUpdateDates[4] + 1;
+ else
+ arUpdateDates[5] = arUpdateDates[4] - 1;
+
+ jtodt(&dtTemp, arUpdateDates[4] + (4 - set_dow(&dtTemp)));
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_high);
+ arInventoryUpdateDates[4] = dtTemp.julian;
+ if (!nDay)
+ {
+ jtodt(&dtTemp, dtTemp.julian - 7);
+ arInventoryUpdateDates[4] = dtTemp.julian;
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_high);
+ if (!nDay)
+ arInventoryUpdateDates[4] += 14;
+ }
+
+ arInventoryUpdateDates[5] = arInventoryUpdateDates[4] + 7;
+ jtodt(&dtTemp, arInventoryUpdateDates[5]);
+ dist_weight(&nDay, "calendar", day_number(&dtTemp), calendar_high);
+ if (!nDay)
+ arInventoryUpdateDates[5] -= 14;
+
+
+ }
+
+ /*
+ * output the update dates for this update set
+ */
+ openDeleteFile(1);
+ for (i=0; i < 6; i += 2)
+ print_delete(&arUpdateDates[i]);
+
+ /*
+ * inventory uses separate dates
+ */
+ openDeleteFile(2);
+ for (i=0; i < 6; i += 2)
+ print_delete(&arInventoryUpdateDates[i]);
+ openDeleteFile(0);
+
+ return;
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+getUpdateDate(int nTable, ds_key_t kRowcount)
+{
+ static int nIndex = 0,
+ nLastTable = -1;
+
+ if (nLastTable != nTable)
+ {
+ nLastTable = nTable;
+ get_rowcount(nTable);
+ nIndex = 0;
+ }
+
+ for (nIndex = 0; kRowcount > arRowcount[nTable].kDayRowcount[nIndex]; nIndex++)
+ if (nIndex == 5) break;
+
+ if (nTable == S_INVENTORY)
+ {
+ return(arInventoryUpdateDates[nIndex]);
+ }
+ else
+ return(arUpdateDates[nIndex]);
+}
+
+
+
+/*
+* Routine: getUpdateID(int nTable, ds_key_t *pDest)
+* Purpose: select the primary key for an update set row
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns: 1 if the row is new, 0 if it is reusing an existing ID
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: 20040326 jms getUpdateID() this MUST be updated for 64bit -- all usages use casts today
+* TODO: 20060102 jms this will need to be looked at for parallelism at some point
+*/
+/*
+int
+getUpdateID(ds_key_t *pDest, int nTable, int nColumn)
+{
+ int bIsUpdate = 0,
+ nTemp;
+
+ if (genrand_integer(NULL, DIST_UNIFORM, 0, 99, 0, nColumn) < arRowcount[nTable].nUpdatePercentage)
+ {
+ bIsUpdate = 1;
+ genrand_integer(&nTemp, DIST_UNIFORM, 1, (int)getIDCount(nTable), 0, nColumn);
+ *pDest = (ds_key_t)nTemp;
+ }
+ else
+ {
+ *pDest = ++arRowcount[nTable].kNextInsertValue;
+ }
+
+ return(bIsUpdate);
+}
+*/
+
+
+/*
+* Routine: getSkewedJulianDate()
+* Purpose: return a julian date based on the given skew and column
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+getSkewedJulianDate(int nWeight, int nColumn)
+{
+ int i;
+ date_t Date;
+
+ pick_distribution(&i, "calendar", 1, nWeight, nColumn);
+ genrand_integer(&Date.year, DIST_UNIFORM, YEAR_MINIMUM, YEAR_MAXIMUM, 0, nColumn);
+ dist_member(&Date.day, "calendar", i, 3);
+ dist_member(&Date.month, "calendar", i, 5);
+ return(dttoj(&Date));
+}
+
+/*
+* Routine: initializeOrderUpdate()
+* Purpose: skip over prior updates for the named table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+/*
+int
+initializeOrderUpdates(int nParent, int nChild, int nIDColumn, int nDateColumn, int *pnOrderNumber)
+{
+ int i,
+ nRowcount,
+ nRowsRemaining,
+ nStep = 0;
+ date_t Date;
+
+
+ *pnOrderNumber = 0;
+
+ for (i=0; i < (get_int("UPDATE") - 1); i++)
+ {
+ nRowsRemaining = (int)get_rowcount(nParent);
+ while (nRowsRemaining > 0)
+ {
+ nStep = nStep % 3;
+ nStep += 1;
+ Date.julian = getSkewedJulianDate((nStep++ % 3) + 8, nDateColumn);
+ nRowcount = (int)dateScaling(getTableFromColumn(nIDColumn), Date.julian);
+ *pnOrderNumber += nRowcount;
+ row_skip(nParent, nRowcount);
+ row_skip(nChild, LINES_PER_ORDER * nRowcount);
+ nRowsRemaining -= nRowcount;
+ }
+ }
+
+ return(nStep);
+}
+*/
+
+/*
+* Routine: dateScaling(int nTable, ds_key_t jDate)
+* Purpose: determine the number of rows to build for a given date and fact table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+dateScaling(int nTable, ds_key_t jDate)
+{
+ static int bInit = 0;
+ static dist_t *pDist;
+ d_idx_t *pDistIndex;
+ date_t Date;
+ int nDateWeight = 1,
+ nCalendarTotal,
+ nDayWeight;
+ ds_key_t kRowCount = -1;
+ tdef *pTdef = getSimpleTdefsByNumber(nTable);
+
+ if (!bInit)
+ {
+ pDistIndex = find_dist("calendar");
+ pDist = pDistIndex->dist;
+ if (!pDist)
+ ReportError(QERR_NO_MEMORY, "dateScaling()", 1);
+ bInit = 1;
+ }
+
+ jtodt(&Date, (int)jDate);
+
+ switch(nTable)
+ {
+ case STORE_SALES:
+ case CATALOG_SALES:
+ case WEB_SALES:
+ kRowCount = get_rowcount(nTable);
+ nDateWeight = calendar_sales;
+ break;
+ case S_CATALOG_ORDER:
+ kRowCount = get_rowcount(CATALOG_SALES);
+ nDateWeight = calendar_sales;
+ break;
+ case S_PURCHASE:
+ kRowCount = get_rowcount(STORE_SALES);
+ nDateWeight = calendar_sales;
+ break;
+ case S_WEB_ORDER:
+ kRowCount = get_rowcount(WEB_SALES);
+ nDateWeight = calendar_sales;
+ break;
+ case S_INVENTORY:
+ case INVENTORY:
+ nDateWeight = calendar_uniform;
+ kRowCount = get_rowcount(WAREHOUSE) * getIDCount(ITEM);
+ break;
+ default:
+ ReportErrorNoLine(QERR_TABLE_NOP, pTdef->name, 1);
+ break;
+ }
+
+ if (nTable != INVENTORY) /* inventory rowcount is uniform thorughout the year */
+ {
+ if (is_leap(Date.year))
+ nDateWeight += 1;
+
+ nCalendarTotal = dist_max(pDist, nDateWeight);
+ nCalendarTotal *= 5; /* assumes date range is 5 years */
+
+ dist_weight(&nDayWeight, "calendar", day_number(&Date), nDateWeight);
+ kRowCount *= nDayWeight;
+ kRowCount += nCalendarTotal / 2;
+ kRowCount /= nCalendarTotal;
+ }
+
+ return(kRowCount);
+}
+
+/*
+* Routine: getUpdateBase(int nTable)
+* Purpose: return the offset to the first order in this update set for a given table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+getUpdateBase(int nTable)
+{
+ return(arRowcount[nTable - S_BRAND].kNextInsertValue);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+setUpdateScaling(int nTable)
+{
+ tdef *pTdef;
+ int i,
+ nBaseTable;
+ ds_key_t kNewRowcount = 0;
+
+ pTdef = getSimpleTdefsByNumber(nTable);
+ if (!(pTdef->flags & FL_SOURCE_DDL) ||
+ !(pTdef->flags & FL_DATE_BASED) ||
+ (pTdef->flags & FL_NOP))
+ return;
+
+ switch(nTable)
+ {
+ case S_PURCHASE: nBaseTable = STORE_SALES; break;
+ case S_CATALOG_ORDER: nBaseTable = CATALOG_SALES; break;
+ case S_WEB_ORDER: nBaseTable = WEB_SALES; break;
+ case S_INVENTORY: nBaseTable = INVENTORY; break;
+ default:
+ fprintf(stderr, "ERROR: Invalid table in setUpdateScaling\n");
+ exit(1);
+ break;
+ }
+
+ arRowcount[nTable].kNextInsertValue = arRowcount[nTable].kBaseRowcount;
+
+ for (i=0; i < 6; i++)
+ {
+ kNewRowcount += dateScaling(nBaseTable, arUpdateDates[i]);
+ arRowcount[nTable].kDayRowcount[i] = kNewRowcount;
+ }
+
+ arRowcount[nTable].kBaseRowcount = kNewRowcount;
+ arRowcount[nTable].kNextInsertValue += kNewRowcount * (get_int("update") - 1);
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.dst
new file mode 100644
index 000000000000..c13f436816d3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.dst
@@ -0,0 +1,138 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+------
+-- rowcount
+-- This distribution defines the rowcounts for each table at
+-- 6 discrete scaling levels the first (scale=1G) is intended
+-- for validation testing
+-- other values are not valid for publication, but are generated using
+-- the interpolation method defined for each table
+-- NOTE: this needs to sync with the definitions in tables.h
+-- values weights
+-- -------------------------------------------------
+-- 1. table 1. 1GB rowcount
+-- 2, multiplier (10^x) 2. 10GB rowcount
+-- 3. scaling model 3. 100GB rowcount
+-- (1 = static, 2=linear, 4. 300GB rowcount
+-- 3=logarithmic) 5. 1TB rowcount
+-- 6. 3TB rowcount
+-- 7. 10TB rowcount
+-- 8. 30TB rowcount
+-- 9. 100TB rowcount
+-- 10. update percentage
+------
+create rowcounts;
+set types = (varchar, int, int);
+set weights = 10;
+-- table mult model 1G 10G 100G 300G 1T 3T 10T 30T 100T upd
+add ("call_center", 0, 3: 3, 12, 15, 18, 21, 24, 27, 30, 30, 0);
+add ("catalog_page", 0, 1: 11718,12000, 20400, 26000, 30000, 36000, 40000, 46000, 50000, 0);
+add ("catalog_returns", 4, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("catalog_sales", 4, 2: 16, 160, 1600 4800, 16000, 48000, 160000, 480000, 1600000, 0);
+add ("customer", 3, 3: 100, 500, 2000, 5000, 12000, 30000, 65000, 80000, 100000, 0);
+add ("customer_address",3, 3: 50, 250, 1000, 2500, 6000, 15000, 32500, 40000, 50000, 0);
+add ("customer_demographics",2, 1: 19208,19208, 19208, 19208, 19208, 19208, 19208, 19208, 19208, 0);
+add ("date", 0, 1: 73049,73049, 73049, 73049, 73049, 73049, 73049, 73049, 73049, 0);
+add ("household_demographics",0,1: 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 7200, 0);
+add ("income_band", 0, 1: 20, 20, 20, 20, 20, 20, 20, 20, 20, 0);
+-- inventory is a special case derived from item, warehouse, date
+add ("inventory", -1, -1: -1, -1, -1, -1, -1, -1, -1. -1. -1. 0);
+add ("item", 3, 3: 9, 51, 102, 132, 150, 180, 201, 231, 251, 0);
+add ("promotion", 0, 3: 300, 500, 1000, 1300, 1500, 1800, 2000, 2300, 2500, 0);
+add ("reason", 0, 3: 35, 45, 55, 60, 65, 67, 70, 72, 75, 0);
+add ("ship_mode", 0, 1: 20, 20, 20, 20, 20, 20, 20, 20, 20, 0);
+add ("store", 0, 3: 6, 51, 201, 402, 501, 675, 750, 852, 951, 0);
+add ("store_returns",-1, -1: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("store_sales", 4, 2: 24, 240, 2400, 7200, 24000, 72000, 240000, 720000, 2400000, 0);
+add ("time", 0, 1: 86400,86400, 86400, 86400, 86400, 86400, 86400, 86400, 86400, 0);
+add ("warehouse", 0, 3: 5, 10, 15, 17, 20, 22, 25, 27, 30, 0);
+add ("web_page", 0, 3: 30, 100, 1020, 1302, 1500, 1800, 2001, 2301, 2502, 0);
+add ("web_returns", 4, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("web_sales", 3, 2: 60, 600, 6000, 18000, 60000, 180000, 600000, 1800000, 6000000, 0);
+add ("web_site", 0, 3: 15, 21, 12, 21, 27, 33, 39, 42, 48, 0);
+add ("dbgen_version",0, 1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 0);
+-- source schema tables
+-- table mult model 1G 10G 100G 300G 1T 3T 10T 30T 100T upd
+add ("s_brand", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 10);
+add ("s_customer_address",0,2: 25, 40, 100, 250, 600, 1500, 3250, 4000, 5000, 10);
+add ("s_call_center",0, 2: 1, 1, 1, 1, 1, 1, 1, 1, 1, 100);
+add ("s_catalog", 0, 0: 1, 10, 100, 300, 1000, 3000, 10000, 30000, 100000, 10);
+add ("s_catalog_order", 2, 1: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_catalog_lineitem",0,1: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_catalog_page", 0, 2: 150, 210, 240, 240, 240, 240, 240, 240, 240, 15);
+add ("s_catalog_promotional_item",2,2:-1, -1, -1, -1, -1, -1, -1, -1, -1, 10);
+add ("s_catalog_returns",2,2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_category", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_class", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_company", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_customer", 3, 2: 5, 10, 20, 50, 120, 300, 650, 800, 1000, 15);
+add ("s_division", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_inventory", 2, 2: 1, 10, 100, 300, 1000, 3000, 10000, 30000, 100000, 0);
+add ("s_item", 2, 2: 5, 7, 10, 13, 15, 18, 20, 23, 25, 50);
+add ("s_manager", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_manufacturer",2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_market", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_product", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_promotion", 0, 2: 5, 7, 10, 13, 15, 18, 20, 23, 25, 50);
+add ("s_purchase", 3, 1: 8, 8, 80, 240, 800, 2400, 8000, 24000, 180000, 0);
+add ("s_purchase_lineitem",2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_reason", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_store", 0, 2: 1, 1, 2, 4, 5, 6, 7, 8, 9, 10);
+add ("s_store_promotional_item",2 2:-1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_store_returns",2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_subcategory",2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_subclass", 2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_warehouse", 0, 2: 1, 1, 1, 1, 1, 1, 1, 1, 1, 100);
+add ("s_web_order", 3, 1: 4, 20, 40, 120, 400, 1200, 4000, 12000, 40000, 0);
+add ("s_web_order_lineitem",2,2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_web_page", 0, 2: 6, 1, 200, 260, 300, 360, 400, 460, 500, 50);
+add ("s_web_promotional_item",2,2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_web_returns",2, 2: -1, -1, -1, -1, -1, -1, -1, -1, -1, 0);
+add ("s_web_site", 0, 2: 1, 1, 1, 1, 1, 1, 1, 1, 1, 50);
+add ("s_zip_to_gmt", 3, 2: 100, 100, 100, 100, 100, 100, 100, 100, 100, 0);
+-- PSEUDO TABLES: cardinalities, but not actual rowcounts
+-- table mult model 1G 10G 100G 300G 1T 3T 10T 30T 100T upd
+add ("item_brands", 0, 1: 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0);
+add ("item_classes", 0, 1: 100, 100, 100, 100, 100, 100, 100, 100, 100, 0);
+add ("item_categories", 0, 1: 10, 10, 10, 10, 10, 10, 10, 10, 10, 0);
+add ("divisions", 0, 3: 2, 3, 4, 5, 5, 5, 5, 5, 5, 0);
+add ("companies", 0, 3: 2, 3, 4, 5, 5, 5, 5, 5, 5, 0);
+add ("concurrent_web_sites",0, 3: 2, 3, 4, 5, 5, 5, 5, 5, 5, 0);
+add ("active_cities": 0 3: 2, 6, 18, 30, 54, 90, 165, 270, 495, 0);
+add ("active_counties": 0, 3: 1, 3, 9, 15, 27, 45, 81, 135, 245, 0);
+add ("active_states": 0, 3: 1, 3, 9, 13, 21, 29, 34, 42, 47, 0);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.h b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.h
new file mode 100644
index 000000000000..835d0e7ab965
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/scaling.h
@@ -0,0 +1,49 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef SCALING_H
+#define SCALING_H
+ds_key_t get_rowcount(int table);
+ds_key_t getIDCount(int nTable);
+int getUpdateID(ds_key_t *pDest, int nTable, int nColumn);
+int getScaleSlot(int nTargetGB);
+int getSkewedJulianDate(int nWeight, int nColumn);
+ds_key_t dateScaling(int nColumn, ds_key_t jDate);
+int getUpdateDate(int nTable, ds_key_t kRowcount);
+void setUpdateDates(void);
+void setUpdateScaling(int nTable);
+ds_key_t getUpdateBase(int nTable);
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/scd.c b/ydb/library/benchmarks/gen/tpcds-dbgen/scd.c
new file mode 100644
index 000000000000..943cc4738959
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/scd.c
@@ -0,0 +1,422 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "tdefs.h"
+#include "scd.h"
+#include "tables.h"
+#include "build_support.h"
+#include "dist.h"
+#include "scaling.h"
+#include "genrand.h"
+#include "constants.h"
+#include "parallel.h"
+#include "params.h"
+#include "tdef_functions.h"
+#include "print.h"
+#include "permute.h"
+
+/* an array of the most recent business key for each table */
+char arBKeys[MAX_TABLE][17];
+
+/*
+* Routine: setSCDKey
+* Purpose: handle the versioning and date stamps for slowly changing dimensions
+* Algorithm:
+* Data Structures:
+*
+* Params: 1 if there is a new id; 0 otherwise
+* Returns:
+* Called By:
+* Calls:
+* Assumptions: Table indexs (surrogate keys) are 1-based. This assures that the arBKeys[] entry for each table is
+* initialized. Otherwise, parallel generation would be more difficult.
+* Side Effects:
+* TODO: None
+*/
+int
+setSCDKeys(int nColumnID, ds_key_t kIndex, char *szBKey, ds_key_t *pkBeginDateKey, ds_key_t *pkEndDateKey)
+{
+ int bNewBKey = 0,
+ nModulo;
+ static int bInit = 0;
+ static ds_key_t jMinimumDataDate,
+ jMaximumDataDate,
+ jH1DataDate,
+ jT1DataDate,
+ jT2DataDate;
+ date_t dtTemp;
+ int nTableID;
+
+ if (!bInit)
+ {
+ strtodt(&dtTemp, DATA_START_DATE);
+ jMinimumDataDate = dtTemp.julian;
+ strtodt(&dtTemp, DATA_END_DATE);
+ jMaximumDataDate = dtTemp.julian;
+ jH1DataDate = jMinimumDataDate + (jMaximumDataDate - jMinimumDataDate) / 2;
+ jT2DataDate = (jMaximumDataDate - jMinimumDataDate) / 3;
+ jT1DataDate = jMinimumDataDate + jT2DataDate;
+ jT2DataDate += jT1DataDate;
+ bInit = 1;
+ }
+
+ nTableID = getTableFromColumn(nColumnID);
+ nModulo = (int)(kIndex % 6);
+ switch(nModulo)
+ {
+ case 1: /* 1 revision */
+ mk_bkey(arBKeys[nTableID], kIndex, nColumnID);
+ bNewBKey = 1;
+ *pkBeginDateKey = jMinimumDataDate - nTableID * 6;
+ *pkEndDateKey = -1;
+ break;
+ case 2: /* 1 of 2 revisions */
+ mk_bkey(arBKeys[nTableID], kIndex, nColumnID);
+ bNewBKey = 1;
+ *pkBeginDateKey = jMinimumDataDate - nTableID * 6;
+ *pkEndDateKey = jH1DataDate - nTableID * 6;
+ break;
+ case 3: /* 2 of 2 revisions */
+ mk_bkey(arBKeys[nTableID], kIndex - 1, nColumnID);
+ *pkBeginDateKey = jH1DataDate - nTableID * 6 + 1;
+ *pkEndDateKey = -1;
+ break;
+ case 4: /* 1 of 3 revisions */
+ mk_bkey(arBKeys[nTableID], kIndex, nColumnID);
+ bNewBKey = 1;
+ *pkBeginDateKey = jMinimumDataDate - nTableID * 6;
+ *pkEndDateKey = jT1DataDate - nTableID * 6;
+ break;
+ case 5: /* 2 of 3 revisions */
+ mk_bkey(arBKeys[nTableID], kIndex - 1, nColumnID);
+ *pkBeginDateKey = jT1DataDate - nTableID * 6 + 1;
+ *pkEndDateKey = jT2DataDate - nTableID * 6;
+ break;
+ case 0: /* 3 of 3 revisions */
+ mk_bkey(arBKeys[nTableID], kIndex - 2, nColumnID);
+ *pkBeginDateKey = jT2DataDate - nTableID * 6 + 1;
+ *pkEndDateKey = -1;
+ break;
+ }
+
+ /* can't have a revision in the future, per bug 114 */
+ if (*pkEndDateKey > jMaximumDataDate)
+ *pkEndDateKey = -1;
+
+ strcpy(szBKey, arBKeys[nTableID]);
+
+ return(bNewBKey);
+}
+
+/*
+* Routine: scd_join(int tbl, int col, ds_key_t jDate)
+* Purpose: create joins to slowly changing dimensions
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+scd_join(int tbl, int col, ds_key_t jDate)
+{
+ ds_key_t res,
+ kRowcount;
+ static int bInit = 0,
+ jMinimumDataDate,
+ jMaximumDataDate,
+ jH1DataDate,
+ jT1DataDate,
+ jT2DataDate;
+ date_t dtTemp;
+
+ if (!bInit)
+ {
+ strtodt(&dtTemp, DATA_START_DATE);
+ jMinimumDataDate = dtTemp.julian;
+ strtodt(&dtTemp, DATA_END_DATE);
+ jMaximumDataDate = dtTemp.julian;
+ jH1DataDate = jMinimumDataDate + (jMaximumDataDate - jMinimumDataDate) / 2;
+ jT2DataDate = (jMaximumDataDate - jMinimumDataDate) / 3;
+ jT1DataDate = jMinimumDataDate + jT2DataDate;
+ jT2DataDate += jT1DataDate;
+ bInit = 1;
+ }
+
+ kRowcount = getIDCount(tbl);
+ genrand_key(&res, DIST_UNIFORM, 1, kRowcount, 0, col); /* pick the id */
+ res = matchSCDSK(res, jDate, tbl); /* map to the date-sensitive surrogate key */
+
+ /* can't have a revision in the future, per bug 114 */
+ if (jDate > jMaximumDataDate)
+ res = -1;
+
+ return((res > get_rowcount(tbl))?-1:res);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+matchSCDSK(ds_key_t kUnique, ds_key_t jDate, int nTable)
+{
+ ds_key_t kReturn = -1;
+ static int bInit = 0;
+ int jMinimumDataDate,
+ jMaximumDataDate;
+ static int jH1DataDate,
+ jT1DataDate,
+ jT2DataDate;
+ date_t dtTemp;
+
+ if (!bInit)
+ {
+ strtodt(&dtTemp, DATA_START_DATE);
+ jMinimumDataDate = dtTemp.julian;
+ strtodt(&dtTemp, DATA_END_DATE);
+ jMaximumDataDate = dtTemp.julian;
+ jH1DataDate = jMinimumDataDate + (jMaximumDataDate - jMinimumDataDate) / 2;
+ jT2DataDate = (jMaximumDataDate - jMinimumDataDate) / 3;
+ jT1DataDate = jMinimumDataDate + jT2DataDate;
+ jT2DataDate += jT1DataDate;
+ bInit = 1;
+ }
+
+ switch(kUnique % 3) /* number of revisions for the ID */
+ {
+ case 1: /* only one occurrence of this ID */
+ kReturn = (kUnique / 3) * 6;
+ kReturn += 1;
+ break;
+ case 2: /* two revisions of this ID */
+ kReturn = (kUnique / 3) * 6;
+ kReturn += 2;
+ if (jDate > jH1DataDate)
+ kReturn += 1;
+ break;
+ case 0: /* three revisions of this ID */
+ kReturn = (kUnique / 3) * 6;
+ kReturn += - 2;
+ if (jDate > jT1DataDate)
+ kReturn += 1;
+ if (jDate > jT2DataDate)
+ kReturn += 1;
+ break;
+ }
+
+ if (kReturn > get_rowcount(nTable))
+ kReturn = get_rowcount(nTable);
+
+ return(kReturn);
+}
+
+/*
+* Routine:
+* Purpose: map from a unique ID to a random SK
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+getSKFromID(ds_key_t kID, int nColumn)
+{
+ ds_key_t kTemp = -1;
+
+ switch(kID % 3)
+ {
+ case 1: /* single revision */
+ kTemp = kID / 3;
+ kTemp *= 6;
+ kTemp += 1;
+ break;
+ case 2: /* two revisions */
+ kTemp = kID / 3;
+ kTemp *= 6;
+ kTemp += genrand_integer(NULL, DIST_UNIFORM, 2, 3, 0, nColumn);
+ break;
+ case 0: /* three revisions */
+ kTemp = kID / 3;
+ kTemp -= 1;
+ kTemp *= 6;
+ kTemp += genrand_integer(NULL, DIST_UNIFORM, 4, 6, 0, nColumn);
+ break;
+ }
+
+ return(kTemp);
+}
+
+/*
+* Routine: getFirstSK
+* Purpose: map from id to an SK that can be mapped back to an id by printID()
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+getFirstSK(ds_key_t kID)
+{
+ ds_key_t kTemp = -1;
+
+ switch(kID % 3)
+ {
+ case 1: /* single revision */
+ kTemp = kID / 3;
+ kTemp *= 6;
+ kTemp += 1;
+ break;
+ case 2: /* two revisions */
+ kTemp = kID / 3;
+ kTemp *= 6;
+ kTemp += 2;
+ break;
+ case 0: /* three revisions */
+ kTemp = kID / 3;
+ kTemp -= 1;
+ kTemp *= 6;
+ kTemp += 4;
+ break;
+ }
+
+ return(kTemp);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+void
+changeSCD(int nDataType, void *pNewData, void *pOldData, int *nFlags, int bFirst)
+{
+
+ /**
+ * if nFlags is odd, then this value will be retained
+ */
+ if ((*nFlags != ((*nFlags / 2) * 2)) && (bFirst == 0))
+ {
+
+ /*
+ * the method to retain the old value depends on the data type
+ */
+ switch(nDataType)
+ {
+ case SCD_INT:
+ *(int *)pNewData = *(int *)pOldData;
+ break;
+ case SCD_PTR:
+ pNewData = pOldData;
+ break;
+ case SCD_KEY:
+ *(ds_key_t *)pNewData = *(ds_key_t *)pOldData;
+ break;
+ case SCD_CHAR:
+ strcpy((char *)pNewData, (char *)pOldData);
+ break;
+ case SCD_DEC:
+ memcpy(pNewData, pOldData, sizeof(decimal_t));
+ break;
+ }
+ }
+ else {
+
+ /*
+ * the method to set the old value depends on the data type
+ */
+ switch(nDataType)
+ {
+ case SCD_INT:
+ *(int *)pOldData = *(int *)pNewData;
+ break;
+ case SCD_PTR:
+ pOldData = pNewData;
+ break;
+ case SCD_KEY:
+ *(ds_key_t *)pOldData = *(ds_key_t *)pNewData;
+ break;
+ case SCD_CHAR:
+ strcpy((char *)pOldData, (char *)pNewData);
+ break;
+ case SCD_DEC:
+ memcpy(pOldData, pNewData, sizeof(decimal_t));
+ break;
+ }
+ }
+
+ *nFlags /= 2;
+
+
+ return;
+}
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/scd.h b/ydb/library/benchmarks/gen/tpcds-dbgen/scd.h
new file mode 100644
index 000000000000..77f3e003edaa
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/scd.h
@@ -0,0 +1,58 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef SCD_H
+#define SCD_H
+#include "decimal.h"
+
+extern char arBKeys[MAX_TABLE][17];
+int setSCDKeys(int nTableID, ds_key_t hgIndex, char *szBKey, ds_key_t *hgBeginDateKey, ds_key_t *hgEndDateKey);
+ds_key_t scd_join(int tbl, int col, ds_key_t jDate);
+ds_key_t matchSCDSK(ds_key_t kUnique, ds_key_t jDate, int nTable);
+ds_key_t getSKFromID(ds_key_t kID, int nColumn);
+ds_key_t getFirstSK(ds_key_t kID);
+/*
+ * handle the partial change of a history keeping record
+ * TODO: remove the macros in favor of straight fucntion calls
+ */
+#define SCD_INT 0
+#define SCD_CHAR 1
+#define SCD_DEC 2
+#define SCD_KEY 3
+#define SCD_PTR 4
+void changeSCD(int nDataType, void *pNewData, void *pOldData, int *nFlags, int bFirst);
+int validateSCD(int nTable, ds_key_t kRow, int *Permutation);
+void printValidation(int nTable, ds_key_t kRow);
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/source_schema.wam b/ydb/library/benchmarks/gen/tpcds-dbgen/source_schema.wam
new file mode 100644
index 000000000000..da5a8665e913
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/source_schema.wam
@@ -0,0 +1,24537 @@
+/BEGIN_TABLE AMCHEAD
+NAME A30
+VERS A8
+USER A30
+/BEGIN_DATA AMCHEAD
+PowerDesigner/WAM
+6.1.3
+
+/END_TABLE AMCHEAD
+
+/BEGIN_TABLE AMCMODL
+@ N5
+OID N10
+MODL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+EXOP TXT
+DBMS A256
+FILE A256
+HEAD TXT
+FOOT TXT
+POID N10
+PNAM A80
+PCOD A80
+USER A80
+VERS A8
+CDAT N12
+MDAT N12
+EDAT N12
+PART N1
+ACCS N5
+CUST TXT
+/BEGIN_DATA AMCMODL
+3
+1
+1
+TPCDS_SOURCE
+TPCDS_SOURCE
+
+
+
+
+
+ANSI Level 2
+ansi2.def
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+940354999
+1170956293
+0
+0
+0
+
+/END_TABLE AMCMODL
+
+/BEGIN_TABLE AMCDOMN
+@ N5
+OID N10
+DOMN N10
+NAME A80
+CODE A80
+DESC TXT
+NOTE TXT
+LABL A254
+DTTP A30
+MLEN N8
+PREC N2
+IDNT N1
+WDEF N1
+MAND N1
+UNIT A8
+FRMT A20
+LVAL A20
+HVAL A20
+DVAL A30
+UPPR N1
+LOWR N1
+NMDF N1
+VALS TXT
+CRUL TXT
+GRUL TXT
+SOID N10
+ATYP N10
+PROF N10
+ROPR N1
+/BEGIN_DATA AMCDOMN
+/END_TABLE AMCDOMN
+
+/BEGIN_TABLE AMCTABL
+@ N5
+OID N10
+TABL N10
+MODL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+NBRC N24,0
+SOID N10
+TOBJ N5
+COBJ A80
+OPTS TXT
+PKOP TXT
+CRUL TXT
+SRUL TXT
+PKCN A30
+CKCN A30
+HEAD TXT
+FOOT TXT
+NGEN N1
+OWNR N10
+ATYP N10
+TSTD N8
+ROPR N1
+/BEGIN_DATA AMCTABL
+3
+17414
+17414
+1
+S_STORE
+STOR
+
+
+
+0
+0
+0
+STO
+
+
+
+
+
+
+
+
+0
+0
+0
+0
+0
+3
+17456
+17456
+1
+S_CUSTOMER_ADDRESS
+CADR
+
+
+
+0
+0
+0
+BADR
+
+
+
+
+
+
+
+
+0
+0
+0
+0
+0
+3
+17488
+17488
+1
+S_ITEM
+ITEM
+
+
+
+0
+0
+0
+ITM
+
+
+
+
+PK_ITEM
+
+
+
+0
+0
+0
+0
+0
+3
+17545
+17545
+1
+S_CUSTOMER
+CUST
+
+
+
+0
+0
+0
+CSTM
+
+
+
+
+PK_CUST
+
+
+
+0
+0
+0
+0
+0
+3
+17573
+17573
+1
+S_PROMOTION
+PROM
+
+
+
+0
+0
+0
+PRM
+
+
+
+
+PK_PROM
+
+
+
+0
+0
+0
+0
+0
+3
+18790
+18790
+1
+S_PURCHASE
+PURC
+PURCHASE
+
+
+0
+0
+0
+PRS
+
+
+
+
+PK_PURC
+
+
+
+0
+0
+0
+0
+0
+3
+18805
+18805
+1
+S_PURCHASE_LINEITEM
+PLIN
+
+
+
+0
+0
+0
+LNT
+
+
+
+
+PK_PLIN
+
+
+
+0
+0
+0
+0
+0
+3
+20062
+20062
+1
+S_STORE_RETURNS
+SRET
+
+
+
+0
+0
+0
+SRT
+
+
+
+
+PK_SRET
+
+
+
+0
+0
+0
+0
+0
+3
+21970
+21970
+1
+S_CALL_CENTER
+CALL
+CALL
+
+
+0
+0
+0
+CALL
+
+
+
+
+PK_CALL
+
+
+
+0
+0
+0
+0
+0
+3
+21971
+21971
+1
+S_CATALOG_ORDER
+CORD
+CORD
+
+
+0
+0
+0
+CORD
+
+
+
+
+PK_CORD
+
+
+
+0
+0
+0
+0
+0
+3
+21998
+21998
+1
+S_CATALOG_ORDER_LINEITEM
+CLIN
+CLIN
+
+
+0
+0
+0
+CLIN
+
+
+
+
+PK_CLIN
+
+
+
+0
+0
+0
+0
+0
+3
+21999
+21999
+1
+S_WEB_ORDER
+WORD
+WORD
+
+
+0
+0
+0
+WORD
+
+
+
+
+PK_WORD
+
+
+
+0
+0
+0
+0
+0
+3
+22000
+22000
+1
+S_WEB_ORDER_LINEITEM
+WLIN
+WLIN
+
+
+0
+0
+0
+WLIN
+
+
+
+
+PK_WLIN
+
+
+
+0
+0
+0
+0
+0
+3
+22361
+22361
+1
+S_CATALOG_PAGE
+CPAG
+CPAG
+
+
+0
+0
+0
+CATP
+
+
+
+
+PK_CPAG
+
+
+
+0
+0
+0
+0
+0
+3
+22776
+22776
+1
+S_WEB_SITE
+WSIT
+WSIT
+
+
+0
+0
+0
+WSIT
+
+
+
+
+PK_WSIT
+
+
+
+0
+0
+0
+0
+0
+3
+22777
+22777
+1
+S_WEB_PAGE
+WPAG
+WPAG
+
+
+0
+0
+0
+WPAG
+
+
+
+
+PK_WPAG
+
+
+
+0
+0
+0
+0
+0
+3
+22850
+22850
+1
+S_CATALOG_RETURNS
+CRET
+CRET
+
+
+0
+0
+0
+CRET
+
+
+
+
+PK_CRET
+
+
+
+0
+0
+0
+0
+0
+3
+24139
+24139
+1
+S_WEB_RETURNS
+WRET
+WRET
+
+
+0
+0
+0
+WRET
+
+
+
+
+PK_WRET
+
+
+
+0
+0
+0
+0
+0
+3
+24959
+24959
+1
+S_WAREHOUSE
+WRHS
+WRHS
+
+
+0
+0
+0
+WRHS
+
+
+
+
+PK_WRHS
+
+
+
+0
+0
+0
+0
+0
+3
+24960
+24960
+1
+S_INVENTORY
+INVN
+INVN
+
+
+0
+0
+0
+INVN
+
+
+
+
+PK_INVN
+
+
+
+0
+0
+0
+0
+0
+3
+27330
+27330
+1
+S_ZIP_TO_GMT
+ZIPG
+ZIPG
+
+
+0
+0
+0
+ZIPG
+
+
+
+
+
+
+
+
+0
+0
+0
+0
+0
+/END_TABLE AMCTABL
+
+/BEGIN_TABLE AMCCOLN
+@ N5
+OID N10
+COLN N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TABL N10
+DOMN N10
+DTTP A30
+MLEN N8
+PREC N2
+IDNT N1
+WDEF N1
+UNIT A8
+FRMT A20
+LVAL A20
+HVAL A20
+DVAL A30
+UPPR N1
+LOWR N1
+NMDF N1
+VALS TXT
+CRUL TXT
+GRUL TXT
+PRIM N1
+FORN N1
+MAND N1
+DISP N1
+SOID N10
+TOBJ N5
+COBJ A80
+CKCN A30
+NUMR N8
+PROF N10
+REDU N8
+NULV N5
+AVLN N8
+ATYP N10
+ROPR N1
+/BEGIN_DATA AMCCOLN
+3
+17443
+17443
+STOR_STORE_ID
+STOR_STORE_ID
+
+
+
+17414
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+S_STORE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+17446
+17446
+STOR_CLOSED_DATE
+STOR_CLOSED_DATE
+
+
+
+17414
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_CLOSED_DATE
+
+2
+0
+-100
+0
+0
+0
+0
+3
+17447
+17447
+STOR_NAME
+STOR_NAME
+
+
+
+17414
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_NAME
+
+3
+0
+-100
+0
+0
+0
+0
+3
+17449
+17449
+STOR_EMPLOYEES
+STOR_EMPLOYEES
+
+
+
+17414
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_EMPLOYEES
+
+4
+0
+-100
+0
+0
+0
+0
+3
+17450
+17450
+STOR_FLOOR_SPACE
+STOR_FLOOR_SPACE
+
+
+
+17414
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_FLOOR_SPACE
+
+5
+0
+-100
+0
+0
+0
+0
+3
+17451
+17451
+STOR_HOURS
+STOR_HOURS
+
+
+
+17414
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_HOURS
+
+6
+0
+-100
+0
+0
+0
+0
+3
+17454
+17454
+STOR_STORE_MANAGER
+STOR_STORE_MANAGER
+
+
+
+17414
+0
+CHAR(40)
+40
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_
+
+7
+0
+-100
+0
+0
+0
+0
+3
+30183
+30183
+STOR_MARKET_ID
+STOR_MARKET_ID
+
+
+
+17414
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+STOR_MARKET_ID
+
+8
+0
+-100
+0
+0
+0
+0
+3
+28065
+28065
+STOR_GEOGRAPHY_CLASS
+STOR_GEOGRAPHY_CLASS
+
+
+
+17414
+0
+CHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+STOR_GEOGRAPHY_CLASS
+
+9
+0
+-100
+0
+0
+0
+0
+3
+17452
+17452
+STOR_MARKET_MANAGER
+STOR_MARKET_MANAGER
+
+
+
+17414
+0
+CHAR(40)
+40
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+S_MARKET_MANAGER
+
+10
+0
+-100
+0
+0
+0
+0
+3
+30198
+30198
+STOR_TAX_PERCENTAGE
+STOR_TAX_PERCENTAGE
+
+
+
+17414
+0
+NUMERIC(5,2)
+5
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+STOR_TAX_PERCENTAGE
+
+11
+0
+-100
+0
+0
+0
+0
+3
+17459
+17459
+CADR_ADDRESS_ID
+CADR_ADDRESS_ID
+
+
+
+17456
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+A_ADDRESS_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+28591
+28591
+CADR_STREET_NUMBER
+CADR_STREET_NUMBER
+
+
+
+17456
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_STREET_NUMBER
+
+2
+0
+-100
+0
+0
+0
+0
+3
+17462
+17462
+CADR_STREET_NAME1
+CADR_STREET_NAME1
+
+
+
+17456
+0
+CHAR(25)
+25
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+A_STREET_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+20134
+20134
+CADR_STREET_NAME2
+CADR_STREET_NAME2
+
+
+
+17456
+0
+CHAR(25)
+25
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_STREET_NAME2
+
+4
+0
+-100
+0
+0
+0
+0
+3
+20118
+20118
+CADR_STREET_TYPE
+CADR_STREET_TYPE
+
+
+
+17456
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_STREET_TYPE
+
+5
+0
+-100
+0
+0
+0
+0
+3
+17461
+17461
+CADR_SUITNUMBER
+CADR_SUITNUMBER
+
+
+
+17456
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+A_SUITNUMBER
+
+6
+0
+-100
+0
+0
+0
+0
+3
+20119
+20119
+CADR_CITY
+CADR_CITY
+
+
+
+17456
+0
+CHAR(60)
+60
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_CITY
+
+7
+0
+-100
+0
+0
+0
+0
+3
+20120
+20120
+CADR_COUNTY
+CADR_COUNTY
+
+
+
+17456
+0
+CHAR(30)
+30
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_COUNTY
+
+8
+0
+-100
+0
+0
+0
+0
+3
+20121
+20121
+CADR_STATE
+CADR_STATE
+
+
+
+17456
+0
+CHAR(2)
+2
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_STATE
+
+9
+0
+-100
+0
+0
+0
+0
+3
+30200
+30200
+CADR_ZIP
+CADR_ZIP
+
+
+
+17456
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CADR_ZIP
+
+10
+0
+-100
+0
+0
+0
+0
+3
+20128
+20128
+CADR_COUNTRY
+CADR_COUNTRY
+
+
+
+17456
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+BADR_COUNTRY
+
+11
+0
+-100
+0
+0
+0
+0
+3
+17489
+17489
+ITEM_ITEM_ID
+ITEM_ITEM_ID
+
+
+
+17488
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+ITM_ITEM_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+17490
+17490
+ITEM_ITEM_DESCRIPTION
+ITEM_ITEM_DESCRIPTION
+
+
+
+17488
+0
+CHAR(200)
+200
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_ITEM_DESCRIPTION
+
+2
+0
+-100
+0
+0
+0
+0
+3
+17492
+17492
+ITEM_LIST_PRICE
+ITEM_LIST_PRICE
+
+
+
+17488
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_CURRENT_PRICE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+28595
+28595
+ITEM_WHOLESALE_COST
+ITEM_WHOLESALE_COST
+
+
+
+17488
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITEM_WHOLESALE_COST
+
+4
+0
+-100
+0
+0
+0
+0
+3
+17500
+17500
+ITEM_SIZE
+ITEM_SIZE
+
+
+
+17488
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_SIZE
+
+5
+0
+-100
+0
+0
+0
+0
+3
+17501
+17501
+ITEM_FORMULATION
+ITEM_FORMULATION
+
+
+
+17488
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_FORMULATION
+
+6
+0
+-100
+0
+0
+0
+0
+3
+17502
+17502
+ITEM_COLOR
+ITEM_COLOR
+
+
+
+17488
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_FLAVOR
+
+7
+0
+-100
+0
+0
+0
+0
+3
+17503
+17503
+ITEM_UNITS
+ITEM_UNITS
+
+
+
+17488
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_UNITS
+
+8
+0
+-100
+0
+0
+0
+0
+3
+17504
+17504
+ITEM_CONTAINER
+ITEM_CONTAINER
+
+
+
+17488
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITM_CONTAINER
+
+9
+0
+-100
+0
+0
+0
+0
+3
+30199
+30199
+ITEM_MANAGER_ID
+ITEM_MANAGER_ID
+
+
+
+17488
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+ITEM_MANAGER_ID
+
+10
+0
+-100
+0
+0
+0
+0
+3
+17546
+17546
+CUST_CUSTOMER_ID
+CUST_CUSTOMER_ID
+
+
+
+17545
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CSTM_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+21397
+21397
+CUST_SALUTATION
+CUST_SALUTATION
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_SALUTATION
+
+2
+0
+-100
+0
+0
+0
+0
+3
+17549
+17549
+CUST_LAST_NAME
+CUST_LAST_NAME
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_LAST_NAME
+
+3
+0
+-100
+0
+0
+0
+0
+3
+17550
+17550
+CUST_FIRST_NAME
+CUST_FIRST_NAME
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_FIRST_NAME
+
+4
+0
+-100
+0
+0
+0
+0
+3
+17551
+17551
+CUST_PREFFERED_FLAG
+CUST_PREFFERED_FLAG
+
+
+
+17545
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_PREFFERED
+
+5
+0
+-100
+0
+0
+0
+0
+3
+17552
+17552
+CUST_BIRTH_DATE
+CUST_BIRTH_DATE
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+C_BIRTHDAY
+
+6
+0
+-100
+0
+0
+0
+0
+3
+17554
+17554
+CUST_BIRTH_COUNTRY
+CUST_BIRTH_COUNTRY
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_BIRTH_COUNTRY
+
+7
+0
+-100
+0
+0
+0
+0
+3
+26044
+26044
+CUST_LOGIN_ID
+CUST_LOGIN_ID
+
+
+
+17545
+0
+CHAR(13)
+13
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_LOGIN_ID
+
+8
+0
+-100
+0
+0
+0
+0
+3
+17555
+17555
+CUST_EMAIL_ADDRESS
+CUST_EMAIL_ADDRESS
+
+
+
+17545
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_EMAIL
+
+9
+0
+-100
+0
+0
+0
+0
+3
+20130
+20130
+CUST_LAST_LOGIN_CHG_DATE
+CUST_LAST_LOGIN_CHG_DATE
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_FIRST_ORDER_DATE
+
+10
+0
+-100
+0
+0
+0
+0
+3
+28593
+28593
+CUST_FIRST_SHIPTO_DATE
+CUST_FIRST_SHIPTO_DATE
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_FIRST_SHIPTO_DATE
+
+11
+0
+-100
+0
+0
+0
+0
+3
+28592
+28592
+CUST_FIRST_PURCHASE_DATE
+CUST_FIRST_PURCHASE_DATE
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_FIRST_PURCHASE_DATE
+
+12
+0
+-100
+0
+0
+0
+0
+3
+20131
+20131
+CUST_LAST_REVIEW_DATE
+CUST_LAST_REVIEW_DATE
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CSTM_LAST_REVIEW_DATE
+
+13
+0
+-100
+0
+0
+0
+0
+3
+26046
+26046
+CUST_PRIMARY_MACHINE_ID
+CUST_PRIMARY_MACHINE_ID
+
+
+
+17545
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_PRIMARY_MACHINE_ID
+
+14
+0
+-100
+0
+0
+0
+0
+3
+26047
+26047
+CUST_SECONDARY_MACHINE_ID
+CUST_SECONDARY_MACHINE_ID
+
+
+
+17545
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_SECONDARY_MACHINE_ID
+
+15
+0
+-100
+0
+0
+0
+0
+3
+26858
+26858
+CUST_STREET_NUMBER
+CUST_STREET_NUMBER
+
+
+
+17545
+0
+SMALLINT
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_STREET_NUMBER
+
+16
+0
+-100
+0
+0
+0
+0
+3
+26859
+26859
+CUST_SUITE_NUMBER
+CUST_SUITE_NUMBER
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_SUITE_NUMBER
+
+17
+0
+-100
+0
+0
+0
+0
+3
+26860
+26860
+CUST_STREET_NAME1
+CUST_STREET_NAME1
+
+
+
+17545
+0
+CHAR(30)
+30
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_STREET_NAME1
+
+18
+0
+-100
+0
+0
+0
+0
+3
+26861
+26861
+CUST_STREET_NAME2
+CUST_STREET_NAME2
+
+
+
+17545
+0
+CHAR(30)
+30
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_STREET_NAME2
+
+19
+0
+-100
+0
+0
+0
+0
+3
+26862
+26862
+CUST_STREET_TYPE
+CUST_STREET_TYPE
+
+
+
+17545
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_STREET_TYPE
+
+20
+0
+-100
+0
+0
+0
+0
+3
+26863
+26863
+CUST_CITY
+CUST_CITY
+
+
+
+17545
+0
+CHAR(60)
+60
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_CITY
+
+21
+0
+-100
+0
+0
+0
+0
+3
+26864
+26864
+CUST_ZIP
+CUST_ZIP
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CUST_ZIP
+
+22
+0
+-100
+0
+0
+0
+0
+3
+26865
+26865
+CUST_COUNTY
+CUST_COUNTY
+
+
+
+17545
+0
+CHAR(30)
+30
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_COUNTY
+
+23
+0
+-100
+0
+0
+0
+0
+3
+26866
+26866
+CUST_STATE
+CUST_STATE
+
+
+
+17545
+0
+CHAR(2)
+2
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_STATE
+
+24
+0
+-100
+0
+0
+0
+0
+3
+26867
+26867
+CUST_COUNTRY
+CUST_COUNTRY
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_COUNTRY
+
+25
+0
+-100
+0
+0
+0
+0
+3
+26868
+26868
+CUST_LOC_TYPE
+CUST_LOC_TYPE
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_LOC_TYPE
+
+26
+0
+-100
+0
+0
+0
+0
+3
+26872
+26872
+CUST_GENDER
+CUST_GENDER
+
+
+
+17545
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_GENDER_CODE
+
+27
+0
+-100
+0
+0
+0
+0
+3
+26873
+26873
+CUST_MARITAL_STATUS
+CUST_MARITAL_STATUS
+
+
+
+17545
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_MARITAL_STATUS
+
+28
+0
+-100
+0
+0
+0
+0
+3
+26876
+26876
+CUST_EDUC_STATUS
+CUST_EDUC_STATUS
+
+
+
+17545
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_EDUC_STATUS
+
+29
+0
+-100
+0
+0
+0
+0
+3
+26874
+26874
+CUST_CREDIT_RATING
+CUST_CREDIT_RATING
+
+
+
+17545
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_CREDIT_RATING
+
+30
+0
+-100
+0
+0
+0
+0
+3
+26875
+26875
+CUST_PURCH_EST
+CUST_PURCH_EST
+
+
+
+17545
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_PURCH_EST
+
+31
+0
+-100
+0
+0
+0
+0
+3
+26877
+26877
+CUST_BUY_POTENTIAL
+CUST_BUY_POTENTIAL
+
+
+
+17545
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_BUY_POTENTIAL
+
+32
+0
+-100
+0
+0
+0
+0
+3
+26878
+26878
+CUST_DEPEND_CNT
+CUST_DEPEND_CNT
+
+
+
+17545
+0
+SMALLINT
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_DEPEND_CNT
+
+33
+0
+-100
+0
+0
+0
+0
+3
+26879
+26879
+CUST_DEPEND_EMP_CNT
+CUST_DEPEND_EMP_CNT
+
+
+
+17545
+0
+SMALLINT
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_DEPEND_EMP_CNT
+
+34
+0
+-100
+0
+0
+0
+0
+3
+26880
+26880
+CUST_DEPEND_COLLEGE_CNT
+CUST_DEPEND_COLLEGE_CNT
+
+
+
+17545
+0
+SMALLINT
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_DEPEND_COLLEGE_CNT
+
+35
+0
+-100
+0
+0
+0
+0
+3
+26881
+26881
+CUST_VEHICLE_CNT
+CUST_VEHICLE_CNT
+
+
+
+17545
+0
+SMALLINT
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_VEHICLE_CNT
+
+36
+0
+-100
+0
+0
+0
+0
+3
+27329
+27329
+CUST_ANNUAL_INCOME
+CUST_ANNUAL_INCOME
+
+
+
+17545
+0
+NUMERIC(9,2)
+9
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CUST_ANNUAL_INCOME
+
+37
+0
+-100
+0
+0
+0
+0
+3
+17574
+17574
+PROM_PROMOTION_ID
+PROM_PROMOTION_ID
+
+
+
+17573
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+PRM_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+21415
+21415
+PROM_PROMOTION_NAME
+PROM_PROMOTION_NAME
+
+
+
+17573
+0
+CHAR(30)
+30
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_PROMOTION_NAME
+
+2
+0
+-100
+0
+0
+0
+0
+3
+17575
+17575
+PROM_START_DATE
+PROM_START_DATE
+
+
+
+17573
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_START_DATE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+17576
+17576
+PROM_END_DATE
+PROM_END_DATE
+
+
+
+17573
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_END_DATE
+
+4
+0
+-100
+0
+0
+0
+0
+3
+17577
+17577
+PROM_COST
+PROM_COST
+
+
+
+17573
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_COST
+
+5
+0
+-100
+0
+0
+0
+0
+3
+17578
+17578
+PROM_RESPONSE_TARGET
+PROM_RESPONSE_TARGET
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_RESPONSE_TARGET
+
+6
+0
+-100
+0
+0
+0
+0
+3
+17580
+17580
+PROM_CHANNEL_DMAIL
+PROM_CHANNEL_DMAIL
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_CHANNEL_DMAIL
+
+7
+0
+-100
+0
+0
+0
+0
+3
+17581
+17581
+PROM_CHANNEL_EMAIL
+PROM_CHANNEL_EMAIL
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_CHANNEL_EMAIL
+
+8
+0
+-100
+0
+0
+0
+0
+3
+17582
+17582
+PROM_CHANNEL_CATALOG
+PROM_CHANNEL_CATALOG
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRM_CHANNEL_CATALOG
+
+9
+0
+-100
+0
+0
+0
+0
+3
+26839
+26839
+PROM_CHANNEL_TV
+PROM_CHANNEL_TV
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_TV
+
+10
+0
+-100
+0
+0
+0
+0
+3
+26840
+26840
+PROM_CHANNEL_RADIO
+PROM_CHANNEL_RADIO
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_RADIO
+
+11
+0
+-100
+0
+0
+0
+0
+3
+26842
+26842
+PROM_CHANNEL_PRESS
+PROM_CHANNEL_PRESS
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_PRESS
+
+12
+0
+-100
+0
+0
+0
+0
+3
+26843
+26843
+PROM_CHANNEL_EVENT
+PROM_CHANNEL_EVENT
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_EVENT
+
+13
+0
+-100
+0
+0
+0
+0
+3
+26844
+26844
+PROM_CHANNEL_DEMO
+PROM_CHANNEL_DEMO
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_DEMO
+
+14
+0
+-100
+0
+0
+0
+0
+3
+26845
+26845
+PROM_CHANNEL_DETAILS
+PROM_CHANNEL_DETAILS
+
+
+
+17573
+0
+CHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_CHANNEL_DETAILS
+
+15
+0
+-100
+0
+0
+0
+0
+3
+26846
+26846
+PROM_PURPOSE
+PROM_PURPOSE
+
+
+
+17573
+0
+CHAR(15)
+15
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_PURPOSE
+
+16
+0
+-100
+0
+0
+0
+0
+3
+26847
+26847
+PROM_DISCOUNT_ACTIVE
+PROM_DISCOUNT_ACTIVE
+
+
+
+17573
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_DISCOUNT_ACTIVE
+
+17
+0
+-100
+0
+0
+0
+0
+3
+26848
+26848
+PROM_DISCOUNT_PCT
+PROM_DISCOUNT_PCT
+
+
+
+17573
+0
+NUMERIC(5,2)
+5
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PROM_DISCOUNT_PCT
+
+18
+0
+-100
+0
+0
+0
+0
+3
+18791
+18791
+PURC_PURCHASE_ID
+PURC_PURCHASE_ID
+
+
+
+18790
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+PRS_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+18845
+18845
+PURC_STORE_ID
+PURC_STORE_ID
+
+
+
+18790
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+S_STORE_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+18792
+18792
+PURC_CUSTOMER_ID
+PURC_CUSTOMER_ID
+
+
+
+18790
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+PRS_CUSTOMER_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+18793
+18793
+PURC_PURCHASE_DATE
+PURC_PURCHASE_DATE
+
+
+
+18790
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRS_PURCHASE_DATE
+
+4
+0
+-100
+0
+0
+0
+0
+3
+28594
+28594
+PURC_PURCHASE_TIME
+PURC_PURCHASE_TIME
+
+
+
+18790
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PURC_PURCHASE_TIME
+
+5
+0
+-100
+0
+0
+0
+0
+3
+18794
+18794
+PURC_REGISTER_ID
+PURC_REGISTER_ID
+
+
+
+18790
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRS_REGISTER
+
+6
+0
+-100
+0
+0
+0
+0
+3
+18795
+18795
+PURC_CLERK_ID
+PURC_CLERK_ID
+
+
+
+18790
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRS_CLERK
+
+7
+0
+-100
+0
+0
+0
+0
+3
+18796
+18796
+PURC_COMMENT
+PURC_COMMENT
+
+
+
+18790
+0
+CHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PRS_COMMENT
+
+8
+0
+-100
+0
+0
+0
+0
+3
+18806
+18806
+PLIN_PURCHASE_ID
+PLIN_PURCHASE_ID
+
+
+
+18805
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+1
+1
+1
+0
+0
+LNT_PURCHASE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+18807
+18807
+PLIN_LINE_NUMBER
+PLIN_LINE_NUMBER
+
+
+
+18805
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+LNT_ITEM_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+21409
+21409
+PLIN_ITEM_ID
+PLIN_ITEM_ID
+
+
+
+18805
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+PLIN_ITEM_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+29859
+29859
+PLIN_PROMOTION_ID
+PLIN_PROMOTION_ID
+
+
+
+18805
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+PLIN_PROMOTION_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+18808
+18808
+PLIN_QUANTITY
+PLIN_QUANTITY
+
+
+
+18805
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+LNT_QUANTITY
+
+5
+0
+-100
+0
+0
+0
+0
+3
+28596
+28596
+PLIN_SALE_PRICE
+PLIN_SALE_PRICE
+
+
+
+18805
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PLIN_SALE_PRICE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+23283
+23283
+PLIN_COUPON_AMT
+PLIN_COUPON_AMT
+
+
+
+18805
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+PLIN_COUPON_AMT
+
+7
+0
+-100
+0
+0
+0
+0
+3
+18810
+18810
+PLIN_COMMENT
+PLIN_COMMENT
+
+
+
+18805
+0
+VARCHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+LNT_COMMENT
+
+8
+0
+-100
+0
+0
+0
+0
+3
+20072
+20072
+SRET_STORE_ID
+SRET_STORE_ID
+
+
+
+20062
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+S_STORE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+20076
+20076
+SRET_PURCHASE_ID
+SRET_PURCHASE_ID
+
+
+
+20062
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+LNT_PURCHASE_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+20079
+20079
+SRET_LINE_NUMBER
+SRET_LINE_NUMBER
+
+
+
+20062
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+LNT_ITEM_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+21972
+21972
+SRET_ITEM_ID
+SRET_ITEM_ID
+
+
+
+20062
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+1
+1
+0
+0
+SRET_ITEM_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+20083
+20083
+SRET_CUSTOMER_ID
+SRET_CUSTOMER_ID
+
+
+
+20062
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CSTM_ID
+
+5
+0
+-100
+0
+0
+0
+0
+3
+20086
+20086
+SRET_RETURN_DATE
+SRET_RETURN_DATE
+
+
+
+20062
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_DATE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+29863
+29863
+SRET_RETURN_TIME
+SRET_RETURN_TIME
+
+
+
+20062
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRET_RETURN_TIME
+
+7
+0
+-100
+0
+0
+0
+0
+3
+20088
+20088
+SRET_TICKET_NUMBER
+SRET_TICKET_NUMBER
+
+
+
+20062
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_TICKET_NUMBER
+
+8
+0
+-100
+0
+0
+0
+0
+3
+21973
+21973
+SRET_RETURN_QTY
+SRET_RETURN_QTY
+
+
+
+20062
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRET_RETURN_QTY
+
+9
+0
+-100
+0
+0
+0
+0
+3
+20090
+20090
+SRET_RETURN_AMT
+SRET_RETURN_AMT
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_RETURN_AMT
+
+10
+0
+-100
+0
+0
+0
+0
+3
+20091
+20091
+SRET_RETURN_TAX
+SRET_RETURN_TAX
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_RETURN_TAX
+
+11
+0
+-100
+0
+0
+0
+0
+3
+20092
+20092
+SRET_RETURN_FEE
+SRET_RETURN_FEE
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_FEE
+
+12
+0
+-100
+0
+0
+0
+0
+3
+20093
+20093
+SRET_RETURN_SHIP_COST
+SRET_RETURN_SHIP_COST
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_RETURN_SHIP_COST
+
+13
+0
+-100
+0
+0
+0
+0
+3
+20094
+20094
+SRET_REFUNDED_CASH
+SRET_REFUNDED_CASH
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_REFUNDED_CASH
+
+14
+0
+-100
+0
+0
+0
+0
+3
+20095
+20095
+SRET_REVERSED_CHARGE
+SRET_REVERSED_CHARGE
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRT_REVERSED_CHARGE
+
+15
+0
+-100
+0
+0
+0
+0
+3
+21974
+21974
+SRET_STORE_CREDIT
+SRET_STORE_CREDIT
+
+
+
+20062
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRET_STORE_CREDIT
+
+16
+0
+-100
+0
+0
+0
+0
+3
+30777
+30777
+SRET_REASON_ID
+SRET_REASON_ID
+
+
+
+20062
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+SRET_REASON_ID
+
+17
+0
+-100
+0
+0
+0
+0
+3
+21983
+21983
+CALL_CENTER_ID
+CALL_CENTER_ID
+
+
+
+21970
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CALL_CENTER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22393
+22393
+CALL_OPEN_DATE
+CALL_OPEN_DATE
+
+
+
+21970
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_OPEN_DATE
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22394
+22394
+CALL_CLOSED_DATE
+CALL_CLOSED_DATE
+
+
+
+21970
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CLOSED_DATE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+22395
+22395
+CALL_CENTER_NAME
+CALL_CENTER_NAME
+
+
+
+21970
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_NAME
+
+4
+0
+-100
+0
+0
+0
+0
+3
+22396
+22396
+CALL_CENTER_CLASS
+CALL_CENTER_CLASS
+
+
+
+21970
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_CLASS
+
+5
+0
+-100
+0
+0
+0
+0
+3
+22404
+22404
+CALL_CENTER_EMPLOYEES
+CALL_CENTER_EMPLOYEES
+
+
+
+21970
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_EMPLOYEES
+
+6
+0
+-100
+0
+0
+0
+0
+3
+22411
+22411
+CALL_CENTER_SQ_FT
+CALL_CENTER_SQ_FT
+
+
+
+21970
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_SQ_FT
+
+7
+0
+-100
+0
+0
+0
+0
+3
+22413
+22413
+CALL_CENTER_HOURS
+CALL_CENTER_HOURS
+
+
+
+21970
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_HOURS
+
+8
+0
+-100
+0
+0
+0
+0
+3
+22414
+22414
+CALL_CENTER_MANAGER
+CALL_CENTER_MANAGER
+
+
+
+21970
+0
+CHAR(40)
+40
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_MANAGER
+
+9
+0
+-100
+0
+0
+0
+0
+3
+30182
+30182
+CALL_CENTER_TAX_PERCENTAGE
+CALL_CENTER_TAX_PERCENTAGE
+
+
+
+21970
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CALL_CENTER_TAX_PERCENTAGE
+
+10
+0
+-100
+0
+0
+0
+0
+3
+21994
+21994
+CORD_ORDER_ID
+CORD_ORDER_ID
+
+
+
+21971
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CORD_ORDER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+21995
+21995
+CORD_BILL_CUSTOMER_ID
+CORD_BILL_CUSTOMER_ID
+
+
+
+21971
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CORD_BILL_CUSTOMER_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+21996
+21996
+CORD_SHIP_CUSTOMER_ID
+CORD_SHIP_CUSTOMER_ID
+
+
+
+21971
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CORD_SHIP_CUSTOMER_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+21997
+21997
+CORD_ORDER_DATE
+CORD_ORDER_DATE
+
+
+
+21971
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CORD_ORDER_DATE
+
+4
+0
+-100
+0
+0
+0
+0
+3
+29486
+29486
+CORD_ORDER_TIME
+CORD_ORDER_TIME
+
+
+
+21971
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CORD_ORDER_TIME
+
+5
+0
+-100
+0
+0
+0
+0
+3
+24107
+24107
+CORD_SHIP_MODE_ID
+CORD_SHIP_MODE_ID
+
+
+
+21971
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CORD_SHIP_MODE_ID
+
+6
+0
+-100
+0
+0
+0
+0
+3
+24111
+24111
+CORD_CALL_CENTER_ID
+CORD_CALL_CENTER_ID
+
+
+
+21971
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CORD_CALL_CENTER_ID
+
+7
+0
+-100
+0
+0
+0
+0
+3
+22773
+22773
+CORD_ORDER_COMMENTS
+CORD_ORDER_COMMENTS
+
+
+
+21971
+0
+VARCHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CORD_ORDER_COMMENTS
+
+8
+0
+-100
+0
+0
+0
+0
+3
+22001
+22001
+CLIN_ORDER_ID
+CLIN_ORDER_ID
+
+
+
+21998
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+1
+1
+0
+0
+0
+CLIN_ORDER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22002
+22002
+CLIN_LINE_NUMBER
+CLIN_LINE_NUMBER
+
+
+
+21998
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CLIN_LINE_NUMBER
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22003
+22003
+CLIN_ITEM_ID
+CLIN_ITEM_ID
+
+
+
+21998
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CLIN_ITEM_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+29860
+29860
+CLIN_PROMOTION_ID
+CLIN_PROMOTION_ID
+
+
+
+21998
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_PROMOTION_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+23284
+23284
+CLIN_QUANTITY
+CLIN_QUANTITY
+
+
+
+21998
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_QUANTITY
+
+5
+0
+-100
+0
+0
+0
+0
+3
+29119
+29119
+CLIN_SALES_PRICE
+CLIN_SALES_PRICE
+
+
+
+21998
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_SALES_PRICE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+23285
+23285
+CLIN_COUPON_AMT
+CLIN_COUPON_AMT
+
+
+
+21998
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_COUPON_AMT
+
+7
+0
+-100
+0
+0
+0
+0
+3
+23286
+23286
+CLIN_WAREHOUSE_ID
+CLIN_WAREHOUSE_ID
+
+
+
+21998
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_WAREHOUSE_ID
+
+8
+0
+-100
+0
+0
+0
+0
+3
+24106
+24106
+CLIN_SHIP_DATE
+CLIN_SHIP_DATE
+
+
+
+21998
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_SHIP_DATE
+
+9
+0
+-100
+0
+0
+0
+0
+3
+24110
+24110
+CLIN_CATALOG_NUMBER
+CLIN_CATALOG_NUMBER
+
+
+
+21998
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_CATALOG_NUMBER
+
+10
+0
+-100
+0
+0
+0
+0
+3
+24109
+24109
+CLIN_CATALOG_PAGE_NUMBER
+CLIN_CATALOG_PAGE_NUMBER
+
+
+
+21998
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_CATALOG_PAGE_NUMBER
+
+11
+0
+-100
+0
+0
+0
+0
+3
+31396
+31396
+CLIN_SHIP_COST
+CLIN_SHIP_COST
+
+
+
+21998
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CLIN_SHIP_COST
+
+12
+0
+-100
+0
+0
+0
+0
+3
+22016
+22016
+WORD_ORDER_ID
+WORD_ORDER_ID
+
+
+
+21999
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+WORD_ORDER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22017
+22017
+WORD_BILL_CUSTOMER_ID
+WORD_BILL_CUSTOMER_ID
+
+
+
+21999
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WORD_BILL_CUSTOMER_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22018
+22018
+WORD_SHIP_CUSTOMER_ID
+WORD_SHIP_CUSTOMER_ID
+
+
+
+21999
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WORD_SHIP_CUSTOMER_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+22019
+22019
+WORD_ORDER_DATE
+WORD_ORDER_DATE
+
+
+
+21999
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WORD_ORDER_DATE
+
+4
+0
+-100
+0
+0
+0
+0
+3
+29118
+29118
+WORD_ORDER_TIME
+WORD_ORDER_TIME
+
+
+
+21999
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WORD_ORDER_TIME
+
+5
+0
+-100
+0
+0
+0
+0
+3
+23279
+23279
+WORD_SHIP_MODE_ID
+WORD_SHIP_MODE_ID
+
+
+
+21999
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WORD_SHIP_MODE_ID
+
+6
+0
+-100
+0
+0
+0
+0
+3
+24119
+24119
+WORD_WEB_SITE_ID
+WORD_WEB_SITE_ID
+
+
+
+21999
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WORD_WEB_SITE_ID
+
+7
+0
+-100
+0
+0
+0
+0
+3
+22775
+22775
+WORD_ORDER_COMMENTS
+WORD_ORDER_COMMENTS
+
+
+
+21999
+0
+CHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WORD_ORDER_COMMENTS
+
+8
+0
+-100
+0
+0
+0
+0
+3
+22020
+22020
+WLIN_ORDER_ID
+WLIN_ORDER_ID
+
+
+
+22000
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+1
+1
+1
+0
+0
+WLIN_ORDER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22021
+22021
+WLIN_LINE_NUMBER
+WLIN_LINE_NUMBER
+
+
+
+22000
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+WLIN_LINE_NUMBER
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22022
+22022
+WLIN_ITEM_ID
+WLIN_ITEM_ID
+
+
+
+22000
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WLIN_ITEM_ID
+
+3
+0
+-100
+0
+0
+0
+0
+3
+29861
+29861
+WLIN_PROMOTION_ID
+WLIN_PROMOTION_ID
+
+
+
+22000
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_PROMTION_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+23281
+23281
+WLIN_QUANTITY
+WLIN_QUANTITY
+
+
+
+22000
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_QUANTITY
+
+5
+0
+-100
+0
+0
+0
+0
+3
+29120
+29120
+WLIN_SALES_PRICE
+WLIN_SALES_PRICE
+
+
+
+22000
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_SALES_PRICE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+23282
+23282
+WLIN_COUPON_AMT
+WLIN_COUPON_AMT
+
+
+
+22000
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_COUPON_AMT
+
+7
+0
+-100
+0
+0
+0
+0
+3
+23280
+23280
+WLIN_WAREHOUSE_ID
+WLIN_WAREHOUSE_ID
+
+
+
+22000
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_WAREHOUSE_ID
+
+8
+0
+-100
+0
+0
+0
+0
+3
+24108
+24108
+WLIN_SHIP_DATE
+WLIN_SHIP_DATE
+
+
+
+22000
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_SHIP_DATE
+
+9
+0
+-100
+0
+0
+0
+0
+3
+31397
+31397
+WLIN_SHIP_COST
+WLIN_SHIP_COST
+
+
+
+22000
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WLIN_SHIP_COST
+
+10
+0
+-100
+0
+0
+0
+0
+3
+24118
+24118
+WLIN_WEB_PAGE_ID
+WLIN_WEB_PAGE_ID
+
+
+
+22000
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WLIN_WEB_PAGE_ID
+
+11
+0
+-100
+0
+0
+0
+0
+3
+22362
+22362
+CPAG_CATALOG_NUMBER
+CPAG_CATALOG_NUMBER
+
+
+
+22361
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CATP_CATALOG_NUMBER
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22363
+22363
+CPAG_CATALOG_PAGE_NUMBER
+CPAG_CATALOG_PAGE_NUMBER
+
+
+
+22361
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+CATP_CATALOG_PAGE_NUMBER
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22364
+22364
+CPAG_DEPARTMENT
+CPAG_DEPARTMENT
+
+
+
+22361
+0
+CHAR(20)
+20
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CATP_DEPARTMENT
+
+3
+0
+-100
+0
+0
+0
+0
+3
+30565
+30565
+CPAG_ID
+CPAG_ID
+
+
+
+22361
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CP_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+30566
+30566
+CPAG_START_DATE
+CPAG_START_DATE
+
+
+
+22361
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CP_START_DATE
+
+5
+0
+-100
+0
+0
+0
+0
+3
+30567
+30567
+CPAG_END_DATE
+CPAG_END_DATE
+
+
+
+22361
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CP_END_DATE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+30568
+30568
+CPAG_DESCRIPTION
+CPAG_DESCRIPTION
+
+
+
+22361
+0
+VARCHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CP_DESCRIPTION
+
+7
+0
+-100
+0
+0
+0
+0
+3
+30569
+30569
+CPAG_TYPE
+CPAG_TYPE
+
+
+
+22361
+0
+VARCHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CP_TYPE
+
+8
+0
+-100
+0
+0
+0
+0
+3
+22779
+22779
+WSIT_WEB_SITE_ID
+WSIT_WEB_SITE_ID
+
+
+
+22776
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+WSIT_WEB_SITE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22780
+22780
+WSIT_OPEN_DATE
+WSIT_OPEN_DATE
+
+
+
+22776
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_OPEN_DATE
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22781
+22781
+WSIT_CLOSED_DATE
+WSIT_CLOSED_DATE
+
+
+
+22776
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_CLOSED_DATE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+22798
+22798
+WSIT_SITE_NAME
+WSIT_SITE_NAME
+
+
+
+22776
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_SITE_NAME
+
+4
+0
+-100
+0
+0
+0
+0
+3
+22831
+22831
+WSIT_SITE_CLASS
+WSIT_SITE_CLASS
+
+
+
+22776
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_SITE_CLASS
+
+5
+0
+-100
+0
+0
+0
+0
+3
+22832
+22832
+WSIT_SITE_MANAGER
+WSIT_SITE_MANAGER
+
+
+
+22776
+0
+CHAR(40)
+40
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_SITE_MANAGER
+
+6
+0
+-100
+0
+0
+0
+0
+3
+29117
+29117
+WSIT_TAX_PERCENTAGE
+WSIT_TAX_PERCENTAGE
+
+
+
+22776
+0
+DECIMAL(5,2)
+5
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WSIT_TAX_PERCENTAGE
+
+7
+0
+-100
+0
+0
+0
+0
+3
+22790
+22790
+WPAG_WEB_PAGE_ID
+WPAG_WEB_PAGE_ID
+
+
+
+22777
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+WPAG_WEB_PAGE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+24612
+24612
+WPAG_CREATE_DATE
+WPAG_CREATE_DATE
+
+
+
+22777
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_CREATE_DATE
+
+2
+0
+-100
+0
+0
+0
+0
+3
+24613
+24613
+WPAG_ACCESS_DATE
+WPAG_ACCESS_DATE
+
+
+
+22777
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_ACCESS_DATE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+24614
+24614
+WPAG_AUTOGEN_FLAG
+WPAG_AUTOGEN_FLAG
+
+
+
+22777
+0
+CHAR(1)
+1
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_AUTOGEN_FLAG
+
+4
+0
+-100
+0
+0
+0
+0
+3
+24620
+24620
+WPAG_URL
+WPAG_URL
+
+
+
+22777
+0
+CHAR(100)
+100
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_URL
+
+5
+0
+-100
+0
+0
+0
+0
+3
+24619
+24619
+WPAG_TYPE
+WPAG_TYPE
+
+
+
+22777
+0
+CHAR(50)
+50
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_TYPE
+
+6
+0
+-100
+0
+0
+0
+0
+3
+24618
+24618
+WPAG_CHAR_CNT
+WPAG_CHAR_CNT
+
+
+
+22777
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_CHAR_CNT
+
+7
+0
+-100
+0
+0
+0
+0
+3
+24617
+24617
+WPAG_LINK_CNT
+WPAG_LINK_CNT
+
+
+
+22777
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_LINK_CNT
+
+8
+0
+-100
+0
+0
+0
+0
+3
+24616
+24616
+WPAG_IMAGE_CNT
+WPAG_IMAGE_CNT
+
+
+
+22777
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_IMAGE_CNT
+
+9
+0
+-100
+0
+0
+0
+0
+3
+24615
+24615
+WPAG_MAX_AD_CNT
+WPAG_MAX_AD_CNT
+
+
+
+22777
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WPAG_MAX_AD_CNT
+
+10
+0
+-100
+0
+0
+0
+0
+3
+22851
+22851
+CRET_CALL_CENTER_ID
+CRET_CALL_CENTER_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CRET_CALL_CENTER_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+22852
+22852
+CRET_ORDER_ID
+CRET_ORDER_ID
+
+
+
+22850
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+CRET_ORDER_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+22853
+22853
+CRET_LINE_NUMBER
+CRET_LINE_NUMBER
+
+
+
+22850
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+CRET_LINE_NUMBER
+
+3
+0
+-100
+0
+0
+0
+0
+3
+22854
+22854
+CRET_ITEM_ID
+CRET_ITEM_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+1
+1
+0
+0
+CRET_ITEM_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+22855
+22855
+CRET_RETURN_CUSTOMER_ID
+CRET_RETURN_CUSTOMER_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+CRET_RETURN_CUSTOMER_ID
+
+5
+0
+-100
+0
+0
+0
+0
+3
+22867
+22867
+CRET_REFUND_CUSTOMER_ID
+CRET_REFUND_CUSTOMER_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_REFUND_CUSTOMER
+
+6
+0
+-100
+0
+0
+0
+0
+3
+22856
+22856
+CRET_RETURN_DATE
+CRET_RETURN_DATE
+
+
+
+22850
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_DATE
+
+7
+0
+-100
+0
+0
+0
+0
+3
+29862
+29862
+CRET_RETURN_TIME
+CRET_RETURN_TIME
+
+
+
+22850
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_TIME
+
+8
+0
+-100
+0
+0
+0
+0
+3
+22858
+22858
+CRET_RETURN_QTY
+CRET_RETURN_QTY
+
+
+
+22850
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_QTY
+
+9
+0
+-100
+0
+0
+0
+0
+3
+22859
+22859
+CRET_RETURN_AMT
+CRET_RETURN_AMT
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_AMT
+
+10
+0
+-100
+0
+0
+0
+0
+3
+22860
+22860
+CRET_RETURN_TAX
+CRET_RETURN_TAX
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_TAX
+
+11
+0
+-100
+0
+0
+0
+0
+3
+22861
+22861
+CRET_RETURN_FEE
+CRET_RETURN_FEE
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_FEE
+
+12
+0
+-100
+0
+0
+0
+0
+3
+22862
+22862
+CRET_RETURN_SHIP_COST
+CRET_RETURN_SHIP_COST
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_RETURN_SHIP_COST
+
+13
+0
+-100
+0
+0
+0
+0
+3
+22863
+22863
+CRET_REFUNDED_CASH
+CRET_REFUNDED_CASH
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_REFUNDED_CASH
+
+14
+0
+-100
+0
+0
+0
+0
+3
+22864
+22864
+CRET_REVERSED_CHARGE
+CRET_REVERSED_CHARGE
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_REVERSED_CHARGE
+
+15
+0
+-100
+0
+0
+0
+0
+3
+22865
+22865
+CRET_MERCHANT_CREDIT
+CRET_MERCHANT_CREDIT
+
+
+
+22850
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_MERCHANT_CREDIT
+
+16
+0
+-100
+0
+0
+0
+0
+3
+31041
+31041
+CRET_REASON_ID
+CRET_REASON_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_REASON_ID
+
+17
+0
+-100
+0
+0
+0
+0
+3
+31217
+31217
+CRET_SHIPMODE_ID
+CRET_SHIPMODE_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_SHIPMODE_ID
+
+18
+0
+-100
+0
+0
+0
+0
+3
+31219
+31219
+CRET_CATALOG_PAGE_ID
+CRET_CATALOG_PAGE_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_CATALOG_PAGE_ID
+
+19
+0
+-100
+0
+0
+0
+0
+3
+31218
+31218
+CRET_WAREHOUSE_ID
+CRET_WAREHOUSE_ID
+
+
+
+22850
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+CRET_WAREHOUSE_ID
+
+20
+0
+-100
+0
+0
+0
+0
+3
+24140
+24140
+WRET_WEB_SITE_ID
+WRET_WEB_SITE_ID
+
+
+
+24139
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WRET_WEB_SITE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+24141
+24141
+WRET_ORDER_ID
+WRET_ORDER_ID
+
+
+
+24139
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+WRET_ORDER_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+24142
+24142
+WRET_LINE_NUMBER
+WRET_LINE_NUMBER
+
+
+
+24139
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+1
+1
+0
+0
+WRET_LINE_NUMBER
+
+3
+0
+-100
+0
+0
+0
+0
+3
+24143
+24143
+WRET_ITEM_ID
+WRET_ITEM_ID
+
+
+
+24139
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+1
+1
+0
+0
+WRET_ITEM_ID
+
+4
+0
+-100
+0
+0
+0
+0
+3
+24144
+24144
+WRET_RETURN_CUSTOMER_ID
+WRET_RETURN_CUSTOMER_ID
+
+
+
+24139
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+1
+0
+1
+0
+0
+WRET_RETURN_CUSTOMER_ID
+
+5
+0
+-100
+0
+0
+0
+0
+3
+24145
+24145
+WRET_REFUND_CUSTOMER_ID
+WRET_REFUND_CUSTOMER_ID
+
+
+
+24139
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_REFUND_CUSTOMER
+
+6
+0
+-100
+0
+0
+0
+0
+3
+24146
+24146
+WRET_RETURN_DATE
+WRET_RETURN_DATE
+
+
+
+24139
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_DATE
+
+7
+0
+-100
+0
+0
+0
+0
+3
+29864
+29864
+WRET_RETURN_TIME
+WRET_RETURN_TIME
+
+
+
+24139
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_TIME
+
+8
+0
+-100
+0
+0
+0
+0
+3
+24147
+24147
+WRET_RETURN_QTY
+WRET_RETURN_QTY
+
+
+
+24139
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_QTY
+
+9
+0
+-100
+0
+0
+0
+0
+3
+24148
+24148
+WRET_RETURN_AMT
+WRET_RETURN_AMT
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_AMT
+
+10
+0
+-100
+0
+0
+0
+0
+3
+24149
+24149
+WRET_RETURN_TAX
+WRET_RETURN_TAX
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_TAX
+
+11
+0
+-100
+0
+0
+0
+0
+3
+24150
+24150
+WRET_RETURN_FEE
+WRET_RETURN_FEE
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_FEE
+
+12
+0
+-100
+0
+0
+0
+0
+3
+24151
+24151
+WRET_RETURN_SHIP_COST
+WRET_RETURN_SHIP_COST
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_RETURN_SHIP_COST
+
+13
+0
+-100
+0
+0
+0
+0
+3
+24152
+24152
+WRET_REFUNDED_CASH
+WRET_REFUNDED_CASH
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_REFUNDED_CASH
+
+14
+0
+-100
+0
+0
+0
+0
+3
+24153
+24153
+WRET_REVERSED_CHARGE
+WRET_REVERSED_CHARGE
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_REVERSED_CHARGE
+
+15
+0
+-100
+0
+0
+0
+0
+3
+24154
+24154
+WRET_ACCOUNT_CREDIT
+WRET_ACCOUNT_CREDIT
+
+
+
+24139
+0
+NUMERIC(7,2)
+7
+2
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_MERCHANT_CREDIT
+
+16
+0
+-100
+0
+0
+0
+0
+3
+31040
+31040
+WRET_REASON_ID
+WRET_REASON_ID
+
+
+
+24139
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRET_REASON_ID
+
+17
+0
+-100
+0
+0
+0
+0
+3
+24961
+24961
+WRHS_WAREHOUSE_ID
+WRHS_WAREHOUSE_ID
+
+
+
+24959
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+WRHS_WAREHOUSE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+24962
+24962
+WRHS_WAREHOUSE_DESC
+WRHS_WAREHOUSE_DESC
+
+
+
+24959
+0
+CHAR(200)
+200
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRHS_WAREHOUSE_DESC
+
+2
+0
+-100
+0
+0
+0
+0
+3
+24963
+24963
+WRHS_WAREHOUSE_SQ_FT
+WRHS_WAREHOUSE_SQ_FT
+
+
+
+24959
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+WRHS_WAREHOUSE_SQ_FT
+
+3
+0
+-100
+0
+0
+0
+0
+3
+24971
+24971
+INVN_WAREHOUSE_ID
+INVN_WAREHOUSE_ID
+
+
+
+24960
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+1
+1
+1
+0
+0
+INVN_WAREHOUSE_ID
+
+1
+0
+-100
+0
+0
+0
+0
+3
+24972
+24972
+INVN_ITEM_ID
+INVN_ITEM_ID
+
+
+
+24960
+0
+CHAR(16)
+16
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+1
+1
+1
+0
+0
+INVN_ITEM_ID
+
+2
+0
+-100
+0
+0
+0
+0
+3
+24973
+24973
+INVN_DATE
+INVN_DATE
+
+
+
+24960
+0
+CHAR(10)
+10
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+1
+1
+0
+0
+INVN_DATE
+
+3
+0
+-100
+0
+0
+0
+0
+3
+24974
+24974
+INVN_QTY_ON_HAND
+INVN_QTY_ON_HAND
+
+
+
+24960
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+0
+1
+0
+0
+INVN_QTY_ON_HAND
+
+4
+0
+-100
+0
+0
+0
+0
+3
+27331
+27331
+ZIPG_ZIP
+ZIPG_ZIP
+
+
+
+27330
+0
+CHAR(5)
+5
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+1
+0
+1
+1
+0
+0
+ZIPG_ZIP
+
+1
+0
+-100
+0
+0
+0
+0
+3
+27332
+27332
+ZIPG_GMT_OFFSET
+ZIPG_GMT_OFFSET
+
+
+
+27330
+0
+INTEGER
+0
+0
+0
+0
+
+
+
+
+
+0
+0
+0
+
+
+
+0
+0
+1
+1
+0
+0
+ZIPG_GMT_OFFSET
+
+2
+0
+-100
+0
+0
+0
+0
+/END_TABLE AMCCOLN
+
+/BEGIN_TABLE AMCAKEY
+@ N5
+OID N10
+AKEY N10
+NAME A80
+CODE A80
+TABL N10
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+AKCN A30
+NUMR N8
+ROPR N1
+/BEGIN_DATA AMCAKEY
+/END_TABLE AMCAKEY
+
+/BEGIN_TABLE AMCCKEY
+@ N5
+OID N10
+CKEY N10
+AKEY N10
+COLN N10
+NUMR N8
+/BEGIN_DATA AMCCKEY
+/END_TABLE AMCCKEY
+
+/BEGIN_TABLE AMCREFR
+@ N5
+OID N10
+REFR N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TABL1 N10
+TABL2 N10
+KOBJ N10
+URUL N1
+DRUL N1
+MAND N1
+CPRT N1
+SOID N10
+TOBJ N5
+COBJ A80
+FKCN A30
+CMIN A10
+CMAX A10
+NGEN N1
+CMMT N1
+ROPR N1
+/BEGIN_DATA AMCREFR
+3
+17466
+17466
+is located at
+STOR_ADDRESS_ID
+
+
+
+17456
+17414
+17456
+1
+1
+0
+1
+0
+0
+S_ADDRESS_ID
+
+0
+n
+0
+0
+0
+3
+18801
+18801
+is purchased in
+REF_18801
+
+
+
+18790
+17488
+18790
+1
+1
+0
+1
+0
+0
+REF_18801
+
+0
+n
+0
+0
+0
+3
+18811
+18811
+consists of
+REF_18811
+
+
+
+18805
+18790
+0
+1
+1
+0
+1
+0
+0
+REF_18811
+
+0
+n
+0
+0
+0
+3
+18818
+18818
+belongs to
+REF_18818
+
+
+
+18790
+18805
+18790
+1
+1
+1
+0
+0
+0
+REF_18818
+
+0
+n
+0
+0
+0
+3
+18822
+18822
+consists of
+REF_18822
+
+
+
+17488
+18805
+17488
+1
+1
+0
+1
+0
+0
+REF_18822
+
+0
+n
+0
+0
+0
+3
+18833
+18833
+promotes
+REF_18833
+
+
+
+18805
+17573
+0
+1
+1
+0
+1
+0
+0
+REF_18833
+
+0
+n
+0
+0
+0
+3
+18840
+18840
+promotes
+REF_18840
+
+
+
+17488
+17573
+17488
+1
+1
+0
+1
+0
+0
+REF_18840
+
+0
+n
+0
+0
+0
+3
+18844
+18844
+made in
+PURC_STORE_ID
+
+
+
+17414
+18790
+17414
+1
+1
+0
+1
+0
+0
+REF_18844
+
+0
+n
+0
+0
+0
+3
+20058
+20058
+is promoted by
+REF_20058
+
+
+
+17573
+17488
+17573
+1
+1
+0
+1
+0
+0
+REF_20058
+
+0
+n
+0
+0
+0
+3
+20071
+20071
+returned to
+REF_20071
+
+
+
+17414
+20062
+17414
+1
+1
+0
+1
+0
+0
+REF_20071
+
+0
+n
+0
+0
+0
+3
+20075
+20075
+consists of
+REF_20075
+
+
+
+18805
+20062
+18805
+1
+1
+1
+1
+0
+0
+REF_20075
+
+0
+n
+0
+0
+0
+3
+20082
+20082
+is returned by
+REF_20082
+
+
+
+17545
+20062
+17545
+1
+1
+0
+1
+0
+0
+REF_20082
+
+0
+n
+0
+0
+0
+3
+20136
+20136
+is purchased by
+REF_20136
+
+
+
+17545
+18790
+17545
+1
+1
+0
+1
+0
+0
+REF_20136
+
+0
+n
+0
+0
+0
+3
+21393
+21393
+is made by
+PURC_CUSTOMER_ID
+
+
+
+17545
+18790
+17545
+1
+1
+0
+1
+0
+0
+PURC_CUSTOMER_ID
+
+0
+n
+0
+0
+0
+3
+22004
+22004
+belongs to
+REF_22004
+
+
+
+21971
+21998
+21971
+1
+1
+1
+0
+0
+0
+REF_22004
+
+0
+n
+0
+0
+0
+3
+22008
+22008
+consists of
+REF_22008
+
+
+
+17488
+21998
+17488
+1
+1
+0
+1
+0
+0
+REF_22008
+
+0
+n
+0
+0
+0
+3
+22023
+22023
+consists of
+REF_22023
+
+
+
+17488
+22000
+17488
+1
+1
+0
+1
+0
+0
+REF_22023
+
+0
+n
+0
+0
+0
+3
+22027
+22027
+belongs to
+REF_22027
+
+
+
+21999
+22000
+21999
+1
+1
+1
+0
+0
+0
+REF_22027
+
+0
+n
+0
+0
+0
+3
+22792
+22792
+belongs to
+REF_22792
+
+
+
+22776
+22777
+22776
+1
+1
+0
+0
+0
+0
+REF_22792
+
+0
+n
+0
+0
+0
+3
+22868
+22868
+is returned by
+REF_22868
+
+
+
+17545
+22850
+17545
+1
+1
+0
+1
+0
+0
+REF_22868
+
+0
+n
+0
+0
+0
+3
+22872
+22872
+belongs to
+REF_22872
+
+
+
+21998
+22850
+21998
+1
+1
+1
+1
+0
+0
+REF_22872
+
+0
+n
+0
+0
+0
+3
+22879
+22879
+is handled by
+REF_22879
+
+
+
+21970
+22850
+21970
+1
+1
+0
+1
+0
+0
+REF_22879
+
+0
+n
+0
+0
+0
+3
+24112
+24112
+is taken by
+REF_24112
+
+
+
+21970
+21971
+21970
+1
+1
+0
+1
+0
+0
+REF_24112
+
+0
+n
+0
+0
+0
+3
+24120
+24120
+is placed on
+REF_24120
+
+
+
+22776
+21999
+22776
+1
+1
+0
+1
+0
+0
+REF_24120
+
+0
+n
+0
+0
+0
+3
+24127
+24127
+is located on
+REF_24127
+
+
+
+22777
+22000
+22777
+1
+1
+0
+1
+0
+0
+REF_24127
+
+0
+n
+0
+0
+0
+3
+24156
+24156
+is returned by
+REF_24156
+
+
+
+17545
+24139
+17545
+1
+1
+0
+1
+0
+0
+REF_24156
+
+0
+n
+0
+0
+0
+3
+24160
+24160
+was ordered from
+REF_24160
+
+
+
+22776
+24139
+22776
+1
+1
+0
+1
+0
+0
+REF_24160
+
+0
+n
+0
+0
+0
+3
+24164
+24164
+belongs to
+REF_24164
+
+
+
+22000
+24139
+22000
+1
+1
+1
+1
+0
+0
+REF_24164
+
+0
+n
+0
+0
+0
+3
+24180
+24180
+is located at
+REF_24180
+
+
+
+17456
+21970
+17456
+1
+1
+0
+1
+0
+0
+REF_24180
+
+0
+n
+0
+0
+0
+3
+24184
+24184
+is located at
+REF_24184
+
+
+
+17456
+22776
+17456
+1
+1
+0
+1
+0
+0
+REF_24184
+
+0
+n
+0
+0
+0
+3
+24965
+24965
+is located at
+REF_24965
+
+
+
+17456
+24959
+17456
+1
+1
+0
+1
+0
+0
+REF_24965
+
+0
+n
+0
+0
+0
+3
+24975
+24975
+is stored in
+REF_24975
+
+
+
+24959
+24960
+24959
+1
+1
+1
+0
+0
+0
+REF_24975
+
+0
+n
+0
+0
+0
+3
+24979
+24979
+includes
+REF_24979
+
+
+
+17488
+24960
+17488
+1
+1
+1
+0
+0
+0
+REF_24979
+
+0
+n
+0
+0
+0
+3
+26617
+26617
+billed to
+REF_26617
+
+
+
+17545
+21971
+17545
+1
+1
+0
+1
+0
+0
+REF_26617
+
+0
+n
+0
+0
+0
+3
+26621
+26621
+shipped to
+REF_26621
+
+
+
+17545
+21971
+17545
+1
+1
+0
+1
+0
+0
+REF_26621
+
+0
+n
+0
+0
+0
+3
+26629
+26629
+bill to
+REF_26629
+
+
+
+17545
+21971
+17545
+1
+1
+0
+1
+0
+0
+REF_26629
+
+0
+n
+0
+0
+0
+3
+26633
+26633
+Ref_26633
+REF_26633
+
+
+
+17545
+21971
+17545
+1
+1
+0
+1
+0
+0
+REF_26633
+
+0
+n
+0
+0
+0
+3
+26637
+26637
+shipped to
+REF_26637
+
+
+
+17545
+21999
+17545
+1
+1
+0
+1
+0
+0
+REF_26637
+
+0
+n
+0
+0
+0
+3
+26641
+26641
+billed to
+REF_26641
+
+
+
+17545
+21999
+17545
+1
+1
+0
+1
+0
+0
+REF_26641
+
+0
+n
+0
+0
+0
+3
+26651
+26651
+ship to
+REF_26651
+
+
+
+17545
+21971
+17545
+1
+1
+0
+1
+0
+0
+REF_26651
+
+0
+n
+0
+0
+0
+3
+27873
+27873
+Ref_27873
+REF_27873
+
+
+
+27330
+17545
+27330
+1
+1
+0
+1
+0
+0
+REF_27873
+
+0
+n
+0
+0
+0
+3
+27877
+27877
+Ref_27877
+REF_27877
+
+
+
+27330
+17456
+27330
+1
+1
+0
+1
+0
+0
+REF_27877
+
+0
+n
+0
+0
+0
+3
+31634
+31634
+was_promoted_by
+REF_31634
+
+
+
+17573
+18805
+17573
+1
+1
+0
+1
+0
+0
+REF_31634
+
+0
+n
+0
+0
+0
+/END_TABLE AMCREFR
+
+/BEGIN_TABLE AMCCCOL
+@ N5
+OID N10
+CCOL N10
+COLN1 N10
+COLN2 N10
+/BEGIN_DATA AMCCCOL
+1
+18846
+18846
+17443
+18845
+1
+20073
+20073
+17443
+20072
+1
+20077
+20077
+18806
+20076
+1
+20080
+20080
+18807
+20079
+1
+20084
+20084
+17546
+20083
+1
+21403
+21403
+17546
+18792
+1
+21410
+21410
+17489
+21409
+1
+22012
+22012
+21994
+22001
+1
+22031
+22031
+17489
+22022
+1
+22033
+22033
+22016
+22020
+1
+22883
+22883
+21983
+22851
+1
+22885
+22885
+17546
+22855
+1
+22887
+22887
+22001
+22852
+1
+22889
+22889
+22002
+22853
+1
+23287
+23287
+18791
+18806
+1
+24116
+24116
+21983
+24111
+1
+24124
+24124
+22779
+24119
+1
+24136
+24136
+22790
+24118
+1
+24171
+24171
+22020
+24141
+1
+24173
+24173
+22021
+24142
+1
+24175
+24175
+22779
+24140
+1
+24177
+24177
+17546
+24144
+1
+24983
+24983
+24961
+24971
+1
+24985
+24985
+17489
+24972
+1
+26507
+26507
+17489
+22003
+1
+26625
+26625
+17546
+21995
+1
+26627
+26627
+17546
+21996
+1
+26645
+26645
+17546
+22017
+1
+26647
+26647
+17546
+22018
+1
+26649
+26649
+17546
+21995
+1
+26654
+26654
+17546
+21996
+1
+27881
+27881
+27331
+26864
+1
+31640
+31640
+17574
+29859
+/END_TABLE AMCCCOL
+
+/BEGIN_TABLE AMCCREF
+@ N5
+OID N10
+CREF N10
+REFR N10
+CCOL N10
+NUMR N8
+/BEGIN_DATA AMCCREF
+3
+23288
+23288
+18818
+23287
+1
+3
+21411
+21411
+18822
+21410
+1
+3
+18847
+18847
+18844
+18846
+1
+3
+20074
+20074
+20071
+20073
+1
+3
+20078
+20078
+20075
+20077
+1
+3
+20081
+20081
+20075
+20080
+2
+3
+20085
+20085
+20082
+20084
+1
+3
+21404
+21404
+21393
+21403
+1
+3
+22013
+22013
+22004
+22012
+1
+3
+26508
+26508
+22008
+26507
+1
+3
+22032
+22032
+22023
+22031
+1
+3
+22034
+22034
+22027
+22033
+1
+3
+22886
+22886
+22868
+22885
+1
+3
+22888
+22888
+22872
+22887
+1
+3
+22890
+22890
+22872
+22889
+2
+3
+22884
+22884
+22879
+22883
+1
+3
+24117
+24117
+24112
+24116
+1
+3
+24125
+24125
+24120
+24124
+1
+3
+24137
+24137
+24127
+24136
+1
+3
+24178
+24178
+24156
+24177
+1
+3
+24176
+24176
+24160
+24175
+1
+3
+24172
+24172
+24164
+24171
+1
+3
+24174
+24174
+24164
+24173
+2
+3
+24984
+24984
+24975
+24983
+1
+3
+24986
+24986
+24979
+24985
+1
+3
+26626
+26626
+26617
+26625
+1
+3
+26628
+26628
+26621
+26627
+1
+3
+26650
+26650
+26629
+26649
+1
+3
+26648
+26648
+26637
+26647
+1
+3
+26646
+26646
+26641
+26645
+1
+3
+26655
+26655
+26651
+26654
+1
+3
+27882
+27882
+27873
+27881
+1
+3
+31641
+31641
+31634
+31640
+1
+/END_TABLE AMCCREF
+
+/BEGIN_TABLE AMCINDX
+@ N5
+OID N10
+INDX N10
+NAME A80
+CODE A80
+TABL N10
+LABL A254
+DESC TXT
+NOTE TXT
+PRIM N1
+FORN N1
+ISAK N1
+KOBJ N10
+UNIQ N1
+CLUS N1
+OPTS TXT
+COBJ A80
+NUMR N8
+TYPE A40
+ROPR N1
+/BEGIN_DATA AMCINDX
+/END_TABLE AMCINDX
+
+/BEGIN_TABLE AMCCIDX
+@ N5
+OID N10
+CIDX N10
+INDX N10
+COLN N10
+ASCD N1
+NUMR N8
+/BEGIN_DATA AMCCIDX
+/END_TABLE AMCCIDX
+
+/BEGIN_TABLE AMCTRGRI
+@ N5
+OID N10
+GUID N10
+NAME A30
+LABL A254
+TEXT TXT
+/BEGIN_DATA AMCTRGRI
+/END_TABLE AMCTRGRI
+
+/BEGIN_TABLE AMCTRGRT
+@ N5
+OID N10
+GUID N10
+NAME A30
+TEMP A30
+TEXT TXT
+TNAM A30
+/BEGIN_DATA AMCTRGRT
+/END_TABLE AMCTRGRT
+
+/BEGIN_TABLE AMCTRGR
+@ N5
+TEMP A30
+TEXT TXT
+NAME A30
+TABL N10
+ALWS N1
+ORDR N5
+/BEGIN_DATA AMCTRGR
+/END_TABLE AMCTRGR
+
+/BEGIN_TABLE AMCPROC
+@ N5
+OID N10
+PROC N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TEXT TXT
+FUNC N1
+/BEGIN_DATA AMCPROC
+/END_TABLE AMCPROC
+
+/BEGIN_TABLE AMCVIEW
+@ N5
+OID N10
+VIEW N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+CUST N1
+LOBJ TXT
+QURY TXT
+UPDT N1
+GENE N1
+CHCK N1
+OWNR N10
+ROPR N1
+/BEGIN_DATA AMCVIEW
+3
+17413
+17413
+View_17413
+VIEW_17413
+
+
+
+0
+
+select\
+from
+1
+1
+1
+0
+0
+/END_TABLE AMCVIEW
+
+/BEGIN_TABLE AMCRULE
+@ N5
+OID N10
+RULE N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TYPE N5
+FLAG N5
+CEXP TXT
+SEXP TXT
+LOBJ TXT
+SOID N10
+COBJ A80
+/BEGIN_DATA AMCRULE
+/END_TABLE AMCRULE
+
+/BEGIN_TABLE AMCTSPC
+@ N5
+OID N10
+TSPC N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+/BEGIN_DATA AMCTSPC
+/END_TABLE AMCTSPC
+
+/BEGIN_TABLE AMCSTOR
+@ N5
+OID N10
+STOR N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+/BEGIN_DATA AMCSTOR
+/END_TABLE AMCSTOR
+
+/BEGIN_TABLE AMCLTBL
+@ N5
+OID N10
+LTBL N10
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+HEAD TXT
+FOOT TXT
+GENE N1
+TABL N10
+OWNR N10
+/BEGIN_DATA AMCLTBL
+/END_TABLE AMCLTBL
+
+/BEGIN_TABLE AMCLCOL
+@ N5
+OID N10
+LCOL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+LTBL N10
+COLN N10
+DTTP A30
+MLEN N8
+PREC N2
+MAND N1
+UNIQ N1
+DISP N1
+IQIX N4
+OPTFP TXT
+OPTLF TXT
+OPTLD TXT
+OPTHG TXT
+OPTHNG TXT
+NUMR N8
+/BEGIN_DATA AMCLCOL
+/END_TABLE AMCLCOL
+
+/BEGIN_TABLE AMCJREL
+@ N5
+OID N10
+JREL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+LTBL1 N10
+LTBL2 N10
+MANY N1
+/BEGIN_DATA AMCJREL
+/END_TABLE AMCJREL
+
+/BEGIN_TABLE AMCJIDX
+@ N5
+OID N10
+JIDX N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+HEAD TXT
+FOOT TXT
+LTBL N10
+LOBJ TXT
+OWNR N10
+/BEGIN_DATA AMCJIDX
+/END_TABLE AMCJIDX
+
+/BEGIN_TABLE AMCJCCL
+@ N5
+OID N10
+JCCL N10
+LCOL1 N10
+LCOL2 N10
+/BEGIN_DATA AMCJCCL
+/END_TABLE AMCJCCL
+
+/BEGIN_TABLE AMCJCRL
+@ N5
+OID N10
+JCRL N10
+JREL N10
+JCCL N10
+NUMR N8
+/BEGIN_DATA AMCJCRL
+/END_TABLE AMCJCRL
+
+/BEGIN_TABLE AMCJNIX
+@ N5
+OID N10
+JNIX N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+OPTS TXT
+HEAD TXT
+FOOT TXT
+LOBJ TXT
+OWNR N10
+/BEGIN_DATA AMCJNIX
+/END_TABLE AMCJNIX
+
+/BEGIN_TABLE AMCFACT
+@ N5
+OID N10
+FACT N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TABL N10
+AGGR TXT
+/BEGIN_DATA AMCFACT
+1
+6776
+6776
+Catalog Returns (CR_)
+CATALOG_RETURNS
+
+
+
+0
+
+1
+6788
+6788
+Store Returns (SR_)
+STORE_RETURNS
+
+
+
+0
+
+1
+6789
+6789
+Store Sales (SS_)
+STORE_SALES
+
+
+
+0
+
+1
+6792
+6792
+Web Cross Sales (XS_)
+WEB_CROSS_SALES
+
+
+
+0
+
+1
+6794
+6794
+Web Returns (WR_)
+WEB_RETURNS
+
+
+
+0
+
+1
+6795
+6795
+Web Sales (WS_)
+WEB_SALES
+
+
+
+0
+
+1
+6982
+6982
+Inventory (INV_)2
+INVENTORY2
+
+
+
+0
+
+1
+7691
+7691
+Catalog Sales (CS_)
+CATALOG_SALES
+
+
+
+0
+
+1
+7701
+7701
+Response History (RH)
+RESPONSE_HISTORY
+
+
+
+0
+
+1
+8874
+8874
+Web Session (WS_)
+WEB_SESSION
+
+
+
+0
+
+1
+8933
+8933
+Web Events (WE)
+WEB_EVENTS
+
+
+
+0
+
+1
+10689
+10689
+Product Promotion History (PPH)
+PRODUCT_PROMO_HISTORY
+
+
+
+0
+
+1
+17442
+17442
+Store Sales (SS_)2
+STORE_SALES2
+
+
+
+0
+
+/END_TABLE AMCFACT
+
+/BEGIN_TABLE AMCDIM
+@ N5
+OID N10
+DIM N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TABL N10
+/BEGIN_DATA AMCDIM
+1
+6773
+6773
+Address (A_)
+ADDRESS
+
+
+
+0
+1
+6774
+6774
+Call Center (CC_)
+CALL_CENTER
+
+
+
+0
+1
+6775
+6775
+Catalog Page (CP_)
+CATALOG_PAGE
+
+
+
+0
+1
+6777
+6777
+Cross Sold Type (XT_)
+CROSS_SOLD_TYPE
+
+
+
+0
+1
+6778
+6778
+Customer (C_)
+CUSTOMER
+
+
+
+0
+1
+6779
+6779
+Date (D_)
+DATE
+
+
+
+0
+1
+6780
+6780
+Demographics (DE_)
+DEMOGRAPHICS
+
+
+
+0
+1
+6781
+6781
+Inventory (INV_)
+INVENTORY
+
+
+
+0
+1
+6782
+6782
+Item (I_)
+ITEM
+
+
+
+0
+1
+6783
+6783
+Promotion (P_)
+PROMOTION
+
+
+
+0
+1
+6784
+6784
+Reason (R_)
+REASON
+
+
+
+0
+1
+6785
+6785
+Season (SEASON_)
+SEASON
+
+
+
+0
+1
+6786
+6786
+Ship Mode (SM_)
+SHIP_MODE
+
+
+
+0
+1
+6787
+6787
+Store (S_)
+STORE
+
+
+
+0
+1
+6790
+6790
+Time (T_)
+TIME
+
+
+
+0
+1
+6791
+6791
+Warehouse (W_)
+WAREHOUSE
+
+
+
+0
+1
+6793
+6793
+Web Page (WP_)
+WEB_PAGE
+
+
+
+0
+1
+6796
+6796
+Web Site (WEB_)
+WEB_SITE
+
+
+
+0
+1
+8806
+8806
+Date (D_)2
+DATE2
+
+
+
+0
+1
+8839
+8839
+Web Ad (WA_)
+WEB_AD
+
+
+
+0
+1
+8867
+8867
+Ad Usage (AU)
+AD_USAGE
+
+
+
+0
+1
+10688
+10688
+Promotional Product Group (PPG)
+PROMO_PRODUCT_GROUP
+
+
+
+0
+1
+13262
+13262
+Web Content
+WEB_CONTENT
+
+
+
+0
+1
+14292
+14292
+Demographics (DE_)2
+DEMOGRAPHICS2
+
+
+
+0
+1
+15318
+15318
+Address (A_)2
+ADDRESS2
+
+
+
+0
+1
+15344
+15344
+Income Band (IB_)
+IB
+
+
+
+0
+/END_TABLE AMCDIM
+
+/BEGIN_TABLE AMCHFCT
+@ N5
+OID N10
+HFCT N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+/BEGIN_DATA AMCHFCT
+/END_TABLE AMCHFCT
+
+/BEGIN_TABLE AMCHDIM
+@ N5
+OID N10
+HDIM N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+/BEGIN_DATA AMCHDIM
+/END_TABLE AMCHDIM
+
+/BEGIN_TABLE AMCMETR
+@ N5
+OID N10
+METR N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TTYP N10
+COLN N10
+FRML TXT
+AGGR TXT
+/BEGIN_DATA AMCMETR
+/END_TABLE AMCMETR
+
+/BEGIN_TABLE AMCATTR
+@ N5
+OID N10
+ATTR N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+TTYP N10
+COLN N10
+/BEGIN_DATA AMCATTR
+/END_TABLE AMCATTR
+
+/BEGIN_TABLE AMCNODE
+@ N5
+OID N10
+NODE N10
+PNODE N10
+TYPE N10
+NUMR N8
+GENE N1
+/BEGIN_DATA AMCNODE
+/END_TABLE AMCNODE
+
+/BEGIN_TABLE AMCDTBS
+@ N5
+OID N10
+DTBS N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+DEFF A256
+DTSC A80
+SRVN A30
+LOGN A128
+PASS A256
+/BEGIN_DATA AMCDTBS
+/END_TABLE AMCDTBS
+
+/BEGIN_TABLE AMCETBL
+@ N5
+OID N10
+ETBL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+DTBS N10
+/BEGIN_DATA AMCETBL
+/END_TABLE AMCETBL
+
+/BEGIN_TABLE AMCECOL
+@ N5
+OID N10
+ECOL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+ETBL N10
+DTTP A30
+MLEN N8
+PREC N2
+DISP N1
+NUMR N8
+/BEGIN_DATA AMCECOL
+/END_TABLE AMCECOL
+
+/BEGIN_TABLE AMCTSRC
+@ N5
+OID N10
+TSRC N10
+TABL N10
+DTBS N10
+SCRPT TXT
+INVLD N1
+LOBJ TXT
+/BEGIN_DATA AMCTSRC
+/END_TABLE AMCTSRC
+
+/BEGIN_TABLE AMCCSRC
+@ N5
+OID N10
+CSRC N10
+COLN N10
+TSRC N10
+ALIAS A80
+EXPR TXT
+INVLD N1
+LOBJ TXT
+/BEGIN_DATA AMCCSRC
+/END_TABLE AMCCSRC
+
+/BEGIN_TABLE AMCSUBM
+@ N5
+OID N10
+SUBM N10
+MODL N10
+NAME A80
+CODE A80
+LABL A254
+DESC TXT
+NOTE TXT
+POID N10
+PNAM A80
+PCOD A80
+USER A80
+VERS A8
+CDAT N12
+MDAT N12
+ACCS N5
+SMID N10
+NUMR N8
+/BEGIN_DATA AMCSUBM
+3
+132
+132
+1
+Color_Model
+COLOR_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+995468006
+995479889
+0
+0
+1
+3
+147
+147
+1
+Customer_Model
+CUSTOMER_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997705769
+997706316
+0
+0
+2
+3
+151
+151
+1
+Inventory_Model
+INVENTORY_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997706779
+997706987
+0
+0
+3
+3
+152
+152
+1
+Product_Model
+PRODUCT_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997707024
+997707339
+0
+0
+4
+3
+156
+156
+1
+Call_Center_Model
+CALL_CENTER_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997707733
+997707872
+0
+0
+5
+3
+158
+158
+1
+Web_Site_Model
+WEB_SITE_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997707918
+997707978
+0
+0
+6
+3
+161
+161
+1
+Store_Sales_Model
+STORE_SALES_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997708407
+997710140
+0
+0
+7
+3
+170
+170
+1
+Catalog_Sales_Model
+CATALOG_SALES_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997710179
+997710399
+0
+0
+8
+3
+176
+176
+1
+Web_Sales_Model
+WEB_SALES_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997711681
+997712453
+0
+0
+9
+3
+177
+177
+1
+Store_Model
+STORE_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+997713693
+997713833
+0
+0
+10
+1
+181
+181
+1
+Promotions_Model
+PROMOTIONS_MODEL
+
+
+
+0
+TPCDS
+TPCDS
+Eric L. Speed
+
+1002054031
+1002054031
+0
+0
+11
+/END_TABLE AMCSUBM
+
+/BEGIN_TABLE AMCSUBO
+@ N5
+OID N10
+SUBO N10
+MODL N10
+SUBM N10
+NUMR N8
+/BEGIN_DATA AMCSUBO
+3
+17456
+17456
+1
+132
+1
+3
+21970
+21970
+1
+132
+2
+3
+21998
+21998
+1
+132
+3
+3
+21971
+21971
+1
+132
+4
+3
+22361
+22361
+1
+132
+5
+3
+22850
+22850
+1
+132
+6
+3
+17545
+17545
+1
+132
+7
+3
+24960
+24960
+1
+132
+8
+3
+17488
+17488
+1
+132
+9
+3
+18805
+18805
+1
+132
+10
+3
+17573
+17573
+1
+132
+11
+3
+18790
+18790
+1
+132
+12
+3
+20062
+20062
+1
+132
+13
+3
+17414
+17414
+1
+132
+14
+3
+22000
+22000
+1
+132
+15
+3
+21999
+21999
+1
+132
+16
+3
+22777
+22777
+1
+132
+17
+3
+24139
+24139
+1
+132
+18
+3
+24959
+24959
+1
+132
+19
+3
+22776
+22776
+1
+132
+20
+3
+21393
+21393
+1
+132
+21
+3
+18844
+18844
+1
+132
+22
+3
+18801
+18801
+1
+132
+23
+3
+18811
+18811
+1
+132
+24
+3
+18818
+18818
+1
+132
+25
+3
+18822
+18822
+1
+132
+26
+3
+18833
+18833
+1
+132
+27
+3
+18840
+18840
+1
+132
+28
+3
+20058
+20058
+1
+132
+29
+3
+20071
+20071
+1
+132
+30
+3
+20075
+20075
+1
+132
+31
+3
+20082
+20082
+1
+132
+32
+3
+20136
+20136
+1
+132
+33
+3
+22004
+22004
+1
+132
+34
+3
+22008
+22008
+1
+132
+35
+3
+22023
+22023
+1
+132
+36
+3
+22027
+22027
+1
+132
+37
+3
+22792
+22792
+1
+132
+38
+3
+22868
+22868
+1
+132
+39
+3
+22872
+22872
+1
+132
+40
+3
+22879
+22879
+1
+132
+41
+3
+24112
+24112
+1
+132
+42
+3
+24120
+24120
+1
+132
+43
+3
+24127
+24127
+1
+132
+44
+3
+24156
+24156
+1
+132
+45
+3
+24160
+24160
+1
+132
+46
+3
+24164
+24164
+1
+132
+47
+3
+24180
+24180
+1
+132
+48
+3
+24184
+24184
+1
+132
+49
+3
+24965
+24965
+1
+132
+50
+3
+24975
+24975
+1
+132
+51
+3
+24979
+24979
+1
+132
+52
+3
+17466
+17466
+1
+132
+53
+3
+17545
+17545
+1
+147
+54
+3
+17456
+17456
+1
+151
+55
+3
+24960
+24960
+1
+151
+56
+3
+17488
+17488
+1
+151
+57
+3
+24959
+24959
+1
+151
+58
+3
+24965
+24965
+1
+151
+59
+3
+24975
+24975
+1
+151
+60
+3
+24979
+24979
+1
+151
+61
+3
+17488
+17488
+1
+152
+62
+3
+17456
+17456
+1
+156
+63
+3
+21970
+21970
+1
+156
+64
+3
+24180
+24180
+1
+156
+65
+3
+17456
+17456
+1
+158
+66
+3
+22776
+22776
+1
+158
+67
+3
+24184
+24184
+1
+158
+68
+3
+17545
+17545
+1
+161
+69
+3
+17488
+17488
+1
+161
+70
+3
+18805
+18805
+1
+161
+71
+3
+17573
+17573
+1
+161
+72
+3
+18790
+18790
+1
+161
+73
+3
+20062
+20062
+1
+161
+74
+3
+17414
+17414
+1
+161
+75
+3
+18844
+18844
+1
+161
+76
+3
+18818
+18818
+1
+161
+77
+3
+18822
+18822
+1
+161
+78
+3
+20071
+20071
+1
+161
+79
+3
+20075
+20075
+1
+161
+80
+3
+20082
+20082
+1
+161
+81
+3
+20136
+20136
+1
+161
+82
+3
+21970
+21970
+1
+170
+83
+3
+21998
+21998
+1
+170
+84
+3
+21971
+21971
+1
+170
+85
+3
+22361
+22361
+1
+170
+86
+3
+22850
+22850
+1
+170
+87
+3
+17545
+17545
+1
+170
+88
+3
+17488
+17488
+1
+170
+89
+3
+17573
+17573
+1
+170
+90
+3
+22004
+22004
+1
+170
+91
+3
+22008
+22008
+1
+170
+92
+3
+22868
+22868
+1
+170
+93
+3
+22872
+22872
+1
+170
+94
+3
+22879
+22879
+1
+170
+95
+3
+24112
+24112
+1
+170
+96
+3
+26617
+26617
+1
+170
+97
+3
+26621
+26621
+1
+170
+98
+3
+17545
+17545
+1
+176
+99
+3
+17488
+17488
+1
+176
+100
+3
+17573
+17573
+1
+176
+101
+3
+22000
+22000
+1
+176
+102
+3
+21999
+21999
+1
+176
+103
+3
+22777
+22777
+1
+176
+104
+3
+24139
+24139
+1
+176
+105
+3
+22776
+22776
+1
+176
+106
+3
+22023
+22023
+1
+176
+107
+3
+22027
+22027
+1
+176
+108
+3
+22792
+22792
+1
+176
+109
+3
+24120
+24120
+1
+176
+110
+3
+24127
+24127
+1
+176
+111
+3
+24156
+24156
+1
+176
+112
+3
+24160
+24160
+1
+176
+113
+3
+24164
+24164
+1
+176
+114
+3
+26637
+26637
+1
+176
+115
+3
+26641
+26641
+1
+176
+116
+3
+17456
+17456
+1
+177
+117
+3
+17414
+17414
+1
+177
+118
+3
+17466
+17466
+1
+177
+119
+3
+22361
+22361
+1
+181
+120
+3
+17488
+17488
+1
+181
+121
+3
+17573
+17573
+1
+181
+122
+3
+17414
+17414
+1
+181
+123
+3
+22777
+22777
+1
+181
+124
+3
+22776
+22776
+1
+181
+125
+3
+22792
+22792
+1
+181
+126
+/END_TABLE AMCSUBO
+
+/BEGIN_TABLE AMCRPRT
+@ N5
+OID N10
+RPRT N10
+FLGS N8
+NAME A64
+DESC A254
+TMLT BIN
+/BEGIN_DATA AMCRPRT
+3
+10
+10
+0
+Reduced report
+Graphs, columns and annotations
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000002000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffff0400000023000000050000000600000007000000080000000a000000090000000c0000000b0000000e0000000d0000000f0000001000000011000000120000001300000014000000150000001700000016000000\
+19000000180000001a0000001b0000001c0000001d0000001e000000200000001f00000021000000220000002400000025000000feffffff2600000027000000280000002a000000290000002b0000002c0000002d0000002e0000002f000000310000003000000032000000330000003400000036000000\
+3500000037000000feffffff38000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000016000500ffffffffffffffff2600000000000000000000000000000000000000000000000000000000000000902938324369bf0103000000c038000000000000310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000004000101ffffffffffffffff030000000000000000000000000000000000000000000000b09533324369bf01b09533324369bf010000000000000000000000005200500054005f004900540045004d00000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000012000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000006d000000000000005200500054005f00500041005200410031000000000000000000000000000000\
+0000000000000000000000000000000000000000000000000000000000000000140002010200000004000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000020000000a0100000000000001000000feffffff03000000040000000500000006000000\
+feffffff08000000090000000a0000000b000000feffffff0d000000feffffff0f000000feffffff11000000120000001300000014000000fefffffffeffffff17000000feffffff19000000feffffff1b0000001c0000001d0000001e000000fefffffffefffffffeffffff22000000feffffff24000000\
+250000002600000027000000fefffffffeffffff2a000000feffffff2c000000feffffff2e0000002f0000003000000031000000feffffff33000000340000003500000036000000fefffffffefffffffeffffff3a000000feffffff3c0000003d0000003e0000003f000000fefffffffefffffffeffffff\
+43000000feffffff45000000feffffff4700000048000000feffffff4a0000004b0000004c0000004d000000feffffff4f000000500000005100000052000000feffffff54000000550000005600000057000000fefffffffeffffff5a000000feffffff5c0000005d0000005e0000005f000000feffffff\
+61000000620000006300000064000000fefffffffeffffff67000000feffffff690000006a0000006b0000006c000000feffffff6e0000006f0000007000000071000000fefffffffeffffff74000000feffffff76000000770000007800000079000000feffffff7b0000007c0000007d0000007e000000\
+fefffffffeffffff080049544d53495a450002000000f400090049544d464c414753000400000013000000080049544d54595045000200000002000b0049544d434c53534e4d45000f0000005f5250545f544142434e544e5453000b0049544d4d4f444c4e4d4500090000005f5250545f47454e00000000\
+00000000000000000000000000006b00090050415253544154450004000000200000000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000010fc7a67bf01d024c867ed68bf0120f9b5037b67bf0120f9b5037b67bf010b0600000000000000080000000000002000000040000000090050415253544154450004000000000000000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000200ffffffffffffffffffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000070000000a01000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400010101000000\
+07000000060000000000000000000000000000000000000000000000b09533324369bf01b09533324369bf010000000000000000000000005200500054005f004900540045004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+12000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000c0000006b000000000000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000004000101ffffffffffffffff140000000000000000000000000000000000000000000000b09533324369bf01501c35324369bf010000000000000000000000004e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000\
+000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e0050415253\
+50545854424f524452000200000001000a005041524e4254414253000200000000006f00660065007300730069006f006e0061006c0020004c00560050002000530065007400750070002800300030003000330029002e00080049544d53495a4500020000005800090049544d464c414753000400000013\
+000000080049544d54595045000200000008000b0049544d434c53534e4d45000d0000005f5250545f5047425245414b000b0049544d4d4f444c4e4d4500090000005f5250545f47454e00006900630065002000320030003000300020005000080049544d53495a450002000000d400090049544d464c41\
+4753000400000013000000080049544d5459504500020000000a000b0049544d434c53534e4d4500060000004752415048000b0049544d4d4f444c4e4d4500090000004d50445f43312e30006067bf0138610000000000000062000000000000200000006800000031000000000000000000000000000000\
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff0e0000000000000000000000000000000000000000000000b09533324369bf01b09533324369bf010000000000000000000000003100000000000000\
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff0b0000000000000000000000000000000000000000000000b09533324369bf01b09533324369bf01000000000000000000000000\
+5200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000e000000\
+64000000000000005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002010a0000000c000000ffffffff0000000000000000000000000000000000000000000000000000000000000000\
+00000000100000000a01000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000000fefffffffefffffffeffffffb7020000feffffffb9020000ba020000bb020000bc020000fefffffffeffffff12000201ffffffff0600475241464c0002000000000006004752415a4d000200\
+0000640008004752415a4d545900020000000000540000006b000000ce0200005200500054005f00080049544d53495a4500020000005800090049544d464c414753000400000013000000080049544d54595045000200000008000b0049544d434c53534e4d45000d0000005f5250545f5047425245414b\
+000b0049544d4d4f444c4e4d4500090000005f5250545f47454e00005600000069000000ffffffff5200500054005f005200500054005f0043005500530054004f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000201ffffffff\
+0d000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff00000000000000005200500054005f004700520041005000480049004300000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+18000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000150000002c000000000000003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000400010109000000110000000f0000000000000000000000000000000000000000000000b09533324369bf01b09533324369bf010000000000000000000000005200500054005f004900540045004d000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000160000006b000000000000005200500054005f004900540045004d00000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000001800000069000000000000005200500054005f00500041005200410031000000000000000000000000000000\
+0000000000000000000000000000000000000000000000000000000000000000140002001000000012000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000001a0000000a010000000000005200500054005f005400490054004c004500000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff13000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000001f00000022000000000000005200500054005f0043004f004e005400\
+4e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000200000000600000000000000080049544d53495a\
+450002000000bc00090049544d464c414753000400000077000000080049544d54595045000200000003000b0049544d434c53534e4d45000b0000005f5250545f5449544c45000b0049544d4d4f444c4e4d4500090000005f5250545f47454e0059bf012a0200002b0200002c0200005200500054005f00\
+090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a005041524649\
+4e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f5244\
+52000200000001000a005041524e42544142530002000000000000007202000073020000feffffff75020000760200007702000078020000fefffffffeffffff7b020000feffffff14000201ffffffff09005449544c544558540013000000476c6f62616c206d6f64656c20677261706800000000000000\
+00000000630000000501000000000000090000005441424c0200010002006b027f10020301004e4db8001300902a9802445f43312e3000000000000000000000000000000000000000000000000000000a004c53544e4243080049544d53495a450002000000d400090049544d464c414753000400000013\
+000000080049544d5459504500020000000a000b0049544d434c53534e4d4500060000004752415048000b0049544d4d4f444c4e4d4500090000004d50445f43312e300054000200000000000000000000000000000000000900504152535441090050415253544154450004000000200001000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245\
+00020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005200500054005f0032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0400010108000000230000001d0000000000000000000000000000000000000000000000b09533324369bf01501c35324369bf010000000000000000000000003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000004000101ffffffffffffffff170000000000000000000000000000000000000000000000b09533324369bf01501c35324369bf010000000000000000000000005200500054005f004900540045004d000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000002100000064000000000000005200500054005f005000410052004100310000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000140002011600000018000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000230000000a010000000000005200500054005f0043005500530054004f004d00000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000016000201ffffffff19000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff00000000000000005200500054005f0047005200410050004800490043000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000018000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000280000002c0000000000000032000000000000000000000000000000\
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000100150000001c0000001b0000000000000000000000000000000000000000000000501c35324369bf01501c35324369bf010000000000000000000000005200500054005f00\
+4900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000290000006b00000000000000\
+0600475241464c0002000000000006004752415a4d0002000000640008004752415a4d545900020000000000005041524e425441425300020000000000000000080049544d53495a4500020000005800090049544d464c414753000400000013000000080049544d54595045000200000008000b0049544d\
+434c53534e4d45000d0000005f5250545f5047425245414b000b0049544d4d4f444c4e4d4500090000005f5250545f47454e0000000000000000000000000000080049544d53495a080049544d53495a4500020000003c01090049544d464c414753000400000077000000080049544d5459504500020000\
+0011000b0049544d434c53534e4d4500090000005355424d4f44454c000b0049544d4d4f444c4e4d4500090000004d50445f43312e300000000000000000000000000000000000000900504152535441090050415253544154450004000000200001000800504152414c474e000200000000000b00504152\
+464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146\
+544552000200000003000b005041525350424554574e000200000000000a00505200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000\
+000000000000000000000000000000000000000000000000000000002b00000067000000000000005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002011a0000001f000000ffffffff\
+0000000000000000000000000000000000000000000000000000000000000000000000002d0000000a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff\
+ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000320000000a010000000000005200500054005f0043005500530054004f004d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+160002001e00000020000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff00000000000000004152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f52445200020000000100\
+0a005041524e425441425300020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900504152535441090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d4500\
+06000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b00504152535041465445520002000000\
+03000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000009005041525354410a005355424d444c545854001d0000004772617068206f66207375626d6f64656c20255355424d4f44454c25000b00504152464e544847485200500054005f005200500054005f005300550042004d0044004c0000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000016000201ffffffff21000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000370000002d000000000000005200500054005f0043004f004e005400\
+4e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000003800000006000000000000005200500054005f00\
+4900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000390000006900000000000000\
+5200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002002200000024000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000003b000000\
+0a010000000000000200010002006b02bf0ec2040100ffffb8001300902a9802890000008a000000feffffff8c0000008d0000008e0000008f000000fefffffffeffffff92000000080049544d53495a450002000000bc00090049544d464c414753000400000077000000080049544d5459504500020000\
+0003000b0049544d434c53534e4d45000b0000005f5250545f5449544c45000b0049544d4d4f444c4e4d4500090000005f5250545f47454e00000000ae000000af000000b0000000fefffffffeffffff090050415253544154450004000000700001000800504152414c474e000200000000000b00504152\
+464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146\
+544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000fffff6000000f7000000f8000000\
+f9000000fefffffffb000000fc000000fd000000fe000000fefffffffeffffff5400020000000a005200500054005f005400490054004c0045000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff25000000ffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000400000001a000000000000005200500054005f0043004f004e0054004e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffff\
+ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000041000000060000000000000034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+04000101050000005e000000520000000000000000000000000000000000000000000000501c35324369bf01902938324369bf010000000000000000000000003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000004000101ffffffffffffffff420000000000000000000000000000000000000000000000501c35324369bf01f0a236324369bf0100000000000000000000000009005449544c54455854000b00000057414d20477261706873000000fffffffffeffffff00000000fffffffffeffffff\
+00000000ffffffff140002013f000000020001000200ffff00000000fffffffffeffffff00000000ffffffff000000000000000000000000000000008600000005010000feffffff5200500054005f00080049544d53495a4500020000006800090049544d464c414753000400000013000000080049544d\
+54595045000200000008000b0049544d434c53534e4d45000d0000005f5250545f5047425245414b000b0049544d4d4f444c4e4d4500090000005f5250545f47454e00008b00000014010000ffffffff5200500054005f00080049544d53495a4500020000007c01090049544d464c414753000400000033\
+000000080049544d5459504500020000000f000b0049544d434c53534e4d45000e0000005441424c434f4c4d4e4c495354000b0049544d4d4f444c4e4d4500090000004d50445f43312e300090000000170000000000000033000000feffffff0a004c53544e42434f4c530002000000070008004c535443\
+4f4c53001c0000000100000002000000030000000600000007000000080000001a00000008004c5354464c4753001c0000000500000004000000040000000500000005000000050000000400000008004c535457445448000e000000b0ffd5ff2800ecff0a000a0031000000000000000000000000000000\
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff290000000000000000000000000000000000000000000000501c35324369bf01501c35324369bf010000000000000000000000005200500054005f00\
+4900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000420000006b00000000000000\
+320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400010128000000310000002c0000000000000000000000000000000000000000000000501c35324369bf01501c35324369bf0100000000\
+00000000000000005200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000\
+00000000440000006c000000000000005200500054005f004c00490053005400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120002012b0000002e000000ffffffff000000000000000000000000000000000000000000000000\
+0000000000000000000000004600000092000000000000005200500054005f00500041005200410031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff00000000000000000000000000000000\
+0000000000000000000000000000000000000000490000000a010000000000005200500054005f005000410052004100320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002002d0000002f000000ffffffff0000000000000000\
+000000000000000000000000000000000000000000000000000000004e0000000a010000000000005200500054005f00500041005200410033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff30000000ffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000530000000a01000000000000280008004c5354534f5254000200000000000000760200007702000078020000feffffff00000000000000000000000000000000a402000012000201ffffffff0900504152535441\
+54450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400020000\
+0000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f52445200020000000100\
+0a005041524e425441425300020000000000000001000000988c00000000000000000000000000000000000000000000000000009500000005010000000000005200500054005f00090050415253544154450004000000201000000800504152414c474e000200000002000b00504152464e544e414d4500\
+06000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b00504152535041465445520002000000\
+00000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000800504152414c474e000200000002000b00504152\
+464e544e414d450001000000000b00504152464e544847485400020000000a00090050415253544154450004000000001000000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54\
+000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b\
+005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000800504152414c474e000200000000000b00504152464e544e414d450001000000000b00504152464e544847485200500054005f005200500054005f00\
+43005500530054004f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000580000001b00000000000000\
+3300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff3d0000000000000000000000000000000000000000000000501c35324369bf01f0a236324369bf0100000000\
+00000000000000003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff340000000000000000000000000000000000000000000000501c35324369bf01501c3532\
+4369bf010000000000000000000000005200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\
+000000000000000000000000590000006d000000000000000900435553545449544c000c000000436f6c756d6e204c697374004e54000200000000000a0050415246494e444e54000200000000000c005041525350424546080049544d53495a4500020000002c01090049544d464c414753000400000013\
+000000080049544d5459504500020000000e000b0049544d434c53534e4d45000f0000005441424c434f4c4d4e414e4e4f54000b0049544d4d4f444c4e4d4500090000004d50445f43312e30005041524e425441425300020000000000000000090050415253544154450004000000200001000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245\
+00020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000\
+0000000800504152414c474e000200000000000b00504152464e544e414d450001000000000b00504152464e544847485200500054005f005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+140002013300000035000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000005b0000000a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000014000201ffffffff36000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000006000000014010000000000005200500054005f0043005500530054004f004d0000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000650000001a0000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000004000100320000003c000000390000000000000000000000000000000000000000000000501c35324369bf01f0a236324369bf01000000000000000000000000090050415253544154450004000000000000000800504152414c474e00020000\
+0000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f\
+5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200\
+00000000000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b0050410900435553545449544c000b000000416e6e6f746174696f6e00000200000000000a0050415252494e444e54000200000000000a0050415246494e444e540002080049544d53495a\
+4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000f0000005441424c434f4c4d4e4445534352000b0049544d4d4f444c4e4d4500090000004d50445f43312e300054424f524452000200000001000a005041524e\
+5200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000066000000\
+6d000000000000005200500054005f00500041005200410031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201380000003a000000ffffffff0000000000000000000000000000000000000000000000000000000000000000\
+00000000680000000a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff3b000000ffffffff000000000000000000000000000000000000000000000000\
+0000000000000000000000006d00000014010000000000005200500054005f0043005500530054004f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff00000000000000000000000000000000\
+0000000000000000000000000000000000000000720000001b00000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54\
+000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b\
+005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000000000000000000000000000001000000fc100000c700000080210000d07e0000d87fc502100000000100000014000201ffffffff0900504152535441\
+54450004000000000000000800504152414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a00504152\
+46494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f\
+524452000200000001000a005041524e425441425300020000000000000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b0050410900435553545449544c000c0000004465736372697074696f6e000200000000000a0050415252494e444e5400020000\
+0000000a0050415246494e444e540002080049544d53495a4500020000004801090049544d464c414753000400000017000000080049544d5459504500020000000d000b0049544d434c53534e4d45000a0000005441424c434f4c4d4e000b0049544d4d4f444c4e4d4500090000004d50445f43312e3000\
+525350545854424f524452000200000001000a005041524e090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a\
+0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00505200500054005f004900540045004d000000000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000007300000068000000000000005200500054005f005000410052004100\
+31000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201370000003f000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000750000000a010000000000005200500054005f00\
+500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000007a0000000a01000000000000\
+5200500054005f0043005500530054004f004d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160002003e00000040000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff\
+00000000000000004152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000800504152414c474e000200000000000b00504152464e544e414d450001000000000b0050\
+4152464e544847485400020000000c00090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000800504152414c474e000200000000000b00504152464e544e414d450001000000000b00504152464e544847485400020000000a000b004752505449544c5458540007000000254954454d2500\
+494e444e54000200000000000a0050415246494e444e54000200000000000c005200500054005f005200500054005f004700520050005400490054004c004500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000201ffffffff41000000ffffffff\
+0000000000000000000000000000000000000000000000000000000000000000000000007f00000018000000000000005200500054005f0043004f004e0054004e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffff\
+ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000080000000060000000000000034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+040001012a0000004c000000440000000000000000000000000000000000000000000000f0a236324369bf01f0a236324369bf010000000000000000000000005200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000810000006800000000000000feffffff82000000feffffff84000000850000008600000087000000feffffff890000008a0000008b0000008c000000\
+fefffffffeffffff8f000000feffffff91000000920000009300000094000000feffffff96000000970000009800000099000000fefffffffeffffff9c000000feffffff9e0000009f000000a0000000a1000000feffffffa3000000a4000000a5000000a6000000fefffffffefffffffeffffffaa000000\
+feffffffac000000feffffffae000000af000000b0000000b1000000feffffffb3000000b4000000b5000000b6000000feffffffb8000000b9000000ba000000bb000000fefffffffeffffffbe000000feffffffc0000000c1000000c2000000c3000000fefffffffefffffffeffffffc7000000feffffff\
+c9000000ca000000cb000000cc000000feffffffce000000cf000000d0000000d1000000feffffffd3000000d4000000d5000000d6000000feffffffd8000000d9000000da000000db000000feffffffdd000000de000000df000000e0000000e1000000fefffffffeffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0200020001006b023f0a420901004c41\
+b8001300902a9802000000080049544d5459504500020000000d000b0049544d434c53534e4d4500080000005441424c080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000a0000005441424c\
+4445534352000b0049544d4d4f444c4e4d4500090000004d50445f43312e300001000000000b00504152464e544847485400020000000c00090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b0050415246\
+4e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e0002\
+00000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000800504152414c474e000200000000000b00504152464e544e414d450001000000000b0050\
+4152464e544847485200500054005f005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002014300000045000000ffffffff000000000000000000000000000000000000000000000000\
+000000000000000000000000830000000a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff46000000ffffffff00000000000000000000000000000000\
+00000000000000000000000000000000000000008800000014010000000000005200500054005f0043005500530054004f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff0000000000000000\
+000000000000000000000000000000000000000000000000000000008d0000001b000000000000003500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff49000000\
+0000000000000000000000000000000000000000f0a236324369bf01f0a236324369bf01000000000000000000000000090050415253544154450004000000000000000800504152414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b005041\
+52464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e\
+000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000006465642041747472696275746520254954454d2500000000000000000000000000000000\
+01000100000000000900435553545449544c000c0000004465736372697074696f6e000000000000000000000000000000000000000000000000000000000000080049544d53495a080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000\
+000e000b0049544d434c53534e4d45000a0000005441424c414e4e4f54000b0049544d4d4f444c4e4d4500090000004d50445f43312e3000000000000000000000000000000000005200500054005f005200500054005f004900540045004d00000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000008e00000068000000000000005200500054005f00500041005200410031000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000014000201480000004a000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000900000000a010000000000005200500054005f0050004100520041003200000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff4b000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000009500000014010000000000005200500054005f004300550053005400\
+4f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000009a0000001a000000000000000900504152535441\
+54450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400020000\
+0000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f52445200020000000100\
+0a005041524e42544142530002000000000054000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c005041525350424546090050415253544154450004000000000000000800504152414c474e000200000000000b00504152464e544e414d4500\
+1000000054696d6573204e657720526f6d616e000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b005041525350\
+4146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000520041003100000000000000\
+000000000000000000000000e3000000050100002c0100005200500054005f000900435553545449544c000b000000416e6e6f746174696f6e00000036010000feffffff38010000390100000000000000000000000000001400020064000000080049544d53495a4500020000004801090049544d464c41\
+4753000400000057000000080049544d5459504500020000000d000b0049544d434c53534e4d4500050000005441424c000b0049544d4d4f444c4e4d4500090000004d50445f43312e300000000000000000000000000000000000000000000014000201ffffffff09005041525354415445000400000020\
+0001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c00504152\
+53504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00505200500054005f004900540045004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+12000201470000004e000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000009b00000063000000000000005200500054005f00500041005200410031000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000014000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000009d0000000a010000000000005200500054005f0050004100520041003200000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000140002004d00000050000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000a20000000a010000000000005200500054005f0043005500530054004f004d000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff00000000000000004152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900435553545449090050415253544154450004000000200001000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245\
+00020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000\
+000054000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245460b004752505449544c5458540007000000254954454d250000000003000b005041525350424554574e000200000000000a00504152424f523800000054005f00\
+5200500054005f004700520050005400490054004c004500000000000000000000000000000000000000000000000000000000000000000000000000000000001a0002014f00000051000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000a7000000\
+18000000000000005200500054005f0043004f004e0054004e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000\
+00000000a80000000c000000000000003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101270000005a000000540000000000000000000000000000000000000000000000f0a23632\
+4369bf01902938324369bf010000000000000000000000005200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff00000000000000000000000000000000\
+0000000000000000000000000000000000000000a9000000670000000000000005000400050002000300010001000002b8001300902a980241525350545854424f524452000200000001000a005041524e425441425300020000000000000000080049544d53495a4500020000007c01090049544d464c41\
+4753000400000073000000080049544d5459504500020000000f000b0049544d434c53534e4d4500090000005441424c4c495354000b0049544d4d4f444c4e4d4500090000004d50445f43312e3000001000000054696d6573204e657720526f6d616e000b0050410a004c53544e42434f4c530002000000\
+050008004c5354434f4c530014000000010000000200000003000000040000001600000008004c5354464c47530014000000070000000600000004000000040000000400000008004c535457445448000a0000009cffceff32001400320008004c5354534f525400020000000000000a0900504152535441\
+54450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400020000\
+0000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00505200500054005f004c0049005300540000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000120002015300000056000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000ab0000007e000000000000005200500054005f0050004100520041003100000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000014000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000ad0000000a010000000000005200500054005f005000410052004100320000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000140002005500000057000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000b20000000a010000000000005200500054005f00500041005200410033000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000014000201ffffffff58000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000b70000000a010000000000004152424f52444552000200000000000b005041525350424f\
+52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000000160100001701000018010000fefffffffefffffffeffffff1c010000feffffff1e0100001f0100002001000021010000feffffff09005041525354415445000400000020\
+1000000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c00504152\
+53504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254\
+41425300020000000000ffff66010000670100006801000069010000feffffff6b0100006c0100006d0100006e010000feffffff700100007101000072010000090050415253544154450004000000001000000800504152414c474e000200000000000b00504152464e544e414d45000600000041726961\
+6c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b0050415253\
+50424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000054000200000000000a0050415252494e444e54000200000000000a005041\
+5246494e444e54000200000000000c0050415253504245460900435553545449544c000b0000005461626c65204c697374000003000b005041525350424554574e000200000000000a00504152424f524445520002000000080049544d53495a450002000000bc00090049544d464c414753000400000077\
+000000080049544d54595045000200000003000b0049544d434c53534e4d45000b0000005f5250545f5449544c45000b0049544d4d4f444c4e4d4500090000005f5250545f47454e000000000000000000000000000000000900504152535441090050415253544154450004000000700001000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f0043005500530054004f004d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000bc0000001a000000000000005200500054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffff\
+ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000bd00000069000000000000005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+14000200590000005b000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000bf0000000a010000000000005200500054005f005400490054004c0045000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000014000201ffffffff5c000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000c400000021000000000000004e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000\
+000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e0050415253\
+50545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090043555354544909005449544c5445585400120000005461626c6520496e666f726d6174696f6e\
+000000000000000000000000000000000000000000000000080049544d53495a0200020001004801090049544d464c414753000400000037000000080049544d5459504500020000000d000b0049544d434c53534e4d45000a0000005441424c0a00494e464f564552534e00040000008c1300000a00494e\
+464f5249454e54000200000001000c00494e464f5041505253495a000200000001000900494e464f4c414e47000200000009040800504152414c474e000200000000000b00504152464e544e414d450001000000000b00504152464e544847485200500054005f005200500054005f0043004f004e005400\
+4e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000c500000006000000000000005200500054005f00\
+49004e0046004f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000c60000004b00000000000000\
+5200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002015d00000060000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000c8000000\
+1c010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000\
+00000000cd000000200100000000000009005041525354415445000400000000c800000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000010008005041525441425300040000001040000000504152464e544e414d450001000000000b00504152464e544847485400020000000e0009005041525354415445000400000000c200000800504152\
+414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245\
+000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000\
+020008005041525441425300080000003a200000104000000000000000000000000000000000000000000000000000000200020001000000090050415253544154450004000000200f00000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b0050415246\
+4e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e0002\
+00000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000054000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400\
+0200000000000c005041525350424546090050415253544154450004000000000000000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f005000410052004100330000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000140002005f00000062000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000d20000000a010000000000005200500054005f00500041005200410034000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000014000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000d70000000a010000000000005200500054005f00540045004d0050004c00410054004500\
+000000000000000000000000000000000000000000000000000000000000000000000000000000001a0002016100000063000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000dc0000006d010000000000005200500054005f0043004f004e005400\
+4e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000e20000000a000000000000004e54484748540002\
+0000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a0050\
+4152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000054000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c00\
+5041525350424546080049544d53495a4500020000004404080049544d5459504500020000000100090049544d464c4147530004000000170000000b0049544d434c53534e4d45000e0000005f5250545f54454d504c415445000b0049544d4d4f444c4e4d4500090000005f5250545f47454e000b00544d\
+504c54464c41475300040000000d0000000a00544d504c54484541440014000000254d4f44554c452509254d4f444c4e414d4525000a00544d504c54464f4f540027000000506f77657244657369676e6572092544415445250925504147454e414d452520255041474525000a00544d504c545449544c00\
+13000000526564756365642057414d205265706f7274000900494e464f4e414d45000f00000052656475636564207265706f7274000900494e464f415554480001000000000900494e464f564552530001000000000a00494e464f444553435200200000004772617068732c20636f6c756d6e7320616e64\
+20616e6e6f746174696f6e7300ffffff0000000054005f005200500054005f000400010002000300040054004c0045000000ffffea000000feffffffec000000ed000000ee000000ef000000feffffff14000201ffffffff1a000201ffffffff7e000000ffffffff00000000000000000000000000000000\
+0000000000000000000000000000000000000000270100001e000000010000005200500054005f0043004f004e0054004e0054005300540042004c000000000001000000fc100000c700000080210000d07e0000d87fc50210000000010000001e000200ffffffffffffffffffffffffb082000010750000\
+d80000000100000030140000000000000000000000000000000000002801000012000000000000003300000054005f0043005500530054004f004d00000000000000000000000000000000000000000000000000040000000000000000000000a8170000e827000004000101ffffffffffffffff80000000\
+000000000000000000000000000000000000000070fe77845259bf0170fe77845259bf01be0000001a000000687700000800010002000300
+3
+14
+14
+0
+StoreSales
+
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffff04000000feffffff05000000060000000700000009000000080000000a0000000b0000000d0000000c0000000f0000000e0000001000000012000000110000001300000014000000150000001700000016000000\
+18000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000016000500ffffffffffffffff2200000000000000000000000000000000000000000000000000000000000000e0babab5d49fbf0103000000c019000000000000310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000004000101ffffffffffffffff1a0000000000000000000000000000000000000000000000f070b8b5d49fbf01e0babab5d49fbf0100000000000000000000000031000000000000000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000004000101ffffffffffffffff040000000000000000000000000000000000000000000000f070b8b5d49fbf01f070b8b5d49fbf010000000000000000000000005200500054005f004900540045004d0000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000680000000000000001000000feffffff03000000040000000500000006000000\
+feffffff08000000090000000a0000000b000000fefffffffeffffff0e000000feffffff10000000110000001200000013000000feffffff15000000160000001700000018000000fefffffffeffffff1b000000feffffff1d0000001e0000001f00000020000000feffffff220000002300000024000000\
+25000000fefffffffefffffffeffffff29000000feffffff2b0000002c000000feffffff2e0000002f0000003000000031000000feffffff33000000340000003500000036000000feffffff38000000390000003a0000003b000000fefffffffeffffff3e000000feffffff400000004100000042000000\
+43000000feffffff45000000460000004700000048000000fefffffffefffffffeffffff4c000000feffffff4e0000004f0000005000000051000000feffffff53000000540000005500000056000000feffffff58000000590000005a0000005b000000feffffff5d0000005e0000005f00000060000000\
+feffffff62000000630000006400000065000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffff080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000a0000005441424c4445534352000b0049544d4d4f444c4e4d4500090000004d50445f43312e30000000000000000000\
+000000000000000000000000a0f5e85b090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000000000000005200500054005f004900540045004d000000000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000000000000800504152\
+414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f5200500054005f005000410052004100310000004c00450000000000000000000000000000000000000000000000000000000000000000000000000000000000140002010300000005000000ffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000020000000a010000000000005200500054005f005000410052004100320000005300540042004c0000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff\
+06000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000700000014010000000000005200500054005f0043005500530054004f004d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+16000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000c0000001b000000000000003200000054005f00500041005200410031000000000000000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000400010102000000130000000d0000000000000000000000000000000000000000000000f070b8b5d49fbf01f070b8b5d49fbf012a0000001c010000000000006d616e000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a005041525249\
+4e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f524452000200\
+00004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900435553545449544c000c0000004465736372697074696f6e000000000000\
+0000000000000000000000000000000000000000000000000000000000000000080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000f0000005441424c434f4c4d4e4445534352000b0049544d\
+4d4f444c4e4d4500090000004d50445f43312e300000000000000000000000000000000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152463100000054005f004900540045004d00\
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffffffffffff0a0000000000000000000000000000000000000000000000f070b8b5d49fbf01f070b8b5d49fbf011a00000064000000000000005200500054005f00\
+4900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000d0000006d00000000000000\
+5200500054005f00500041005200410031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201090000000b000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000f000000\
+0a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff0c000000ffffffff0000000000000000000000000000000000000000000000000000000000000000\
+000000001400000014010000000000004e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b00504152535041465445520002000000\
+03000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000000000000800504152414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b00504152464e544847485400020000000a000a\
+005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f5244\
+4552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000b8001400000000000000000000000000000000000000000000000000000000000000000000000000000000000900435553545449\
+544c000c0000004465736372697074696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000080049544d53495a4500020000004801090049544d464c414753000400000017000000080049544d5459504500020000000d000b0049544d434c53534e4d4500\
+0a0000005441424c434f4c4d4e000b0049544d4d4f444c4e4d4500090000004d50445f43312e3000000000000000000000000000000000000000000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d45000600000041726961\
+6c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b0050415253\
+50424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42545200500054005f0043005500530054004f004d000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000190000001b000000000000005200500054005f004900540045004d0000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000012000201080000000f000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000001a00000068000000000000005200500054005f0050004100520041003100000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000001c0000000a010000000000005200500054005f005000410052004100\
+320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002000e00000011000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000210000000a010000000000004142530002000000\
+0000c2020000000098564b02b80014000200000003000000200022212e00200000000013ff00000000000000000000000000000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b0050415246\
+4e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e0002\
+00000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000b004752505449544c5458540007000000254954454d25000000000001000500000000000000000000000000000000000000000000000000000000000000000001000100010000004c000000240000000c0000000600000033000000640000009001000000000000\
+0200000003000000200022212e00200000000043ff0000005200500054005f0043005500530054004f004d000000115f08c0115f000038ea140000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff58040000808500000000000001000000\
+0000000000000000000000000000000000000000feffffff00000000010000005200500054005f004700520050005400490054004c004500000000001100000000000010000000005200500054005f0043004f004e0054004e005400530054001a0002011000000012000000ffffffff0000000000000000\
+000000000000000000000000000000000000000000000000000000002600000018000000000000005200500054005f0043004f004e0054004e0054005300540042004c000000000004000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff\
+0000000000000000000000000000000000000000000000000000000000000000000000002700000004000000000000003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000101ffffffff\
+ffffffff150000000000000000000000000000000000000000000000f070b8b5d49fbf01f070b8b5d49fbf01ffffffff00000000000000005200500054005f004900540045004d000000fffffefffffffefffffffefffffffefffffffeffffff01000000003c0000a0000000010000000883000000001400\
+12000201ffffffffffffffffffffffffc0ca170028001400c8ca17005401000098c4440200000000000000000000000000000000280000006c000000000000005200500054005f004c0049005300540000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000023000000120002011400000017000000ffffffffe000000001000000f008000023000000d0d2bb77000000000000000000000000000000002a00000092000000030000005200500054005f0050004100520041003100000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000014000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000002d0000000a01000080dcf45b5200500054005f005000410052004100320000000000000000000000000000000000000000000000\
+003c0000000000005000000001000000a8a30000feffffff140002001600000018000000fffffffffefffffffefffffffefffffffefffffffeffffff00000000000000000000000000000000320000000a01000058840000080049544d53495a4500020000007c01090049544d464c414753000400000013\
+000000080049544d5459504500020000000f000b0049544d434c53534e4d45000e0000005441424c434f4c4d4e4c495354000b0049544d4d4f444c4e4d4500090000004d50445f43312e300000000000000000002f00000020010000000000000a004c53544e42434f4c530002000000070008004c535443\
+4f4c53001c0000000100000002000000030000000600000007000000080000001a00000008004c5354464c4753001c0000000500000005000000040000000500000005000000050000000400000008004c535457445448000e000000d5ffd5ff2800f2ff0a000a00280008004c5354534f52540002000000\
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e54484748540002\
+0000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a0050\
+4152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000004245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e0002\
+00000000000a0050090050415253544154450004000000201000000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000\
+000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e0050415253\
+50545854424f524452000200000001000a005041524e4254414253000200000000004245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a0050090050415253544154450004000000001000000800504152414c474e00020000\
+0000000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f00500041005200410033000000000000000000000000000000000000000000000004000000c20300000000000000000000000000000000000014000201ffffffff19000000ffffffff0000000000000000\
+0000000080dcf45bc99fbf0100000000000000000000000000000000370000000a010000000000005200500054005f0043005500530054004f004d00000000003000000001000000e08100000000000000000000000000006800000001000000689f0000f0b8bb7716000200ffffffffffffffffffffffff\
+a0a50000fefffffffefffffffefffffffeffffff000000000000000000000000000000003c0000001b000000feffffff5200500054005f004900540045004d000000000000000000e0000000010000006882000024000000d0d2bb7700000000000000000100000000000000220000001200020107000000\
+1c000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000003d00000063000000000000005200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000080dcf45b\
+14000201ffffffffffffffffffffffffc99fbf01483c0000000000000000000000000000000000000000000000000000000000003f0000000a010000010000004e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a005041524649\
+4e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f5244\
+52000200000001000a005041524e4254414253000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900435553545449544c000c000000436f6c756d6e204c6973740000000000000000000000000000\
+000000000000000000000000000000000000000000000000080049544d53495a4500020000004801090049544d464c414753000400000057000000080049544d5459504500020000000d000b0049544d434c53534e4d4500050000005441424c000b0049544d4d4f444c4e4d4500090000004d50445f4331\
+2e30000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54\
+000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b\
+005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000ffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900504152535441\
+54450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400020000\
+0000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f52445200020000000100\
+0a005041524e42545200500054005f0050004100520041003200000000000000000000000000000004000000c2030000000000000000000000000000000000000000000000000000140002011b0000001e000000ffffffff0000000080dcf45bc99fbf0180dcf45bc99fbf01000000000000000000000000\
+00000000440000000a010000000000005200500054005f0043005500530054004f004d0000000000507b000000000000000000000000000000000000000000000000000000000000380000000100000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\
+000000000000000000000000feffffff00000000feffffff5200500054005f004700520050005400490054004c0045000000fffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff01000000003c00001a0002011d0000001f000000ffffffff000000001800000008000000c0606e02\
+a0131e00000000000000000000000000000000004900000018000000000000005200500054005f0043004f004e0054004e0054005300540042004c000000000000000000000000000000000000000000000000000000000000000000000000001e000200ffffffffffffffffffffffff01000000487f0000\
+0000000000000000e0000000000000000000000000000000000000004a0000000800000001000000414253000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000520065000b004752505449544c54585400070000\
+00254954454d2500000000000000000000000000000000000000000000000000000000000000000000000000000000000300010003000200000000004d4f4e4f00000000020b05090201020202040000000000000000000000000000000000000000000000000000000000007b0000000a00494e464f5645\
+52534e00040000008c1300000a00494e464f5249454e54000200000001000c00494e464f5041505253495a000200000001000900494e464f4c414e470002000000090400000000000000000000000000000000000000000000000000000000001eff1f200600000061000000490000000000000000000000\
+09005041525354415445000400000000c800000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a005041524649\
+4e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00505200500054005f0049004e0046004f000000000000000000003c0000000000002800000001000000b878000000000000\
+00000000000000000000000000000000120002000100000021000000ffffffff107e000060b6bb7750535374887b6e02b0000000000000000000000000000000000000004b0000004b000000020000005200500054005f0050004100520041003100000054005f005000410052004100330000004564466c\
+00000000000000006000000001000000188000001500000014000201ffffffffffffffffffffffff140000000a010000000000000000000000000000000000000000000000000000000000004d0000001c010000000000005200500054005f0050004100520041003200000001000000f052000001000000\
+0100000098340000000000005062446600000000003c0000a000000001000000140002012000000024000000ffffffffc913ed774900010107008a0107008a01dcf9120000000000000000000000000000000000520000002001000001002cfa5200500054005f0050004100520041003300000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff00000000a8610000e0000000010000003877000000000000000000000000000000000000570000000a0100000b0000004152424f52444552000200000000000b\
+005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000001000800504152544142530004000000603b00007a00000065000000150000001600000000000000330000009600000090010000000000000900504152535441\
+5445000400000000c200000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e5400020000\
+0000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f52445200020000000100\
+0a005041524e4254414253000200000002000800504152544142530008000000b61c0000343a000000000000000000000000000052006500670075006c0061007200000000000000090050415253544154450004000000208f00000800504152414c474e000200000002000b00504152464e544e414d4500\
+06000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b00504152535041465445520002000000\
+03000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000000000000000000000000000052006f00090050415253544154450004000000000000000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54\
+000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b\
+005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42545200500054005f00500041005200410034000000000000000100000024790000f600000050790000a000000001000000487600006b26105f00000000d87418001400020023000000\
+25000000fffffffff07218006900000040731f0068fc120069000000000000000000000000000000000000005c0000000a010000000000005200500054005f00540045004d0050004c004100540045000000000000000000e87b0000000000000000000001000000000000001d0000000100000058760000\
+1a000201ffffffff26000000ffffffff707a0000000014000000000018000000080000000000000000000000000000000000000061000000380100000cfc12005200500054005f0043004f004e0054004e0054005300540042004c0000000000000000000000000000000000000000000000000000000000\
+00000000000000001e000200ffffffffffffffffffffffff000000001600000001000000807a00004077000000000000000000000000000000000000660000000400000000000000000000000100000000000000150000001600000003000000310000000000000000000000000000000000000000000000\
+0000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000004000000c2030000000000000000000000000000000000000000000000000000000000000000000041425300020000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000020ff2e2000000000080049544d53495a4500020000004404080049544d5459504500020000000100090049544d464c4147530004000000b70000000b0049544d434c53534e4d45000e0000005f5250545f54454d504c415445000b0049544d4d4f444c4e4d450009\
+0000005f5250545f47454e000b00544d504c54464c4147530004000000800000000a00544d504c54484541440014000000254d4f44554c452509254d4f444c4e414d4525000a00544d504c54464f4f540027000000506f77657244657369676e6572092544415445250925504147454e414d452520255041\
+474525000a00544d504c545449544c0001000000000900494e464f4e414d45000b00000053746f726553616c6573000900494e464f415554480001000000000900494e464f564552530001000000000a00494e464f4445534352000100000000000000000000000001000100000000000000000000000000\
+0000000000000000000000007200000059000000190000000e000000070000003d0000006b00000090010000000000000200000003000000200022212e00200000000033ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+3
+33
+33
+0
+tablenames
+
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffff04000000feffffff05000000060000000700000009000000080000000a0000000b0000000c0000000d0000000e000000110000000f00000010000000fefffffffeffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000016000500ffffffffffffffff140000000000000000000000000000000000000000000000000000000000000090f23c60c6dabf01030000000011000000000000310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000004000101ffffffffffffffff0d0000000000000000000000000000000000000000000000a0a83a60c6dabf01a0a83a60c6dabf0100000000000000000000000031000000000000000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000004000101ffffffffffffffff040000000000000000000000000000000000000000000000a0a83a60c6dabf01a0a83a60c6dabf010000000000000000000000005200500054005f004900540045004d0000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000680000000000000001000000feffffff03000000040000000500000006000000\
+feffffff08000000090000000a0000000b000000fefffffffeffffff0e000000feffffff10000000110000001200000013000000feffffff15000000160000001700000018000000fefffffffeffffff1b000000feffffff1d0000001e0000001f00000020000000feffffff220000002300000024000000\
+25000000fefffffffefffffffeffffff29000000feffffff2b0000002c0000002d0000002e000000feffffff30000000310000003200000033000000feffffff35000000360000003700000038000000feffffff3a0000003b0000003c0000003d000000feffffff3f000000400000004100000042000000\
+fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffff080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000a0000005441424c4445534352000b0049544d4d4f444c4e4d4500090000004d50445f43312e30000000000000000000\
+000000000000000000000000005b4c3c090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000000000000005200500054005f004900540045004d000000000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000000000000800504152\
+414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f5200500054005f005000410052004100310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140002010300000005000000ffffffff\
+000000000000000000000000000000000000000000000000000000000000000000000000020000000a010000000000005200500054005f00500041005200410032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffff\
+06000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000700000014010000000000005200500054005f0043005500530054004f004d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+16000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000c0000001b000000000000003200000054005f004900540045004d0000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000004000100020000000c000000090000000000000000000000000000000000000000000000a0a83a60c6dabf01a0a83a60c6dabf010d00000063000000000000006d616e000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a005041525249\
+4e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f524452000200\
+00004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900435553545449544c000c0000004465736372697074696f6e000000000000\
+000000000000000000000000000000000000000000000000ffffff00ffffff00080049544d53495a4500020000002c01090049544d464c414753000400000013000000080049544d5459504500020000000e000b0049544d434c53534e4d45000a0000005441424c414e4e4f54000b0049544d4d4f444c4e\
+4d4500090000004d50445f43312e300000000000000000000000000000000000ffffff00ffffff00090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f004900540045004d00\
+0000000006000000feffffff08000000090000000a0000000b000000fefffffffeffffff0e000000feffffff1000000012000201ffffffffffffffffffffffff15000000160000001700000018000000feffffff000000000000000000000000000000000d00000068000000200000005200500054005f00\
+50004100520041003100000026000000feffffff28000000290000002a0000002b000000feffffff2d0000002e0000002f0000003000000014000201080000000a000000ffffffff35000000fefffffffeffffffffffffffffffffff000000000000000000000000000000000f0000000a010000ffffffff\
+5200500054005f00500041005200410032000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14000201ffffffff0b000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000014000000\
+14010000ffffffff5200500054005f0043005500530054004f004d000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16000200ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000\
+00000000190000001a000000ffffffff4e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b00504152535041465445520002000000\
+03000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000002000460061006e0066006f006c006400000036002000\
+33002f003400200045006e00760065006c006f0070006500000045006e007600090050415253544154450004000000000000000800504152414c474e000200000000000b00504152464e544e414d45001000000054696d6573204e657720526f6d616e000b00504152464e544847485400020000000a000a\
+005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000003000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f5244\
+4552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e425441425300020000000000d8764b026800650065007400000044002000730069007a0065002000730068006500650074000000430020000900435553545449\
+544c000b000000416e6e6f746174696f6e00760065006c006f00700065002000230031003400000045006e00760065006c006f0070006500080049544d53495a4500020000004801090049544d464c414753000400000077000000080049544d5459504500020000000d000b0049544d434c53534e4d4500\
+050000005441424c000b0049544d4d4f444c4e4d4500090000004d50445f43312e30000001000c00494e464f5041505253495a000200000001000900494e464f090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d45000600000041726961\
+6c000b00504152464e544847485400020000000c000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000a000b0050415253504146544552000200000003000b0050415253\
+50424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42545200500054005f004900540045004d00000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000001a00000063000000000000005200500054005f00500041005200410031000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000014000201070000000f000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000001c0000000a010000000000005200500054005f0050004100520041003200000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000014000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000210000000a010000000000005200500054005f004300550053005400\
+4f004d000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000160002000e00000010000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000feffffff00000000000000004142530002000000\
+0000c2020200000b0894a602f89ea80252445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254090050415253544154450004000000200001000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b0050415246\
+4e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e0002\
+00000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000000000000000000b005041525350424f52445200020000004b000e005041525350545854424f5244\
+52000200000001000a005041524e42540b004752505449544c5458540007000000254954454d2500b61c0000fc3a00000000000000000000000000000000000000000000000000000000000000000000020002000100544154450004000000208f00000800504152414c474e000200000002000b00504152\
+464e544e414d450006000000417269616c000b00504152465200500054005f004700520050005400490054004c004500000000000000000004000000c20300000000000000000000000000000000000000000000000000001a000201ffffffff11000000ffffffff00000000f086533cc6dabf01f086533c\
+c6dabf01000000000000000000000000000000002600000018000000000000005200500054005f0043004f004e0054004e0054005300540042004c0000000000000000006600000001000000fffffffffeffffff0000000068000000010000001e000200ffffffffffffffffffffffff01000000b0765102\
+e0b5bb77b8b5bb77a8b5bb77000000000000000000000000000000002700000006000000c47601005200500054005f0049004e0046004f00000000004564466c00000000020042608800000001000000e02d0100a0010000c00300003100000008b5010000000000120002000100000013000000ffffffff\
+00000010000000003100000054005f004900540000000000000000000000000000000000280000004b000000000000005200500054005f00500041005200410031000000c0b4010004000101506244660000000028bc0100a0000000010000001078010000001400000000002c00000014000201ffffffff\
+ffffffffffffffff38fa12009c11ed7728261800c4fc120069000000000000000000000000000000000000002a0000001c010000000000000a00494e464f564552534e00040000008c1300000a00494e464f5249454e54000200000001000c00494e464f5041505253495a000200000001000900494e464f\
+4c414e470002000000090445464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a005009005041525354415445000400000000c800000800504152414c474e000200000000000b00504152464e544e414d45000600000041726961\
+6c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b0050415253\
+50424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000001000800504152544142530004000000c43b0000535041465445520002000000\
+00000b005041525350424554574e000200000000000a005009005041525354415445000400000000c200000800504152414c474e000200000000000b00504152464e544e414d450006000000417269616c000b00504152465200500054005f005000410052004100320000000000000028bc010000000000\
+28000000010000009043010000000000003c0000000000005000000001000000140002011200000016000000ffffffff5074010060b6bb7750535374f873510201000000000000000000000000000000000000002f00000020010000000000005200500054005f0050004100520041003300000058740100\
+28bc010030bd5102010000004564466c0000000000000000880000000100000010000000a101000014000201ffffffffffffffffffffffff140000000000000000000000000000000000000000000000000000000000000000000000340000000a010000ffffffff5200500054005f005000410052004100\
+3400000080750100000000000100000000000000c0b4010000000000506244660000000028bc0100a000000001000000140002001500000017000000ffffffff0800000090765102f0bfa60200001400f8bfa60200000000000000000000000000000000390000000a010000fd012cfa5200500054005f00\
+540045004d0050004c004100540045000000000000000000000000002600000018000000000000005200500054005f0043004f004e0054001a000201ffffffff18000000ffffffff4872010000000000e00000000100000038570100000000000000000000000000000000003e00000038010000a0010000\
+4e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245000200000000000b0050415253504146544552000200000000000b005041525350424554574e0002\
+00000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000002000800504152544142530008000000b61c0000fc3a000000000000000000000000000000000000\
+00000000000000000000000000000000090050415253544154450004000000208f00000800504152414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000e000a005041524c494e444e54000200000000000a0050415252494e44\
+4e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f524500020000000c000b0050415253504146544552000200000003000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f5244520002000000\
+4b000e005041525350545854424f524452000200000001000a005041524e4254414253000200000000000204020000002805b902d8764b0200000000000000000000000000000000000000000000000000000000000000000000000000000000090050415253544154450004000000000000000800504152\
+414c474e000200000002000b00504152464e544e414d450006000000417269616c000b00504152464e544847485400020000000a000a005041524c494e444e54000200000000000a0050415252494e444e54000200000000000a0050415246494e444e54000200000000000c0050415253504245464f5245\
+000200000000000b0050415253504146544552000200000000000b005041525350424554574e000200000000000a00504152424f52444552000200000000000b005041525350424f52445200020000004b000e005041525350545854424f524452000200000001000a005041524e42544142530002000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080049544d53495a4500020000004404080049544d5459504500020000000100090049544d464c4147530004000000b70000000b0049544d434c53534e4d4500\
+0e0000005f5250545f54454d504c415445000b0049544d4d4f444c4e4d4500090000005f5250545f47454e000b00544d504c54464c4147530004000000800000000a00544d504c54484541440014000000254d4f44554c452509254d4f444c4e414d4525000a00544d504c54464f4f540027000000506f77\
+657244657369676e6572092544415445250925504147454e414d452520255041474525000a00544d504c545449544c0001000000000900494e464f4e414d45000b0000007461626c656e616d6573000900494e464f415554480001000000000900494e464f564552530001000000000a00494e464f444553\
+435200010000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005200500054005f0043004f004e0054004e00540053005400\
+42004c0000000100be010000c071010028bc010030bd5102010000004564466c00000000000000001e000200ffffffffffffffffffffffffc00300003200000001000000487f0000000000000000000000000000000000000000000043000000040000004a00000008000000010000002802000001000000\
+28740100040000000000000000000000f0760100e8720100000000000100000000005000c0b40100490054005062446600000000ffffffffffffffffffffffffe07201006b26105f000000005863a802e8f91200b325105fa069b80228001400a869b8026900000068e5a60268fc12006900000088c1115f\
+1700000000012cfa0400440200000000000000000000000000000000280000006c000000000000005200500054005f004c0049005300540000000000ffffffffffffffffffffffff00000000a201000001000000f0720100b06f0100e0740100e000000001000000d8740100a2010000d0d2bb7700000000\
+000000000100000000000000a0010000a2010000020000003200000000000000000000002a00000092000000030000005200500054005f00500041005200410000000000ffffffffffffffffffffffff000000000000000004000000c2030000000000000000000000000000000000000000000000000000\
+0000000000000000
+/END_TABLE AMCRPRT
+
+/BEGIN_TABLE AMCSLCT
+RPRT N10
+MODL N10
+LOBJ TXT
+/BEGIN_DATA AMCSLCT
+/END_TABLE AMCSLCT
+
+/BEGIN_TABLE AMCCNST
+@ N5
+CNST N10
+MODL N10
+NAME A30
+TYPE A20
+VALE A254
+RSRV N1
+/BEGIN_DATA AMCCNST
+/END_TABLE AMCCNST
+
+/BEGIN_TABLE AMCEXAT
+@ N5
+EXAT N10
+MODL N10
+NAME A30
+TYPE A20
+LABL A254
+VALE A254
+TOBJ N5
+RSRV N1
+/BEGIN_DATA AMCEXAT
+/END_TABLE AMCEXAT
+
+/BEGIN_TABLE AMCEXAV
+@ N5
+EXAV N10
+MODL N10
+EXAT N10
+VALE A254
+OBJT N10
+/BEGIN_DATA AMCEXAV
+/END_TABLE AMCEXAV
+
+/BEGIN_TABLE PBEDTS
+@ N5
+EDTN N10
+NAME A30
+EDIT A254
+TYPE N5
+CNTR N8
+SEQN N5
+FLAG N12
+RSVD A32
+/BEGIN_DATA PBEDTS
+/END_TABLE PBEDTS
+
+/BEGIN_TABLE PBFRMT
+@ N5
+FMTN N10
+NAME A30
+FRMT A254
+TYPE N5
+CNTR N8
+GENE N8
+/BEGIN_DATA PBFRMT
+/END_TABLE PBFRMT
+
+/BEGIN_TABLE PBVALD
+@ N5
+VLDN N10
+NAME A30
+VALD A254
+TYPE N5
+CNTR N8
+VMSG A254
+GENE N8
+/BEGIN_DATA PBVALD
+/END_TABLE PBVALD
+
+/BEGIN_TABLE AMCFONT
+FONT N5
+FNAM A32
+FSIZ N5
+FSTY N5
+/BEGIN_DATA AMCFONT
+1
+Arial
+8
+0
+2
+Arial
+8
+1
+3
+MS Sans Serif
+8
+0
+4
+Arial
+8
+8
+5
+Arial
+6
+0
+/END_TABLE AMCFONT
+
+/BEGIN_TABLE AMCPENS
+PENS N5
+PSTY N5
+PCLR N8
+PWID N5
+/BEGIN_DATA AMCPENS
+1
+1
+0
+0
+2
+1
+255
+0
+3
+1
+16744703
+0
+4
+1
+160
+0
+5
+1
+8388672
+0
+6
+1
+65280
+0
+7
+1
+4194368
+0
+8
+1
+16744448
+0
+9
+1
+16776960
+0
+10
+1
+8388863
+0
+11
+1
+16777088
+0
+12
+1
+8388736
+0
+13
+1
+8388608
+0
+14
+1
+8421568
+0
+15
+1
+16711808
+0
+16
+1
+65535
+0
+17
+1
+16744576
+0
+18
+1
+65344
+0
+19
+1
+65408
+0
+20
+1
+16711680
+0
+21
+2
+255
+0
+/END_TABLE AMCPENS
+
+/BEGIN_TABLE AMCBRSH
+BRSH N5
+BSTY N5
+BCLR N8
+BHAT N5
+/BEGIN_DATA AMCBRSH
+1
+0
+16777215
+0
+2
+0
+32896
+0
+3
+0
+10197915
+0
+4
+0
+10069901
+0
+5
+0
+255
+0
+6
+0
+0
+0
+7
+0
+16744703
+0
+8
+0
+160
+0
+9
+0
+8388672
+0
+10
+0
+65280
+0
+11
+0
+4194368
+0
+12
+0
+16744448
+0
+13
+0
+16776960
+0
+14
+0
+8388863
+0
+15
+0
+16777088
+0
+16
+0
+8388736
+0
+17
+0
+8388608
+0
+18
+0
+16314027
+0
+19
+0
+8421568
+0
+20
+0
+16711808
+0
+21
+0
+65535
+0
+22
+0
+16744576
+0
+23
+0
+65344
+0
+24
+0
+65408
+0
+25
+0
+16744512
+0
+26
+0
+16711680
+0
+27
+0
+12632256
+0
+28
+0
+8454016
+0
+29
+0
+33023
+0
+/END_TABLE AMCBRSH
+
+/BEGIN_TABLE AMCPROP
+PROP N5
+MODL N10
+SUBM N10
+SECT A50
+NPRO A30
+VPRO A80
+/BEGIN_DATA AMCPROP
+0
+1
+0
+WarehouseArchitect
+Shadow
+yes
+1
+1
+0
+WarehouseArchitect
+AutoAdjust
+yes
+2
+1
+0
+WarehouseArchitect
+LineStyle
+2
+3
+1
+0
+WarehouseArchitect
+PrnScale
+100
+4
+1
+0
+WarehouseArchitect
+Orientation
+1
+5
+1
+0
+WarehouseArchitect
+LengthName
+80
+6
+1
+0
+WarehouseArchitect
+UpprCaseName
+no
+7
+1
+0
+WarehouseArchitect
+LowrCaseName
+no
+8
+1
+0
+WarehouseArchitect
+AllowAllName
+yes
+9
+1
+0
+WarehouseArchitect
+AllowChrName
+
+10
+1
+0
+WarehouseArchitect
+InvldChrName
+"+-*/\.,!:;"
+11
+1
+0
+WarehouseArchitect
+NoAccentName
+no
+12
+1
+0
+WarehouseArchitect
+LengthCode
+80
+13
+1
+0
+WarehouseArchitect
+UpprCaseCode
+yes
+14
+1
+0
+WarehouseArchitect
+LowrCaseCode
+no
+15
+1
+0
+WarehouseArchitect
+AllowAllCode
+no
+16
+1
+0
+WarehouseArchitect
+AllowChrCode
+'a'-'z', 'A'-'Z', '0'-'9', "_"
+17
+1
+0
+WarehouseArchitect
+InvldChrCode
+
+18
+1
+0
+WarehouseArchitect
+NoAccentCode
+yes
+19
+1
+0
+WarehouseArchitect
+NoSplitting
+yes
+20
+1
+0
+WarehouseArchitect
+Truncation
+no
+21
+1
+0
+WarehouseArchitect
+Wrapping
+no
+22
+1
+0
+WarehouseArchitect
+WrapLength
+80
+23
+1
+0
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+24
+1
+0
+WarehouseArchitect
+PdmShowName
+yes
+25
+1
+0
+WarehouseArchitect
+PdmShowPrim
+yes
+26
+1
+0
+WarehouseArchitect
+PdmShowColn
+yes
+27
+1
+0
+WarehouseArchitect
+PdmShowDttp
+no
+28
+1
+0
+WarehouseArchitect
+PdmShowDomains
+no
+29
+1
+0
+WarehouseArchitect
+PdmShowKeys
+no
+30
+1
+0
+WarehouseArchitect
+PdmShowKeyLevel
+no
+31
+1
+0
+WarehouseArchitect
+PdmShowAkey
+no
+32
+1
+0
+WarehouseArchitect
+PdmShowIdxLevel
+no
+33
+1
+0
+WarehouseArchitect
+PdmShowNull
+no
+34
+1
+0
+WarehouseArchitect
+PdmShowIndx
+no
+35
+1
+0
+WarehouseArchitect
+PdmShowOwnr
+no
+36
+1
+0
+WarehouseArchitect
+PdmShowNameRefr
+yes
+37
+1
+0
+WarehouseArchitect
+PdmShowJoinRefr
+no
+38
+1
+0
+WarehouseArchitect
+PdmShowConsRefr
+no
+39
+1
+0
+WarehouseArchitect
+PdmShowCnstRefr
+no
+40
+1
+0
+WarehouseArchitect
+PdmShowIdclRefr
+no
+41
+1
+0
+WarehouseArchitect
+PdmShowCardRefr
+no
+42
+1
+0
+WarehouseArchitect
+PdmShowColnView
+no
+43
+1
+0
+WarehouseArchitect
+PdmShowDttpView
+no
+44
+1
+0
+WarehouseArchitect
+PdmShowExprView
+no
+45
+1
+0
+WarehouseArchitect
+PdmShowTablView
+yes
+46
+1
+0
+WarehouseArchitect
+PdmShowOwnrView
+no
+47
+1
+0
+WarehouseArchitect
+PdmRltnMode
+yes
+48
+1
+0
+WarehouseArchitect
+PdmAutoMigrFkey
+yes
+49
+1
+0
+WarehouseArchitect
+PdmAutoMigrDmn
+yes
+50
+1
+0
+WarehouseArchitect
+PdmAutoMigrChk
+yes
+51
+1
+0
+WarehouseArchitect
+PdmAutoMigrRul
+yes
+52
+1
+0
+WarehouseArchitect
+PdmAutoMigrExa
+no
+53
+1
+0
+WarehouseArchitect
+PdmNonAutoMigrDef
+1
+54
+1
+0
+WarehouseArchitect
+PdmRefrUnique
+yes
+55
+1
+0
+WarehouseArchitect
+PdmColnDmnNoDiv
+no
+56
+1
+0
+WarehouseArchitect
+PdmColnDmnDivInd
+1
+57
+1
+0
+WarehouseArchitect
+PdmDefDttp
+
+58
+1
+0
+WarehouseArchitect
+PdmDefMlen
+0
+59
+1
+0
+WarehouseArchitect
+PdmDefPrec
+0
+60
+1
+0
+WarehouseArchitect
+PdmRebuildIndxPK
+yes
+61
+1
+0
+WarehouseArchitect
+PdmRebuildIndxFK
+yes
+62
+1
+0
+WarehouseArchitect
+PdmRebuildIndxAK
+yes
+63
+1
+0
+WarehouseArchitect
+PdmRebuildIndxSK
+yes
+64
+1
+0
+WarehouseArchitect
+PdmRebuildIndxPreserve
+no
+65
+1
+0
+WarehouseArchitect
+PKIndexName
+%TABLE%_PK
+66
+1
+0
+WarehouseArchitect
+FKIndexName
+%REFR%_FK
+67
+1
+0
+WarehouseArchitect
+AKIndexName
+%AKEY%_AK
+68
+1
+0
+WarehouseArchitect
+SKIndexName
+%SKEY%_SK
+69
+1
+0
+WarehouseArchitect
+IndexThreshold
+
+70
+1
+0
+WarehouseArchitect
+DwShowSSrv
+no
+71
+1
+0
+WarehouseArchitect
+DwShowLCol
+yes
+72
+1
+0
+WarehouseArchitect
+DwShowLColDttp
+yes
+73
+1
+0
+WarehouseArchitect
+DwShowIQIndx
+yes
+74
+1
+0
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+75
+1
+0
+WarehouseArchitect
+DwShowNameJref
+no
+76
+1
+0
+WarehouseArchitect
+DwShowJoinJref
+yes
+77
+1
+0
+WarehouseArchitect
+DwShowCardJref
+no
+78
+1
+0
+WarehouseArchitect
+Language
+1033
+79
+1
+0
+WarehouseArchitect
+Multidimensional tree
+0,1,-1,-1,-1,-1,258,112,680,581
+80
+1
+0
+WarehouseArchitect
+DBOAltIndex
+yes
+81
+1
+0
+WarehouseArchitect
+DBOAltrIndx
+no
+82
+1
+0
+WarehouseArchitect
+DBOFornIndx
+no
+83
+1
+0
+WarehouseArchitect
+DBOPrimIndx
+no
+84
+1
+0
+WarehouseArchitect
+DBOOthrIndx
+no
+85
+1
+0
+WarehouseArchitect
+DBOConsIOpt
+no
+86
+1
+0
+WarehouseArchitect
+DBOTypeTrgr
+0
+87
+1
+0
+WarehouseArchitect
+DBOAltTrgr
+yes
+88
+1
+0
+WarehouseArchitect
+DBOCreaTrgr
+yes
+89
+1
+0
+WarehouseArchitect
+DBODeltTrgr
+yes
+90
+1
+0
+WarehouseArchitect
+DBODropTrgr
+no
+91
+1
+0
+WarehouseArchitect
+DBOInstTrgr
+yes
+92
+1
+0
+WarehouseArchitect
+DBOUpdtTrgr
+yes
+93
+1
+0
+WarehouseArchitect
+DBOChkC1
+yes
+94
+1
+0
+WarehouseArchitect
+DBOChkC2
+yes
+95
+1
+0
+WarehouseArchitect
+DBOChkC3
+yes
+96
+1
+0
+WarehouseArchitect
+DBOChkC4
+yes
+97
+1
+0
+WarehouseArchitect
+DBOChkC5
+yes
+98
+1
+0
+WarehouseArchitect
+DBOChkC6
+yes
+99
+1
+0
+WarehouseArchitect
+DBOChkC7
+yes
+100
+1
+0
+WarehouseArchitect
+DBOChkC8
+yes
+101
+1
+0
+WarehouseArchitect
+DBOChkC9
+yes
+102
+1
+0
+WarehouseArchitect
+DBOChkC10
+yes
+103
+1
+0
+WarehouseArchitect
+DBOChkC11
+yes
+104
+1
+0
+WarehouseArchitect
+DBOStdMsg
+yes
+105
+1
+0
+WarehouseArchitect
+DBOMsgTab
+
+106
+1
+0
+WarehouseArchitect
+DBOMsgNo
+
+107
+1
+0
+WarehouseArchitect
+DBOMsgTxt
+
+108
+1
+0
+WarehouseArchitect
+DBOAltView
+yes
+109
+1
+0
+WarehouseArchitect
+DBOCreaView
+no
+110
+1
+0
+WarehouseArchitect
+DBODropView
+no
+111
+1
+0
+WarehouseArchitect
+DBOClosDtbs
+no
+112
+1
+0
+WarehouseArchitect
+DBOOpenDtbs
+no
+113
+1
+0
+WarehouseArchitect
+DBOConsAkey
+no
+114
+1
+0
+WarehouseArchitect
+DBOConsChck
+yes
+115
+1
+0
+WarehouseArchitect
+DBOConsTChk
+no
+116
+1
+0
+WarehouseArchitect
+DBOConsCChk
+no
+117
+1
+0
+WarehouseArchitect
+DBOConsDChk
+no
+118
+1
+0
+WarehouseArchitect
+DBOConsDeft
+no
+119
+1
+0
+WarehouseArchitect
+DBOConsFkey
+no
+120
+1
+0
+WarehouseArchitect
+DBOConsIDcl
+no
+121
+1
+0
+WarehouseArchitect
+DBOConsPkey
+no
+122
+1
+0
+WarehouseArchitect
+DBOConsIDUR
+yes
+123
+1
+0
+WarehouseArchitect
+DBOConsIDUC
+no
+124
+1
+0
+WarehouseArchitect
+DBOConsIDUN
+no
+125
+1
+0
+WarehouseArchitect
+DBOConsIDUD
+no
+126
+1
+0
+WarehouseArchitect
+DBOConsIDDR
+yes
+127
+1
+0
+WarehouseArchitect
+DBOConsIDDC
+yes
+128
+1
+0
+WarehouseArchitect
+DBOConsIDDN
+no
+129
+1
+0
+WarehouseArchitect
+DBOConsIDDD
+no
+130
+1
+0
+WarehouseArchitect
+DBOCreaDtbs
+no
+131
+1
+0
+WarehouseArchitect
+DBOCreaProc
+yes
+132
+1
+0
+WarehouseArchitect
+DBODropProc
+no
+133
+1
+0
+WarehouseArchitect
+DBODropDtbs
+no
+134
+1
+0
+WarehouseArchitect
+DBOConsDOpt
+no
+135
+1
+0
+WarehouseArchitect
+DBOConsDBSc
+no
+136
+1
+0
+WarehouseArchitect
+DBOConsDESc
+no
+137
+1
+0
+WarehouseArchitect
+DBODropIndx
+no
+138
+1
+0
+WarehouseArchitect
+DBODropTabl
+no
+139
+1
+0
+WarehouseArchitect
+DBOCreaTabl
+yes
+140
+1
+0
+WarehouseArchitect
+DBOConsTBSc
+no
+141
+1
+0
+WarehouseArchitect
+DBOConsTESc
+no
+142
+1
+0
+WarehouseArchitect
+DBOConsTOpt
+no
+143
+1
+0
+WarehouseArchitect
+DBODrpTmpTbl
+yes
+144
+1
+0
+WarehouseArchitect
+DBOAltTable
+yes
+145
+1
+0
+WarehouseArchitect
+DBOUseTrgUR
+no
+146
+1
+0
+WarehouseArchitect
+DBOUseTrgDR
+no
+147
+1
+0
+WarehouseArchitect
+DBOUseTrgDC
+no
+148
+1
+0
+WarehouseArchitect
+DBOLowrCase
+yes
+149
+1
+0
+WarehouseArchitect
+DBOUpprCase
+no
+150
+1
+0
+WarehouseArchitect
+DBONoAccent
+no
+151
+1
+0
+WarehouseArchitect
+DBOAnsiChar
+no
+152
+1
+0
+WarehouseArchitect
+DBOAddTitle
+yes
+153
+1
+0
+WarehouseArchitect
+DBOUseNames
+yes
+154
+1
+0
+WarehouseArchitect
+DBOSqlODBC
+no
+155
+1
+0
+WarehouseArchitect
+DBOChkModl
+no
+156
+1
+0
+WarehouseArchitect
+OLAPFile
+
+157
+1
+0
+WarehouseArchitect
+OLAPDbms
+
+158
+1
+0
+WarehouseArchitect
+OLAPUseNames
+yes
+159
+1
+0
+WarehouseArchitect
+DBOCreaLTbl
+yes
+160
+1
+0
+WarehouseArchitect
+DBOConsIBSc
+yes
+161
+1
+0
+WarehouseArchitect
+DBOConsIESc
+yes
+162
+1
+0
+WarehouseArchitect
+DBODropLTbl
+no
+163
+1
+0
+WarehouseArchitect
+DBOCreaLCol
+yes
+164
+1
+0
+WarehouseArchitect
+DBODropLCol
+no
+165
+1
+0
+WarehouseArchitect
+DBOCreaJIdx
+no
+166
+1
+0
+WarehouseArchitect
+DBOConsJBSc
+no
+167
+1
+0
+WarehouseArchitect
+DBOConsJESc
+no
+168
+1
+0
+WarehouseArchitect
+DBODropJIdx
+no
+169
+1
+0
+WarehouseArchitect
+DBOCreaIspc
+no
+170
+1
+0
+WarehouseArchitect
+DBODropIspc
+no
+171
+1
+0
+WarehouseArchitect
+DBOUseTrgUC
+no
+172
+1
+0
+WarehouseArchitect
+DBOUseTrgUN
+no
+173
+1
+0
+WarehouseArchitect
+DBOUseTrgUD
+no
+174
+1
+0
+WarehouseArchitect
+DBOUseTrgDN
+no
+175
+1
+0
+WarehouseArchitect
+DBOUseTrgDD
+no
+176
+1
+0
+WarehouseArchitect
+DBOTablComm
+no
+177
+1
+0
+WarehouseArchitect
+DBOViewComm
+no
+178
+1
+0
+WarehouseArchitect
+DBOConsUddt
+no
+179
+1
+0
+WarehouseArchitect
+DBOColnComm
+no
+180
+1
+0
+WarehouseArchitect
+DBOCreaTspc
+no
+181
+1
+0
+WarehouseArchitect
+DBOCreaStor
+no
+182
+1
+0
+WarehouseArchitect
+DBODropTspc
+no
+183
+1
+0
+WarehouseArchitect
+DBODropStor
+no
+184
+1
+0
+WarehouseArchitect
+DBOCreaUddt
+no
+185
+1
+0
+WarehouseArchitect
+DBODropUddt
+no
+186
+1
+0
+WarehouseArchitect
+DBOCreTmpTbl
+no
+187
+1
+0
+WarehouseArchitect
+DBOAltProc
+no
+188
+1
+0
+WarehouseArchitect
+DBOAutoArch
+no
+189
+1
+0
+WarehouseArchitect
+OLAPDef
+
+190
+1
+0
+WarehouseArchitect
+OLAPPath
+
+191
+1
+0
+WarehouseArchitect
+OLAPData
+
+192
+1
+0
+WarehouseArchitect
+OLAPScri
+
+193
+1
+0
+WarehouseArchitect
+OLAPExpressScript
+yes
+194
+1
+0
+WarehouseArchitect
+OLAPExpressProgram
+yes
+195
+1
+0
+WarehouseArchitect
+OLAPGeneHeader
+yes
+196
+1
+0
+WarehouseArchitect
+EXTRDef
+
+197
+1
+0
+WarehouseArchitect
+DBOUseQualifier
+no
+198
+1
+0
+WarehouseArchitect
+External Sources
+0,1,-1,-1,-1,-1,353,246,934,689
+199
+1
+0
+WarehouseArchitect
+DBOUseUddt
+no
+200
+1
+132
+WarehouseArchitect
+PrnScale
+100
+201
+1
+132
+WarehouseArchitect
+Orientation
+2
+202
+1
+132
+WarehouseArchitect
+NoSplitting
+yes
+203
+1
+132
+WarehouseArchitect
+Truncation
+no
+204
+1
+132
+WarehouseArchitect
+Wrapping
+no
+205
+1
+132
+WarehouseArchitect
+WrapLength
+80
+206
+1
+132
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+207
+1
+132
+WarehouseArchitect
+PdmShowName
+yes
+208
+1
+132
+WarehouseArchitect
+PdmShowPrim
+no
+209
+1
+132
+WarehouseArchitect
+PdmShowColn
+no
+210
+1
+132
+WarehouseArchitect
+PdmShowDttp
+no
+211
+1
+132
+WarehouseArchitect
+PdmShowDomains
+no
+212
+1
+132
+WarehouseArchitect
+PdmShowKeys
+no
+213
+1
+132
+WarehouseArchitect
+PdmShowKeyLevel
+no
+214
+1
+132
+WarehouseArchitect
+PdmShowAkey
+no
+215
+1
+132
+WarehouseArchitect
+PdmShowIdxLevel
+no
+216
+1
+132
+WarehouseArchitect
+PdmShowNull
+no
+217
+1
+132
+WarehouseArchitect
+PdmShowIndx
+no
+218
+1
+132
+WarehouseArchitect
+PdmShowOwnr
+no
+219
+1
+132
+WarehouseArchitect
+PdmShowNameRefr
+yes
+220
+1
+132
+WarehouseArchitect
+PdmShowJoinRefr
+no
+221
+1
+132
+WarehouseArchitect
+PdmShowConsRefr
+no
+222
+1
+132
+WarehouseArchitect
+PdmShowCnstRefr
+no
+223
+1
+132
+WarehouseArchitect
+PdmShowIdclRefr
+no
+224
+1
+132
+WarehouseArchitect
+PdmShowCardRefr
+no
+225
+1
+132
+WarehouseArchitect
+PdmShowColnView
+no
+226
+1
+132
+WarehouseArchitect
+PdmShowDttpView
+no
+227
+1
+132
+WarehouseArchitect
+PdmShowExprView
+no
+228
+1
+132
+WarehouseArchitect
+PdmShowTablView
+yes
+229
+1
+132
+WarehouseArchitect
+PdmShowOwnrView
+no
+230
+1
+132
+WarehouseArchitect
+PdmRltnMode
+yes
+231
+1
+132
+WarehouseArchitect
+DwShowSSrv
+yes
+232
+1
+132
+WarehouseArchitect
+DwShowLCol
+yes
+233
+1
+132
+WarehouseArchitect
+DwShowLColDttp
+yes
+234
+1
+132
+WarehouseArchitect
+DwShowIQIndx
+yes
+235
+1
+132
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+236
+1
+132
+WarehouseArchitect
+DwShowNameJref
+no
+237
+1
+132
+WarehouseArchitect
+DwShowJoinJref
+yes
+238
+1
+132
+WarehouseArchitect
+DwShowCardJref
+no
+239
+1
+147
+WarehouseArchitect
+PrnScale
+100
+240
+1
+147
+WarehouseArchitect
+Orientation
+1
+241
+1
+147
+WarehouseArchitect
+NoSplitting
+yes
+242
+1
+147
+WarehouseArchitect
+Truncation
+no
+243
+1
+147
+WarehouseArchitect
+Wrapping
+no
+244
+1
+147
+WarehouseArchitect
+WrapLength
+80
+245
+1
+147
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+246
+1
+147
+WarehouseArchitect
+PdmShowName
+yes
+247
+1
+147
+WarehouseArchitect
+PdmShowPrim
+yes
+248
+1
+147
+WarehouseArchitect
+PdmShowColn
+yes
+249
+1
+147
+WarehouseArchitect
+PdmShowDttp
+no
+250
+1
+147
+WarehouseArchitect
+PdmShowDomains
+no
+251
+1
+147
+WarehouseArchitect
+PdmShowKeys
+no
+252
+1
+147
+WarehouseArchitect
+PdmShowNull
+no
+253
+1
+147
+WarehouseArchitect
+PdmShowIndx
+no
+254
+1
+147
+WarehouseArchitect
+PdmShowOwnr
+no
+255
+1
+147
+WarehouseArchitect
+PdmShowNameRefr
+yes
+256
+1
+147
+WarehouseArchitect
+PdmShowJoinRefr
+no
+257
+1
+147
+WarehouseArchitect
+PdmShowCnstRefr
+no
+258
+1
+147
+WarehouseArchitect
+PdmShowIdclRefr
+no
+259
+1
+147
+WarehouseArchitect
+PdmShowCardRefr
+no
+260
+1
+147
+WarehouseArchitect
+PdmShowColnView
+no
+261
+1
+147
+WarehouseArchitect
+PdmShowDttpView
+no
+262
+1
+147
+WarehouseArchitect
+PdmShowExprView
+no
+263
+1
+147
+WarehouseArchitect
+PdmShowTablView
+yes
+264
+1
+147
+WarehouseArchitect
+PdmShowOwnrView
+no
+265
+1
+147
+WarehouseArchitect
+PdmRltnMode
+yes
+266
+1
+147
+WarehouseArchitect
+DwShowSSrv
+yes
+267
+1
+147
+WarehouseArchitect
+DwShowLCol
+yes
+268
+1
+147
+WarehouseArchitect
+DwShowLColDttp
+yes
+269
+1
+147
+WarehouseArchitect
+DwShowIQIndx
+yes
+270
+1
+147
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+271
+1
+147
+WarehouseArchitect
+DwShowNameJref
+no
+272
+1
+147
+WarehouseArchitect
+DwShowJoinJref
+yes
+273
+1
+147
+WarehouseArchitect
+DwShowCardJref
+no
+274
+1
+151
+WarehouseArchitect
+PrnScale
+100
+275
+1
+151
+WarehouseArchitect
+Orientation
+1
+276
+1
+151
+WarehouseArchitect
+NoSplitting
+yes
+277
+1
+151
+WarehouseArchitect
+Truncation
+no
+278
+1
+151
+WarehouseArchitect
+Wrapping
+no
+279
+1
+151
+WarehouseArchitect
+WrapLength
+80
+280
+1
+151
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+281
+1
+151
+WarehouseArchitect
+PdmShowName
+yes
+282
+1
+151
+WarehouseArchitect
+PdmShowPrim
+yes
+283
+1
+151
+WarehouseArchitect
+PdmShowColn
+yes
+284
+1
+151
+WarehouseArchitect
+PdmShowDttp
+no
+285
+1
+151
+WarehouseArchitect
+PdmShowDomains
+no
+286
+1
+151
+WarehouseArchitect
+PdmShowKeys
+no
+287
+1
+151
+WarehouseArchitect
+PdmShowNull
+no
+288
+1
+151
+WarehouseArchitect
+PdmShowIndx
+no
+289
+1
+151
+WarehouseArchitect
+PdmShowOwnr
+no
+290
+1
+151
+WarehouseArchitect
+PdmShowNameRefr
+yes
+291
+1
+151
+WarehouseArchitect
+PdmShowJoinRefr
+no
+292
+1
+151
+WarehouseArchitect
+PdmShowCnstRefr
+no
+293
+1
+151
+WarehouseArchitect
+PdmShowIdclRefr
+no
+294
+1
+151
+WarehouseArchitect
+PdmShowCardRefr
+no
+295
+1
+151
+WarehouseArchitect
+PdmShowColnView
+no
+296
+1
+151
+WarehouseArchitect
+PdmShowDttpView
+no
+297
+1
+151
+WarehouseArchitect
+PdmShowExprView
+no
+298
+1
+151
+WarehouseArchitect
+PdmShowTablView
+yes
+299
+1
+151
+WarehouseArchitect
+PdmShowOwnrView
+no
+300
+1
+151
+WarehouseArchitect
+PdmRltnMode
+yes
+301
+1
+151
+WarehouseArchitect
+DwShowSSrv
+yes
+302
+1
+151
+WarehouseArchitect
+DwShowLCol
+yes
+303
+1
+151
+WarehouseArchitect
+DwShowLColDttp
+yes
+304
+1
+151
+WarehouseArchitect
+DwShowIQIndx
+yes
+305
+1
+151
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+306
+1
+151
+WarehouseArchitect
+DwShowNameJref
+no
+307
+1
+151
+WarehouseArchitect
+DwShowJoinJref
+yes
+308
+1
+151
+WarehouseArchitect
+DwShowCardJref
+no
+309
+1
+152
+WarehouseArchitect
+PrnScale
+100
+310
+1
+152
+WarehouseArchitect
+Orientation
+1
+311
+1
+152
+WarehouseArchitect
+NoSplitting
+yes
+312
+1
+152
+WarehouseArchitect
+Truncation
+no
+313
+1
+152
+WarehouseArchitect
+Wrapping
+no
+314
+1
+152
+WarehouseArchitect
+WrapLength
+80
+315
+1
+152
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+316
+1
+152
+WarehouseArchitect
+PdmShowName
+yes
+317
+1
+152
+WarehouseArchitect
+PdmShowPrim
+yes
+318
+1
+152
+WarehouseArchitect
+PdmShowColn
+yes
+319
+1
+152
+WarehouseArchitect
+PdmShowDttp
+no
+320
+1
+152
+WarehouseArchitect
+PdmShowDomains
+no
+321
+1
+152
+WarehouseArchitect
+PdmShowKeys
+no
+322
+1
+152
+WarehouseArchitect
+PdmShowNull
+no
+323
+1
+152
+WarehouseArchitect
+PdmShowIndx
+no
+324
+1
+152
+WarehouseArchitect
+PdmShowOwnr
+no
+325
+1
+152
+WarehouseArchitect
+PdmShowNameRefr
+yes
+326
+1
+152
+WarehouseArchitect
+PdmShowJoinRefr
+no
+327
+1
+152
+WarehouseArchitect
+PdmShowCnstRefr
+no
+328
+1
+152
+WarehouseArchitect
+PdmShowIdclRefr
+no
+329
+1
+152
+WarehouseArchitect
+PdmShowCardRefr
+no
+330
+1
+152
+WarehouseArchitect
+PdmShowColnView
+no
+331
+1
+152
+WarehouseArchitect
+PdmShowDttpView
+no
+332
+1
+152
+WarehouseArchitect
+PdmShowExprView
+no
+333
+1
+152
+WarehouseArchitect
+PdmShowTablView
+yes
+334
+1
+152
+WarehouseArchitect
+PdmShowOwnrView
+no
+335
+1
+152
+WarehouseArchitect
+PdmRltnMode
+yes
+336
+1
+152
+WarehouseArchitect
+DwShowSSrv
+yes
+337
+1
+152
+WarehouseArchitect
+DwShowLCol
+yes
+338
+1
+152
+WarehouseArchitect
+DwShowLColDttp
+yes
+339
+1
+152
+WarehouseArchitect
+DwShowIQIndx
+yes
+340
+1
+152
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+341
+1
+152
+WarehouseArchitect
+DwShowNameJref
+no
+342
+1
+152
+WarehouseArchitect
+DwShowJoinJref
+yes
+343
+1
+152
+WarehouseArchitect
+DwShowCardJref
+no
+344
+1
+156
+WarehouseArchitect
+PrnScale
+100
+345
+1
+156
+WarehouseArchitect
+Orientation
+1
+346
+1
+156
+WarehouseArchitect
+NoSplitting
+yes
+347
+1
+156
+WarehouseArchitect
+Truncation
+no
+348
+1
+156
+WarehouseArchitect
+Wrapping
+no
+349
+1
+156
+WarehouseArchitect
+WrapLength
+80
+350
+1
+156
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+351
+1
+156
+WarehouseArchitect
+PdmShowName
+yes
+352
+1
+156
+WarehouseArchitect
+PdmShowPrim
+yes
+353
+1
+156
+WarehouseArchitect
+PdmShowColn
+yes
+354
+1
+156
+WarehouseArchitect
+PdmShowDttp
+no
+355
+1
+156
+WarehouseArchitect
+PdmShowDomains
+no
+356
+1
+156
+WarehouseArchitect
+PdmShowKeys
+no
+357
+1
+156
+WarehouseArchitect
+PdmShowNull
+no
+358
+1
+156
+WarehouseArchitect
+PdmShowIndx
+no
+359
+1
+156
+WarehouseArchitect
+PdmShowOwnr
+no
+360
+1
+156
+WarehouseArchitect
+PdmShowNameRefr
+yes
+361
+1
+156
+WarehouseArchitect
+PdmShowJoinRefr
+no
+362
+1
+156
+WarehouseArchitect
+PdmShowCnstRefr
+no
+363
+1
+156
+WarehouseArchitect
+PdmShowIdclRefr
+no
+364
+1
+156
+WarehouseArchitect
+PdmShowCardRefr
+no
+365
+1
+156
+WarehouseArchitect
+PdmShowColnView
+no
+366
+1
+156
+WarehouseArchitect
+PdmShowDttpView
+no
+367
+1
+156
+WarehouseArchitect
+PdmShowExprView
+no
+368
+1
+156
+WarehouseArchitect
+PdmShowTablView
+yes
+369
+1
+156
+WarehouseArchitect
+PdmShowOwnrView
+no
+370
+1
+156
+WarehouseArchitect
+PdmRltnMode
+yes
+371
+1
+156
+WarehouseArchitect
+DwShowSSrv
+yes
+372
+1
+156
+WarehouseArchitect
+DwShowLCol
+yes
+373
+1
+156
+WarehouseArchitect
+DwShowLColDttp
+yes
+374
+1
+156
+WarehouseArchitect
+DwShowIQIndx
+yes
+375
+1
+156
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+376
+1
+156
+WarehouseArchitect
+DwShowNameJref
+no
+377
+1
+156
+WarehouseArchitect
+DwShowJoinJref
+yes
+378
+1
+156
+WarehouseArchitect
+DwShowCardJref
+no
+379
+1
+158
+WarehouseArchitect
+PrnScale
+100
+380
+1
+158
+WarehouseArchitect
+Orientation
+1
+381
+1
+158
+WarehouseArchitect
+NoSplitting
+yes
+382
+1
+158
+WarehouseArchitect
+Truncation
+no
+383
+1
+158
+WarehouseArchitect
+Wrapping
+no
+384
+1
+158
+WarehouseArchitect
+WrapLength
+80
+385
+1
+158
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+386
+1
+158
+WarehouseArchitect
+PdmShowName
+yes
+387
+1
+158
+WarehouseArchitect
+PdmShowPrim
+yes
+388
+1
+158
+WarehouseArchitect
+PdmShowColn
+yes
+389
+1
+158
+WarehouseArchitect
+PdmShowDttp
+no
+390
+1
+158
+WarehouseArchitect
+PdmShowDomains
+no
+391
+1
+158
+WarehouseArchitect
+PdmShowKeys
+no
+392
+1
+158
+WarehouseArchitect
+PdmShowNull
+no
+393
+1
+158
+WarehouseArchitect
+PdmShowIndx
+no
+394
+1
+158
+WarehouseArchitect
+PdmShowOwnr
+no
+395
+1
+158
+WarehouseArchitect
+PdmShowNameRefr
+yes
+396
+1
+158
+WarehouseArchitect
+PdmShowJoinRefr
+no
+397
+1
+158
+WarehouseArchitect
+PdmShowCnstRefr
+no
+398
+1
+158
+WarehouseArchitect
+PdmShowIdclRefr
+no
+399
+1
+158
+WarehouseArchitect
+PdmShowCardRefr
+no
+400
+1
+158
+WarehouseArchitect
+PdmShowColnView
+no
+401
+1
+158
+WarehouseArchitect
+PdmShowDttpView
+no
+402
+1
+158
+WarehouseArchitect
+PdmShowExprView
+no
+403
+1
+158
+WarehouseArchitect
+PdmShowTablView
+yes
+404
+1
+158
+WarehouseArchitect
+PdmShowOwnrView
+no
+405
+1
+158
+WarehouseArchitect
+PdmRltnMode
+yes
+406
+1
+158
+WarehouseArchitect
+DwShowSSrv
+yes
+407
+1
+158
+WarehouseArchitect
+DwShowLCol
+yes
+408
+1
+158
+WarehouseArchitect
+DwShowLColDttp
+yes
+409
+1
+158
+WarehouseArchitect
+DwShowIQIndx
+yes
+410
+1
+158
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+411
+1
+158
+WarehouseArchitect
+DwShowNameJref
+no
+412
+1
+158
+WarehouseArchitect
+DwShowJoinJref
+yes
+413
+1
+158
+WarehouseArchitect
+DwShowCardJref
+no
+414
+1
+161
+WarehouseArchitect
+PrnScale
+100
+415
+1
+161
+WarehouseArchitect
+Orientation
+1
+416
+1
+161
+WarehouseArchitect
+NoSplitting
+yes
+417
+1
+161
+WarehouseArchitect
+Truncation
+no
+418
+1
+161
+WarehouseArchitect
+Wrapping
+no
+419
+1
+161
+WarehouseArchitect
+WrapLength
+80
+420
+1
+161
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+421
+1
+161
+WarehouseArchitect
+PdmShowName
+yes
+422
+1
+161
+WarehouseArchitect
+PdmShowPrim
+yes
+423
+1
+161
+WarehouseArchitect
+PdmShowColn
+yes
+424
+1
+161
+WarehouseArchitect
+PdmShowDttp
+no
+425
+1
+161
+WarehouseArchitect
+PdmShowDomains
+no
+426
+1
+161
+WarehouseArchitect
+PdmShowKeys
+no
+427
+1
+161
+WarehouseArchitect
+PdmShowNull
+no
+428
+1
+161
+WarehouseArchitect
+PdmShowIndx
+no
+429
+1
+161
+WarehouseArchitect
+PdmShowOwnr
+no
+430
+1
+161
+WarehouseArchitect
+PdmShowNameRefr
+yes
+431
+1
+161
+WarehouseArchitect
+PdmShowJoinRefr
+no
+432
+1
+161
+WarehouseArchitect
+PdmShowCnstRefr
+no
+433
+1
+161
+WarehouseArchitect
+PdmShowIdclRefr
+no
+434
+1
+161
+WarehouseArchitect
+PdmShowCardRefr
+no
+435
+1
+161
+WarehouseArchitect
+PdmShowColnView
+no
+436
+1
+161
+WarehouseArchitect
+PdmShowDttpView
+no
+437
+1
+161
+WarehouseArchitect
+PdmShowExprView
+no
+438
+1
+161
+WarehouseArchitect
+PdmShowTablView
+yes
+439
+1
+161
+WarehouseArchitect
+PdmShowOwnrView
+no
+440
+1
+161
+WarehouseArchitect
+PdmRltnMode
+yes
+441
+1
+161
+WarehouseArchitect
+DwShowSSrv
+yes
+442
+1
+161
+WarehouseArchitect
+DwShowLCol
+yes
+443
+1
+161
+WarehouseArchitect
+DwShowLColDttp
+yes
+444
+1
+161
+WarehouseArchitect
+DwShowIQIndx
+yes
+445
+1
+161
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+446
+1
+161
+WarehouseArchitect
+DwShowNameJref
+no
+447
+1
+161
+WarehouseArchitect
+DwShowJoinJref
+yes
+448
+1
+161
+WarehouseArchitect
+DwShowCardJref
+no
+449
+1
+170
+WarehouseArchitect
+PrnScale
+100
+450
+1
+170
+WarehouseArchitect
+Orientation
+1
+451
+1
+170
+WarehouseArchitect
+NoSplitting
+yes
+452
+1
+170
+WarehouseArchitect
+Truncation
+no
+453
+1
+170
+WarehouseArchitect
+Wrapping
+no
+454
+1
+170
+WarehouseArchitect
+WrapLength
+80
+455
+1
+170
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+456
+1
+170
+WarehouseArchitect
+PdmShowName
+yes
+457
+1
+170
+WarehouseArchitect
+PdmShowPrim
+yes
+458
+1
+170
+WarehouseArchitect
+PdmShowColn
+yes
+459
+1
+170
+WarehouseArchitect
+PdmShowDttp
+no
+460
+1
+170
+WarehouseArchitect
+PdmShowDomains
+no
+461
+1
+170
+WarehouseArchitect
+PdmShowKeys
+no
+462
+1
+170
+WarehouseArchitect
+PdmShowNull
+no
+463
+1
+170
+WarehouseArchitect
+PdmShowIndx
+no
+464
+1
+170
+WarehouseArchitect
+PdmShowOwnr
+no
+465
+1
+170
+WarehouseArchitect
+PdmShowNameRefr
+yes
+466
+1
+170
+WarehouseArchitect
+PdmShowJoinRefr
+no
+467
+1
+170
+WarehouseArchitect
+PdmShowCnstRefr
+no
+468
+1
+170
+WarehouseArchitect
+PdmShowIdclRefr
+no
+469
+1
+170
+WarehouseArchitect
+PdmShowCardRefr
+no
+470
+1
+170
+WarehouseArchitect
+PdmShowColnView
+no
+471
+1
+170
+WarehouseArchitect
+PdmShowDttpView
+no
+472
+1
+170
+WarehouseArchitect
+PdmShowExprView
+no
+473
+1
+170
+WarehouseArchitect
+PdmShowTablView
+yes
+474
+1
+170
+WarehouseArchitect
+PdmShowOwnrView
+no
+475
+1
+170
+WarehouseArchitect
+PdmRltnMode
+yes
+476
+1
+170
+WarehouseArchitect
+DwShowSSrv
+yes
+477
+1
+170
+WarehouseArchitect
+DwShowLCol
+yes
+478
+1
+170
+WarehouseArchitect
+DwShowLColDttp
+yes
+479
+1
+170
+WarehouseArchitect
+DwShowIQIndx
+yes
+480
+1
+170
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+481
+1
+170
+WarehouseArchitect
+DwShowNameJref
+no
+482
+1
+170
+WarehouseArchitect
+DwShowJoinJref
+yes
+483
+1
+170
+WarehouseArchitect
+DwShowCardJref
+no
+484
+1
+176
+WarehouseArchitect
+PrnScale
+100
+485
+1
+176
+WarehouseArchitect
+Orientation
+1
+486
+1
+176
+WarehouseArchitect
+NoSplitting
+yes
+487
+1
+176
+WarehouseArchitect
+Truncation
+no
+488
+1
+176
+WarehouseArchitect
+Wrapping
+no
+489
+1
+176
+WarehouseArchitect
+WrapLength
+80
+490
+1
+176
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+491
+1
+176
+WarehouseArchitect
+PdmShowName
+yes
+492
+1
+176
+WarehouseArchitect
+PdmShowPrim
+yes
+493
+1
+176
+WarehouseArchitect
+PdmShowColn
+yes
+494
+1
+176
+WarehouseArchitect
+PdmShowDttp
+no
+495
+1
+176
+WarehouseArchitect
+PdmShowDomains
+no
+496
+1
+176
+WarehouseArchitect
+PdmShowKeys
+no
+497
+1
+176
+WarehouseArchitect
+PdmShowNull
+no
+498
+1
+176
+WarehouseArchitect
+PdmShowIndx
+no
+499
+1
+176
+WarehouseArchitect
+PdmShowOwnr
+no
+500
+1
+176
+WarehouseArchitect
+PdmShowNameRefr
+yes
+501
+1
+176
+WarehouseArchitect
+PdmShowJoinRefr
+no
+502
+1
+176
+WarehouseArchitect
+PdmShowCnstRefr
+no
+503
+1
+176
+WarehouseArchitect
+PdmShowIdclRefr
+no
+504
+1
+176
+WarehouseArchitect
+PdmShowCardRefr
+no
+505
+1
+176
+WarehouseArchitect
+PdmShowColnView
+no
+506
+1
+176
+WarehouseArchitect
+PdmShowDttpView
+no
+507
+1
+176
+WarehouseArchitect
+PdmShowExprView
+no
+508
+1
+176
+WarehouseArchitect
+PdmShowTablView
+yes
+509
+1
+176
+WarehouseArchitect
+PdmShowOwnrView
+no
+510
+1
+176
+WarehouseArchitect
+PdmRltnMode
+yes
+511
+1
+176
+WarehouseArchitect
+DwShowSSrv
+yes
+512
+1
+176
+WarehouseArchitect
+DwShowLCol
+yes
+513
+1
+176
+WarehouseArchitect
+DwShowLColDttp
+yes
+514
+1
+176
+WarehouseArchitect
+DwShowIQIndx
+yes
+515
+1
+176
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+516
+1
+176
+WarehouseArchitect
+DwShowNameJref
+no
+517
+1
+176
+WarehouseArchitect
+DwShowJoinJref
+yes
+518
+1
+176
+WarehouseArchitect
+DwShowCardJref
+no
+519
+1
+177
+WarehouseArchitect
+PrnScale
+100
+520
+1
+177
+WarehouseArchitect
+Orientation
+1
+521
+1
+177
+WarehouseArchitect
+NoSplitting
+yes
+522
+1
+177
+WarehouseArchitect
+Truncation
+no
+523
+1
+177
+WarehouseArchitect
+Wrapping
+no
+524
+1
+177
+WarehouseArchitect
+WrapLength
+80
+525
+1
+177
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+526
+1
+177
+WarehouseArchitect
+PdmShowName
+yes
+527
+1
+177
+WarehouseArchitect
+PdmShowPrim
+yes
+528
+1
+177
+WarehouseArchitect
+PdmShowColn
+yes
+529
+1
+177
+WarehouseArchitect
+PdmShowDttp
+no
+530
+1
+177
+WarehouseArchitect
+PdmShowDomains
+no
+531
+1
+177
+WarehouseArchitect
+PdmShowKeys
+no
+532
+1
+177
+WarehouseArchitect
+PdmShowNull
+no
+533
+1
+177
+WarehouseArchitect
+PdmShowIndx
+no
+534
+1
+177
+WarehouseArchitect
+PdmShowOwnr
+no
+535
+1
+177
+WarehouseArchitect
+PdmShowNameRefr
+yes
+536
+1
+177
+WarehouseArchitect
+PdmShowJoinRefr
+no
+537
+1
+177
+WarehouseArchitect
+PdmShowCnstRefr
+no
+538
+1
+177
+WarehouseArchitect
+PdmShowIdclRefr
+no
+539
+1
+177
+WarehouseArchitect
+PdmShowCardRefr
+no
+540
+1
+177
+WarehouseArchitect
+PdmShowColnView
+no
+541
+1
+177
+WarehouseArchitect
+PdmShowDttpView
+no
+542
+1
+177
+WarehouseArchitect
+PdmShowExprView
+no
+543
+1
+177
+WarehouseArchitect
+PdmShowTablView
+yes
+544
+1
+177
+WarehouseArchitect
+PdmShowOwnrView
+no
+545
+1
+177
+WarehouseArchitect
+PdmRltnMode
+yes
+546
+1
+177
+WarehouseArchitect
+DwShowSSrv
+yes
+547
+1
+177
+WarehouseArchitect
+DwShowLCol
+yes
+548
+1
+177
+WarehouseArchitect
+DwShowLColDttp
+yes
+549
+1
+177
+WarehouseArchitect
+DwShowIQIndx
+yes
+550
+1
+177
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+551
+1
+177
+WarehouseArchitect
+DwShowNameJref
+no
+552
+1
+177
+WarehouseArchitect
+DwShowJoinJref
+yes
+553
+1
+177
+WarehouseArchitect
+DwShowCardJref
+no
+554
+1
+181
+WarehouseArchitect
+PrnScale
+100
+555
+1
+181
+WarehouseArchitect
+Orientation
+1
+556
+1
+181
+WarehouseArchitect
+NoSplitting
+yes
+557
+1
+181
+WarehouseArchitect
+Truncation
+no
+558
+1
+181
+WarehouseArchitect
+Wrapping
+no
+559
+1
+181
+WarehouseArchitect
+WrapLength
+80
+560
+1
+181
+WarehouseArchitect
+WrapChar
+"!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
+561
+1
+181
+WarehouseArchitect
+PdmShowName
+yes
+562
+1
+181
+WarehouseArchitect
+PdmShowPrim
+yes
+563
+1
+181
+WarehouseArchitect
+PdmShowColn
+yes
+564
+1
+181
+WarehouseArchitect
+PdmShowDttp
+no
+565
+1
+181
+WarehouseArchitect
+PdmShowDomains
+no
+566
+1
+181
+WarehouseArchitect
+PdmShowKeys
+no
+567
+1
+181
+WarehouseArchitect
+PdmShowNull
+no
+568
+1
+181
+WarehouseArchitect
+PdmShowIndx
+no
+569
+1
+181
+WarehouseArchitect
+PdmShowOwnr
+no
+570
+1
+181
+WarehouseArchitect
+PdmShowNameRefr
+yes
+571
+1
+181
+WarehouseArchitect
+PdmShowJoinRefr
+no
+572
+1
+181
+WarehouseArchitect
+PdmShowCnstRefr
+no
+573
+1
+181
+WarehouseArchitect
+PdmShowIdclRefr
+no
+574
+1
+181
+WarehouseArchitect
+PdmShowCardRefr
+no
+575
+1
+181
+WarehouseArchitect
+PdmShowColnView
+no
+576
+1
+181
+WarehouseArchitect
+PdmShowDttpView
+no
+577
+1
+181
+WarehouseArchitect
+PdmShowExprView
+no
+578
+1
+181
+WarehouseArchitect
+PdmShowTablView
+yes
+579
+1
+181
+WarehouseArchitect
+PdmShowOwnrView
+no
+580
+1
+181
+WarehouseArchitect
+PdmRltnMode
+yes
+581
+1
+181
+WarehouseArchitect
+DwShowSSrv
+yes
+582
+1
+181
+WarehouseArchitect
+DwShowLCol
+yes
+583
+1
+181
+WarehouseArchitect
+DwShowLColDttp
+yes
+584
+1
+181
+WarehouseArchitect
+DwShowIQIndx
+yes
+585
+1
+181
+WarehouseArchitect
+DwShowLTblOwnr
+yes
+586
+1
+181
+WarehouseArchitect
+DwShowNameJref
+no
+587
+1
+181
+WarehouseArchitect
+DwShowJoinJref
+yes
+588
+1
+181
+WarehouseArchitect
+DwShowCardJref
+no
+589
+1
+147
+WarehouseArchitect
+PdmShowKeyLevel
+no
+590
+1
+147
+WarehouseArchitect
+PdmShowAkey
+no
+591
+1
+147
+WarehouseArchitect
+PdmShowIdxLevel
+no
+592
+1
+147
+WarehouseArchitect
+PdmShowConsRefr
+no
+593
+1
+151
+WarehouseArchitect
+PdmShowKeyLevel
+no
+594
+1
+151
+WarehouseArchitect
+PdmShowAkey
+no
+595
+1
+151
+WarehouseArchitect
+PdmShowIdxLevel
+no
+596
+1
+151
+WarehouseArchitect
+PdmShowConsRefr
+no
+597
+1
+152
+WarehouseArchitect
+PdmShowKeyLevel
+no
+598
+1
+152
+WarehouseArchitect
+PdmShowAkey
+no
+599
+1
+152
+WarehouseArchitect
+PdmShowIdxLevel
+no
+600
+1
+152
+WarehouseArchitect
+PdmShowConsRefr
+no
+601
+1
+156
+WarehouseArchitect
+PdmShowKeyLevel
+no
+602
+1
+156
+WarehouseArchitect
+PdmShowAkey
+no
+603
+1
+156
+WarehouseArchitect
+PdmShowIdxLevel
+no
+604
+1
+156
+WarehouseArchitect
+PdmShowConsRefr
+no
+605
+1
+158
+WarehouseArchitect
+PdmShowKeyLevel
+no
+606
+1
+158
+WarehouseArchitect
+PdmShowAkey
+no
+607
+1
+158
+WarehouseArchitect
+PdmShowIdxLevel
+no
+608
+1
+158
+WarehouseArchitect
+PdmShowConsRefr
+no
+609
+1
+161
+WarehouseArchitect
+PdmShowKeyLevel
+no
+610
+1
+161
+WarehouseArchitect
+PdmShowAkey
+no
+611
+1
+161
+WarehouseArchitect
+PdmShowIdxLevel
+no
+612
+1
+161
+WarehouseArchitect
+PdmShowConsRefr
+no
+613
+1
+170
+WarehouseArchitect
+PdmShowKeyLevel
+no
+614
+1
+170
+WarehouseArchitect
+PdmShowAkey
+no
+615
+1
+170
+WarehouseArchitect
+PdmShowIdxLevel
+no
+616
+1
+170
+WarehouseArchitect
+PdmShowConsRefr
+no
+617
+1
+176
+WarehouseArchitect
+PdmShowKeyLevel
+no
+618
+1
+176
+WarehouseArchitect
+PdmShowAkey
+no
+619
+1
+176
+WarehouseArchitect
+PdmShowIdxLevel
+no
+620
+1
+176
+WarehouseArchitect
+PdmShowConsRefr
+no
+621
+1
+177
+WarehouseArchitect
+PdmShowKeyLevel
+no
+622
+1
+177
+WarehouseArchitect
+PdmShowAkey
+no
+623
+1
+177
+WarehouseArchitect
+PdmShowIdxLevel
+no
+624
+1
+177
+WarehouseArchitect
+PdmShowConsRefr
+no
+625
+1
+181
+WarehouseArchitect
+PdmShowKeyLevel
+no
+626
+1
+181
+WarehouseArchitect
+PdmShowAkey
+no
+627
+1
+181
+WarehouseArchitect
+PdmShowIdxLevel
+no
+628
+1
+181
+WarehouseArchitect
+PdmShowConsRefr
+no
+/END_TABLE AMCPROP
+
+/BEGIN_TABLE AMCSYMB
+@ N5
+SID N10
+TSYM N5
+SSYM N8
+NUMR N8
+CSID N10
+SID1 N10
+SID2 N10
+CLND N10
+CLNN N5
+RCX1 N8
+RCY1 N8
+RCX2 N8
+RCY2 N8
+PENS N5
+BRSH N5
+CTXT N8
+FONT N5
+JUST N5
+WOVL N8
+HOVL N8
+SARR N5
+CARR N5
+TARR N5
+NBPT N8
+LSPT BIN
+LSTY N5
+TEXT TXT
+PICT PIC
+BTMP BMP
+GRPH N10
+OID N10
+OLE BIN
+/BEGIN_DATA AMCSYMB
+3
+74685
+289
+0
+1
+0
+0
+0
+0
+0
+-159132
+150419
+-147583
+138268
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+17456
+
+3
+74703
+289
+0
+2
+0
+0
+0
+0
+0
+-92685
+166477
+-80461
+177653
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+17488
+
+3
+74726
+289
+0
+3
+0
+0
+0
+0
+0
+-135821
+122937
+-120897
+160438
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+17545
+
+3
+74734
+289
+0
+4
+0
+0
+0
+0
+0
+-164105
+154724
+-151131
+173700
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+17573
+
+3
+76393
+289
+0
+5
+0
+0
+0
+0
+0
+-115806
+113546
+-104407
+122772
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+18790
+
+3
+76403
+289
+0
+6
+0
+0
+0
+0
+0
+-97112
+115193
+-86313
+124419
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+18805
+
+3
+79507
+289
+0
+7
+0
+0
+0
+0
+0
+-101836
+129540
+-89012
+147541
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+20062
+
+3
+74681
+289
+0
+8
+0
+0
+0
+0
+0
+-120013
+127607
+-107189
+139758
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+17414
+
+3
+80276
+289
+0
+9
+0
+0
+0
+0
+0
+-167991
+111723
+-152167
+122899
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+21970
+
+3
+80277
+289
+0
+10
+0
+0
+0
+0
+0
+-181686
+118847
+-168937
+128073
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+21971
+
+3
+80368
+289
+0
+11
+0
+0
+0
+0
+0
+-134053
+108249
+-119354
+120400
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+21998
+
+3
+80369
+289
+0
+12
+0
+0
+0
+0
+0
+-172838
+134220
+-159939
+143446
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+21999
+
+3
+80370
+289
+0
+13
+0
+0
+0
+0
+0
+-173723
+106447
+-185272
+118598
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+22000
+
+3
+80648
+289
+0
+14
+0
+0
+0
+0
+0
+-183260
+170170
+-168036
+179396
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+22361
+
+3
+81110
+289
+0
+15
+0
+0
+0
+0
+0
+-180419
+150273
+-168495
+158524
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+22776
+
+3
+81111
+289
+0
+16
+0
+0
+0
+0
+0
+-184658
+136969
+-173484
+148145
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+22777
+
+3
+81210
+289
+0
+17
+0
+0
+0
+0
+0
+-151625
+108851
+-137526
+129777
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+22850
+
+3
+81556
+289
+0
+18
+0
+0
+0
+0
+0
+-114181
+146762
+-99932
+164763
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+24139
+
+3
+82061
+289
+0
+19
+0
+0
+0
+0
+0
+-145072
+171751
+-132173
+176102
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+24959
+
+3
+82062
+289
+0
+20
+0
+0
+0
+0
+0
+-124696
+171781
+-114272
+177107
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+24960
+
+3
+88117
+289
+32
+21
+0
+0
+0
+0
+0
+-146826
+141956
+-137302
+145480
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86150
+27330
+
+3
+74687
+290
+0
+22
+0
+74685
+74681
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+5
+58bafdffc73e020062dcfdffc73e020062dcfdffa67602004233feffa67602004233feff751e0200
+1
+
+
+
+86150
+17466
+
+3
+76406
+290
+0
+23
+0
+76393
+76403
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+b266feff5edc01008c76feff5edc01008c76feff4fc701005685feff4fc70100
+2
+
+
+
+86150
+18818
+
+3
+76408
+290
+0
+24
+0
+74703
+76403
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+afadfeff488b0200afadfeff9ac80100
+2
+
+
+
+86150
+18822
+
+3
+76417
+290
+0
+25
+0
+74681
+76393
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+b459feff9af30100b459feff1ce90100b953feff1ce90100b953feff4cd80100
+2
+
+
+
+86150
+18844
+
+3
+79241
+290
+0
+26
+0
+74726
+76393
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+6c26feffd6e801004d48feffd6e801004d48feffbcda0100
+2
+
+
+
+86150
+21393
+
+3
+79508
+290
+0
+27
+0
+74681
+79507
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+0a49feffd30102002568feffd30102002568feff480e0200a772feff480e0200
+1
+
+
+
+86150
+20071
+
+3
+79510
+290
+0
+28
+0
+76403
+79507
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+0285feff12e201000285feffa6ef010011a1feffa6ef010011a1fefffbfb0100
+2
+
+
+
+86150
+20075
+
+3
+79512
+290
+0
+29
+0
+74726
+79507
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+e625fefff3290200063ffefff3290200063ffeff111b02002d81feff111b0200
+1
+
+
+
+86150
+20082
+
+3
+80371
+290
+0
+30
+0
+80277
+80368
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+4562fdffd2d101004562fdff7bab0100d7f4fdff7bab0100
+2
+
+
+
+86150
+22004
+
+3
+80373
+290
+0
+31
+0
+74703
+80368
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+45b4feff228e020045b4feffecad01005d2cfeffecad0100
+2
+
+
+
+86150
+22008
+
+3
+80381
+290
+0
+32
+0
+74703
+80370
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+b0bafeff048c0200b0bafefff8a00100ee56fdfff8a00100
+2
+
+
+
+86150
+22023
+
+3
+80383
+290
+0
+33
+0
+80369
+80370
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+a85efdff9e0c02006a34fdff9e0c02006a34fdff9fcc0100
+2
+
+
+
+86150
+22027
+
+3
+81134
+290
+0
+34
+0
+81110
+81111
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+2142fdffc15402001e31fdffc15402001e31fdff05420200
+2
+
+
+
+86150
+22792
+
+3
+81212
+290
+0
+35
+0
+74726
+81210
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+44eefdff1dfd01005ed4fdff1dfd01005ed4fdffb4f70100
+2
+
+
+
+86150
+22868
+
+3
+81214
+290
+0
+36
+0
+80368
+81210
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+c2f4fdff52cf01002eeafdff52cf01002eeafdff3ead0100d8e4fdff3ead0100
+2
+
+
+
+86150
+22872
+
+3
+81216
+290
+0
+37
+0
+80276
+81210
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+7aa0fdff88df0100c0aefdff88df0100c0aefdff04f601001db1fdff04f60100
+2
+
+
+
+86150
+22879
+
+3
+81526
+290
+0
+38
+0
+80276
+80277
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+f98bfdff9bdc0100ac6dfdff9bdc0100ac6dfdff8ceb01006952fdff8ceb0100
+2
+
+
+
+86150
+24112
+
+3
+81535
+290
+0
+39
+0
+81110
+80369
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+3362fdff5e4b02003362fdff1b3802002284fdff1b3802002284fdff882f0200
+2
+
+
+
+86150
+24120
+
+3
+81543
+290
+0
+40
+0
+81111
+80370
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+e531fdff54180200e531fdff89cd0100
+2
+
+
+
+86150
+24127
+
+3
+81558
+290
+0
+41
+0
+74726
+81556
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+6021feffad2f0200125bfeffad2f0200125bfeffaf3d0200
+2
+
+
+
+86150
+24156
+
+3
+81560
+290
+0
+42
+0
+81110
+81556
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+e559fdff4155020072d3fdff4155020072d3fdff57780200b242feff57780200
+2
+
+
+
+86150
+24160
+
+3
+81562
+290
+0
+43
+0
+80370
+81556
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+8858fdff2fa40100506ffeff2fa40100506ffeffdc480200
+2
+
+
+
+86150
+24164
+
+3
+81581
+290
+0
+44
+0
+74685
+80276
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+41a1fdffd11c020041a1fdffb30f02008495fdffb30f02008495fdff83de0100
+2
+
+
+
+86150
+24180
+
+3
+81583
+290
+0
+45
+0
+74685
+81110
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+4193fdff70340200b585fdff70340200b585fdff28520200266dfdff28520200
+2
+
+
+
+86150
+24184
+
+3
+82063
+290
+0
+46
+0
+74685
+82061
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+f9bbfdffff4a0200f9bbfdff8ca802002dcbfdff8ca80200
+2
+
+
+
+86150
+24965
+
+3
+82068
+290
+0
+47
+0
+82061
+82062
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+36e2fdff479f0200570afeff479f0200570afeffe6a80200d034feffe6a80200
+2
+
+
+
+86150
+24975
+
+3
+82070
+290
+0
+48
+0
+74703
+82062
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+be9cfeff62a202005929feff62a20200
+2
+
+
+
+86150
+24979
+
+3
+86294
+290
+0
+49
+0
+74726
+80277
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+1ceefdffcd010200926bfdffcd010200926bfdffbef20100
+2
+
+
+
+86150
+26629
+
+3
+86297
+290
+0
+50
+0
+74726
+80277
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+29eefdfff0060200f563fdfff0060200f563fdffe6f30100
+2
+
+
+
+86150
+26633
+
+3
+86300
+290
+0
+51
+0
+74726
+80369
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+81eefdff0e160200ff8cfdff0e160200
+2
+
+
+
+86150
+26637
+
+3
+86303
+290
+0
+52
+0
+74726
+80369
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+ebedfdffbb0f0200498cfdffbb0f0200
+2
+
+
+
+86150
+26641
+
+3
+86324
+290
+0
+53
+0
+74726
+80277
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+51eefdffee090200e45cfdffee090200e45cfdffbbf30100
+2
+
+
+
+86150
+26651
+
+3
+90439
+290
+0
+54
+0
+88117
+74726
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+bcc5fdff1b2e0200bcc5fdffe21c020001effdffe21c0200
+2
+
+
+
+86150
+27873
+
+3
+90442
+290
+0
+55
+0
+88117
+74685
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+4
+aae0fdffb237020000c1fdffb237020000c1fdff002c0200ecbefdff002c0200
+2
+
+
+
+86150
+27877
+
+3
+91533
+290
+0
+56
+0
+74734
+76403
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+ecadfdff4d840200b9aafeff4d840200b9aafeff7ae50100
+2
+
+
+
+86150
+31634
+
+/END_TABLE AMCSYMB
+
+/BEGIN_TABLE AMCSUBG
+@ N5
+SUBG N10
+SUBM N10
+SGID N10
+/BEGIN_DATA AMCSUBG
+0
+83873
+132
+0
+0
+84403
+147
+0
+0
+85957
+151
+0
+0
+85971
+152
+0
+0
+86037
+156
+0
+0
+86056
+158
+0
+0
+86077
+161
+0
+0
+86201
+170
+0
+0
+86353
+176
+0
+0
+87188
+177
+0
+0
+87609
+181
+0
+/END_TABLE AMCSUBG
+
+/BEGIN_TABLE AMCSUBS
+@ N5
+SID N10
+TSYM N5
+SSYM N8
+NUMR N8
+CSID N10
+SID1 N10
+SID2 N10
+CLND N10
+CLNN N5
+RCX1 N8
+RCY1 N8
+RCX2 N8
+RCY2 N8
+PENS N5
+BRSH N5
+CTXT N8
+FONT N5
+JUST N5
+WOVL N8
+HOVL N8
+SARR N5
+CARR N5
+TARR N5
+NBPT N8
+LSPT BIN
+LSTY N5
+TEXT TXT
+PICT PIC
+BTMP BMP
+GRPH N10
+OID N10
+OLE BIN
+/BEGIN_DATA AMCSUBS
+3
+83874
+289
+544
+1
+0
+0
+0
+0
+0
+-100083
+6827
+-90934
+10352
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+17456
+
+3
+83875
+289
+544
+2
+0
+0
+0
+0
+0
+-105968
+-24249
+-99519
+-20725
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+21970
+
+3
+83876
+289
+544
+3
+0
+0
+0
+0
+0
+-95956
+-24275
+-88082
+-20751
+2
+10
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+21971
+
+3
+83877
+289
+544
+4
+0
+0
+0
+0
+0
+-96705
+-17216
+-84481
+-13692
+2
+10
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+21998
+
+3
+83878
+289
+544
+5
+0
+0
+0
+0
+0
+-40945
+-12174
+-36221
+-8650
+2
+21
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+22776
+
+3
+83879
+289
+544
+6
+0
+0
+0
+0
+0
+-41169
+-5975
+-36070
+-2451
+2
+21
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+22777
+
+3
+83881
+289
+544
+7
+0
+0
+0
+0
+0
+-49495
+-5825
+-43796
+-2301
+2
+21
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+21999
+
+3
+83882
+289
+544
+8
+0
+0
+0
+0
+0
+-63258
+-5926
+-53284
+-2402
+2
+21
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+22000
+
+3
+83883
+289
+544
+9
+0
+0
+0
+0
+0
+-88833
+1776
+-82834
+5301
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+24959
+
+3
+83884
+289
+544
+10
+0
+0
+0
+0
+0
+-101583
+775
+-96034
+4300
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+24960
+
+3
+83885
+289
+544
+11
+0
+0
+0
+0
+0
+-105961
+22702
+-101476
+26226
+2
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+17414
+
+3
+83888
+289
+544
+12
+0
+0
+0
+0
+0
+-68252
+11415
+-62853
+14939
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+17545
+
+3
+83890
+289
+544
+13
+0
+0
+0
+0
+0
+-60262
+-21699
+-52913
+-18175
+2
+10
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+22361
+
+3
+83904
+289
+544
+14
+0
+0
+0
+0
+0
+-79864
+6952
+-75379
+10477
+2
+22
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+17488
+
+3
+83905
+289
+544
+15
+0
+0
+0
+0
+0
+-80288
+13451
+-71364
+16975
+2
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+18805
+
+3
+83906
+289
+544
+16
+0
+0
+0
+0
+0
+-59213
+22425
+-54039
+25949
+2
+13
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+18790
+
+3
+83907
+289
+544
+17
+0
+0
+0
+0
+0
+-49162
+6674
+-42713
+10199
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+17573
+
+3
+83910
+289
+544
+18
+0
+0
+0
+0
+0
+-53901
+-1449
+-47152
+2076
+2
+21
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+24139
+
+3
+83911
+289
+546
+19
+0
+0
+0
+0
+0
+-93051
+20752
+-85638
+24276
+2
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+20062
+
+3
+83912
+289
+544
+20
+0
+0
+0
+0
+0
+-88402
+-5949
+-79403
+-2425
+2
+10
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+83873
+22850
+
+3
+83913
+290
+512
+21
+0
+83888
+83906
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+220bffff783300004026ffff783300004026ffff7a5e0000
+2
+
+
+
+83873
+21393
+
+3
+83916
+290
+512
+22
+0
+83885
+83906
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+1c64feffe35f00006e19ffffe35f0000
+2
+
+
+
+83873
+18844
+
+3
+83937
+290
+512
+23
+0
+83906
+83904
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+af23ffff7a5e0000af23ffffde200000cad0feffde200000
+2
+
+
+
+83873
+18801
+
+3
+83940
+290
+512
+24
+0
+83905
+83906
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+ced7feff6c3b0000a221ffff6c3b0000a221ffffc55e0000
+2
+
+
+
+83873
+18811
+
+3
+83943
+290
+512
+25
+0
+83906
+83905
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+af23ffff535800007edcfeff535800007edcfeff6c3b0000
+2
+
+
+
+83873
+18818
+
+3
+83946
+290
+512
+26
+0
+83904
+83905
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+13ccfeffd721000013ccfeff7f3c0000
+2
+
+
+
+83873
+18822
+
+3
+83949
+290
+512
+27
+0
+83905
+83907
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+ced7feff6c3b0000ced7feff1ee6ffff8e4cffff1ee6ffff8e4cfffff4200000
+2
+
+
+
+83873
+18833
+
+3
+83952
+290
+512
+28
+0
+83904
+83907
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+7fd0feffa11b00008e4cffffa11b0000
+2
+
+
+
+83873
+18840
+
+3
+83955
+290
+512
+29
+0
+83907
+83904
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+814affff701f0000bdcefeff701f0000
+2
+
+
+
+83873
+20058
+
+3
+83958
+290
+512
+30
+0
+83885
+83911
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+2c72feffda5f00005082feffda5f00005082feff3c580000e3a7feff3c580000
+2
+
+
+
+83873
+20071
+
+3
+83961
+290
+512
+31
+0
+83905
+83911
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+a2d6feffb13e0000a2d6feff26510000ffa2feff26510000
+2
+
+
+
+83873
+20075
+
+3
+83964
+290
+512
+32
+0
+83888
+83911
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+effffeff1f310000e4b8feff1f310000e4b8feffeb5c000060a3feffeb5c0000
+2
+
+
+
+83873
+20082
+
+3
+83967
+290
+512
+33
+0
+83888
+83906
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+d4fefeff78330000e823ffff78330000e823ffff7a5e0000
+2
+
+
+
+83873
+20136
+
+3
+84000
+290
+512
+34
+0
+83876
+83877
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+d192feff8aa6ffffd192feffbdc5ffff
+2
+
+
+
+83873
+22004
+
+3
+84003
+290
+512
+35
+0
+83904
+83877
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+4
+36cafeff5a1d000036cafefffffbffffa5a2fefffffbffffa5a2feff09c3ffff
+2
+
+
+
+83873
+22008
+
+3
+84006
+290
+512
+36
+0
+83904
+83882
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+30cffeff17240000cc10ffff17240000cc10ffffdbeeffff
+2
+
+
+
+83873
+22023
+
+3
+84009
+290
+512
+37
+0
+83881
+83882
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+ca49ffffeeefffff611cffffeeefffff
+2
+
+
+
+83873
+22027
+
+3
+84027
+290
+512
+38
+0
+83878
+83879
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+2e69ffff2ed9ffff2e69ffffb0edffff
+2
+
+
+
+83873
+22792
+
+3
+84048
+290
+512
+39
+0
+83888
+83912
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+cbf5feff90310000cbf5feff8cf1ffff77bffeff8cf1ffff
+2
+
+
+
+83873
+22868
+
+3
+84051
+290
+512
+40
+0
+83877
+83912
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+c1b1feffdcbbffff42b8feffdcbbffff42b8feffa5efffff
+2
+
+
+
+83873
+22872
+
+3
+84054
+290
+512
+41
+0
+83875
+83912
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+e171feffdea7ffffe171feffa5efffff42b8feffa5efffff
+2
+
+
+
+83873
+22879
+
+3
+84057
+290
+512
+42
+0
+83875
+83876
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+0177feff1aa8ffffd197feff1aa8ffff
+2
+
+
+
+83873
+24112
+
+3
+84060
+290
+512
+43
+0
+83878
+83881
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+4969ffff54d7ffffca49ffff54d7ffffca49ffff21f0ffff
+2
+
+
+
+83873
+24120
+
+3
+84063
+290
+512
+44
+0
+83879
+83882
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+2469ffff20f2ffff142dffff20f2ffff
+2
+
+
+
+83873
+24127
+
+3
+84066
+290
+512
+45
+0
+83888
+83910
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+effffeff002c0000e433ffff002c0000e433ffff20030000
+2
+
+
+
+83873
+24156
+
+3
+84069
+290
+512
+46
+0
+83878
+83910
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+4969ffff54d7ffffa13affff54d7ffffa13affff39010000
+2
+
+
+
+83873
+24160
+
+3
+84072
+290
+512
+47
+0
+83882
+83910
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+dd18ffffbcefffffdd18ffff39010000a13affff39010000
+2
+
+
+
+83873
+24164
+
+3
+84075
+290
+512
+48
+0
+83874
+83875
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+347ffeff8d210000347ffeff29a8ffffa86efeff29a8ffff
+2
+
+
+
+83873
+24180
+
+3
+84078
+290
+512
+49
+0
+83874
+83878
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+ec8afeff60220000ec8afeffb8d9ffff4969ffffb8d9ffff
+2
+
+
+
+83873
+24184
+
+3
+84084
+290
+512
+50
+0
+83874
+83883
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+6993feff042300006993feff680e00005daefeff680e0000
+2
+
+
+
+83873
+24965
+
+3
+84087
+290
+512
+51
+0
+83883
+83884
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+2
+2fadfeff84090000d381feff84090000
+2
+
+
+
+83873
+24975
+
+3
+84090
+290
+512
+52
+0
+83904
+83884
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+cad0feffdd220000cad0feffce030000077efeffce030000
+2
+
+
+
+83873
+24979
+
+3
+84108
+290
+512
+53
+0
+83874
+83885
+0
+0
+0
+0
+0
+0
+2
+5
+4194368
+0
+0
+0
+0
+1
+0
+0
+3
+a379feff162000008168feff162000008168feff8f5f0000
+2
+
+
+
+83873
+17466
+
+3
+84406
+289
+544
+54
+0
+0
+0
+0
+0
+-8623
+-16486
+5702
+4438
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+84403
+17545
+
+3
+85958
+289
+544
+55
+0
+0
+0
+0
+0
+-19424
+7788
+-9151
+20911
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+85957
+17456
+
+3
+85959
+289
+544
+56
+0
+0
+0
+0
+0
+114
+12039
+12412
+17362
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+85957
+24959
+
+3
+85960
+289
+544
+57
+0
+0
+0
+0
+0
+1464
+-6735
+11287
+-1412
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+85957
+24960
+
+3
+85961
+289
+544
+58
+0
+0
+0
+0
+0
+-19537
+-9762
+-7914
+1411
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+85957
+17488
+
+3
+85962
+290
+512
+59
+0
+85958
+85959
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+30c8ffffbc38000076180000bc380000
+2
+
+
+
+85957
+24965
+
+3
+85965
+290
+512
+60
+0
+85959
+85960
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+af1800006c390000af18000016f0ffff
+2
+
+
+
+85957
+24975
+
+3
+85968
+290
+512
+61
+0
+85961
+85960
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+10e0ffff77f0ffff9e07000077f0ffff
+2
+
+
+
+85957
+24979
+
+3
+85981
+289
+544
+62
+0
+0
+0
+0
+0
+12488
+-13800
+24111
+-2627
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+85971
+17488
+
+3
+86038
+289
+544
+63
+0
+0
+0
+0
+0
+-19386
+5750
+-9113
+18873
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86037
+17456
+
+3
+86039
+289
+544
+64
+0
+0
+0
+0
+0
+-20060
+-12873
+-7538
+249
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86037
+21970
+
+3
+86052
+290
+512
+65
+0
+86038
+86039
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+11c9ffff3017000011c9ffff8ffbffff
+2
+
+
+
+86037
+24180
+
+3
+86057
+289
+544
+66
+0
+0
+0
+0
+0
+-19985
+838
+-9712
+13961
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86056
+17456
+
+3
+86058
+289
+544
+67
+0
+0
+0
+0
+0
+-19985
+-13661
+-10012
+-3463
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86056
+22776
+
+3
+86068
+290
+512
+68
+0
+86057
+86058
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+b4c5ffffe71c0000b4c5ffff8edeffff
+2
+
+
+
+86056
+24184
+
+3
+86078
+289
+544
+69
+0
+0
+0
+0
+0
+-24665
+11880
+-10343
+32801
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+17545
+
+3
+86079
+289
+544
+70
+0
+0
+0
+0
+0
+-3846
+24340
+6954
+32589
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+18790
+
+3
+86080
+289
+544
+71
+0
+0
+0
+0
+0
+-5527
+-12733
+6095
+-1561
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+17488
+
+3
+86081
+289
+544
+72
+0
+0
+0
+0
+0
+11312
+-26672
+23684
+-16474
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+17573
+
+3
+86082
+289
+544
+73
+0
+0
+0
+0
+0
+-24010
+-12936
+-11786
+4088
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+20062
+
+3
+86084
+289
+544
+74
+0
+0
+0
+0
+0
+12824
+18412
+24672
+32509
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+17414
+
+3
+86086
+289
+544
+75
+0
+0
+0
+0
+0
+-3641
+6109
+5358
+13383
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86077
+18805
+
+3
+86090
+290
+512
+76
+0
+86084
+86079
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+50350000cb6f00001d190000cb6f0000
+2
+
+
+
+86077
+18844
+
+3
+86099
+290
+512
+77
+0
+86079
+86086
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+94020000c85e00009402000037320000
+2
+
+
+
+86077
+18818
+
+3
+86102
+290
+512
+78
+0
+86080
+86086
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+6401000036f9ffff640100002e190000
+2
+
+
+
+86077
+18822
+
+3
+86114
+290
+512
+79
+0
+86084
+86082
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+12370000b347000012370000e60400001bd2ffffe6040000
+2
+
+
+
+86077
+20071
+
+3
+86117
+290
+512
+80
+0
+86086
+86082
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+12f2ffff8c27000053c9ffff8c27000053c9ffff770d0000
+2
+
+
+
+86077
+20075
+
+3
+86120
+290
+512
+81
+0
+86078
+86082
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+26bbffff7830000026bbffff5c0f0000
+2
+
+
+
+86077
+20082
+
+3
+86123
+290
+512
+82
+0
+86078
+86079
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+6ad6ffff00700000e1f4ffff00700000
+2
+
+
+
+86077
+20136
+
+3
+86202
+289
+544
+83
+0
+0
+0
+0
+0
+12079
+20838
+24601
+33961
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+21970
+
+3
+86203
+289
+544
+84
+0
+0
+0
+0
+0
+-24408
+-11810
+-10910
+5212
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+22850
+
+3
+86204
+289
+544
+85
+0
+0
+0
+0
+0
+-5371
+25451
+6777
+33700
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+21971
+
+3
+86205
+289
+544
+86
+0
+0
+0
+0
+0
+-6487
+9612
+7612
+19811
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+21998
+
+3
+86207
+289
+544
+87
+0
+0
+0
+0
+0
+-5511
+-17813
+9112
+-13464
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+22361
+
+3
+86209
+289
+544
+88
+0
+0
+0
+0
+0
+-24712
+13565
+-10389
+34486
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+17545
+
+3
+86211
+289
+544
+89
+0
+0
+0
+0
+0
+-5364
+-8337
+6259
+2836
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+17488
+
+3
+86212
+289
+544
+90
+0
+0
+0
+0
+0
+11136
+-28836
+23509
+-18638
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86201
+17573
+
+3
+86219
+290
+512
+91
+0
+86204
+86205
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+b000000087730000b0000000a14b0000
+2
+
+
+
+86201
+22004
+
+3
+86222
+290
+512
+92
+0
+86211
+86205
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+54ffffff41f5ffff54ffffffa5290000
+2
+
+
+
+86201
+22008
+
+3
+86237
+290
+512
+93
+0
+86209
+86203
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+3abbffffd95d00003abbffff1df3ffff
+2
+
+
+
+86201
+22868
+
+3
+86240
+290
+512
+94
+0
+86205
+86203
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+3ee7ffff292d0000d7caffff292d0000d7caffffed130000
+2
+
+
+
+86201
+22872
+
+3
+86243
+290
+512
+95
+0
+86202
+86203
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+01450000a950000001450000ff100000a1d3ffffff100000
+2
+
+
+
+86201
+22879
+
+3
+86246
+290
+512
+96
+0
+86202
+86204
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+03340000cb7300008c170000cb730000
+2
+
+
+
+86201
+24112
+
+3
+86262
+290
+512
+97
+0
+86209
+86204
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+19d5ffff4a7a0000c9ecffff4a7a0000
+2
+
+
+
+86201
+26617
+
+3
+86265
+290
+512
+98
+0
+86209
+86204
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+fad5fffff66e000053ebfffff66e0000
+2
+
+
+
+86201
+26621
+
+3
+86354
+289
+544
+99
+0
+0
+0
+0
+0
+-25083
+13362
+-10759
+34282
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+17545
+
+3
+86355
+289
+544
+100
+0
+0
+0
+0
+0
+-24455
+-9165
+-10807
+7855
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+24139
+
+3
+86356
+289
+544
+101
+0
+0
+0
+0
+0
+-3953
+25536
+8345
+33784
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+21999
+
+3
+86357
+289
+544
+102
+0
+0
+0
+0
+0
+-3068
+8661
+6906
+18859
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+22000
+
+3
+86358
+289
+544
+103
+0
+0
+0
+0
+0
+13665
+23415
+23746
+33613
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+22776
+
+3
+86359
+289
+544
+104
+0
+0
+0
+0
+0
+13680
+-8926
+24254
+4196
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+22777
+
+3
+86360
+289
+544
+105
+0
+0
+0
+0
+0
+-3702
+-6989
+7922
+4183
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+17488
+
+3
+86361
+289
+544
+106
+0
+0
+0
+0
+0
+-3577
+-28213
+8797
+-18015
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+86353
+17573
+
+3
+86369
+290
+512
+107
+0
+86360
+86357
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+900800000110000090080000b7280000
+2
+
+
+
+86353
+22023
+
+3
+86372
+290
+512
+108
+0
+86356
+86357
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+b904000028750000b9040000b2460000
+2
+
+
+
+86353
+22027
+
+3
+86375
+290
+512
+109
+0
+86358
+86359
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+ef560000955d0000ef560000f00f0000
+2
+
+
+
+86353
+22792
+
+3
+86387
+290
+512
+110
+0
+86358
+86356
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+b3370000b773000094080000b7730000
+2
+
+
+
+86353
+24120
+
+3
+86390
+290
+512
+111
+0
+86359
+86357
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+04400000180f000004400000e13400003e1a0000e1340000
+2
+
+
+
+86353
+24127
+
+3
+86393
+290
+512
+112
+0
+86354
+86355
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+96baffff0b5d000096baffff71fdffff
+2
+
+
+
+86353
+24156
+
+3
+86396
+290
+512
+113
+0
+86358
+86355
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+11490000626f000011490000231800009dd5ffff23180000
+2
+
+
+
+86353
+24160
+
+3
+86399
+290
+512
+114
+0
+86357
+86355
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+3
+64f4ffffcc2e00001dc5ffffcc2e00001dc5ffff3b1e0000
+2
+
+
+
+86353
+24164
+
+3
+86402
+290
+512
+115
+0
+86354
+86356
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+bed2ffff907800006ff2ffff90780000
+2
+
+
+
+86353
+26637
+
+3
+86405
+290
+512
+116
+0
+86354
+86356
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+7bd4ffffef6e00008ff1ffffef6e0000
+2
+
+
+
+86353
+26641
+
+3
+87190
+289
+544
+117
+0
+0
+0
+0
+0
+-19573
+-4462
+-9300
+8661
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87188
+17456
+
+3
+87191
+289
+544
+118
+0
+0
+0
+0
+0
+-20360
+-22860
+-8512
+-8763
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87188
+17414
+
+3
+87200
+290
+512
+119
+0
+87190
+87191
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+9bc7ffff330800009bc7ffff3cc2ffff
+2
+
+
+
+87188
+17466
+
+3
+87611
+289
+544
+120
+0
+0
+0
+0
+0
+-6596
+-9676
+8026
+-5327
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+22361
+
+3
+87613
+289
+544
+121
+0
+0
+0
+0
+0
+-23536
+-25224
+-11688
+-11127
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+17414
+
+3
+87615
+289
+544
+122
+0
+0
+0
+0
+0
+13499
+-26425
+23473
+-16227
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+22776
+
+3
+87616
+289
+544
+123
+0
+0
+0
+0
+0
+13199
+-11948
+23773
+1174
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+22777
+
+3
+87618
+289
+544
+124
+0
+0
+0
+0
+0
+12499
+19000
+24122
+30173
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+17488
+
+3
+87619
+289
+544
+125
+0
+0
+0
+0
+0
+-7776
+14801
+4499
+24999
+2
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+
+0
+
+
+
+87609
+17573
+
+3
+87647
+290
+512
+126
+0
+87615
+87616
+0
+0
+0
+0
+0
+0
+2
+5
+0
+0
+0
+0
+0
+1
+0
+0
+2
+36480000b2acffff36480000f5eaffff
+2
+
+
+
+87609
+22792
+
+/END_TABLE AMCSUBS
+
+
\ No newline at end of file
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.c b/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.c
new file mode 100644
index 000000000000..ced227e6bb28
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.c
@@ -0,0 +1,112 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include "scaling.h"
+#include "genrand.h"
+#include "sparse.h"
+#include "tdefs.h"
+#include "error_msg.h"
+
+/*
+* Routine: initSparseKeys()
+* Purpose: set up the set of valid key values for a sparse table.
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions: The total population will fit in 32b
+* Side Effects:
+* TODO: None
+*/
+int
+initSparseKeys(int nTable)
+{
+ ds_key_t kRowcount,
+ kOldSeed;
+ int k;
+ tdef *pTdef;
+
+ kRowcount = get_rowcount(nTable);
+ pTdef = getTdefsByNumber(nTable);
+
+ pTdef->arSparseKeys = (ds_key_t *)malloc((long)kRowcount * sizeof(ds_key_t));
+ MALLOC_CHECK(pTdef->arSparseKeys);
+ if (pTdef->arSparseKeys == NULL)
+ ReportError(QERR_NO_MEMORY, "initSparseKeys()", 1);
+ memset(pTdef->arSparseKeys, 0, (long)kRowcount * sizeof(ds_key_t));
+
+ kOldSeed = setSeed(0, nTable);
+ for (k = 0; k < kRowcount; k++)
+ genrand_key(&pTdef->arSparseKeys[k], DIST_UNIFORM, 1, pTdef->nParam, 0, 0);
+ setSeed(0, (int)kOldSeed);
+
+ return(0);
+}
+
+/*
+* Routine: randomSparseKey()
+* Purpose: randomly select one of the valid key values for a sparse table
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+randomSparseKey(int nTable, int nColumn)
+{
+ int nKeyIndex;
+ ds_key_t kRowcount;
+ tdef *pTdef;
+
+ pTdef = getTdefsByNumber(nTable);
+ kRowcount = get_rowcount(nTable);
+ genrand_integer(&nKeyIndex, DIST_UNIFORM, 1, (long)kRowcount, 0, nColumn);
+
+ return(pTdef->arSparseKeys[nKeyIndex]);
+}
+
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.h b/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.h
new file mode 100644
index 000000000000..1c91450de8ab
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/sparse.h
@@ -0,0 +1,37 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+int initSparseKeys(int nTable); /* populate the set of valid keys */
+ds_key_t randomSparseKey(int nTable, int nColumn); /* select a random sparse key */
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/streams.h b/ydb/library/benchmarks/gen/tpcds-dbgen/streams.h
new file mode 100644
index 000000000000..501f51ed5ee3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/streams.h
@@ -0,0 +1,810 @@
+/*
+ * THIS IS A GENERATED FILE
+ * SEE COLUMNS.LIST
+*/
+#ifndef STREAMS_H
+#define STREAMS_H
+rng_t Streams[] = {
+{0, 0, 0, 0, 0, 0, 0},
+{0, 0, 0, 0, CC_CALL_CENTER_SK, CALL_CENTER, CC_CALL_CENTER_SK},
+{0, 15, 0, 0, CC_CALL_CENTER_ID, CALL_CENTER, CC_CALL_CENTER_ID},
+{0, 10, 0, 0, CC_REC_START_DATE_ID, CALL_CENTER, CC_REC_START_DATE_ID},
+{0, 1, 0, 0, CC_REC_END_DATE_ID, CALL_CENTER, CC_REC_END_DATE_ID},
+{0, 4, 0, 0, CC_CLOSED_DATE_ID, CALL_CENTER, CC_CLOSED_DATE_ID},
+{0, 10, 0, 0, CC_OPEN_DATE_ID, CALL_CENTER, CC_OPEN_DATE_ID},
+{0, 0, 0, 0, CC_NAME, CALL_CENTER, CC_NAME},
+{0, 2, 0, 0, CC_CLASS, CALL_CENTER, CC_CLASS},
+{0, 1, 0, 0, CC_EMPLOYEES, CALL_CENTER, CC_EMPLOYEES},
+{0, 1, 0, 0, CC_SQ_FT, CALL_CENTER, CC_SQ_FT},
+{0, 1, 0, 0, CC_HOURS, CALL_CENTER, CC_HOURS},
+{0, 2, 0, 0, CC_MANAGER, CALL_CENTER, CC_MANAGER},
+{0, 1, 0, 0, CC_MARKET_ID, CALL_CENTER, CC_MARKET_ID},
+{0, 50, 0, 0, CC_MARKET_CLASS, CALL_CENTER, CC_MARKET_CLASS},
+{0, 50, 0, 0, CC_MARKET_DESC, CALL_CENTER, CC_MARKET_DESC},
+{0, 2, 0, 0, CC_MARKET_MANAGER, CALL_CENTER, CC_MARKET_MANAGER},
+{0, 2, 0, 0, CC_DIVISION, CALL_CENTER, CC_DIVISION},
+{0, 2, 0, 0, CC_DIVISION_NAME, CALL_CENTER, CC_DIVISION_NAME},
+{0, 2, 0, 0, CC_COMPANY, CALL_CENTER, CC_COMPANY},
+{0, 2, 0, 0, CC_COMPANY_NAME, CALL_CENTER, CC_COMPANY_NAME},
+{0, 0, 0, 0, CC_STREET_NUMBER, CALL_CENTER, CC_STREET_NUMBER},
+{0, 0, 0, 0, CC_STREET_NAME, CALL_CENTER, CC_STREET_NAME},
+{0, 0, 0, 0, CC_STREET_TYPE, CALL_CENTER, CC_STREET_TYPE},
+{0, 0, 0, 0, CC_SUITE_NUMBER, CALL_CENTER, CC_SUITE_NUMBER},
+{0, 0, 0, 0, CC_CITY, CALL_CENTER, CC_CITY},
+{0, 0, 0, 0, CC_COUNTY, CALL_CENTER, CC_COUNTY},
+{0, 0, 0, 0, CC_STATE, CALL_CENTER, CC_STATE},
+{0, 0, 0, 0, CC_ZIP, CALL_CENTER, CC_ZIP},
+{0, 0, 0, 0, CC_COUNTRY, CALL_CENTER, CC_COUNTRY},
+{0, 0, 0, 0, CC_GMT_OFFSET, CALL_CENTER, CC_GMT_OFFSET},
+{0, 15, 0, 0, CC_ADDRESS, CALL_CENTER, CC_ADDRESS},
+{0, 1, 0, 0, CC_TAX_PERCENTAGE, CALL_CENTER, CC_TAX_PERCENTAGE},
+{0, 1, 0, 0, CC_SCD, CALL_CENTER, CC_SCD},
+{0, 2, 0, 0, CC_NULLS, CALL_CENTER, CC_NULLS},
+{0, 1, 0, 0, CP_CATALOG_PAGE_SK, CATALOG_PAGE, CP_CATALOG_PAGE_SK},
+{0, 1, 0, 0, CP_CATALOG_PAGE_ID, CATALOG_PAGE, CP_CATALOG_PAGE_ID},
+{0, 1, 0, 0, CP_START_DATE_ID, CATALOG_PAGE, CP_START_DATE_ID},
+{0, 1, 0, 0, CP_END_DATE_ID, CATALOG_PAGE, CP_END_DATE_ID},
+{0, 1, 0, 0, CP_PROMO_ID, CATALOG_PAGE, CP_PROMO_ID},
+{0, 1, 0, 0, CP_DEPARTMENT, CATALOG_PAGE, CP_DEPARTMENT},
+{0, 1, 0, 0, CP_CATALOG_NUMBER, CATALOG_PAGE, CP_CATALOG_NUMBER},
+{0, 1, 0, 0, CP_CATALOG_PAGE_NUMBER, CATALOG_PAGE, CP_CATALOG_PAGE_NUMBER},
+{0, 100, 0, 0, CP_DESCRIPTION, CATALOG_PAGE, S_CP_DESCRIPTION},
+{0, 1, 0, 0, CP_TYPE, CATALOG_PAGE, CP_TYPE},
+{0, 2, 0, 0, CP_NULLS, CATALOG_PAGE, CP_NULLS},
+{0, 28, 0, 0, CR_RETURNED_DATE_SK, CATALOG_RETURNS, CR_RETURNED_DATE_SK},
+{0, 28, 0, 0, CR_RETURNED_TIME_SK, CATALOG_RETURNS, CR_RETURNED_TIME_SK},
+{0, 14, 0, 0, CR_ITEM_SK, CATALOG_RETURNS, CR_ITEM_SK},
+{0, 14, 0, 0, CR_REFUNDED_CUSTOMER_SK, CATALOG_RETURNS, CR_REFUNDED_CUSTOMER_SK},
+{0, 14, 0, 0, CR_REFUNDED_CDEMO_SK, CATALOG_RETURNS, CR_REFUNDED_CDEMO_SK},
+{0, 14, 0, 0, CR_REFUNDED_HDEMO_SK, CATALOG_RETURNS, CR_REFUNDED_HDEMO_SK},
+{0, 14, 0, 0, CR_REFUNDED_ADDR_SK, CATALOG_RETURNS, CR_REFUNDED_ADDR_SK},
+{0, 28, 0, 0, CR_RETURNING_CUSTOMER_SK, CATALOG_RETURNS, CR_RETURNING_CUSTOMER_SK},
+{0, 14, 0, 0, CR_RETURNING_CDEMO_SK, CATALOG_RETURNS, CR_RETURNING_CDEMO_SK},
+{0, 14, 0, 0, CR_RETURNING_HDEMO_SK, CATALOG_RETURNS, CR_RETURNING_HDEMO_SK},
+{0, 14, 0, 0, CR_RETURNING_ADDR_SK, CATALOG_RETURNS, CR_RETURNING_ADDR_SK},
+{0, 0, 0, 0, CR_CALL_CENTER_SK, CATALOG_RETURNS, CR_CALL_CENTER_SK},
+{0, 14, 0, 0, CR_CATALOG_PAGE_SK, CATALOG_RETURNS, CR_CATALOG_PAGE_SK},
+{0, 14, 0, 0, CR_SHIP_MODE_SK, CATALOG_RETURNS, CR_SHIP_MODE_SK},
+{0, 14, 0, 0, CR_WAREHOUSE_SK, CATALOG_RETURNS, CR_WAREHOUSE_SK},
+{0, 14, 0, 0, CR_REASON_SK, CATALOG_RETURNS, CR_REASON_SK},
+{0, 0, 0, 0, CR_ORDER_NUMBER, CATALOG_RETURNS, CR_ORDER_NUMBER},
+{0, 0, 0, 0, CR_PRICING_QUANTITY, CATALOG_RETURNS, CR_PRICING_QUANTITY},
+{0, 0, 0, 0, CR_PRICING_NET_PAID, CATALOG_RETURNS, CR_PRICING_NET_PAID},
+{0, 0, 0, 0, CR_PRICING_EXT_TAX, CATALOG_RETURNS, CR_PRICING_EXT_TAX},
+{0, 0, 0, 0, CR_PRICING_NET_PAID_INC_TAX, CATALOG_RETURNS, CR_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, CR_PRICING_FEE, CATALOG_RETURNS, CR_PRICING_FEE},
+{0, 0, 0, 0, CR_PRICING_EXT_SHIP_COST, CATALOG_RETURNS, CR_PRICING_EXT_SHIP_COST},
+{0, 0, 0, 0, CR_PRICING_REFUNDED_CASH, CATALOG_RETURNS, CR_PRICING_REFUNDED_CASH},
+{0, 0, 0, 0, CR_PRICING_REVERSED_CHARGE, CATALOG_RETURNS, CR_PRICING_REVERSED_CHARGE},
+{0, 0, 0, 0, CR_PRICING_STORE_CREDIT, CATALOG_RETURNS, CR_PRICING_STORE_CREDIT},
+{0, 0, 0, 0, CR_PRICING_NET_LOSS, CATALOG_RETURNS, CR_PRICING_NET_LOSS},
+{0, 28, 0, 0, CR_NULLS, CATALOG_RETURNS, CR_NULLS},
+{0, 70, 0, 0, CR_PRICING, CATALOG_RETURNS, CR_PRICING},
+{0, 1, 0, 0, CS_SOLD_DATE_SK, CATALOG_SALES, CS_SOLD_DATE_SK},
+{0, 2, 0, 0, CS_SOLD_TIME_SK, CATALOG_SALES, CS_SOLD_TIME_SK},
+{0, 14, 0, 0, CS_SHIP_DATE_SK, CATALOG_SALES, CS_SHIP_DATE_SK},
+{0, 1, 0, 0, CS_BILL_CUSTOMER_SK, CATALOG_SALES, CS_BILL_CUSTOMER_SK},
+{0, 1, 0, 0, CS_BILL_CDEMO_SK, CATALOG_SALES, CS_BILL_CDEMO_SK},
+{0, 1, 0, 0, CS_BILL_HDEMO_SK, CATALOG_SALES, CS_BILL_HDEMO_SK},
+{0, 1, 0, 0, CS_BILL_ADDR_SK, CATALOG_SALES, CS_BILL_ADDR_SK},
+{0, 2, 0, 0, CS_SHIP_CUSTOMER_SK, CATALOG_SALES, CS_SHIP_CUSTOMER_SK},
+{0, 1, 0, 0, CS_SHIP_CDEMO_SK, CATALOG_SALES, CS_SHIP_CDEMO_SK},
+{0, 1, 0, 0, CS_SHIP_HDEMO_SK, CATALOG_SALES, CS_SHIP_HDEMO_SK},
+{0, 1, 0, 0, CS_SHIP_ADDR_SK, CATALOG_SALES, CS_SHIP_ADDR_SK},
+{0, 1, 0, 0, CS_CALL_CENTER_SK, CATALOG_SALES, CS_CALL_CENTER_SK},
+{0, 42, 0, 0, CS_CATALOG_PAGE_SK, CATALOG_SALES, CS_CATALOG_PAGE_SK},
+{0, 14, 0, 0, CS_SHIP_MODE_SK, CATALOG_SALES, CS_SHIP_MODE_SK},
+{0, 14, 0, 0, CS_WAREHOUSE_SK, CATALOG_SALES, CS_WAREHOUSE_SK},
+{0, 1, 0, 0, CS_SOLD_ITEM_SK, CATALOG_SALES, CS_SOLD_ITEM_SK},
+{0, 14, 0, 0, CS_PROMO_SK, CATALOG_SALES, CS_PROMO_SK},
+{0, 1, 0, 0, CS_ORDER_NUMBER, CATALOG_SALES, CS_ORDER_NUMBER},
+{0, 0, 0, 0, CS_PRICING_QUANTITY, CATALOG_SALES, CS_PRICING_QUANTITY},
+{0, 0, 0, 0, CS_PRICING_WHOLESALE_COST, CATALOG_SALES, CS_PRICING_WHOLESALE_COST},
+{0, 0, 0, 0, CS_PRICING_LIST_PRICE, CATALOG_SALES, CS_PRICING_LIST_PRICE},
+{0, 0, 0, 0, CS_PRICING_SALES_PRICE, CATALOG_SALES, CS_PRICING_SALES_PRICE},
+{0, 0, 0, 0, CS_PRICING_COUPON_AMT, CATALOG_SALES, CS_PRICING_COUPON_AMT},
+{0, 0, 0, 0, CS_PRICING_EXT_SALES_PRICE, CATALOG_SALES, CS_PRICING_EXT_SALES_PRICE},
+{0, 0, 0, 0, CS_PRICING_EXT_DISCOUNT_AMOUNT, CATALOG_SALES, CS_PRICING_EXT_DISCOUNT_AMOUNT},
+{0, 0, 0, 0, CS_PRICING_EXT_WHOLESALE_COST, CATALOG_SALES, CS_PRICING_EXT_WHOLESALE_COST},
+{0, 0, 0, 0, CS_PRICING_EXT_LIST_PRICE, CATALOG_SALES, CS_PRICING_EXT_LIST_PRICE},
+{0, 0, 0, 0, CS_PRICING_EXT_TAX, CATALOG_SALES, CS_PRICING_EXT_TAX},
+{0, 0, 0, 0, CS_PRICING_EXT_SHIP_COST, CATALOG_SALES, CS_PRICING_EXT_SHIP_COST},
+{0, 0, 0, 0, CS_PRICING_NET_PAID, CATALOG_SALES, CS_PRICING_NET_PAID},
+{0, 0, 0, 0, CS_PRICING_NET_PAID_INC_TAX, CATALOG_SALES, CS_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, CS_PRICING_NET_PAID_INC_SHIP, CATALOG_SALES, CS_PRICING_NET_PAID_INC_SHIP},
+{0, 0, 0, 0, CS_PRICING_NET_PAID_INC_SHIP_TAX, CATALOG_SALES, CS_PRICING_NET_PAID_INC_SHIP_TAX},
+{0, 0, 0, 0, CS_PRICING_NET_PROFIT, CATALOG_SALES, CS_PRICING_NET_PROFIT},
+{0, 112, 0, 0, CS_PRICING, CATALOG_SALES, CS_PRICING},
+{0, 0, 0, 0, CS_PERMUTE, CATALOG_SALES, CS_PERMUTE},
+{0, 28, 0, 0, CS_NULLS, CATALOG_SALES, CS_NULLS},
+{0, 14, 0, 0, CR_IS_RETURNED, CATALOG_SALES, CR_IS_RETURNED},
+{0, 0, 0, 0, CS_PERMUTATION, CATALOG_SALES, CS_PERMUTATION},
+{0, 1, 0, 0, C_CUSTOMER_SK, CUSTOMER, C_CUSTOMER_SK},
+{0, 1, 0, 0, C_CUSTOMER_ID, CUSTOMER, C_CUSTOMER_ID},
+{0, 1, 0, 0, C_CURRENT_CDEMO_SK, CUSTOMER, C_CURRENT_CDEMO_SK},
+{0, 1, 0, 0, C_CURRENT_HDEMO_SK, CUSTOMER, C_CURRENT_HDEMO_SK},
+{0, 1, 0, 0, C_CURRENT_ADDR_SK, CUSTOMER, C_CURRENT_ADDR_SK},
+{0, 0, 0, 0, C_FIRST_SHIPTO_DATE_ID, CUSTOMER, C_FIRST_SHIPTO_DATE_ID},
+{0, 1, 0, 0, C_FIRST_SALES_DATE_ID, CUSTOMER, C_FIRST_SALES_DATE_ID},
+{0, 1, 0, 0, C_SALUTATION, CUSTOMER, C_SALUTATION},
+{0, 1, 0, 0, C_FIRST_NAME, CUSTOMER, C_FIRST_NAME},
+{0, 1, 0, 0, C_LAST_NAME, CUSTOMER, C_LAST_NAME},
+{0, 2, 0, 0, C_PREFERRED_CUST_FLAG, CUSTOMER, C_PREFERRED_CUST_FLAG},
+{0, 1, 0, 0, C_BIRTH_DAY, CUSTOMER, C_BIRTH_DAY},
+{0, 0, 0, 0, C_BIRTH_MONTH, CUSTOMER, C_BIRTH_MONTH},
+{0, 0, 0, 0, C_BIRTH_YEAR, CUSTOMER, C_BIRTH_YEAR},
+{0, 1, 0, 0, C_BIRTH_COUNTRY, CUSTOMER, C_BIRTH_COUNTRY},
+{0, 1, 0, 0, C_LOGIN, CUSTOMER, C_LOGIN},
+{0, 23, 0, 0, C_EMAIL_ADDRESS, CUSTOMER, C_EMAIL_ADDRESS},
+{0, 1, 0, 0, C_LAST_REVIEW_DATE, CUSTOMER, C_LAST_REVIEW_DATE},
+{0, 2, 0, 0, C_NULLS, CUSTOMER, C_NULLS},
+{0, 1, 0, 0, CA_ADDRESS_SK, CUSTOMER_ADDRESS, CA_ADDRESS_SK},
+{0, 1, 0, 0, CA_ADDRESS_ID, CUSTOMER_ADDRESS, CA_ADDRESS_ID},
+{0, 1, 0, 0, CA_ADDRESS_STREET_NUM, CUSTOMER_ADDRESS, CA_ADDRESS_STREET_NUM},
+{0, 1, 0, 0, CA_ADDRESS_STREET_NAME1, CUSTOMER_ADDRESS, CA_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, CA_ADDRESS_STREET_TYPE, CUSTOMER_ADDRESS, CA_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, CA_ADDRESS_SUITE_NUM, CUSTOMER_ADDRESS, CA_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, CA_ADDRESS_CITY, CUSTOMER_ADDRESS, CA_ADDRESS_CITY},
+{0, 1, 0, 0, CA_ADDRESS_COUNTY, CUSTOMER_ADDRESS, CA_ADDRESS_COUNTY},
+{0, 1, 0, 0, CA_ADDRESS_STATE, CUSTOMER_ADDRESS, CA_ADDRESS_STATE},
+{0, 1, 0, 0, CA_ADDRESS_ZIP, CUSTOMER_ADDRESS, CA_ADDRESS_ZIP},
+{0, 1, 0, 0, CA_ADDRESS_COUNTRY, CUSTOMER_ADDRESS, CA_ADDRESS_COUNTRY},
+{0, 1, 0, 0, CA_ADDRESS_GMT_OFFSET, CUSTOMER_ADDRESS, CA_ADDRESS_GMT_OFFSET},
+{0, 1, 0, 0, CA_LOCATION_TYPE, CUSTOMER_ADDRESS, CA_LOCATION_TYPE},
+{0, 2, 0, 0, CA_NULLS, CUSTOMER_ADDRESS, CA_NULLS},
+{0, 7, 0, 0, CA_ADDRESS, CUSTOMER_ADDRESS, CA_ADDRESS},
+{0, 1, 0, 0, CA_ADDRESS_STREET_NAME2, CUSTOMER_ADDRESS, CA_ADDRESS_STREET_NAME2},
+{0, 1, 0, 0, CD_DEMO_SK, CUSTOMER_DEMOGRAPHICS, CD_DEMO_SK},
+{0, 1, 0, 0, CD_GENDER, CUSTOMER_DEMOGRAPHICS, CD_GENDER},
+{0, 1, 0, 0, CD_MARITAL_STATUS, CUSTOMER_DEMOGRAPHICS, CD_MARITAL_STATUS},
+{0, 1, 0, 0, CD_EDUCATION_STATUS, CUSTOMER_DEMOGRAPHICS, CD_EDUCATION_STATUS},
+{0, 1, 0, 0, CD_PURCHASE_ESTIMATE, CUSTOMER_DEMOGRAPHICS, CD_PURCHASE_ESTIMATE},
+{0, 1, 0, 0, CD_CREDIT_RATING, CUSTOMER_DEMOGRAPHICS, CD_CREDIT_RATING},
+{0, 1, 0, 0, CD_DEP_COUNT, CUSTOMER_DEMOGRAPHICS, CD_DEP_COUNT},
+{0, 1, 0, 0, CD_DEP_EMPLOYED_COUNT, CUSTOMER_DEMOGRAPHICS, CD_DEP_EMPLOYED_COUNT},
+{0, 1, 0, 0, CD_DEP_COLLEGE_COUNT, CUSTOMER_DEMOGRAPHICS, CD_DEP_COLLEGE_COUNT},
+{0, 2, 0, 0, CD_NULLS, CUSTOMER_DEMOGRAPHICS, CD_NULLS},
+{0, 0, 0, 0, D_DATE_SK, DATE, D_DATE_SK},
+{0, 0, 0, 0, D_DATE_ID, DATE, D_DATE_ID},
+{0, 0, 0, 0, D_DATE, DATE, D_DATE},
+{0, 0, 0, 0, D_MONTH_SEQ, DATE, D_MONTH_SEQ},
+{0, 0, 0, 0, D_WEEK_SEQ, DATE, D_WEEK_SEQ},
+{0, 0, 0, 0, D_QUARTER_SEQ, DATE, D_QUARTER_SEQ},
+{0, 0, 0, 0, D_YEAR, DATE, D_YEAR},
+{0, 0, 0, 0, D_DOW, DATE, D_DOW},
+{0, 0, 0, 0, D_MOY, DATE, D_MOY},
+{0, 0, 0, 0, D_DOM, DATE, D_DOM},
+{0, 0, 0, 0, D_QOY, DATE, D_QOY},
+{0, 0, 0, 0, D_FY_YEAR, DATE, D_FY_YEAR},
+{0, 0, 0, 0, D_FY_QUARTER_SEQ, DATE, D_FY_QUARTER_SEQ},
+{0, 0, 0, 0, D_FY_WEEK_SEQ, DATE, D_FY_WEEK_SEQ},
+{0, 0, 0, 0, D_DAY_NAME, DATE, D_DAY_NAME},
+{0, 0, 0, 0, D_QUARTER_NAME, DATE, D_QUARTER_NAME},
+{0, 0, 0, 0, D_HOLIDAY, DATE, D_HOLIDAY},
+{0, 0, 0, 0, D_WEEKEND, DATE, D_WEEKEND},
+{0, 0, 0, 0, D_FOLLOWING_HOLIDAY, DATE, D_FOLLOWING_HOLIDAY},
+{0, 0, 0, 0, D_FIRST_DOM, DATE, D_FIRST_DOM},
+{0, 0, 0, 0, D_LAST_DOM, DATE, D_LAST_DOM},
+{0, 0, 0, 0, D_SAME_DAY_LY, DATE, D_SAME_DAY_LY},
+{0, 0, 0, 0, D_SAME_DAY_LQ, DATE, D_SAME_DAY_LQ},
+{0, 0, 0, 0, D_CURRENT_DAY, DATE, D_CURRENT_DAY},
+{0, 0, 0, 0, D_CURRENT_WEEK, DATE, D_CURRENT_WEEK},
+{0, 0, 0, 0, D_CURRENT_MONTH, DATE, D_CURRENT_MONTH},
+{0, 0, 0, 0, D_CURRENT_QUARTER, DATE, D_CURRENT_QUARTER},
+{0, 0, 0, 0, D_CURRENT_YEAR, DATE, D_CURRENT_YEAR},
+{0, 2, 0, 0, D_NULLS, DATE, D_NULLS},
+{0, 1, 0, 0, HD_DEMO_SK, HOUSEHOLD_DEMOGRAPHICS, HD_DEMO_SK},
+{0, 1, 0, 0, HD_INCOME_BAND_ID, HOUSEHOLD_DEMOGRAPHICS, HD_INCOME_BAND_ID},
+{0, 1, 0, 0, HD_BUY_POTENTIAL, HOUSEHOLD_DEMOGRAPHICS, HD_BUY_POTENTIAL},
+{0, 1, 0, 0, HD_DEP_COUNT, HOUSEHOLD_DEMOGRAPHICS, HD_DEP_COUNT},
+{0, 1, 0, 0, HD_VEHICLE_COUNT, HOUSEHOLD_DEMOGRAPHICS, HD_VEHICLE_COUNT},
+{0, 2, 0, 0, HD_NULLS, HOUSEHOLD_DEMOGRAPHICS, HD_NULLS},
+{0, 1, 0, 0, IB_INCOME_BAND_ID, INCOME_BAND, IB_INCOME_BAND_ID},
+{0, 1, 0, 0, IB_LOWER_BOUND, INCOME_BAND, IB_LOWER_BOUND},
+{0, 1, 0, 0, IB_UPPER_BOUND, INCOME_BAND, IB_UPPER_BOUND},
+{0, 2, 0, 0, IB_NULLS, INCOME_BAND, IB_NULLS},
+{0, 1, 0, 0, INV_DATE_SK, INVENTORY, INV_DATE_SK},
+{0, 1, 0, 0, INV_ITEM_SK, INVENTORY, INV_ITEM_SK},
+{0, 1, 0, 0, INV_WAREHOUSE_SK, INVENTORY, INV_WAREHOUSE_SK},
+{0, 1, 0, 0, INV_QUANTITY_ON_HAND, INVENTORY, INV_QUANTITY_ON_HAND},
+{0, 2, 0, 0, INV_NULLS, INVENTORY, INV_NULLS},
+{0, 1, 0, 0, I_ITEM_SK, ITEM, I_ITEM_SK},
+{0, 1, 0, 0, I_ITEM_ID, ITEM, I_ITEM_ID},
+{0, 1, 0, 0, I_REC_START_DATE_ID, ITEM, I_REC_START_DATE_ID},
+{0, 2, 0, 0, I_REC_END_DATE_ID, ITEM, I_REC_END_DATE_ID},
+{0, 200, 0, 0, I_ITEM_DESC, ITEM, S_ITEM_DESC},
+{0, 2, 0, 0, I_CURRENT_PRICE, ITEM, I_CURRENT_PRICE},
+{0, 1, 0, 0, I_WHOLESALE_COST, ITEM, I_WHOLESALE_COST},
+{0, 1, 0, 0, I_BRAND_ID, ITEM, I_BRAND_ID},
+{0, 1, 0, 0, I_BRAND, ITEM, I_BRAND},
+{0, 1, 0, 0, I_CLASS_ID, ITEM, I_CLASS_ID},
+{0, 1, 0, 0, I_CLASS, ITEM, I_CLASS},
+{0, 1, 0, 0, I_CATEGORY_ID, ITEM, I_CATEGORY_ID},
+{0, 1, 0, 0, I_CATEGORY, ITEM, I_CATEGORY},
+{0, 2, 0, 0, I_MANUFACT_ID, ITEM, I_MANUFACT_ID},
+{0, 1, 0, 0, I_MANUFACT, ITEM, I_MANUFACT},
+{0, 1, 0, 0, I_SIZE, ITEM, I_SIZE},
+{0, 50, 0, 0, I_FORMULATION, ITEM, I_FORMULATION},
+{0, 1, 0, 0, I_COLOR, ITEM, I_COLOR},
+{0, 1, 0, 0, I_UNITS, ITEM, I_UNITS},
+{0, 1, 0, 0, I_CONTAINER, ITEM, I_CONTAINER},
+{0, 2, 0, 0, I_MANAGER_ID, ITEM, I_MANAGER_ID},
+{0, 1, 0, 0, I_PRODUCT_NAME, ITEM, I_PRODUCT_NAME},
+{0, 2, 0, 0, I_NULLS, ITEM, I_NULLS},
+{0, 1, 0, 0, I_SCD, ITEM, I_SCD},
+{0, 2, 0, 0, I_PROMO_SK, ITEM, I_PROMO_SK},
+{0, 1, 0, 0, P_PROMO_SK, PROMOTION, P_PROMO_SK},
+{0, 1, 0, 0, P_PROMO_ID, PROMOTION, P_PROMO_ID},
+{0, 1, 0, 0, P_START_DATE_ID, PROMOTION, P_START_DATE_ID},
+{0, 1, 0, 0, P_END_DATE_ID, PROMOTION, P_END_DATE_ID},
+{0, 1, 0, 0, P_ITEM_SK, PROMOTION, P_ITEM_SK},
+{0, 1, 0, 0, P_COST, PROMOTION, P_COST},
+{0, 1, 0, 0, P_RESPONSE_TARGET, PROMOTION, P_RESPONSE_TARGET},
+{0, 1, 0, 0, P_PROMO_NAME, PROMOTION, P_PROMO_NAME},
+{0, 1, 0, 0, P_CHANNEL_DMAIL, PROMOTION, P_CHANNEL_DMAIL},
+{0, 1, 0, 0, P_CHANNEL_EMAIL, PROMOTION, P_CHANNEL_EMAIL},
+{0, 1, 0, 0, P_CHANNEL_CATALOG, PROMOTION, P_CHANNEL_CATALOG},
+{0, 1, 0, 0, P_CHANNEL_TV, PROMOTION, P_CHANNEL_TV},
+{0, 1, 0, 0, P_CHANNEL_RADIO, PROMOTION, P_CHANNEL_RADIO},
+{0, 1, 0, 0, P_CHANNEL_PRESS, PROMOTION, P_CHANNEL_PRESS},
+{0, 1, 0, 0, P_CHANNEL_EVENT, PROMOTION, P_CHANNEL_EVENT},
+{0, 1, 0, 0, P_CHANNEL_DEMO, PROMOTION, P_CHANNEL_DEMO},
+{0, 100, 0, 0, P_CHANNEL_DETAILS, PROMOTION, P_CHANNEL_DETAILS},
+{0, 1, 0, 0, P_PURPOSE, PROMOTION, P_PURPOSE},
+{0, 1, 0, 0, P_DISCOUNT_ACTIVE, PROMOTION, P_DISCOUNT_ACTIVE},
+{0, 2, 0, 0, P_NULLS, PROMOTION, P_NULLS},
+{0, 1, 0, 0, R_REASON_SK, REASON, R_REASON_SK},
+{0, 1, 0, 0, R_REASON_ID, REASON, R_REASON_ID},
+{0, 1, 0, 0, R_REASON_DESCRIPTION, REASON, R_REASON_DESCRIPTION},
+{0, 2, 0, 0, R_NULLS, REASON, R_NULLS},
+{0, 1, 0, 0, SM_SHIP_MODE_SK, SHIP_MODE, SM_SHIP_MODE_SK},
+{0, 1, 0, 0, SM_SHIP_MODE_ID, SHIP_MODE, SM_SHIP_MODE_ID},
+{0, 1, 0, 0, SM_TYPE, SHIP_MODE, SM_TYPE},
+{0, 1, 0, 0, SM_CODE, SHIP_MODE, SM_CODE},
+{0, 21, 0, 0, SM_CONTRACT, SHIP_MODE, SM_CONTRACT},
+{0, 1, 0, 0, SM_CARRIER, SHIP_MODE, SM_CARRIER},
+{0, 2, 0, 0, SM_NULLS, SHIP_MODE, SM_NULLS},
+{0, 1, 0, 0, W_STORE_SK, STORE, W_STORE_SK},
+{0, 1, 0, 0, W_STORE_ID, STORE, W_STORE_ID},
+{0, 1, 0, 0, W_STORE_REC_START_DATE_ID, STORE, W_STORE_REC_START_DATE_ID},
+{0, 2, 0, 0, W_STORE_REC_END_DATE_ID, STORE, W_STORE_REC_END_DATE_ID},
+{0, 2, 0, 0, W_STORE_CLOSED_DATE_ID, STORE, W_STORE_CLOSED_DATE_ID},
+{0, 0, 0, 0, W_STORE_NAME, STORE, W_STORE_NAME},
+{0, 1, 0, 0, W_STORE_EMPLOYEES, STORE, W_STORE_EMPLOYEES},
+{0, 1, 0, 0, W_STORE_FLOOR_SPACE, STORE, W_STORE_FLOOR_SPACE},
+{0, 1, 0, 0, W_STORE_HOURS, STORE, W_STORE_HOURS},
+{0, 2, 0, 0, W_STORE_MANAGER, STORE, W_STORE_MANAGER},
+{0, 1, 0, 0, W_STORE_MARKET_ID, STORE, W_STORE_MARKET_ID},
+{0, 1, 0, 0, W_STORE_TAX_PERCENTAGE, STORE, W_STORE_TAX_PERCENTAGE},
+{0, 1, 0, 0, W_STORE_GEOGRAPHY_CLASS, STORE, W_STORE_GEOGRAPHY_CLASS},
+{0, 100, 0, 0, W_STORE_MARKET_DESC, STORE, W_STORE_MARKET_DESC},
+{0, 2, 0, 0, W_STORE_MARKET_MANAGER, STORE, W_STORE_MARKET_MANAGER},
+{0, 1, 0, 0, W_STORE_DIVISION_ID, STORE, W_STORE_DIVISION_ID},
+{0, 1, 0, 0, W_STORE_DIVISION_NAME, STORE, W_STORE_DIVISION_NAME},
+{0, 1, 0, 0, W_STORE_COMPANY_ID, STORE, W_STORE_COMPANY_ID},
+{0, 1, 0, 0, W_STORE_COMPANY_NAME, STORE, W_STORE_COMPANY_NAME},
+{0, 1, 0, 0, W_STORE_ADDRESS_STREET_NUM, STORE, W_STORE_ADDRESS_STREET_NUM},
+{0, 1, 0, 0, W_STORE_ADDRESS_STREET_NAME1, STORE, W_STORE_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, W_STORE_ADDRESS_STREET_TYPE, STORE, W_STORE_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, W_STORE_ADDRESS_SUITE_NUM, STORE, W_STORE_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, W_STORE_ADDRESS_CITY, STORE, W_STORE_ADDRESS_CITY},
+{0, 1, 0, 0, W_STORE_ADDRESS_COUNTY, STORE, W_STORE_ADDRESS_COUNTY},
+{0, 1, 0, 0, W_STORE_ADDRESS_STATE, STORE, W_STORE_ADDRESS_STATE},
+{0, 1, 0, 0, W_STORE_ADDRESS_ZIP, STORE, W_STORE_ADDRESS_ZIP},
+{0, 1, 0, 0, W_STORE_ADDRESS_COUNTRY, STORE, W_STORE_ADDRESS_COUNTRY},
+{0, 1, 0, 0, W_STORE_ADDRESS_GMT_OFFSET, STORE, W_STORE_ADDRESS_GMT_OFFSET},
+{0, 2, 0, 0, W_STORE_NULLS, STORE, W_STORE_NULLS},
+{0, 1, 0, 0, W_STORE_TYPE, STORE, W_STORE_TYPE},
+{0, 1, 0, 0, W_STORE_SCD, STORE, W_STORE_SCD},
+{0, 7, 0, 0, W_STORE_ADDRESS, STORE, W_STORE_ADDRESS},
+{0, 32, 0, 0, SR_RETURNED_DATE_SK, STORE_RETURNS, SR_RETURNED_DATE_SK},
+{0, 32, 0, 0, SR_RETURNED_TIME_SK, STORE_RETURNS, SR_RETURNED_TIME_SK},
+{0, 16, 0, 0, SR_ITEM_SK, STORE_RETURNS, SR_ITEM_SK},
+{0, 16, 0, 0, SR_CUSTOMER_SK, STORE_RETURNS, SR_CUSTOMER_SK},
+{0, 16, 0, 0, SR_CDEMO_SK, STORE_RETURNS, SR_CDEMO_SK},
+{0, 16, 0, 0, SR_HDEMO_SK, STORE_RETURNS, SR_HDEMO_SK},
+{0, 16, 0, 0, SR_ADDR_SK, STORE_RETURNS, SR_ADDR_SK},
+{0, 16, 0, 0, SR_STORE_SK, STORE_RETURNS, SR_STORE_SK},
+{0, 16, 0, 0, SR_REASON_SK, STORE_RETURNS, SR_REASON_SK},
+{0, 16, 0, 0, SR_TICKET_NUMBER, STORE_RETURNS, SR_TICKET_NUMBER},
+{0, 0, 0, 0, SR_PRICING_QUANTITY, STORE_RETURNS, SR_PRICING_QUANTITY},
+{0, 0, 0, 0, SR_PRICING_NET_PAID, STORE_RETURNS, SR_PRICING_NET_PAID},
+{0, 0, 0, 0, SR_PRICING_EXT_TAX, STORE_RETURNS, SR_PRICING_EXT_TAX},
+{0, 0, 0, 0, SR_PRICING_NET_PAID_INC_TAX, STORE_RETURNS, SR_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, SR_PRICING_FEE, STORE_RETURNS, SR_PRICING_FEE},
+{0, 0, 0, 0, SR_PRICING_EXT_SHIP_COST, STORE_RETURNS, SR_PRICING_EXT_SHIP_COST},
+{0, 0, 0, 0, SR_PRICING_REFUNDED_CASH, STORE_RETURNS, SR_PRICING_REFUNDED_CASH},
+{0, 0, 0, 0, SR_PRICING_REVERSED_CHARGE, STORE_RETURNS, SR_PRICING_REVERSED_CHARGE},
+{0, 0, 0, 0, SR_PRICING_STORE_CREDIT, STORE_RETURNS, SR_PRICING_STORE_CREDIT},
+{0, 0, 0, 0, SR_PRICING_NET_LOSS, STORE_RETURNS, SR_PRICING_NET_LOSS},
+{0, 80, 0, 0, SR_PRICING, STORE_RETURNS, SR_PRICING},
+{0, 32, 0, 0, SR_NULLS, STORE_RETURNS, SR_NULLS},
+{0, 2, 0, 0, SS_SOLD_DATE_SK, STORE_SALES, SS_SOLD_DATE_SK},
+{0, 2, 0, 0, SS_SOLD_TIME_SK, STORE_SALES, SS_SOLD_TIME_SK},
+{0, 1, 0, 0, SS_SOLD_ITEM_SK, STORE_SALES, SS_SOLD_ITEM_SK},
+{0, 1, 0, 0, SS_SOLD_CUSTOMER_SK, STORE_SALES, SS_SOLD_CUSTOMER_SK},
+{0, 1, 0, 0, SS_SOLD_CDEMO_SK, STORE_SALES, SS_SOLD_CDEMO_SK},
+{0, 1, 0, 0, SS_SOLD_HDEMO_SK, STORE_SALES, SS_SOLD_HDEMO_SK},
+{0, 1, 0, 0, SS_SOLD_ADDR_SK, STORE_SALES, SS_SOLD_ADDR_SK},
+{0, 1, 0, 0, SS_SOLD_STORE_SK, STORE_SALES, SS_SOLD_STORE_SK},
+{0, 16, 0, 0, SS_SOLD_PROMO_SK, STORE_SALES, SS_SOLD_PROMO_SK},
+{0, 1, 0, 0, SS_TICKET_NUMBER, STORE_SALES, SS_TICKET_NUMBER},
+{0, 1, 0, 0, SS_PRICING_QUANTITY, STORE_SALES, SS_PRICING_QUANTITY},
+{0, 0, 0, 0, SS_PRICING_WHOLESALE_COST, STORE_SALES, SS_PRICING_WHOLESALE_COST},
+{0, 0, 0, 0, SS_PRICING_LIST_PRICE, STORE_SALES, SS_PRICING_LIST_PRICE},
+{0, 0, 0, 0, SS_PRICING_SALES_PRICE, STORE_SALES, SS_PRICING_SALES_PRICE},
+{0, 0, 0, 0, SS_PRICING_COUPON_AMT, STORE_SALES, SS_PRICING_COUPON_AMT},
+{0, 0, 0, 0, SS_PRICING_EXT_SALES_PRICE, STORE_SALES, SS_PRICING_EXT_SALES_PRICE},
+{0, 0, 0, 0, SS_PRICING_EXT_WHOLESALE_COST, STORE_SALES, SS_PRICING_EXT_WHOLESALE_COST},
+{0, 0, 0, 0, SS_PRICING_EXT_LIST_PRICE, STORE_SALES, SS_PRICING_EXT_LIST_PRICE},
+{0, 0, 0, 0, SS_PRICING_EXT_TAX, STORE_SALES, SS_PRICING_EXT_TAX},
+{0, 0, 0, 0, SS_PRICING_NET_PAID, STORE_SALES, SS_PRICING_NET_PAID},
+{0, 0, 0, 0, SS_PRICING_NET_PAID_INC_TAX, STORE_SALES, SS_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, SS_PRICING_NET_PROFIT, STORE_SALES, SS_PRICING_NET_PROFIT},
+{0, 16, 0, 0, SR_IS_RETURNED, STORE_SALES, SR_IS_RETURNED},
+{0, 128, 0, 0, SS_PRICING, STORE_SALES, SS_PRICING},
+{0, 32, 0, 0, SS_NULLS, STORE_SALES, SS_NULLS},
+{0, 0, 0, 0, SS_PERMUTATION, STORE_SALES, SS_PERMUTATION},
+{0, 1, 0, 0, T_TIME_SK, TIME, T_TIME_SK},
+{0, 1, 0, 0, T_TIME_ID, TIME, T_TIME_ID},
+{0, 1, 0, 0, T_TIME, TIME, T_TIME},
+{0, 1, 0, 0, T_HOUR, TIME, T_HOUR},
+{0, 1, 0, 0, T_MINUTE, TIME, T_MINUTE},
+{0, 1, 0, 0, T_SECOND, TIME, T_SECOND},
+{0, 1, 0, 0, T_AM_PM, TIME, T_AM_PM},
+{0, 1, 0, 0, T_SHIFT, TIME, T_SHIFT},
+{0, 1, 0, 0, T_SUB_SHIFT, TIME, T_SUB_SHIFT},
+{0, 1, 0, 0, T_MEAL_TIME, TIME, T_MEAL_TIME},
+{0, 2, 0, 0, T_NULLS, TIME, T_NULLS},
+{0, 1, 0, 0, W_WAREHOUSE_SK, WAREHOUSE, W_WAREHOUSE_SK},
+{0, 1, 0, 0, W_WAREHOUSE_ID, WAREHOUSE, W_WAREHOUSE_ID},
+{0, 80, 0, 0, W_WAREHOUSE_NAME, WAREHOUSE, W_WAREHOUSE_NAME},
+{0, 1, 0, 0, W_WAREHOUSE_SQ_FT, WAREHOUSE, W_WAREHOUSE_SQ_FT},
+{0, 1, 0, 0, W_ADDRESS_STREET_NUM, WAREHOUSE, W_ADDRESS_STREET_NUM},
+{0, 1, 0, 0, W_ADDRESS_STREET_NAME1, WAREHOUSE, W_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, W_ADDRESS_STREET_TYPE, WAREHOUSE, W_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, W_ADDRESS_SUITE_NUM, WAREHOUSE, W_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, W_ADDRESS_CITY, WAREHOUSE, W_ADDRESS_CITY},
+{0, 1, 0, 0, W_ADDRESS_COUNTY, WAREHOUSE, W_ADDRESS_COUNTY},
+{0, 1, 0, 0, W_ADDRESS_STATE, WAREHOUSE, W_ADDRESS_STATE},
+{0, 1, 0, 0, W_ADDRESS_ZIP, WAREHOUSE, W_ADDRESS_ZIP},
+{0, 1, 0, 0, W_ADDRESS_COUNTRY, WAREHOUSE, W_ADDRESS_COUNTRY},
+{0, 1, 0, 0, W_ADDRESS_GMT_OFFSET, WAREHOUSE, W_ADDRESS_GMT_OFFSET},
+{0, 2, 0, 0, W_NULLS, WAREHOUSE, W_NULLS},
+{0, 7, 0, 0, W_WAREHOUSE_ADDRESS, WAREHOUSE, W_WAREHOUSE_ADDRESS},
+{0, 1, 0, 0, WP_PAGE_SK, WEB_PAGE, WP_PAGE_SK},
+{0, 1, 0, 0, WP_PAGE_ID, WEB_PAGE, WP_PAGE_ID},
+{0, 1, 0, 0, WP_REC_START_DATE_ID, WEB_PAGE, WP_REC_START_DATE_ID},
+{0, 1, 0, 0, WP_REC_END_DATE_ID, WEB_PAGE, WP_REC_END_DATE_ID},
+{0, 2, 0, 0, WP_CREATION_DATE_SK, WEB_PAGE, WP_CREATION_DATE_SK},
+{0, 1, 0, 0, WP_ACCESS_DATE_SK, WEB_PAGE, WP_ACCESS_DATE_SK},
+{0, 1, 0, 0, WP_AUTOGEN_FLAG, WEB_PAGE, WP_AUTOGEN_FLAG},
+{0, 1, 0, 0, WP_CUSTOMER_SK, WEB_PAGE, WP_CUSTOMER_SK},
+{0, 1, 0, 0, WP_URL, WEB_PAGE, WP_URL},
+{0, 1, 0, 0, WP_TYPE, WEB_PAGE, WP_TYPE},
+{0, 1, 0, 0, WP_CHAR_COUNT, WEB_PAGE, WP_CHAR_COUNT},
+{0, 1, 0, 0, WP_LINK_COUNT, WEB_PAGE, WP_LINK_COUNT},
+{0, 1, 0, 0, WP_IMAGE_COUNT, WEB_PAGE, WP_IMAGE_COUNT},
+{0, 1, 0, 0, WP_MAX_AD_COUNT, WEB_PAGE, WP_MAX_AD_COUNT},
+{0, 2, 0, 0, WP_NULLS, WEB_PAGE, WP_NULLS},
+{0, 1, 0, 0, WP_SCD, WEB_PAGE, WP_SCD},
+{0, 32, 0, 0, WR_RETURNED_DATE_SK, WEB_RETURNS, WR_RETURNED_DATE_SK},
+{0, 32, 0, 0, WR_RETURNED_TIME_SK, WEB_RETURNS, WR_RETURNED_TIME_SK},
+{0, 16, 0, 0, WR_ITEM_SK, WEB_RETURNS, WR_ITEM_SK},
+{0, 16, 0, 0, WR_REFUNDED_CUSTOMER_SK, WEB_RETURNS, WR_REFUNDED_CUSTOMER_SK},
+{0, 16, 0, 0, WR_REFUNDED_CDEMO_SK, WEB_RETURNS, WR_REFUNDED_CDEMO_SK},
+{0, 16, 0, 0, WR_REFUNDED_HDEMO_SK, WEB_RETURNS, WR_REFUNDED_HDEMO_SK},
+{0, 16, 0, 0, WR_REFUNDED_ADDR_SK, WEB_RETURNS, WR_REFUNDED_ADDR_SK},
+{0, 16, 0, 0, WR_RETURNING_CUSTOMER_SK, WEB_RETURNS, WR_RETURNING_CUSTOMER_SK},
+{0, 16, 0, 0, WR_RETURNING_CDEMO_SK, WEB_RETURNS, WR_RETURNING_CDEMO_SK},
+{0, 16, 0, 0, WR_RETURNING_HDEMO_SK, WEB_RETURNS, WR_RETURNING_HDEMO_SK},
+{0, 16, 0, 0, WR_RETURNING_ADDR_SK, WEB_RETURNS, WR_RETURNING_ADDR_SK},
+{0, 16, 0, 0, WR_WEB_PAGE_SK, WEB_RETURNS, WR_WEB_PAGE_SK},
+{0, 16, 0, 0, WR_REASON_SK, WEB_RETURNS, WR_REASON_SK},
+{0, 0, 0, 0, WR_ORDER_NUMBER, WEB_RETURNS, WR_ORDER_NUMBER},
+{0, 0, 0, 0, WR_PRICING_QUANTITY, WEB_RETURNS, WR_PRICING_QUANTITY},
+{0, 0, 0, 0, WR_PRICING_NET_PAID, WEB_RETURNS, WR_PRICING_NET_PAID},
+{0, 0, 0, 0, WR_PRICING_EXT_TAX, WEB_RETURNS, WR_PRICING_EXT_TAX},
+{0, 0, 0, 0, WR_PRICING_NET_PAID_INC_TAX, WEB_RETURNS, WR_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, WR_PRICING_FEE, WEB_RETURNS, WR_PRICING_FEE},
+{0, 0, 0, 0, WR_PRICING_EXT_SHIP_COST, WEB_RETURNS, WR_PRICING_EXT_SHIP_COST},
+{0, 0, 0, 0, WR_PRICING_REFUNDED_CASH, WEB_RETURNS, WR_PRICING_REFUNDED_CASH},
+{0, 0, 0, 0, WR_PRICING_REVERSED_CHARGE, WEB_RETURNS, WR_PRICING_REVERSED_CHARGE},
+{0, 0, 0, 0, WR_PRICING_STORE_CREDIT, WEB_RETURNS, WR_PRICING_STORE_CREDIT},
+{0, 0, 0, 0, WR_PRICING_NET_LOSS, WEB_RETURNS, WR_PRICING_NET_LOSS},
+{0, 80, 0, 0, WR_PRICING, WEB_RETURNS, WR_PRICING},
+{0, 32, 0, 0, WR_NULLS, WEB_RETURNS, WR_NULLS},
+{0, 2, 0, 0, WS_SOLD_DATE_SK, WEB_SALES, WS_SOLD_DATE_SK},
+{0, 2, 0, 0, WS_SOLD_TIME_SK, WEB_SALES, WS_SOLD_TIME_SK},
+{0, 16, 0, 0, WS_SHIP_DATE_SK, WEB_SALES, WS_SHIP_DATE_SK},
+{0, 1, 0, 0, WS_ITEM_SK, WEB_SALES, WS_ITEM_SK},
+{0, 1, 0, 0, WS_BILL_CUSTOMER_SK, WEB_SALES, WS_BILL_CUSTOMER_SK},
+{0, 1, 0, 0, WS_BILL_CDEMO_SK, WEB_SALES, WS_BILL_CDEMO_SK},
+{0, 1, 0, 0, WS_BILL_HDEMO_SK, WEB_SALES, WS_BILL_HDEMO_SK},
+{0, 1, 0, 0, WS_BILL_ADDR_SK, WEB_SALES, WS_BILL_ADDR_SK},
+{0, 2, 0, 0, WS_SHIP_CUSTOMER_SK, WEB_SALES, WS_SHIP_CUSTOMER_SK},
+{0, 2, 0, 0, WS_SHIP_CDEMO_SK, WEB_SALES, WS_SHIP_CDEMO_SK},
+{0, 1, 0, 0, WS_SHIP_HDEMO_SK, WEB_SALES, WS_SHIP_HDEMO_SK},
+{0, 1, 0, 0, WS_SHIP_ADDR_SK, WEB_SALES, WS_SHIP_ADDR_SK},
+{0, 16, 0, 0, WS_WEB_PAGE_SK, WEB_SALES, WS_WEB_PAGE_SK},
+{0, 16, 0, 0, WS_WEB_SITE_SK, WEB_SALES, WS_WEB_SITE_SK},
+{0, 16, 0, 0, WS_SHIP_MODE_SK, WEB_SALES, WS_SHIP_MODE_SK},
+{0, 16, 0, 0, WS_WAREHOUSE_SK, WEB_SALES, WS_WAREHOUSE_SK},
+{0, 16, 0, 0, WS_PROMO_SK, WEB_SALES, WS_PROMO_SK},
+{0, 1, 0, 0, WS_ORDER_NUMBER, WEB_SALES, WS_ORDER_NUMBER},
+{0, 1, 0, 0, WS_PRICING_QUANTITY, WEB_SALES, WS_PRICING_QUANTITY},
+{0, 1, 0, 0, WS_PRICING_WHOLESALE_COST, WEB_SALES, WS_PRICING_WHOLESALE_COST},
+{0, 0, 0, 0, WS_PRICING_LIST_PRICE, WEB_SALES, WS_PRICING_LIST_PRICE},
+{0, 0, 0, 0, WS_PRICING_SALES_PRICE, WEB_SALES, WS_PRICING_SALES_PRICE},
+{0, 0, 0, 0, WS_PRICING_EXT_DISCOUNT_AMT, WEB_SALES, WS_PRICING_EXT_DISCOUNT_AMT},
+{0, 0, 0, 0, WS_PRICING_EXT_SALES_PRICE, WEB_SALES, WS_PRICING_EXT_SALES_PRICE},
+{0, 0, 0, 0, WS_PRICING_EXT_WHOLESALE_COST, WEB_SALES, WS_PRICING_EXT_WHOLESALE_COST},
+{0, 0, 0, 0, WS_PRICING_EXT_LIST_PRICE, WEB_SALES, WS_PRICING_EXT_LIST_PRICE},
+{0, 0, 0, 0, WS_PRICING_EXT_TAX, WEB_SALES, WS_PRICING_EXT_TAX},
+{0, 0, 0, 0, WS_PRICING_COUPON_AMT, WEB_SALES, WS_PRICING_COUPON_AMT},
+{0, 0, 0, 0, WS_PRICING_EXT_SHIP_COST, WEB_SALES, WS_PRICING_EXT_SHIP_COST},
+{0, 0, 0, 0, WS_PRICING_NET_PAID, WEB_SALES, WS_PRICING_NET_PAID},
+{0, 0, 0, 0, WS_PRICING_NET_PAID_INC_TAX, WEB_SALES, WS_PRICING_NET_PAID_INC_TAX},
+{0, 0, 0, 0, WS_PRICING_NET_PAID_INC_SHIP, WEB_SALES, WS_PRICING_NET_PAID_INC_SHIP},
+{0, 0, 0, 0, WS_PRICING_NET_PAID_INC_SHIP_TAX, WEB_SALES, WS_PRICING_NET_PAID_INC_SHIP_TAX},
+{0, 0, 0, 0, WS_PRICING_NET_PROFIT, WEB_SALES, WS_PRICING_NET_PROFIT},
+{0, 128, 0, 0, WS_PRICING, WEB_SALES, WS_PRICING},
+{0, 32, 0, 0, WS_NULLS, WEB_SALES, WS_NULLS},
+{0, 16, 0, 0, WR_IS_RETURNED, WEB_SALES, WR_IS_RETURNED},
+{0, 0, 0, 0, WS_PERMUTATION, WEB_SALES, WS_PERMUTATION},
+{0, 1, 0, 0, WEB_SITE_SK, WEB_SITE, WEB_SITE_SK},
+{0, 1, 0, 0, WEB_SITE_ID, WEB_SITE, WEB_SITE_ID},
+{0, 1, 0, 0, WEB_REC_START_DATE_ID, WEB_SITE, WEB_REC_START_DATE_ID},
+{0, 1, 0, 0, WEB_REC_END_DATE_ID, WEB_SITE, WEB_REC_END_DATE_ID},
+{0, 1, 0, 0, WEB_NAME, WEB_SITE, WEB_NAME},
+{0, 1, 0, 0, WEB_OPEN_DATE, WEB_SITE, WEB_OPEN_DATE},
+{0, 1, 0, 0, WEB_CLOSE_DATE, WEB_SITE, WEB_CLOSE_DATE},
+{0, 1, 0, 0, WEB_CLASS, WEB_SITE, WEB_CLASS},
+{0, 2, 0, 0, WEB_MANAGER, WEB_SITE, WEB_MANAGER},
+{0, 1, 0, 0, WEB_MARKET_ID, WEB_SITE, WEB_MARKET_ID},
+{0, 20, 0, 0, WEB_MARKET_CLASS, WEB_SITE, WEB_MARKET_CLASS},
+{0, 100, 0, 0, WEB_MARKET_DESC, WEB_SITE, WEB_MARKET_DESC},
+{0, 2, 0, 0, WEB_MARKET_MANAGER, WEB_SITE, WEB_MARKET_MANAGER},
+{0, 1, 0, 0, WEB_COMPANY_ID, WEB_SITE, WEB_COMPANY_ID},
+{0, 1, 0, 0, WEB_COMPANY_NAME, WEB_SITE, WEB_COMPANY_NAME},
+{0, 1, 0, 0, WEB_ADDRESS_STREET_NUM, WEB_SITE, WEB_ADDRESS_STREET_NUM},
+{0, 1, 0, 0, WEB_ADDRESS_STREET_NAME1, WEB_SITE, WEB_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, WEB_ADDRESS_STREET_TYPE, WEB_SITE, WEB_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, WEB_ADDRESS_SUITE_NUM, WEB_SITE, WEB_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, WEB_ADDRESS_CITY, WEB_SITE, WEB_ADDRESS_CITY},
+{0, 1, 0, 0, WEB_ADDRESS_COUNTY, WEB_SITE, WEB_ADDRESS_COUNTY},
+{0, 1, 0, 0, WEB_ADDRESS_STATE, WEB_SITE, WEB_ADDRESS_STATE},
+{0, 1, 0, 0, WEB_ADDRESS_ZIP, WEB_SITE, WEB_ADDRESS_ZIP},
+{0, 1, 0, 0, WEB_ADDRESS_COUNTRY, WEB_SITE, WEB_ADDRESS_COUNTRY},
+{0, 1, 0, 0, WEB_ADDRESS_GMT_OFFSET, WEB_SITE, WEB_ADDRESS_GMT_OFFSET},
+{0, 1, 0, 0, WEB_TAX_PERCENTAGE, WEB_SITE, WEB_TAX_PERCENTAGE},
+{0, 2, 0, 0, WEB_NULLS, WEB_SITE, WEB_NULLS},
+{0, 7, 0, 0, WEB_ADDRESS, WEB_SITE, WEB_ADDRESS},
+{0, 70, 0, 0, WEB_SCD, WEB_SITE, WEB_SCD},
+{0, 0, 0, 0, DV_VERSION, DBGEN_VERSION, DV_VERSION},
+{0, 0, 0, 0, DV_CREATE_DATE, DBGEN_VERSION, DV_CREATE_DATE},
+{0, 0, 0, 0, DV_CREATE_TIME, DBGEN_VERSION, DV_CREATE_TIME},
+{0, 0, 0, 0, DV_CMDLINE_ARGS, DBGEN_VERSION, DV_CMDLINE_ARGS},
+{0, 0, 0, 0, VALIDATE_STREAM, DBGEN_VERSION, VALIDATE_STREAM},
+{0, 0, 0, 0, S_BRAND_ID, S_BRAND, S_BRAND_ID},
+{0, 0, 0, 0, S_BRAND_SUBCLASS_ID, S_BRAND, S_BRAND_SUBCLASS_ID},
+{0, 1, 0, 0, S_BRAND_MANAGER_ID, S_BRAND, S_BRAND_MANAGER_ID},
+{0, 1, 0, 0, S_BRAND_MANUFACTURER_ID, S_BRAND, S_BRAND_MANUFACTURER_ID},
+{0, 6, 0, 0, S_BRAND_NAME, S_BRAND, S_BRAND_NAME},
+{0, 0, 0, 0, S_CADR_ID, S_CUSTOMER_ADDRESS, S_CADR_ID},
+{0, 1, 0, 0, S_CADR_ADDRESS_STREET_NUMBER, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_STREET_NUMBER},
+{0, 1, 0, 0, S_CADR_ADDRESS_STREET_NAME1, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, S_CADR_ADDRESS_STREET_NAME2, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_STREET_NAME2},
+{0, 1, 0, 0, S_CADR_ADDRESS_STREET_TYPE, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, S_CADR_ADDRESS_SUITE_NUM, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, S_CADR_ADDRESS_CITY, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_CITY},
+{0, 1, 0, 0, S_CADR_ADDRESS_COUNTY, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_COUNTY},
+{0, 1, 0, 0, S_CADR_ADDRESS_STATE, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_STATE},
+{0, 1, 0, 0, S_CADR_ADDRESS_ZIP, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_ZIP},
+{0, 1, 0, 0, S_CADR_ADDRESS_COUNTRY, S_CUSTOMER_ADDRESS, S_CADR_ADDRESS_COUNTRY},
+{0, 7, 0, 0, S_BADDR_ADDRESS, S_CUSTOMER_ADDRESS, CA_ADDRESS},
+{0, 1, 0, 0, S_CALL_CENTER_ID, S_CALL_CENTER, S_CALL_CENTER_ID},
+{0, 1, 0, 0, S_CALL_CENTER_DIVISION_ID, S_CALL_CENTER, S_CALL_CENTER_DIVISION_ID},
+{0, 1, 0, 0, S_CALL_CENTER_OPEN_DATE, S_CALL_CENTER, S_CALL_CENTER_OPEN_DATE},
+{0, 0, 0, 0, S_CALL_CENTER_CLOSED_DATE, S_CALL_CENTER, S_CALL_CENTER_CLOSED_DATE},
+{0, 0, 0, 0, S_CALL_CENTER_NAME, S_CALL_CENTER, S_CALL_CENTER_NAME},
+{0, 0, 0, 0, S_CALL_CENTER_CLASS, S_CALL_CENTER, S_CALL_CENTER_CLASS},
+{0, 1, 0, 0, S_CALL_CENTER_EMPLOYEES, S_CALL_CENTER, S_CALL_CENTER_EMPLOYEES},
+{0, 1, 0, 0, S_CALL_CENTER_SQFT, S_CALL_CENTER, S_CALL_CENTER_SQFT},
+{0, 1, 0, 0, S_CALL_CENTER_HOURS, S_CALL_CENTER, S_CALL_CENTER_HOURS},
+{0, 1, 0, 0, S_CALL_CENTER_MANAGER_ID, S_CALL_CENTER, S_CALL_CENTER_MANAGER_ID},
+{0, 1, 0, 0, S_CALL_CENTER_MARKET_ID, S_CALL_CENTER, S_CALL_CENTER_MARKET_ID},
+{0, 1, 0, 0, S_CALL_CENTER_ADDRESS_ID, S_CALL_CENTER, S_CALL_CENTER_ADDRESS_ID},
+{0, 1, 0, 0, S_CALL_CENTER_TAX_PERCENTAGE, S_CALL_CENTER, S_CALL_CENTER_TAX_PERCENTAGE},
+{0, 1, 0, 0, S_CALL_CENTER_SCD, S_CALL_CENTER, S_CALL_CENTER_SCD},
+{0, 0, 0, 0, S_CATALOG_NUMBER, S_CATALOG, S_CATALOG_NUMBER},
+{0, 1, 0, 0, S_CATALOG_START_DATE, S_CATALOG, S_CATALOG_START_DATE},
+{0, 1, 0, 0, S_CATALOG_END_DATE, S_CATALOG, S_CATALOG_END_DATE},
+{0, 10, 0, 0, S_CATALOG_DESC, S_CATALOG, S_CATALOG_DESC},
+{0, 1, 0, 0, S_CATALOG_TYPE, S_CATALOG, S_CATALOG_TYPE},
+{0, 0, 0, 0, S_CORD_ID, S_CATALOG_ORDER, S_CORD_ID},
+{0, 1, 0, 0, S_CORD_BILL_CUSTOMER_ID, S_CATALOG_ORDER, S_CORD_BILL_CUSTOMER_ID},
+{0, 2, 0, 0, S_CORD_SHIP_CUSTOMER_ID, S_CATALOG_ORDER, S_CORD_SHIP_CUSTOMER_ID},
+{0, 1, 0, 0, S_CORD_ORDER_DATE, S_CATALOG_ORDER, S_CORD_ORDER_DATE},
+{0, 1, 0, 0, S_CORD_ORDER_TIME, S_CATALOG_ORDER, S_CORD_ORDER_TIME},
+{0, 1, 0, 0, S_CORD_SHIP_MODE_ID, S_CATALOG_ORDER, S_CORD_SHIP_MODE_ID},
+{0, 1, 0, 0, S_CORD_CALL_CENTER_ID, S_CATALOG_ORDER, S_CORD_CALL_CENTER_ID},
+{0, 1, 0, 0, S_CLIN_ITEM_ID, S_CATALOG_ORDER, S_CLIN_ITEM_ID},
+{0, 100, 0, 0, S_CORD_COMMENT, S_CATALOG_ORDER, S_CORD_COMMENT},
+{0, 1, 0, 0, S_CLIN_ORDER_ID, S_CATALOG_ORDER_LINEITEM, S_CLIN_ORDER_ID},
+{0, 0, 0, 0, S_CLIN_LINE_NUMBER, S_CATALOG_ORDER_LINEITEM, S_CLIN_LINE_NUMBER},
+{0, 1, 0, 0, S_CLIN_PROMOTION_ID, S_CATALOG_ORDER_LINEITEM, S_CLIN_PROMOTION_ID},
+{0, 1, 0, 0, S_CLIN_QUANTITY, S_CATALOG_ORDER_LINEITEM, S_CLIN_QUANTITY},
+{0, 1, 0, 0, S_CLIN_COUPON_AMT, S_CATALOG_ORDER_LINEITEM, S_CLIN_COUPON_AMT},
+{0, 1, 0, 0, S_CLIN_WAREHOUSE_ID, S_CATALOG_ORDER_LINEITEM, S_CLIN_WAREHOUSE_ID},
+{0, 1, 0, 0, S_CLIN_SHIP_DATE, S_CATALOG_ORDER_LINEITEM, S_CLIN_SHIP_DATE},
+{0, 1, 0, 0, S_CLIN_CATALOG_ID, S_CATALOG_ORDER_LINEITEM, S_CLIN_CATALOG_ID},
+{0, 2, 0, 0, S_CLIN_CATALOG_PAGE_ID, S_CATALOG_ORDER_LINEITEM, S_CLIN_CATALOG_PAGE_ID},
+{0, 8, 0, 0, S_CLIN_PRICING, S_CATALOG_ORDER_LINEITEM, S_CLIN_PRICING},
+{0, 0, 0, 0, S_CLIN_SHIP_COST, S_CATALOG_ORDER_LINEITEM, S_CLIN_SHIP_COST},
+{0, 1, 0, 0, S_CLIN_IS_RETURNED, S_CATALOG_ORDER_LINEITEM, S_CLIN_IS_RETURNED},
+{0, 0, 0, 0, S_CLIN_PERMUTE, S_CATALOG_ORDER_LINEITEM, S_CLIN_PERMUTE},
+{0, 0, 0, 0, S_CATALOG_PAGE_CATALOG_NUMBER, S_CATALOG_PAGE, S_CATALOG_PAGE_CATALOG_NUMBER},
+{0, 0, 0, 0, S_CATALOG_PAGE_NUMBER, S_CATALOG_PAGE, S_CATALOG_PAGE_NUMBER},
+{0, 1, 0, 0, S_CATALOG_PAGE_DEPARTMENT, S_CATALOG_PAGE, S_CATALOG_PAGE_DEPARTMENT},
+{0, 1, 0, 0, S_CP_ID, S_CATALOG_PAGE, S_CP_ID},
+{0, 1, 0, 0, S_CP_START_DATE, S_CATALOG_PAGE, S_CP_START_DATE},
+{0, 1, 0, 0, S_CP_END_DATE, S_CATALOG_PAGE, S_CP_END_DATE},
+{0, 100, 0, 0, S_CP_DESCRIPTION, S_CATALOG_PAGE, CP_DESCRIPTION},
+{0, 1, 0, 0, S_CP_TYPE, S_CATALOG_PAGE, S_CP_TYPE},
+{0, 1, 0, 0, S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER, S_CATALOG_PROMOTIONAL_ITEM, S_CATALOG_PROMOTIONAL_ITEM_CATALOG_NUMBER},
+{0, 1, 0, 0, S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER, S_CATALOG_PROMOTIONAL_ITEM, S_CATALOG_PROMOTIONAL_ITEM_CATALOG_PAGE_NUMBER},
+{0, 1, 0, 0, S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID, S_CATALOG_PROMOTIONAL_ITEM, S_CATALOG_PROMOTIONAL_ITEM_ITEM_ID},
+{0, 0, 0, 0, S_CATALOG_PROMOTIONAL_ITEM_PROMOTION_ID, S_CATALOG_PROMOTIONAL_ITEM, S_CATALOG_PROMOTIONAL_ITEM_PROMOTION_ID},
+{0, 9, 0, 0, S_CRET_CALL_CENTER_ID, S_CATALOG_RETURNS, S_CRET_CALL_CENTER_ID},
+{0, 0, 0, 0, S_CRET_ORDER_ID, S_CATALOG_RETURNS, S_CRET_ORDER_ID},
+{0, 0, 0, 0, S_CRET_LINE_NUMBER, S_CATALOG_RETURNS, S_CRET_LINE_NUMBER},
+{0, 0, 0, 0, S_CRET_ITEM_ID, S_CATALOG_RETURNS, S_CRET_ITEM_ID},
+{0, 0, 0, 0, S_CRET_RETURN_CUSTOMER_ID, S_CATALOG_RETURNS, S_CRET_RETURN_CUSTOMER_ID},
+{0, 0, 0, 0, S_CRET_REFUND_CUSTOMER_ID, S_CATALOG_RETURNS, S_CRET_REFUND_CUSTOMER_ID},
+{0, 9, 0, 0, S_CRET_DATE, S_CATALOG_RETURNS, S_CRET_DATE},
+{0, 18, 0, 0, S_CRET_TIME, S_CATALOG_RETURNS, S_CRET_TIME},
+{0, 0, 0, 0, S_CRET_QUANTITY, S_CATALOG_RETURNS, S_CRET_QUANTITY},
+{0, 0, 0, 0, S_CRET_AMOUNT, S_CATALOG_RETURNS, S_CRET_AMOUNT},
+{0, 0, 0, 0, S_CRET_TAX, S_CATALOG_RETURNS, S_CRET_TAX},
+{0, 0, 0, 0, S_CRET_FEE, S_CATALOG_RETURNS, S_CRET_FEE},
+{0, 0, 0, 0, S_CRET_SHIP_COST, S_CATALOG_RETURNS, S_CRET_SHIP_COST},
+{0, 0, 0, 0, S_CRET_REFUNDED_CASH, S_CATALOG_RETURNS, S_CRET_REFUNDED_CASH},
+{0, 0, 0, 0, S_CRET_REVERSED_CHARGE, S_CATALOG_RETURNS, S_CRET_REVERSED_CHARGE},
+{0, 0, 0, 0, S_CRET_MERCHANT_CREDIT, S_CATALOG_RETURNS, S_CRET_MERCHANT_CREDIT},
+{0, 9, 0, 0, S_CRET_REASON_ID, S_CATALOG_RETURNS, S_CRET_REASON_ID},
+{0, 72, 0, 0, S_CRET_PRICING, S_CATALOG_RETURNS, S_CRET_PRICING},
+{0, 9, 0, 0, S_CRET_SHIPMODE_ID, S_CATALOG_RETURNS, S_CRET_SHIPMODE_ID},
+{0, 9, 0, 0, S_CRET_WAREHOUSE_ID, S_CATALOG_RETURNS, S_CRET_WAREHOUSE_ID},
+{0, 0, 0, 0, S_CRET_CATALOG_PAGE_ID, S_CATALOG_RETURNS, S_CRET_CATALOG_PAGE_ID},
+{0, 0, 0, 0, S_CATEGORY_ID, S_CATEGORY, S_CATEGORY_ID},
+{0, 0, 0, 0, S_CATEGORY_NAME, S_CATEGORY, S_CATEGORY_NAME},
+{0, 10, 0, 0, S_CATEGORY_DESC, S_CATEGORY, S_CATEGORY_DESC},
+{0, 0, 0, 0, S_CLASS_ID, S_CLASS, S_CLASS_ID},
+{0, 1, 0, 0, S_CLASS_SUBCAT_ID, S_CLASS, S_CLASS_SUBCAT_ID},
+{0, 10, 0, 0, S_CLASS_DESC, S_CLASS, S_CLASS_DESC},
+{0, 0, 0, 0, S_COMPANY_ID, S_COMPANY, S_COMPANY_ID},
+{0, 0, 0, 0, S_COMPANY_NAME, S_COMPANY, S_COMPANY_NAME},
+{0, 0, 0, 0, S_CUST_ID, S_CUSTOMER, S_CUST_ID},
+{0, 1, 0, 0, S_CUST_SALUTATION, S_CUSTOMER, S_CUST_SALUTATION},
+{0, 1, 0, 0, S_CUST_LAST_NAME, S_CUSTOMER, S_CUST_LAST_NAME},
+{0, 1, 0, 0, S_CUST_FIRST_NAME, S_CUSTOMER, S_CUST_FIRST_NAME},
+{0, 1, 0, 0, S_CUST_PREFERRED_FLAG, S_CUSTOMER, S_CUST_PREFERRED_FLAG},
+{0, 1, 0, 0, S_CUST_BIRTH_DATE, S_CUSTOMER, S_CUST_BIRTH_DATE},
+{0, 1, 0, 0, S_CUST_FIRST_PURCHASE_DATE, S_CUSTOMER, S_CUST_FIRST_PURCHASE_DATE},
+{0, 1, 0, 0, S_CUST_FIRST_SHIPTO_DATE, S_CUSTOMER, S_CUST_FIRST_SHIPTO_DATE},
+{0, 1, 0, 0, S_CUST_BIRTH_COUNTRY, S_CUSTOMER, S_CUST_BIRTH_COUNTRY},
+{0, 25, 0, 0, S_CUST_LOGIN, S_CUSTOMER, S_CUST_LOGIN},
+{0, 23, 0, 0, S_CUST_EMAIL, S_CUSTOMER, S_CUST_EMAIL},
+{0, 1, 0, 0, S_CUST_LAST_LOGIN, S_CUSTOMER, S_CUST_LAST_LOGIN},
+{0, 1, 0, 0, S_CUST_LAST_REVIEW, S_CUSTOMER, S_CUST_LAST_REVIEW},
+{0, 4, 0, 0, S_CUST_PRIMARY_MACHINE, S_CUSTOMER, S_CUST_PRIMARY_MACHINE},
+{0, 4, 0, 0, S_CUST_SECONDARY_MACHINE, S_CUSTOMER, S_CUST_SECONDARY_MACHINE},
+{0, 7, 0, 0, S_CUST_ADDRESS, S_CUSTOMER, S_CUST_ADDRESS},
+{0, 1, 0, 0, S_CUST_ADDRESS_STREET_NUM, S_CUSTOMER, S_CUST_ADDRESS_STREET_NUM},
+{0, 1, 0, 0, S_CUST_ADDRESS_STREET_NAME1, S_CUSTOMER, S_CUST_ADDRESS_STREET_NAME1},
+{0, 1, 0, 0, S_CUST_ADDRESS_STREET_NAME2, S_CUSTOMER, S_CUST_ADDRESS_STREET_NAME2},
+{0, 1, 0, 0, S_CUST_ADDRESS_STREET_TYPE, S_CUSTOMER, S_CUST_ADDRESS_STREET_TYPE},
+{0, 1, 0, 0, S_CUST_ADDRESS_SUITE_NUM, S_CUSTOMER, S_CUST_ADDRESS_SUITE_NUM},
+{0, 1, 0, 0, S_CUST_ADDRESS_CITY, S_CUSTOMER, S_CUST_ADDRESS_CITY},
+{0, 1, 0, 0, S_CUST_ADDRESS_ZIP, S_CUSTOMER, S_CUST_ADDRESS_ZIP},
+{0, 1, 0, 0, S_CUST_ADDRESS_COUNTY, S_CUSTOMER, S_CUST_ADDRESS_COUNTY},
+{0, 1, 0, 0, S_CUST_ADDRESS_STATE, S_CUSTOMER, S_CUST_ADDRESS_STATE},
+{0, 1, 0, 0, S_CUST_ADDRESS_COUNTRY, S_CUSTOMER, S_CUST_ADDRESS_COUNTRY},
+{0, 1, 0, 0, S_CUST_LOCATION_TYPE, S_CUSTOMER, S_CUST_LOCATION_TYPE},
+{0, 1, 0, 0, S_CUST_GENDER, S_CUSTOMER, S_CUST_GENDER},
+{0, 1, 0, 0, S_CUST_MARITAL_STATUS, S_CUSTOMER, S_CUST_MARITAL_STATUS},
+{0, 1, 0, 0, S_CUST_EDUCATION, S_CUSTOMER, S_CUST_EDUCATION},
+{0, 1, 0, 0, S_CUST_CREDIT_RATING, S_CUSTOMER, S_CUST_CREDIT_RATING},
+{0, 1, 0, 0, S_CUST_PURCHASE_ESTIMATE, S_CUSTOMER, S_CUST_PURCHASE_ESTIMATE},
+{0, 1, 0, 0, S_CUST_BUY_POTENTIAL, S_CUSTOMER, S_CUST_BUY_POTENTIAL},
+{0, 1, 0, 0, S_CUST_DEPENDENT_CNT, S_CUSTOMER, S_CUST_DEPENDENT_CNT},
+{0, 1, 0, 0, S_CUST_EMPLOYED_CNT, S_CUSTOMER, S_CUST_EMPLOYED_CNT},
+{0, 1, 0, 0, S_CUST_COLLEGE_CNT, S_CUSTOMER, S_CUST_COLLEGE_CNT},
+{0, 1, 0, 0, S_CUST_VEHICLE_CNT, S_CUSTOMER, S_CUST_VEHICLE_CNT},
+{0, 1, 0, 0, S_CUST_INCOME, S_CUSTOMER, S_CUST_INCOME},
+{0, 0, 0, 0, S_DIVISION_ID, S_DIVISION, S_DIVISION_ID},
+{0, 0, 0, 0, S_DIVISION_COMPANY, S_DIVISION, S_DIVISION_COMPANY},
+{0, 0, 0, 0, S_DIVISION_NAME, S_DIVISION, S_DIVISION_NAME},
+{0, 1, 0, 0, S_INVN_WAREHOUSE, S_INVENTORY, S_INVN_WAREHOUSE},
+{0, 1, 0, 0, S_INVN_ITEM, S_INVENTORY, S_INVN_ITEM},
+{0, 2, 0, 0, S_INVN_DATE, S_INVENTORY, S_INVN_DATE},
+{0, 1, 0, 0, S_INVN_QUANTITY, S_INVENTORY, S_INVN_QUANTITY},
+{0, 1, 0, 0, S_ITEM_ID, S_ITEM, S_ITEM_ID},
+{0, 0, 0, 0, S_ITEM_PERMUTE, S_ITEM, S_ITEM_PERMUTE},
+{0, 1, 0, 0, S_ITEM_PRODUCT_ID, S_ITEM, S_ITEM_PRODUCT_ID},
+{0, 200, 0, 0, S_ITEM_DESC, S_ITEM, I_ITEM_DESC},
+{0, 2, 0, 0, S_ITEM_LIST_PRICE, S_ITEM, I_CURRENT_PRICE},
+{0, 1, 0, 0, S_ITEM_WHOLESALE_COST, S_ITEM, I_WHOLESALE_COST},
+{0, 1, 0, 0, S_ITEM_MANAGER_ID, S_ITEM, I_MANAGER_ID},
+{0, 1, 0, 0, S_ITEM_SIZE, S_ITEM, I_SIZE},
+{0, 50, 0, 0, S_ITEM_FORMULATION, S_ITEM, I_FORMULATION},
+{0, 1, 0, 0, S_ITEM_FLAVOR, S_ITEM, I_COLOR},
+{0, 1, 0, 0, S_ITEM_UNITS, S_ITEM, I_UNITS},
+{0, 1, 0, 0, S_ITEM_CONTAINER, S_ITEM, I_CONTAINER},
+{0, 1, 0, 0, S_ITEM_SCD, S_ITEM, I_SCD},
+{0, 0, 0, 0, S_MANAGER_ID, S_MANAGER, S_MANAGER_ID},
+{0, 2, 0, 0, S_MANAGER_NAME, S_MANAGER, S_MANAGER_NAME},
+{0, 0, 0, 0, S_MANUFACTURER_ID, S_MANUFACTURER, S_MANUFACTURER_ID},
+{0, 0, 0, 0, S_MANUFACTURER_NAME, S_MANUFACTURER, S_MANUFACTURER_NAME},
+{0, 0, 0, 0, S_MARKET_ID, S_MARKET, S_MARKET_ID},
+{0, 0, 0, 0, S_MARKET_CLASS_NAME, S_MARKET, S_MARKET_CLASS_NAME},
+{0, 10, 0, 0, S_MARKET_DESC, S_MARKET, S_MARKET_DESC},
+{0, 1, 0, 0, S_MARKET_MANAGER_ID, S_MARKET, S_MARKET_MANAGER_ID},
+{0, 0, 0, 0, S_PRODUCT_ID, S_PRODUCT, S_PRODUCT_ID},
+{0, 1, 0, 0, S_PRODUCT_BRAND_ID, S_PRODUCT, S_PRODUCT_BRAND_ID},
+{0, 0, 0, 0, S_PRODUCT_NAME, S_PRODUCT, S_PRODUCT_NAME},
+{0, 1, 0, 0, S_PRODUCT_TYPE, S_PRODUCT, S_PRODUCT_TYPE},
+{0, 1, 0, 0, S_PROMOTION_ID, S_PROMOTION, S_PROMOTION_ID},
+{0, 1, 0, 0, S_PROMOTION_ITEM_ID, S_PROMOTION, S_PROMOTION_ITEM_ID},
+{0, 1, 0, 0, S_PROMOTION_START_DATE, S_PROMOTION, S_PROMOTION_START_DATE},
+{0, 1, 0, 0, S_PROMOTION_END_DATE, S_PROMOTION, S_PROMOTION_END_DATE},
+{0, 1, 0, 0, S_PROMOTION_COST, S_PROMOTION, S_PROMOTION_COST},
+{0, 1, 0, 0, S_PROMOTION_RESPONSE_TARGET, S_PROMOTION, S_PROMOTION_RESPONSE_TARGET},
+{0, 0, 0, 0, S_PROMOTION_DMAIL, S_PROMOTION, S_PROMOTION_DMAIL},
+{0, 0, 0, 0, S_PROMOTION_EMAIL, S_PROMOTION, S_PROMOTION_EMAIL},
+{0, 0, 0, 0, S_PROMOTION_CATALOG, S_PROMOTION, S_PROMOTION_CATALOG},
+{0, 0, 0, 0, S_PROMOTION_TV, S_PROMOTION, S_PROMOTION_TV},
+{0, 0, 0, 0, S_PROMOTION_RADIO, S_PROMOTION, S_PROMOTION_RADIO},
+{0, 0, 0, 0, S_PROMOTION_PRESS, S_PROMOTION, S_PROMOTION_PRESS},
+{0, 0, 0, 0, S_PROMOTION_EVENT, S_PROMOTION, S_PROMOTION_EVENT},
+{0, 0, 0, 0, S_PROMOTION_DEMO, S_PROMOTION, S_PROMOTION_DEMO},
+{0, 100, 0, 0, S_PROMOTION_DETAILS, S_PROMOTION, P_CHANNEL_DETAILS},
+{0, 1, 0, 0, S_PROMOTION_PURPOSE, S_PROMOTION, S_PROMOTION_PURPOSE},
+{0, 1, 0, 0, S_PROMOTION_DISCOUNT_ACTIVE, S_PROMOTION, S_PROMOTION_DISCOUNT_ACTIVE},
+{0, 1, 0, 0, S_PROMOTION_DISCOUNT_PCT, S_PROMOTION, S_PROMOTION_DISCOUNT_PCT},
+{0, 0, 0, 0, S_PROMOTION_NAME, S_PROMOTION, S_PROMOTION_NAME},
+{0, 1, 0, 0, S_PROMOTION_BITFIELD, S_PROMOTION, S_PROMOTION_BITFIELD},
+{0, 0, 0, 0, S_PURCHASE_ID, S_PURCHASE, S_PURCHASE_ID},
+{0, 1, 0, 0, S_PURCHASE_STORE_ID, S_PURCHASE, S_PURCHASE_STORE_ID},
+{0, 1, 0, 0, S_PURCHASE_CUSTOMER_ID, S_PURCHASE, S_PURCHASE_CUSTOMER_ID},
+{0, 1, 0, 0, S_PURCHASE_DATE, S_PURCHASE, S_PURCHASE_DATE},
+{0, 1, 0, 0, S_PURCHASE_TIME, S_PURCHASE, S_PURCHASE_TIME},
+{0, 1, 0, 0, S_PURCHASE_REGISTER, S_PURCHASE, S_PURCHASE_REGISTER},
+{0, 1, 0, 0, S_PURCHASE_CLERK, S_PURCHASE, S_PURCHASE_CLERK},
+{0, 100, 0, 0, S_PURCHASE_COMMENT, S_PURCHASE, S_PURCHASE_COMMENT},
+{0, 7, 0, 0, S_PURCHASE_PRICING, S_PURCHASE, S_PURCHASE_PRICING},
+{0, 1, 0, 0, S_PLINE_ITEM_ID, S_PURCHASE, S_PLINE_ITEM_ID},
+{0, 12, 0, 0, S_PLINE_PURCHASE_ID, S_PURCHASE_LINEITEM, S_PLINE_PURCHASE_ID},
+{0, 12, 0, 0, S_PLINE_NUMBER, S_PURCHASE_LINEITEM, S_PLINE_NUMBER},
+{0, 12, 0, 0, S_PLINE_PROMOTION_ID, S_PURCHASE_LINEITEM, S_PLINE_PROMOTION_ID},
+{0, 12, 0, 0, S_PLINE_SALE_PRICE, S_PURCHASE_LINEITEM, S_PLINE_SALE_PRICE},
+{0, 12, 0, 0, S_PLINE_QUANTITY, S_PURCHASE_LINEITEM, S_PLINE_QUANTITY},
+{0, 12, 0, 0, S_PLINE_COUPON_AMT, S_PURCHASE_LINEITEM, S_PLINE_COUPON_AMT},
+{0, 1200, 0, 0, S_PLINE_COMMENT, S_PURCHASE_LINEITEM, S_PLINE_COMMENT},
+{0, 96, 0, 0, S_PLINE_PRICING, S_PURCHASE_LINEITEM, S_PLINE_PRICING},
+{0, 12, 0, 0, S_PLINE_IS_RETURNED, S_PURCHASE_LINEITEM, S_PLINE_IS_RETURNED},
+{0, 0, 0, 0, S_PLINE_PERMUTE, S_PURCHASE_LINEITEM, S_PLINE_PERMUTE},
+{0, 0, 0, 0, S_REASON_ID, S_REASON, S_REASON_ID},
+{0, 10, 0, 0, S_REASON_DESC, S_REASON, S_REASON_DESC},
+{0, 1, 0, 0, S_STORE_ID, S_STORE, S_STORE_ID},
+{0, 1, 0, 0, S_STORE_ADDRESS_ID, S_STORE, S_STORE_ADDRESS_ID},
+{0, 1, 0, 0, S_STORE_DIVISION_ID, S_STORE, S_STORE_DIVISION_ID},
+{0, 1, 0, 0, S_STORE_OPEN_DATE, S_STORE, S_STORE_OPEN_DATE},
+{0, 1, 0, 0, S_STORE_CLOSE_DATE, S_STORE, S_STORE_CLOSE_DATE},
+{0, 0, 0, 0, S_STORE_NAME, S_STORE, S_STORE_NAME},
+{0, 0, 0, 0, S_STORE_CLASS, S_STORE, S_STORE_CLASS},
+{0, 1, 0, 0, S_STORE_EMPLOYEES, S_STORE, S_STORE_EMPLOYEES},
+{0, 1, 0, 0, S_STORE_FLOOR_SPACE, S_STORE, S_STORE_FLOOR_SPACE},
+{0, 1, 0, 0, S_STORE_HOURS, S_STORE, S_STORE_HOURS},
+{0, 0, 0, 0, S_STORE_MARKET_MANAGER_ID, S_STORE, S_STORE_MARKET_MANAGER_ID},
+{0, 1, 0, 0, S_STORE_MANAGER_ID, S_STORE, S_STORE_MANAGER_ID},
+{0, 1, 0, 0, S_STORE_MARKET_ID, S_STORE, S_STORE_MARKET_ID},
+{0, 1, 0, 0, S_STORE_GEOGRAPHY_CLASS, S_STORE, S_STORE_GEOGRAPHY_CLASS},
+{0, 1, 0, 0, S_STORE_TAX_PERCENTAGE, S_STORE, S_STORE_TAX_PERCENTAGE},
+{0, 1, 0, 0, S_SITM_PROMOTION_ID, S_STORE_PROMOTIONAL_ITEM, S_SITM_PROMOTION_ID},
+{0, 1, 0, 0, S_SITM_ITEM_ID, S_STORE_PROMOTIONAL_ITEM, S_SITM_ITEM_ID},
+{0, 1, 0, 0, S_SITM_STORE_ID, S_STORE_PROMOTIONAL_ITEM, S_SITM_STORE_ID},
+{0, 0, 0, 0, S_SRET_STORE_ID, S_STORE_RETURNS, S_SRET_STORE_ID},
+{0, 0, 0, 0, S_SRET_PURCHASE_ID, S_STORE_RETURNS, S_SRET_PURCHASE_ID},
+{0, 0, 0, 0, S_SRET_LINENUMBER, S_STORE_RETURNS, S_SRET_LINENUMBER},
+{0, 0, 0, 0, S_SRET_ITEM_ID, S_STORE_RETURNS, S_SRET_ITEM_ID},
+{0, 0, 0, 0, S_SRET_CUSTOMER_ID, S_STORE_RETURNS, S_SRET_CUSTOMER_ID},
+{0, 24, 0, 0, S_SRET_RETURN_DATE, S_STORE_RETURNS, S_SRET_RETURN_DATE},
+{0, 12, 0, 0, S_SRET_RETURN_TIME, S_STORE_RETURNS, S_SRET_RETURN_TIME},
+{0, 0, 0, 0, S_SRET_TICKET_NUMBER, S_STORE_RETURNS, S_SRET_TICKET_NUMBER},
+{0, 0, 0, 0, S_SRET_RETURN_QUANTITY, S_STORE_RETURNS, S_SRET_RETURN_QUANTITY},
+{0, 0, 0, 0, S_SRET_RETURN_AMT, S_STORE_RETURNS, S_SRET_RETURN_AMT},
+{0, 0, 0, 0, S_SRET_RETURN_TAX, S_STORE_RETURNS, S_SRET_RETURN_TAX},
+{0, 0, 0, 0, S_SRET_RETURN_FEE, S_STORE_RETURNS, S_SRET_RETURN_FEE},
+{0, 0, 0, 0, S_SRET_RETURN_SHIP_COST, S_STORE_RETURNS, S_SRET_RETURN_SHIP_COST},
+{0, 0, 0, 0, S_SRET_REFUNDED_CASH, S_STORE_RETURNS, S_SRET_REFUNDED_CASH},
+{0, 0, 0, 0, S_SRET_REVERSED_CHARGE, S_STORE_RETURNS, S_SRET_REVERSED_CHARGE},
+{0, 0, 0, 0, S_SRET_MERCHANT_CREDIT, S_STORE_RETURNS, S_SRET_MERCHANT_CREDIT},
+{0, 12, 0, 0, S_SRET_REASON_ID, S_STORE_RETURNS, S_SRET_REASON_ID},
+{0, 84, 0, 0, S_SRET_PRICING, S_STORE_RETURNS, S_SRET_PRICING},
+{0, 0, 0, 0, S_SBCT_ID, S_SUBCATEGORY, S_SBCT_ID},
+{0, 1, 0, 0, S_SBCT_CATEGORY_ID, S_SUBCATEGORY, S_SBCT_CATEGORY_ID},
+{0, 0, 0, 0, S_SBCT_NAME, S_SUBCATEGORY, S_SBCT_NAME},
+{0, 10, 0, 0, S_SBCT_DESC, S_SUBCATEGORY, S_SBCT_DESC},
+{0, 0, 0, 0, S_SUBC_ID, S_SUBCLASS, S_SUBC_ID},
+{0, 1, 0, 0, S_SUBC_CLASS_ID, S_SUBCLASS, S_SUBC_CLASS_ID},
+{0, 0, 0, 0, S_SUBC_NAME, S_SUBCLASS, S_SUBC_NAME},
+{0, 10, 0, 0, S_SUBC_DESC, S_SUBCLASS, S_SUBC_DESC},
+{0, 1, 0, 0, S_WRHS_ID, S_WAREHOUSE, S_WRHS_ID},
+{0, 10, 0, 0, S_WRHS_DESC, S_WAREHOUSE, S_WRHS_DESC},
+{0, 1, 0, 0, S_WRHS_SQFT, S_WAREHOUSE, S_WRHS_SQFT},
+{0, 1, 0, 0, S_WRHS_ADDRESS_ID, S_WAREHOUSE, S_WRHS_ADDRESS_ID},
+{0, 1, 0, 0, S_WORD_ID, S_WEB_ORDER, S_WORD_ID},
+{0, 1, 0, 0, S_WORD_BILL_CUSTOMER_ID, S_WEB_ORDER, S_WORD_BILL_CUSTOMER_ID},
+{0, 2, 0, 0, S_WORD_SHIP_CUSTOMER_ID, S_WEB_ORDER, S_WORD_SHIP_CUSTOMER_ID},
+{0, 1, 0, 0, S_WORD_ORDER_DATE, S_WEB_ORDER, S_WORD_ORDER_DATE},
+{0, 1, 0, 0, S_WORD_ORDER_TIME, S_WEB_ORDER, S_WORD_ORDER_TIME},
+{0, 1, 0, 0, S_WORD_SHIP_MODE_ID, S_WEB_ORDER, S_WORD_SHIP_MODE_ID},
+{0, 1, 0, 0, S_WORD_WEB_SITE_ID, S_WEB_ORDER, S_WORD_WEB_SITE_ID},
+{0, 100, 0, 0, S_WORD_COMMENT, S_WEB_ORDER, S_WORD_COMMENT},
+{0, 1, 0, 0, S_WLIN_ITEM_ID, S_WEB_ORDER, S_WLIN_ITEM_ID},
+{0, 12, 0, 0, S_WLIN_ID, S_WEB_ORDER_LINEITEM, S_WLIN_ID},
+{0, 0, 0, 0, S_WLIN_LINE_NUMBER, S_WEB_ORDER_LINEITEM, S_WLIN_LINE_NUMBER},
+{0, 12, 0, 0, S_WLIN_PROMOTION_ID, S_WEB_ORDER_LINEITEM, S_WLIN_PROMOTION_ID},
+{0, 12, 0, 0, S_WLIN_QUANTITY, S_WEB_ORDER_LINEITEM, S_WLIN_QUANTITY},
+{0, 12, 0, 0, S_WLIN_COUPON_AMT, S_WEB_ORDER_LINEITEM, S_WLIN_COUPON_AMT},
+{0, 12, 0, 0, S_WLIN_WAREHOUSE_ID, S_WEB_ORDER_LINEITEM, S_WLIN_WAREHOUSE_ID},
+{0, 12, 0, 0, S_WLIN_SHIP_DATE, S_WEB_ORDER_LINEITEM, S_WLIN_SHIP_DATE},
+{0, 12, 0, 0, S_WLIN_WEB_PAGE_ID, S_WEB_ORDER_LINEITEM, S_WLIN_WEB_PAGE_ID},
+{0, 96, 0, 0, S_WLIN_PRICING, S_WEB_ORDER_LINEITEM, S_WLIN_PRICING},
+{0, 0, 0, 0, S_WLIN_SHIP_COST, S_WEB_ORDER_LINEITEM, S_WLIN_SHIP_COST},
+{0, 12, 0, 0, S_WLIN_IS_RETURNED, S_WEB_ORDER_LINEITEM, S_WLIN_IS_RETURNED},
+{0, 0, 0, 0, S_WLIN_PERMUTE, S_WEB_ORDER_LINEITEM, S_WLIN_PERMUTE},
+{0, 1, 0, 0, S_WPAG_SITE_ID, S_WEB_PAGE, S_WPAG_SITE_ID},
+{0, 1, 0, 0, S_WPAG_ID, S_WEB_PAGE, S_WPAG_ID},
+{0, 1, 0, 0, S_WPAG_CREATE_DATE, S_WEB_PAGE, S_WPAG_CREATE_DATE},
+{0, 1, 0, 0, S_WPAG_ACCESS_DATE, S_WEB_PAGE, S_WPAG_ACCESS_DATE},
+{0, 1, 0, 0, S_WPAG_AUTOGEN_FLAG, S_WEB_PAGE, S_WPAG_AUTOGEN_FLAG},
+{0, 1, 0, 0, S_WPAG_DEPARTMENT, S_WEB_PAGE, S_WPAG_DEPARTMENT},
+{0, 1, 0, 0, S_WPAG_URL, S_WEB_PAGE, S_WPAG_URL},
+{0, 1, 0, 0, S_WPAG_TYPE, S_WEB_PAGE, S_WPAG_TYPE},
+{0, 1, 0, 0, S_WPAG_CHAR_CNT, S_WEB_PAGE, S_WPAG_CHAR_CNT},
+{0, 1, 0, 0, S_WPAG_LINK_CNT, S_WEB_PAGE, S_WPAG_LINK_CNT},
+{0, 1, 0, 0, S_WPAG_IMAGE_CNT, S_WEB_PAGE, S_WPAG_IMAGE_CNT},
+{0, 1, 0, 0, S_WPAG_MAX_AD_CNT, S_WEB_PAGE, S_WPAG_MAX_AD_CNT},
+{0, 0, 0, 0, S_WPAG_PERMUTE, S_WEB_PAGE, S_WPAG_PERMUTE},
+{0, 1, 0, 0, S_WITM_SITE_ID, S_WEB_PROMOTIONAL_ITEM, S_WITM_SITE_ID},
+{0, 1, 0, 0, S_WITM_PAGE_ID, S_WEB_PROMOTIONAL_ITEM, S_WITM_PAGE_ID},
+{0, 1, 0, 0, S_WITM_ITEM_ID, S_WEB_PROMOTIONAL_ITEM, S_WITM_ITEM_ID},
+{0, 1, 0, 0, S_WITM_PROMOTION_ID, S_WEB_PROMOTIONAL_ITEM, S_WITM_PROMOTION_ID},
+{0, 0, 0, 0, S_WRET_SITE_ID, S_WEB_RETURNS, S_WRET_SITE_ID},
+{0, 0, 0, 0, S_WRET_ORDER_ID, S_WEB_RETURNS, S_WRET_ORDER_ID},
+{0, 0, 0, 0, S_WRET_LINE_NUMBER, S_WEB_RETURNS, S_WRET_LINE_NUMBER},
+{0, 0, 0, 0, S_WRET_ITEM_ID, S_WEB_RETURNS, S_WRET_ITEM_ID},
+{0, 0, 0, 0, S_WRET_RETURN_CUST_ID, S_WEB_RETURNS, S_WRET_RETURN_CUST_ID},
+{0, 0, 0, 0, S_WRET_REFUND_CUST_ID, S_WEB_RETURNS, S_WRET_REFUND_CUST_ID},
+{0, 24, 0, 0, S_WRET_RETURN_DATE, S_WEB_RETURNS, S_WRET_RETURN_DATE},
+{0, 12, 0, 0, S_WRET_RETURN_TIME, S_WEB_RETURNS, S_WRET_RETURN_TIME},
+{0, 12, 0, 0, S_WRET_REASON_ID, S_WEB_RETURNS, S_WRET_REASON_ID},
+{0, 84, 0, 0, S_WRET_PRICING, S_WEB_RETURNS, S_WRET_PRICING},
+{0, 1, 0, 0, S_WSIT_ID, S_WEB_SITE, S_WSIT_ID},
+{0, 1, 0, 0, S_WSIT_OPEN_DATE, S_WEB_SITE, S_WSIT_OPEN_DATE},
+{0, 1, 0, 0, S_WSIT_CLOSE_DATE, S_WEB_SITE, S_WSIT_CLOSE_DATE},
+{0, 0, 0, 0, S_WSIT_NAME, S_WEB_SITE, S_WSIT_NAME},
+{0, 1, 0, 0, S_WSIT_ADDRESS_ID, S_WEB_SITE, S_WSIT_ADDRESS_ID},
+{0, 1, 0, 0, S_WSIT_DIVISION_ID, S_WEB_SITE, S_WSIT_DIVISION_ID},
+{0, 1, 0, 0, S_WSIT_CLASS, S_WEB_SITE, S_WSIT_CLASS},
+{0, 1, 0, 0, S_WSIT_MANAGER_ID, S_WEB_SITE, S_WSIT_MANAGER_ID},
+{0, 1, 0, 0, S_WSIT_MARKET_ID, S_WEB_SITE, S_WSIT_MARKET_ID},
+{0, 1, 0, 0, S_WSIT_TAX_PERCENTAGE, S_WEB_SITE, S_WSIT_TAX_PERCENTAGE},
+{0, 0, 0, 0, S_ZIPG_ZIP, S_ZIPG, S_ZIPG_ZIP},
+{0, 0, 0, 0, S_ZIPG_GMT, S_ZIPG, S_ZIPG_GMT},
+{-1, -1, -1, -1, -1, -1, -1}
+};
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/streets.dst b/ydb/library/benchmarks/gen/tpcds-dbgen/streets.dst
new file mode 100644
index 000000000000..aae9d1cb4fe8
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/streets.dst
@@ -0,0 +1,165 @@
+--
+-- Legal Notice
+--
+-- This document and associated source code (the "Work") is a part of a
+-- benchmark specification maintained by the TPC.
+--
+-- The TPC reserves all right, title, and interest to the Work as provided
+-- under U.S. and international laws, including without limitation all patent
+-- and trademark rights therein.
+--
+-- No Warranty
+--
+-- 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+-- CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+-- AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+-- WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+-- INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+-- DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+-- PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+-- WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+-- ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+-- QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+-- WITH REGARD TO THE WORK.
+-- 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+-- ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+-- COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+-- OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+-- INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+-- OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+-- RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+-- ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+--
+-- Contributors:
+-- Gradient Systems
+--
+--
+--
+--
+
+-- street_names
+-- from 1990 census
+-- second weighting adds empty entry 50% of the time
+------
+create street_names;
+set types = (varchar);
+set weights = 2;
+add ("": 0, 317000);
+add ("Church": 4031, 4031);
+add ("Central": 2450, 2450);
+add ("Center": 3402, 3402);
+add ("College": 2468, 2468);
+add ("Twelfth": 489, 489);
+add ("12th": 2957, 2957);
+add ("South": 3570, 3570);
+add ("Lakeview": 2487, 2487);
+add ("West": 3656, 3656);
+add ("Miller": 2488, 2488);
+add ("Cherry": 3669, 3669);
+add ("Broadway": 2511, 2511);
+add ("Jackson": 3725, 3725);
+add ("Sycamore": 2533, 2533);
+add ("Elevnth": 669, 669);
+add ("11th": 3109, 3109);
+add ("Hillcrest": 2547, 2547);
+add ("Railroad": 3853, 3853);
+add ("Fifteenth": 240, 240);
+add ("15th": 2317, 2317);
+add ("Sunset": 3929, 3929);
+add ("Madison": 2578, 2578);
+add ("Mill": 3975, 3975);
+add ("Ash": 2589, 2589);
+add ("Willow": 4017, 2613);
+add ("Woodland": 2615, 2615);
+add ("Lincoln": 4044, 4044);
+add ("Locust": 2618, 2618);
+add ("Ridge": 4048, 4048);
+add ("Poplar": 2645, 2645);
+add ("North": 4074, 4074);
+add ("Green": 2652, 2652);
+add ("Spring": 4165, 4165);
+add ("Dogwood": 2653, 2653);
+add ("Tenth": 879, 879);
+add ("10th": 3492, 3492);
+add ("Lee": 2669, 2669);
+add ("Walnut": 4799, 4799);
+add ("Williams": 2682, 2682);
+add ("Hill": 4877, 4877);
+add ("Birch": 2754, 2754);
+add ("Lake": 4901, 4901);
+add ("Davis": 2769, 2769);
+add ("9th": 3793, 3793);
+add ("Ninth": 1115, 1115);
+add ("Laurel": 2780, 2780);
+add ("Washington": 4974, 4974);
+add ("Spruce": 2821, 2821);
+add ("View": 5202, 5202);
+add ("14th": 2536, 2536);
+add ("Fourteenth": 315, 315);
+add ("Elm": 5233, 5233);
+add ("Adams": 2856, 2856);
+add ("8th": 4172, 4172);
+add ("Eigth": 1352, 1352);
+add ("Franklin": 2882, 2882);
+add ("Cedar": 5644, 5644);
+add ("13th": 2610, 2610);
+add ("Thirteenth": 367, 367);
+add ("Maple": 6103, 6103);
+add ("Chestnut": 2994, 2994);
+add ("Pine": 6170, 6170);
+add ("East": 3056, 3056);
+add ("7th": 4635, 4635);
+add ("Seventh": 1742, 1742);
+add ("Smith": 3076, 3076);
+add ("Oak": 6946, 6946);
+add ("Valley": 3082, 3082);
+add ("6th": 5097, 5097);
+add ("Sixth": 2186, 2186);
+add ("Meadow": 3193, 3193);
+add ("Main": 7664, 7664);
+add ("River": 3220, 3220);
+add ("5th": 5532, 5532);
+add ("Fifth": 2654, 2654);
+add ("Wilson": 3268, 3268);
+add ("Park": 8926, 8926);
+add ("Hickory": 3297, 3297);
+add ("4th": 6183, 6183);
+add ("Fourth": 3007, 3007);
+add ("Jefferson": 3306, 3306);
+add ("1st": 6047, 6047);
+add ("First": 3851, 3851);
+add ("Forest": 3309, 3309);
+add ("3rd": 6564, 6564);
+add ("Third": 3567, 3567);
+add ("Johnson": 3325, 3325);
+add ("2nd": 6907, 6907);
+add ("Second": 3959, 3959);
+add ("Highland": 3347, 3347);
+
+------
+-- street_type
+------
+create street_type;
+set types = (varchar);
+set weights = 1;
+add ("Street":1);
+add ("ST":1);
+add ("Avenue":1);
+add ("Ave":1);
+add ("Boulevard":1);
+add ("Blvd":1);
+add ("Road":1);
+add ("RD":1);
+add ("Parkway":1);
+add ("Pkwy":1);
+add ("Way":1);
+add ("Wy":1);
+add ("Drive":1);
+add ("Dr.":1);
+add ("Circle":1);
+add ("Cir.":1);
+add ("Lane":1);
+add ("Ln":1);
+add ("Court":1);
+add ("Ct.":1);
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.c b/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.c
new file mode 100644
index 000000000000..57ddb67c78b4
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.c
@@ -0,0 +1,188 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include "error_msg.h"
+#include "dist.h"
+#include "date.h"
+#include "decimal.h"
+#include "misc.h"
+#include "genrand.h"
+#include "substitution.h"
+#include "StringBuffer.h"
+
+extern template_t *pCurrentTemplate,
+ *g_Template;
+int ParseFile(char *szPath);
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+compareSubstitution(const void *p1, const void *p2)
+{
+ substitution_t *pS1 = (substitution_t *)p1,
+ *pS2 = (substitution_t *)p2;
+
+ if (pS1 == NULL)
+ {
+ if (pS2 == NULL)
+ return(0);
+ else
+ return(-1);
+ }
+
+ if (pS2 == NULL)
+ return(1);
+
+ return(strcasecmp(pS1->name, pS2->name));
+}
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+substitution_t *
+findSubstitution(template_t *t, char *name, int *nUse)
+{
+ int nChars,
+ nUseCount;
+ substitution_t *pSub;
+ static substitution_t tempSubstitution;
+ static int bInit = 0;
+
+ if (!bInit)
+ {
+ memset(&tempSubstitution, 0, sizeof(struct SUBSTITUTION_T));
+ tempSubstitution.name = malloc(100 * sizeof(char));
+ MALLOC_CHECK(tempSubstitution.name);
+ bInit = 1;
+ }
+
+ /* exclude any numeric suffix from search, but update nUses */
+ nChars = strcspn(name, "0123456789");
+ if (strlen(name) > 100)
+ tempSubstitution.name = realloc(tempSubstitution.name, strlen(name) + 1);
+ strncpy(tempSubstitution.name, name, nChars);
+ tempSubstitution.name[nChars] = '\0';
+ pSub = findList(t->SubstitutionList, (void *)&tempSubstitution);
+ if (!pSub) /* the substitution could be global; add a local reference */
+ {
+ pSub = findList(g_Template->SubstitutionList, (void *)&tempSubstitution);
+ if (pSub)
+ addList(t->SubstitutionList, pSub);
+ }
+ if (pSub)
+ {
+ nUseCount = atoi(name + nChars);
+ if (nUseCount == 0)
+ nUseCount = 1;
+ if (nUseCount > pSub->nUse)
+ pSub->nUse = nUseCount;
+ if (nUse) /* we're interested in the usage number */
+ *nUse = nUseCount;
+ return(pSub);
+ }
+
+ return(NULL);
+}
+
+
+/*
+ * Routine:
+ * Purpose:
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+AddQuerySubstitution(template_t *t, char *szName, int nUse, int bEndSuffix)
+{
+ substitution_t *pSub;
+ segment_t *pSegment;
+ int nSegmentCount;
+
+ if ((pSub = findSubstitution(t, szName, NULL)) == NULL)
+ ReportError(QERR_NO_INIT, szName, 1);
+ nSegmentCount = length(t->SegmentList);
+ if (nSegmentCount == 0) /* template starts with a substitution */
+ AddQuerySegment(t, "");
+ pSegment = (segment_t *)getItem(t->SegmentList, length(t->SegmentList));
+ if (pSegment->pSubstitution)
+ {
+ AddQuerySegment(t, "");
+ pSegment = (segment_t *)getItem(t->SegmentList, length(t->SegmentList));
+ }
+ pSegment->pSubstitution = pSub;
+ pSegment->nSubUse = bEndSuffix;
+ if (pSub->pAssignment->nFlags & (EXPR_FL_LIST|EXPR_FL_ULIST))
+ pSegment->nSubUse -= 1;
+ pSegment->nSubCount = nUse;
+
+ return(0);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.h b/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.h
new file mode 100644
index 000000000000..fa0d07a1d826
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/substitution.h
@@ -0,0 +1,96 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef SUBSTITUION_T
+#define SUBSTITUION_T
+#include "StringBuffer.h"
+#include "expr.h"
+#include "list.h"
+#include "eval.h"
+
+/*
+* a substitution is the defintion of one of the macros (textual subtitutions) in a query template
+*/
+typedef struct SUBSTITUTION_T {
+ char *name;
+ int flags;
+ int nUse; /* how many unique uses of this substitution in the template */
+ int nSubParts; /* are there parts within the substitution? */
+ expr_t *pAssignment;
+ /* selected values are stored in arValues[] */
+ struct EXPR_VAL_T *arValues;
+ int *pPermute; /* each use may need a permutation */
+ struct TEMPLATE_T *pTemplate;
+ int nDataType; /* type of the resulting value */
+ int nQueryNumber;
+} substitution_t;
+
+/* flag defintions */
+
+/* a segment is a part of a query template. It is comprised of the static preamble
+ (text) and the optional dynamic placeholder (substitution)
+*/
+typedef struct SEGMENT_T {
+ char *text; /* the text preamble to a substitution point */
+ int flags;
+ substitution_t *pSubstitution; /* the substitution */
+ int nSubCount; /* the usage count of the substitution */
+ int nSubUse; /* the sub component of the substitution */
+} segment_t;
+#define QS_EOS 0x0001
+
+typedef struct TEMPLATE_T {
+ char *name;
+ int index;
+ int flags;
+ int nRowLimit; /* used with [LIMIT] to control number of rows returned */
+ list_t *SubstitutionList;
+ list_t *SegmentList;
+ list_t *DistributionList;
+} template_t;
+#define QT_INIT 0x0001
+
+extern template_t *pCurrentQuery;
+
+void PrintQuery(FILE *fp, template_t *t);
+int AddQuerySegment(template_t *pQuery, char *szSQL);
+int AddQuerySubstitution(template_t *Query, char *szSubName, int nUse, int nSubPart);
+int AddSubstitution(template_t *t, char *s, expr_t *pExpr);
+int SetSegmentFlag(template_t *Query, int nSegmentNumber, int nFlag);
+substitution_t *findSubstitution(template_t *t, char *stmt, int *nUse);
+int compareSubstitution(const void *p1, const void *p2);
+Expr_Val_t *findValue(segment_t *pSeg);
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tables.h b/ydb/library/benchmarks/gen/tpcds-dbgen/tables.h
new file mode 100644
index 000000000000..1ab46a91b7fe
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tables.h
@@ -0,0 +1,81 @@
+/*
+ * THIS IS A GENERATED FILE
+ * SEE COLUMNS.LIST
+*/
+#ifndef TABLES_H
+#define TABLES_H
+#define CALL_CENTER 0
+#define CATALOG_PAGE 1
+#define CATALOG_RETURNS 2
+#define CATALOG_SALES 3
+#define CUSTOMER 4
+#define CUSTOMER_ADDRESS 5
+#define CUSTOMER_DEMOGRAPHICS 6
+#define DATE 7
+#define HOUSEHOLD_DEMOGRAPHICS 8
+#define INCOME_BAND 9
+#define INVENTORY 10
+#define ITEM 11
+#define PROMOTION 12
+#define REASON 13
+#define SHIP_MODE 14
+#define STORE 15
+#define STORE_RETURNS 16
+#define STORE_SALES 17
+#define TIME 18
+#define WAREHOUSE 19
+#define WEB_PAGE 20
+#define WEB_RETURNS 21
+#define WEB_SALES 22
+#define WEB_SITE 23
+#define DBGEN_VERSION 24
+#define S_BRAND 25
+#define S_CUSTOMER_ADDRESS 26
+#define S_CALL_CENTER 27
+#define S_CATALOG 28
+#define S_CATALOG_ORDER 29
+#define S_CATALOG_ORDER_LINEITEM 30
+#define S_CATALOG_PAGE 31
+#define S_CATALOG_PROMOTIONAL_ITEM 32
+#define S_CATALOG_RETURNS 33
+#define S_CATEGORY 34
+#define S_CLASS 35
+#define S_COMPANY 36
+#define S_CUSTOMER 37
+#define S_DIVISION 38
+#define S_INVENTORY 39
+#define S_ITEM 40
+#define S_MANAGER 41
+#define S_MANUFACTURER 42
+#define S_MARKET 43
+#define S_PRODUCT 44
+#define S_PROMOTION 45
+#define S_PURCHASE 46
+#define S_PURCHASE_LINEITEM 47
+#define S_REASON 48
+#define S_STORE 49
+#define S_STORE_PROMOTIONAL_ITEM 50
+#define S_STORE_RETURNS 51
+#define S_SUBCATEGORY 52
+#define S_SUBCLASS 53
+#define S_WAREHOUSE 54
+#define S_WEB_ORDER 55
+#define S_WEB_ORDER_LINEITEM 56
+#define S_WEB_PAGE 57
+#define S_WEB_PROMOTIONAL_ITEM 58
+#define S_WEB_RETURNS 59
+#define S_WEB_SITE 60
+#define S_ZIPG 61
+#define PSEUDO_TABLE_START 62
+/* PSEUDO TABLES from here on; used in hierarchies */
+#define ITEM_BRAND 62
+#define ITEM_CLASS 63
+#define ITEM_CATEGORY 64
+#define DIVISIONS 65
+#define COMPANY 66
+#define CONCURRENT_WEB_SITES 67
+#define ACTIVE_CITIES 68
+#define ACTIVE_COUNTIES 69
+#define ACTIVE_STATES 70
+#define MAX_TABLE 70
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.c b/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.c
new file mode 100644
index 000000000000..e6afd02dc5db
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.c
@@ -0,0 +1,180 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "w_call_center.h"
+#include "w_catalog_page.h"
+#include "w_catalog_returns.h"
+#include "w_catalog_sales.h"
+#include "w_customer.h"
+#include "w_customer_address.h"
+#include "w_customer_demographics.h"
+#include "w_datetbl.h"
+#include "w_household_demographics.h"
+#include "w_income_band.h"
+#include "w_inventory.h"
+#include "w_item.h"
+#include "w_promotion.h"
+#include "w_reason.h"
+#include "w_ship_mode.h"
+#include "w_store.h"
+#include "w_store_returns.h"
+#include "w_store_sales.h"
+#include "w_timetbl.h"
+#include "w_warehouse.h"
+#include "w_web_page.h"
+#include "w_web_returns.h"
+#include "w_web_sales.h"
+#include "w_web_site.h"
+#include "dbgen_version.h"
+#include "s_brand.h"
+#include "s_customer_address.h"
+#include "s_call_center.h"
+#include "s_catalog.h"
+#include "s_catalog_order.h"
+#include "s_catalog_order_lineitem.h"
+#include "s_catalog_page.h"
+#include "s_catalog_promotional_item.h"
+#include "s_catalog_returns.h"
+#include "s_category.h"
+#include "s_class.h"
+#include "s_company.h"
+#include "s_customer.h"
+#include "s_division.h"
+#include "s_inventory.h"
+#include "s_item.h"
+#include "s_manager.h"
+#include "s_manufacturer.h"
+#include "s_market.h"
+#include "s_pline.h"
+#include "s_product.h"
+#include "s_promotion.h"
+#include "s_purchase.h"
+#include "s_reason.h"
+#include "s_store.h"
+#include "s_store_promotional_item.h"
+#include "s_store_returns.h"
+#include "s_subcategory.h"
+#include "s_subclass.h"
+#include "s_warehouse.h"
+#include "s_web_order.h"
+#include "s_web_order_lineitem.h"
+#include "s_web_page.h"
+#include "s_web_promotional_item.h"
+#include "s_web_returns.h"
+#include "s_web_site.h"
+#include "s_zip_to_gmt.h"
+#include "tdef_functions.h"
+#include "validate.h"
+
+table_func_t w_tdef_funcs[] = {
+{"call_center", mk_w_call_center, {pr_w_call_center, ld_w_call_center}, validateSCD},
+{"catalog_page", mk_w_catalog_page, {pr_w_catalog_page, ld_w_catalog_page}, validateGeneric},
+{"catalog_returns",mk_w_catalog_returns, {pr_w_catalog_returns, ld_w_catalog_returns}, NULL},
+{"catalog_sales", mk_w_catalog_sales, {pr_w_catalog_sales, ld_w_catalog_sales}, vld_w_catalog_sales},
+{"customer", mk_w_customer, {pr_w_customer, ld_w_customer}, validateGeneric},
+{"customer_address",mk_w_customer_address, {pr_w_customer_address, ld_w_customer_address}, validateGeneric},
+{"customer_demographics",mk_w_customer_demographics, {pr_w_customer_demographics, ld_w_customer_demographics}, validateGeneric},
+{"date", mk_w_date, {pr_w_date, ld_w_date}, vld_w_date},
+{"household_demographics",mk_w_household_demographics, {pr_w_household_demographics, ld_w_household_demographics}, validateGeneric},
+{"income_band", mk_w_income_band, {pr_w_income_band, ld_w_income_band}, validateGeneric},
+{"inventory", mk_w_inventory, {pr_w_inventory, ld_w_inventory}, validateGeneric},
+{"item", mk_w_item, {pr_w_item, ld_w_item}, validateSCD},
+{"promotion", mk_w_promotion, {pr_w_promotion, ld_w_promotion}, validateGeneric},
+{"reason", mk_w_reason, {pr_w_reason, ld_w_reason}, validateGeneric},
+{"ship_mode", mk_w_ship_mode, {pr_w_ship_mode, ld_w_ship_mode}, validateGeneric},
+{"store", mk_w_store, {pr_w_store, ld_w_store}, validateSCD},
+{"store_returns", mk_w_store_returns, {pr_w_store_returns, ld_w_store_returns}, NULL},
+{"store_sales", mk_w_store_sales, {pr_w_store_sales, ld_w_store_sales}, vld_w_store_sales},
+{"time", mk_w_time, {pr_w_time, ld_w_time}, validateGeneric},
+{"warehouse", mk_w_warehouse, {pr_w_warehouse, ld_w_warehouse}, validateGeneric},
+{"web_page", mk_w_web_page, {pr_w_web_page, ld_w_web_page}, validateSCD},
+{"web_returns", mk_w_web_returns, {pr_w_web_returns, ld_w_web_returns}, NULL},
+{"web_sales", mk_w_web_sales, {pr_w_web_sales, ld_w_web_sales}, vld_web_sales},
+{"web_site", mk_w_web_site, {pr_w_web_site, ld_w_web_site}, validateSCD},
+{"dbgen_version", mk_dbgen_version, {pr_dbgen_version, ld_dbgen_version}, NULL},
+{NULL}
+};
+
+
+/* source schema tables below this point */
+table_func_t s_tdef_funcs[] = {
+{"s_brand", mk_s_brand, {pr_s_brand, ld_s_brand}, validateGeneric},
+{"s_customer_address", mk_w_customer_address, {pr_s_customer_address, ld_s_customer_address}, vld_s_customer_address},
+{"s_call_center", mk_s_call_center, {pr_s_call_center, ld_s_call_center}, validateGeneric},
+{"s_catalog", mk_s_catalog, {pr_s_catalog, ld_s_catalog}, validateGeneric},
+{"s_catalog_order", mk_s_catalog_order, {pr_s_catalog_order, ld_s_catalog_order}, vld_s_catalog_order},
+{"s_catalog_order_lineitem", mk_s_catalog_order_lineitem, {pr_s_catalog_order_lineitem, ld_s_catalog_order_lineitem}, NULL},
+{"s_catalog_page", mk_s_catalog_page, {pr_s_catalog_page, ld_s_catalog_page}, vld_s_catalog_page},
+{"s_catalog_promotional_item", mk_s_catalog_promotional_item, {pr_s_catalog_promotional_item, ld_s_catalog_promotional_item}, validateGeneric},
+{"s_catalog_returns", mk_s_catalog_returns, {pr_s_catalog_returns, ld_s_catalog_returns}, NULL},
+{"s_category", mk_s_category, {pr_s_category, ld_s_category}, validateGeneric},
+{"s_class", mk_s_class, {pr_s_class, ld_s_class}, validateGeneric},
+{"s_company", mk_s_company, {pr_s_company, ld_s_company}, validateGeneric},
+{"s_customer", mk_s_customer, {pr_s_customer, ld_s_customer}, validateGeneric},
+{"s_division", mk_s_division, {pr_s_division, ld_s_division}, validateGeneric},
+{"s_inventory", mk_s_inventory, {pr_s_inventory, ld_s_inventory}, validateGeneric},
+{"s_item", mk_s_item, {pr_s_item, ld_s_item}, vld_s_item},
+{"s_manager", mk_s_manager, {pr_s_manager, ld_s_manager}, validateGeneric},
+{"s_manufacturer", mk_s_manufacturer, {pr_s_manufacturer, ld_s_manufacturer}, validateGeneric},
+{"s_market", mk_s_market, {pr_s_market, ld_s_market}, validateGeneric},
+{"s_product", mk_s_product, {pr_s_product, ld_s_product}, validateGeneric},
+{"s_promotion", mk_s_promotion, {pr_s_promotion, ld_s_promotion}, vld_s_promotion},
+{"s_purchase", mk_s_purchase, {pr_s_purchase, ld_s_purchase}, vld_s_purchase},
+{"s_purchase_lineitem", mk_s_pline, {pr_s_pline, ld_s_pline}, NULL},
+{"s_reason", mk_s_reason, {pr_s_reason, ld_s_reason}, validateGeneric},
+{"s_store", mk_s_store, {pr_s_store, ld_s_store}, validateGeneric},
+{"s_store_promotional_item", mk_s_store_promotional_item, {pr_s_store_promotional_item, ld_s_store_promotional_item}, validateGeneric},
+{"s_store_returns", mk_s_store_returns, {pr_s_store_returns, ld_s_store_returns}, NULL},
+{"s_subcategory", mk_s_subcategory, {pr_s_subcategory, ld_s_subcategory}, validateGeneric},
+{"s_subclass", mk_s_subclass, {pr_s_subclass, ld_s_subclass}, validateGeneric},
+{"s_warehouse", mk_s_warehouse, {pr_s_warehouse, ld_s_warehouse}, validateGeneric},
+{"s_web_order", mk_s_web_order, {pr_s_web_order, ld_s_web_order}, vld_s_web_order},
+{"s_web_order_lineitem", mk_s_web_order_lineitem, {pr_s_web_order_lineitem, ld_s_web_order_lineitem}, NULL},
+{"s_web_page", mk_s_web_page, {pr_s_web_page, ld_s_web_page}, vld_s_web_page},
+{"s_web_promotional_item", mk_s_web_promotional_item, {pr_s_web_promotional_item, ld_s_web_promotional_item}, validateGeneric},
+{"s_web_returns", mk_s_web_return, {pr_s_web_return, ld_s_web_return}, NULL},
+{"s_web_site", mk_w_web_site, {pr_s_web_site, ld_s_web_site}, validateGeneric},
+{"s_zip_to_gmt", mk_s_zip, {pr_s_zip, ld_s_zip}, vld_s_zip},
+{NULL}
+};
+
+table_func_t *
+getTdefFunctionsByNumber(int nTable)
+{
+ if (nTable >= S_BRAND)
+ return(&s_tdef_funcs[nTable - S_BRAND]);
+ return(&w_tdef_funcs[nTable]);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.h b/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.h
new file mode 100644
index 000000000000..d7e04387271d
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tdef_functions.h
@@ -0,0 +1,66 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef TDEF_FUNCTIONS_H
+#define TDEF_FUNCTIONS_H
+#include "tables.h"
+
+
+/*
+* table functions.
+* NOTE: This table contains the function declarations in the table descriptions; it must be kept in sync with the
+* declararions of assocaited constants, found in tdefs.h
+
+*/
+typedef struct TABLE_FUNC_T {
+ char *name; /* -- name of the table; */
+ int (*builder)(void*, ds_key_t); /* -- function to prep output */
+ int (*loader[2])(void *); /* -- functions to present output */
+ /* -- data validation function */
+ int (*validate)(int nTable, ds_key_t kRow, int *Permutation);
+ } table_func_t;
+
+extern table_func_t w_tdef_funcs[MAX_TABLE];
+extern table_func_t s_tdef_funcs[MAX_TABLE];
+extern table_func_t *tdef_funcs;
+
+int validateGeneric(int nTable, ds_key_t kRow, int *Permutation);
+int validateSCD(int nTable, ds_key_t kRow, int *Permutation);
+
+#endif /* TDEF_FUNCTIONS_H */
+extern table_func_t s_tdef_funcs[];
+extern table_func_t w_tdef_funcs[];
+
+table_func_t *getTdefFunctionsByNumber(int nTable);
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.c b/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.c
new file mode 100644
index 000000000000..ce5c8c119d9a
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.c
@@ -0,0 +1,230 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include "tables.h"
+#include "columns.h"
+#include "genrand.h"
+#include "tdefs.h"
+#include "scaling.h"
+#include "w_tdefs.h"
+#include "s_tdefs.h"
+#include "tdef_functions.h"
+#include "r_params.h"
+
+extern tdef w_tdefs[];
+extern tdef s_tdefs[];
+extern table_func_t s_tdef_funcs[];
+extern table_func_t w_tdef_funcs[];
+
+/*
+* Routine: get_rowcount(int table)
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+ds_key_t
+GetRowcountByName(char *szName)
+{
+ int nTable = -1;
+
+ nTable = GetTableNumber(szName);
+ if (nTable >= 0)
+ return(get_rowcount(nTable - 1));
+
+ nTable = distsize(szName);
+ return(nTable);
+
+}
+
+/*
+* Routine: GetTableNumber(char *szName)
+* Purpose: Return size of table, pseudo table or distribution
+* Algorithm: Need to use rowcount distribution, since argument could be a pseudo table
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+GetTableNumber(char *szName)
+{
+ int i;
+ char *szTable;
+
+ for (i=1; i <= distsize("rowcounts"); i++)
+ {
+ dist_member(&szTable, "rowcounts", i, 1);
+ if (strcasecmp(szTable, szName) == 0)
+ return(i - 1);
+ }
+
+ return(-1);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+/*
+tdef *
+getTdefsByNumber(int nTable)
+{
+ if (is_set("UPDATE"))
+ {
+ if (s_tdefs[nTable].flags & FL_PASSTHRU)
+ {
+ switch(nTable + S_BRAND)
+ {
+ case S_CATALOG_PAGE: nTable = CATALOG_PAGE; break;
+ case S_CUSTOMER_ADDRESS: nTable = CUSTOMER_ADDRESS; break;
+ case S_PROMOTION: nTable = PROMOTION; break;
+ }
+ return(&w_tdefs[nTable]);
+ }
+ else
+ return(&s_tdefs[nTable]);
+ }
+ else
+ return(&w_tdefs[nTable]);
+}
+*/
+tdef *
+getSimpleTdefsByNumber(int nTable)
+{
+ if (nTable >= S_BRAND)
+ return(&s_tdefs[nTable - S_BRAND]);
+ return(&w_tdefs[nTable]);
+}
+
+tdef *
+getTdefsByNumber(int nTable)
+{
+ if (is_set("UPDATE") && is_set("VALIDATE"))
+ {
+ if (s_tdefs[nTable].flags & FL_PASSTHRU)
+ {
+ switch(nTable + S_BRAND)
+ {
+ case S_CATALOG_PAGE: nTable = CATALOG_PAGE; break;
+ case S_CUSTOMER_ADDRESS: nTable = CUSTOMER_ADDRESS; break;
+ case S_PROMOTION: nTable = PROMOTION; break;
+ }
+ return(&w_tdefs[nTable]);
+ }
+ else
+ return(&s_tdefs[nTable]);
+ }
+
+ return(getSimpleTdefsByNumber(nTable));
+}
+
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+char *
+getTableNameByID(int i)
+{
+ tdef *pT = getSimpleTdefsByNumber(i);
+
+ return(pT->name);
+}
+
+/*
+* Routine:
+* Purpose:
+* Algorithm:
+* Data Structures:
+*
+* Params:
+* Returns:
+* Called By:
+* Calls:
+* Assumptions:
+* Side Effects:
+* TODO: None
+*/
+int
+getTableFromColumn(int nColumn)
+{
+ int i;
+ tdef *pT;
+
+ for (i=0; i <= MAX_TABLE; i++)
+ {
+ pT = getSimpleTdefsByNumber(i);
+ if ((nColumn >= pT->nFirstColumn) && (nColumn <= pT->nLastColumn))
+ return(i);
+ }
+ return(-1);
+}
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.h b/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.h
new file mode 100644
index 000000000000..4abb140b7ab6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tdefs.h
@@ -0,0 +1,103 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef TDEFS_H
+#define TDEFS_H
+
+#include
+#include "tables.h"
+#include "columns.h"
+#include "tdef_functions.h"
+
+/*
+ * Flag field definitions used in tdefs[]
+ */
+#define FL_NONE 0x0000 /* this table is not defined */
+#define FL_NOP 0x0001 /* this table is not defined */
+#define FL_DATE_BASED 0x0002 /* this table is produced in date order */
+#define FL_CHILD 0x0004 /* this table is the child in a parent/child link */
+#define FL_OPEN 0x0008 /* this table has a valid output destination */
+#define FL_DUP_NAME 0x0010 /* to keep find_table() from complaining twice */
+#define FL_TYPE_2 0x0020 /* this dimension keeps history -- rowcount shows unique entities (not including revisions) */
+#define FL_SMALL 0x0040 /* this table has low rowcount; used by address.c */
+#define FL_SPARSE 0x0080
+/* unused 0x0100 */
+#define FL_NO_UPDATE 0x0200 /* this table is not altered by the update process */
+#define FL_SOURCE_DDL 0x0400 /* table in the souce schema */
+#define FL_JOIN_ERROR 0x0800 /* join called without an explicit rule */
+#define FL_PARENT 0x1000 /* this table has a child in nParam */
+#define FL_FACT_TABLE 0x2000
+#define FL_PASSTHRU 0x4000 /* verify routine uses warehouse without change */
+#define FL_VPRINT 0x8000 /* verify routine includes print function */
+
+/*
+* general table descriptions.
+* NOTE: This table contains the constant elements in the table descriptions; it must be kept in sync with the declararions of
+* assocaited functions, found in tdef_functions.h
+*/
+typedef struct TDEF_T {
+ char *name; /* -- name of the table; */
+ char *abreviation; /* -- shorthand name of the table */
+ int flags; /* -- control table options */
+ int nFirstColumn; /* -- first column/RNG for this table */
+ int nLastColumn; /* -- last column/RNG for this table */
+ int nTableIndex; /* used for rowcount calculations */
+ int nParam; /* -- additional table param (revision count, child number, etc.) */
+ FILE *outfile; /* -- output destination */
+ int nUpdateSize; /* -- percentage of base rowcount in each update set (basis points) */
+ int nNewRowPct;
+ int nNullPct; /* percentage of rows with nulls (basis points) */
+ ds_key_t kNullBitMap; /* colums that should be NULL in the current row */
+ ds_key_t kNotNullBitMap; /* columns that are defined NOT NULL */
+ ds_key_t *arSparseKeys; /* sparse key set for table; used if FL_SPARSE is set */
+ } tdef;
+
+/*
+extern tdef *tdefs;
+extern tdef w_tdefs[];
+extern tdef s_tdefs[];
+*/
+
+#define tdefIsFlagSet(t, f) (tdefs[t].flags & f)
+ds_key_t GetRowcountByName(char *szName);
+int GetTableNumber(char *szName);
+char *getTableNameByID(int id);
+int getTableFromColumn(int id);
+int initSpareKeys(int id);
+tdef *getSimpleTdefsByNumber(int nTable);
+tdef *getTdefsByNumber(int nTable);
+
+
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/template.h b/ydb/library/benchmarks/gen/tpcds-dbgen/template.h
new file mode 100644
index 000000000000..5e1a75da39a3
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/template.h
@@ -0,0 +1,72 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#ifndef TEMPLATE_H
+#define TEMPLATE_H
+#include "StringBuffer.h"
+#include "expr.h"
+#include "list.h"
+#include "substitution.h"
+
+
+/* Replacement flags */
+#define REPL_FL_NONE 0x0001 /* no effect on result set size */
+#define REPL_FL_MORE 0x0002 /* likely to increase result set size */
+#define REPL_FL_LESS 0x0004 /* likely to decrease result set size */
+
+
+
+
+typedef struct TEMPLATE_T {
+ char *name;
+ int index;
+ int flags;
+ list_t *SubstitutionList;
+ list_t *SegmentList;
+ list_t *DistList;
+} template_t;
+#define QT_INIT 0x0001
+
+extern template_t *pCurrentQuery;
+
+void PrintQuery(FILE *fp, template_t *t);
+int AddQuerySegment(template_t *pQuery, char *szSQL);
+int AddQuerySubstitution(template_t *Query, char *szSubName, int nUse, int nSubPart);
+int AddSubstitution(template_t *t, char *s, expr_t *pExpr);
+int SetSegmentFlag(template_t *Query, int nSegmentNumber, int nFlag);
+substitution_t *FindSubstitution(template_t *t, char *stmt, int *nUse);
+#endif
+
+
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/text.c b/ydb/library/benchmarks/gen/tpcds-dbgen/text.c
new file mode 100644
index 000000000000..e841c22131e4
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/text.c
@@ -0,0 +1,228 @@
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+#include "config.h"
+#include "porting.h"
+#include
+#include
+#include
+#include "decimal.h"
+#include "date.h"
+#include "genrand.h"
+#include "dist.h"
+
+/*
+ * Routine: mk_sentence()
+ * Purpose: create a sample sentence
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+static int used_space = 0; /* current length of the sentence being built */
+#define SPACE_INCREMENT 100
+
+static char *
+mk_sentence(int stream)
+{
+ static char *verbiage = NULL;
+ static int allocated_space = 0;
+ int word_len;
+ char *syntax,
+ *cp,
+ *word = NULL,
+ temp[2];
+
+ temp[1] = '\0';
+ pick_distribution(&syntax, "sentences", 1, 1, stream);
+
+ for (cp = syntax; *cp; cp++)
+ {
+ switch(*cp)
+ {
+ case 'N': /* pick a noun */
+ pick_distribution(&word, "nouns", 1, 1, stream);
+ break;
+ case 'V': /* pick a verb */
+ pick_distribution(&word, "verbs", 1, 1, stream);
+ break;
+ case 'J': /* pick a adjective */
+ pick_distribution(&word, "adjectives", 1, 1, stream);
+ break;
+ case 'D': /* pick a adverb */
+ pick_distribution(&word, "adverbs", 1, 1, stream);
+ break;
+ case 'X': /* pick a auxiliary verb */
+ pick_distribution(&word, "auxiliaries", 1, 1, stream);
+ break;
+ case 'P': /* pick a preposition */
+ pick_distribution(&word, "prepositions", 1, 1, stream);
+ break;
+ case 'A': /* pick an article */
+ pick_distribution(&word, "articles", 1, 1, stream);
+ break;
+ case 'T': /* pick an terminator */
+ pick_distribution(&word, "terminators", 1, 1, stream);
+ break;
+ default:
+ temp[0] = *cp;
+ break;
+ }
+
+ if (word == NULL)
+ word_len = 1;
+ else
+ word_len = strlen(word);
+
+ if (used_space + word_len >= allocated_space)
+ {
+ verbiage = (char *)realloc(verbiage, allocated_space + SPACE_INCREMENT);
+ MALLOC_CHECK(verbiage);
+ allocated_space += SPACE_INCREMENT;
+ }
+
+ if (word == NULL)
+ strcpy(&verbiage[used_space], temp);
+ else
+ strcpy(&verbiage[used_space], word);
+ used_space += word_len;
+ word = NULL;
+ }
+
+ return(verbiage);
+}
+
+
+
+
+
+
+/*
+ * Routine: gen_text()
+ * Purpose: entry point for this module. Generate a truncated sentence in a
+ * given length range
+ * Algorithm:
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+char *
+gen_text(char *dest, int min, int max, int stream)
+{
+ int target_len,
+ generated_length,
+ capitalize = 1;
+ char *s;
+
+ used_space = 0;
+ genrand_integer(&target_len, DIST_UNIFORM, min, max, 0, stream);
+ if (dest)
+ *dest = '\0';
+ else
+ {
+ dest = (char *)malloc((max + 1) * sizeof(char));
+ MALLOC_CHECK(dest);
+ }
+
+
+ while (target_len > 0)
+ {
+ used_space = 0;
+ s = mk_sentence(stream);
+ if (capitalize)
+ *s = toupper(*s);
+ generated_length = strlen(s);
+ capitalize = (s[generated_length - 1] == '.');
+ if (target_len <= generated_length)
+ s[target_len] = '\0';
+ strcat(dest, s);
+ target_len -= generated_length;
+ if (target_len > 0)
+ {
+ strcat(dest, " ");
+ target_len -= 1;
+ }
+ }
+
+ return(dest);
+}
+
+#ifdef TEST
+#define DECLARER
+#include "r_driver.h"
+#include "r_params.h"
+
+typedef struct {char *name;} tdef;
+/* tdef tdefs[] = {NULL}; */
+
+
+option_t options[] =
+{
+
+{"DISTRIBUTIONS", OPT_STR, 0, NULL, NULL, "tester_dist.idx"},
+NULL
+};
+
+char *params[2];
+
+main()
+{
+ char test_dest[201];
+ int i;
+
+ init_params();
+
+ for (i=0; i < 100; i++)
+ {
+ gen_text(test_dest, 100, 200, 1);
+ printf("%s\n", test_dest);
+ test_dest[0] = '\0';
+ }
+
+ return(0);
+}
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.c b/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.c
new file mode 100644
index 000000000000..88f564cc2b3c
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.c
@@ -0,0 +1,1854 @@
+/* A lexical scanner generated by flex*/
+
+/* Scanner skeleton version:
+ * $Header: /home/cvs/tpc/tpcds/tokenizer.c,v 1.11 2008/07/22 23:20:20 jms Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include
+/*
+ * NOTE: ifdef added by hand
+ */
+#ifndef WIN32
+#include
+#endif
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include
+#include
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator). This
+ * avoids problems with code like:
+ *
+ * if ( condition_holds )
+ * yyless( 5 );
+ * else
+ * do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* Some routines like yy_flex_realloc() are emitted as static but are
+ not called by all lexers. This generates warnings in some compilers,
+ notably GCC. Arrange to suppress these. */
+#ifdef __GNUC__
+#define YY_MAY_BE_UNUSED __attribute__((unused))
+#else
+#define YY_MAY_BE_UNUSED
+#endif
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+ };
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yytext_ptr = yy_bp; \
+ yyleng = (int) (yy_cp - yy_bp); \
+ yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 19
+#define YY_END_OF_BUFFER 20
+static yyconst short int yy_accept[44] =
+ { 0,
+ 0, 0, 15, 15, 10, 10, 0, 0, 20, 19,
+ 15, 14, 17, 16, 18, 19, 12, 11, 10, 13,
+ 9, 1, 7, 9, 9, 9, 4, 5, 8, 15,
+ 14, 11, 10, 1, 0, 6, 2, 0, 4, 3,
+ 5, 2, 0
+ } ;
+
+static yyconst int yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 5, 6, 1, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 1, 8, 1,
+ 1, 1, 1, 1, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 1, 11, 1, 9, 1, 9, 9, 9, 9,
+
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst int yy_meta[12] =
+ { 0,
+ 1, 1, 2, 1, 1, 1, 3, 4, 3, 4,
+ 4
+ } ;
+
+static yyconst short int yy_base[50] =
+ { 0,
+ 0, 0, 0, 9, 16, 0, 27, 0, 65, 66,
+ 61, 66, 66, 66, 66, 56, 66, 55, 52, 66,
+ 66, 56, 66, 50, 34, 19, 19, 0, 66, 15,
+ 66, 9, 6, 12, 9, 66, 0, 2, 0, 0,
+ 0, 0, 66, 41, 45, 49, 52, 1, 56
+ } ;
+
+static yyconst short int yy_def[50] =
+ { 0,
+ 44, 44, 45, 45, 44, 5, 43, 7, 43, 43,
+ 46, 43, 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 47, 43, 43, 25, 48, 43, 46,
+ 43, 43, 43, 43, 47, 43, 49, 43, 27, 43,
+ 48, 49, 0, 43, 43, 43, 43, 43, 43
+ } ;
+
+static yyconst short int yy_nxt[78] =
+ { 0,
+ 43, 43, 12, 41, 43, 43, 40, 13, 40, 14,
+ 15, 12, 36, 34, 33, 32, 13, 31, 14, 15,
+ 16, 17, 18, 43, 19, 40, 20, 21, 22, 23,
+ 24, 25, 26, 27, 21, 28, 29, 21, 37, 38,
+ 39, 10, 10, 10, 10, 11, 11, 11, 11, 30,
+ 30, 30, 35, 36, 35, 35, 42, 34, 42, 42,
+ 33, 32, 32, 31, 43, 9, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43
+ } ;
+
+static yyconst short int yy_chk[78] =
+ { 0,
+ 0, 0, 3, 48, 0, 0, 40, 3, 38, 3,
+ 3, 4, 35, 34, 33, 32, 4, 30, 4, 4,
+ 5, 5, 5, 27, 5, 26, 5, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 25, 25,
+ 25, 44, 44, 44, 44, 45, 45, 45, 45, 46,
+ 46, 46, 47, 24, 47, 47, 49, 22, 49, 49,
+ 19, 18, 16, 11, 9, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "tokenizer.l"
+#define INITIAL 0
+#line 2 "tokenizer.l"
+/*
+<<<<<<< tokenizer.c
+* $Id: tokenizer.c,v 1.11 2008/07/22 23:20:20 jms Exp $
+=======
+* $Id: tokenizer.c,v 1.11 2008/07/22 23:20:20 jms Exp $
+>>>>>>> 1.9.8.1
+*
+* This software contains proprietary and confidential information of Gradient
+* Systems Inc. By accepting transfer of this copy, Recipient agrees
+* to retain this software in confidence, to prevent disclosure to others, and
+* to make no use of this software other than that for which it was delivered.
+* This is an unpublished copyright work Gradient Systems, Inc. Execpt as
+* permitted by federal law, 17 USC 117, copying is strictly prohibited.
+*
+* Gradient Systems Inc. CONFIDENTIAL - (Gradient Systems Inc. Confidential
+* when combined with the aggregated modules for this product)
+* OBJECT CODE ONLY SOURCE MATERIALS
+* (C) COPYRIGHT Gradient Systems Inc. 1997 - 2001
+*
+* All Rights Reserved
+* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF GRADIENT SYSTEMS, INC.
+* The copyright notice above does not evidence any
+* actual or intended publication of such source code.
+*
+*/
+
+#ifdef SCAN_DEBUG
+#define DECLARER
+#endif /* SCAN_DEBUG */
+#include "config.h"
+#include "porting.h"
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+#include
+#include "keywords.h"
+#include "StringBuffer.h"
+#include "expr.h"
+#include "y.tab.h"
+#include "qgen_params.h"
+#include "substitution.h"
+#include "grammar_support.h"
+
+#ifdef SCAN_DEBUG
+#define RETURN(type) DisplayAction(type)
+#include "qgen_params.h"
+extern file_ref_t *pCurrentFile = &CurrentFile;
+int LN;
+workload_t CurrentWorkload;
+template_t CurrentQuery;
+workload_t *pCurrentWorkload = &CurrentWorkload;
+template_t *pCurrentQuery = &CurrentQuery;
+YYSTYPE yylval;
+#else
+#define RETURN(type) return(type)
+#endif
+
+/* need to keep track of state from one call to the next */
+/* #define STATE(type) printf("\n", type);nState = type */
+#ifndef STATE
+#define STATE(type) nState = type
+#endif
+static int nState = -1;
+
+int nCharCount;
+int bFirstWord = 1;
+int nKeyword;
+static int nOldState;
+
+int yywrap(void);
+int yylook(void);
+
+#line 136 "tokenizer.l"
+/* macro definitions go here */
+#define SQLTEXT 1
+#define SUBST 2
+#define NORMAL 3
+
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include
+#endif
+#else
+/* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( yy_current_buffer->yy_is_interactive ) \
+ { \
+ int c = '*', n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+ && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp = NULL, *yy_bp = NULL;
+ register int yy_act;
+
+#line 144 "tokenizer.l"
+
+
+ switch(nState)
+ {
+ case NORMAL: BEGIN(NORMAL);break;
+ case SUBST: BEGIN(SUBST);break;
+ case SQLTEXT: BEGIN(SQLTEXT);break;
+ default: BEGIN(NORMAL);break;
+ }
+
+
+ if ( yy_init )
+ {
+ yy_init = 0;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! yy_start )
+ yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! yy_current_buffer )
+ yy_current_buffer =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_load_buffer_state();
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = yy_start;
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 44 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 66 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+
+do_action: /* This label is used only to access EOF actions. */
+
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = yy_hold_char;
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 154 "tokenizer.l"
+nCharCount += strlen(yytext); /* ignore whitespace */
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 155 "tokenizer.l"
+nCharCount += strlen(yytext); /* ignore comments */
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 156 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ bFirstWord = 0;
+ RETURN(TOK_DECIMAL);
+ }
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 161 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ bFirstWord = 0;
+ yylval.intval = atoi(yytext);
+ RETURN(TOK_INT);
+ }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 167 "tokenizer.l"
+{
+ if ((nKeyword = FindKeyword(yytext)) >= 0)
+ {
+ bFirstWord = 0;
+ RETURN(nKeyword);
+ }
+ else
+ if (bFirstWord)
+ {
+ STATE(SQLTEXT);
+ BEGIN(SQLTEXT);
+ yylval.strval = strdup(yytext);
+ return(TOK_SQL);
+ }
+ else
+ {
+ yylval.strval = strdup(yytext);
+ RETURN(TOK_ID);
+ }
+ }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 187 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ bFirstWord = 0;
+ yytext[yyleng - 1] = '\0';
+ yylval.strval = strdup(yytext+1);
+ RETURN(TOK_LITERAL);
+ }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 194 "tokenizer.l"
+{ nCharCount = 1; pCurrentFile->line_number += 1; bFirstWord = 1; }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 195 "tokenizer.l"
+{
+ nOldState = NORMAL;
+ nCharCount += 1;
+ STATE(SUBST);
+ BEGIN(SUBST);
+ RETURN(yytext[0]);
+ }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 202 "tokenizer.l"
+{ nCharCount += strlen(yytext);
+ bFirstWord = 0;
+ RETURN(yytext[0]);
+ }
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 207 "tokenizer.l"
+{
+ if ((nKeyword = FindKeyword(yytext)) >= 0)
+ {
+ RETURN(nKeyword);
+ }
+ else
+ {
+ yylval.strval = strdup(yytext);
+ RETURN(TOK_ID);
+ }
+ }
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 219 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ yylval.intval = atoi(yytext);
+ return(TOK_INT);
+ }
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 224 "tokenizer.l"
+{RETURN('.');}
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 225 "tokenizer.l"
+{
+ STATE(nOldState);
+ BEGIN(nOldState);
+ RETURN(yytext[0]);
+ }
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 230 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ yylval.strval = strdup(yytext);
+ nCharCount = 1; pCurrentFile->line_number += 1;
+ if (strlen(yylval.strval))
+ RETURN(TOK_SQL);
+ }
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 237 "tokenizer.l"
+{
+ nCharCount += strlen(yytext);
+ yylval.strval = strdup(yytext);
+ RETURN(TOK_SQL);
+ }
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 242 "tokenizer.l"
+{
+ nOldState = SQLTEXT;
+ nCharCount += 1;
+ STATE(SUBST);
+ BEGIN(SUBST);
+ RETURN(yytext[0]);
+ }
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 249 "tokenizer.l"
+{ STATE(NORMAL);BEGIN(NORMAL);nCharCount += 1; RETURN(yytext[0]); }
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 250 "tokenizer.l"
+{ nCharCount += 1; RETURN(yytext[0]); }
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 251 "tokenizer.l"
+ECHO;
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SQLTEXT):
+case YY_STATE_EOF(SUBST):
+case YY_STATE_EOF(NORMAL):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between yy_current_buffer and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yy_current_buffer->yy_input_file = yyin;
+ yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = yy_c_buf_p;
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yy_did_buffer_switch_on_eof = 0;
+
+ if ( yywrap() )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p =
+ yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yy_c_buf_p =
+ &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+ {
+ register char *dest = yy_current_buffer->yy_ch_buf;
+ register char *source = yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( yy_current_buffer->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = yy_current_buffer;
+
+ int yy_c_buf_p_offset =
+ (int) (yy_c_buf_p - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yy_flex_realloc( (void *) b->yy_ch_buf,
+ b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = yy_current_buffer->yy_buf_size -
+ number_to_move - 1;
+#endif
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
+
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ if ( yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ yy_current_buffer->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ yy_n_chars += number_to_move;
+ yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+ return ret_val;
+ }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = yy_start;
+
+ for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 44 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+ }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+ {
+ register int yy_is_jam;
+ register char *yy_cp = yy_c_buf_p;
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 44 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 43);
+
+ return yy_is_jam ? 0 : yy_current_state;
+ }
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+ {
+ register char *yy_cp = yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yy_hold_char;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yy_n_chars + 2;
+ register char *dest = &yy_current_buffer->yy_ch_buf[
+ yy_current_buffer->yy_buf_size + 2];
+ register char *source =
+ &yy_current_buffer->yy_ch_buf[number_to_move];
+
+ while ( source > yy_current_buffer->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+
+ yytext_ptr = yy_bp;
+ yy_hold_char = *yy_cp;
+ yy_c_buf_p = yy_cp;
+ }
+#endif /* ifndef YY_NO_UNPUT */
+
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+ {
+ int c;
+
+ *yy_c_buf_p = yy_hold_char;
+
+ if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ /* This was really a NUL. */
+ *yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yy_c_buf_p - yytext_ptr;
+ ++yy_c_buf_p;
+
+ switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /* fall through */
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+ return EOF;
+
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p = yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
+ *yy_c_buf_p = '\0'; /* preserve yytext */
+ yy_hold_char = *++yy_c_buf_p;
+
+
+ return c;
+ }
+#endif /* YY_NO_INPUT */
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+ {
+ if ( ! yy_current_buffer )
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_init_buffer( yy_current_buffer, input_file );
+ yy_load_buffer_state();
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+ {
+ if ( yy_current_buffer == new_buffer )
+ return;
+
+ if ( yy_current_buffer )
+ {
+ /* Flush out information for old buffer. */
+ *yy_c_buf_p = yy_hold_char;
+ yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ yy_current_buffer = new_buffer;
+ yy_load_buffer_state();
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yy_did_buffer_switch_on_eof = 1;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+ {
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ yyin = yy_current_buffer->yy_input_file;
+ yy_hold_char = *yy_c_buf_p;
+ }
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+ {
+ if ( ! b )
+ return;
+
+ if ( b == yy_current_buffer )
+ yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yy_flex_free( (void *) b->yy_ch_buf );
+
+ yy_flex_free( (void *) b );
+ }
+
+
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+ {
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+ b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+ b->yy_is_interactive = 0;
+#else
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+ {
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == yy_current_buffer )
+ yy_load_buffer_state();
+ }
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+ {
+ int len;
+ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+ return yy_scan_bytes( yy_str, len );
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+ {
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = len + 2;
+ buf = (char *) yy_flex_alloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < len; ++i )
+ buf[i] = bytes[i];
+
+ buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+ }
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yy_start_stack_depth * sizeof( int );
+
+ if ( ! yy_start_stack )
+ yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+ else
+ yy_start_stack = (int *) yy_flex_realloc(
+ (void *) yy_start_stack, new_size );
+
+ if ( ! yy_start_stack )
+ YY_FATAL_ERROR(
+ "out of memory expanding start-condition stack" );
+ }
+
+ yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+ }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+ {
+ if ( --yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+ {
+ return yy_start_stack[yy_start_stack_ptr - 1];
+ }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+ {
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+ }
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ yytext[yyleng] = yy_hold_char; \
+ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+ } \
+ while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+ {
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+ }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+ {
+ return (void *) malloc( size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+ {
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+ {
+ free( ptr );
+ }
+
+#if YY_MAIN
+int main()
+ {
+ yylex();
+ return 0;
+ }
+#endif
+#line 251 "tokenizer.l"
+
+extern template_t *pCurrentQuery;
+
+/*
+ * Routine: yywrap()
+ * Purpose: manage the hand off between multiple input files, include files,
+ * etc.
+ * Algorithm:
+ * MKS lex has special buffer handlers that aren't exposed, so this needs to be included in the LEX source
+ * Data Structures:
+ *
+ * Params:
+ * Returns:
+ * Called By:
+ * Calls:
+ * Assumptions:
+ * Side Effects:
+ * TODO: None
+ */
+int
+yywrap(void)
+{
+ file_ref_t *pNext;
+
+
+ if (is_set("DEBUG"))
+ printf("STATUS: CLOSE(%s)\n", pCurrentFile->name);
+ fclose(pCurrentFile->file);
+
+ if (pCurrentFile->pNext)
+ {
+#ifdef MKS
+ yyRestoreScan(pCurrentFile->pLexState);
+#endif
+#ifdef FLEX
+ yy_switch_to_buffer(pCurrentFile->pNext->pLexState);
+ yy_delete_buffer(pCurrentFile->pLexState);
+#endif
+ pNext = pCurrentFile->pNext;
+#if !defined(MKS) && !defined(FLEX)
+ yyin = pNext->file;
+#endif
+ free(pCurrentFile);
+ pCurrentFile = pNext;
+ if (is_set("DEBUG"))
+ printf("STATUS: REOPEN(%s)\n", pCurrentFile->name);
+ return(0);
+ }
+
+ return(1);
+}
+#ifdef SCAN_DEBUG
+DisplayAction(int d)
+{
+if (d >= ID)
+ printf("<%s: '%s'>\n", KeywordText(d), yytext);
+else
+ printf ("%s\n", yytext);
+
+return;
+}
+
+main(int ac, char **av)
+{
+LN=1;
+nCharCount=1;
+InitKeywords();
+yylex();
+exit(0);
+}
+#endif
diff --git a/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.l b/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.l
new file mode 100644
index 000000000000..73a6ee6c24c6
--- /dev/null
+++ b/ydb/library/benchmarks/gen/tpcds-dbgen/tokenizer.l
@@ -0,0 +1,276 @@
+%{
+/*
+ * Legal Notice
+ *
+ * This document and associated source code (the "Work") is a part of a
+ * benchmark specification maintained by the TPC.
+ *
+ * The TPC reserves all right, title, and interest to the Work as provided
+ * under U.S. and international laws, including without limitation all patent
+ * and trademark rights therein.
+ *
+ * No Warranty
+ *
+ * 1.1 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE INFORMATION
+ * CONTAINED HEREIN IS PROVIDED "AS IS" AND WITH ALL FAULTS, AND THE
+ * AUTHORS AND DEVELOPERS OF THE WORK HEREBY DISCLAIM ALL OTHER
+ * WARRANTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
+ * INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES,
+ * DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+ * PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF
+ * WORKMANLIKE EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE.
+ * ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT,
+ * QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT
+ * WITH REGARD TO THE WORK.
+ * 1.2 IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THE WORK BE LIABLE TO
+ * ANY OTHER PARTY FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO THE
+ * COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS
+ * OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT,
+ * INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY,
+ * OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT
+ * RELATING TO THE WORK, WHETHER OR NOT SUCH AUTHOR OR DEVELOPER HAD
+ * ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Contributors:
+ * Gradient Systems
+ */
+/*****
+* NOTE: added #ifndef WIN32 around generated include of unistd.h
+******/
+#ifdef SCAN_DEBUG
+#define DECLARER
+#endif /* SCAN_DEBUG */
+#include "config.h"
+#include "porting.h"
+#ifdef USE_STRING_H
+#include
+#else
+#include
+#endif
+#include